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

« back to all changes in this revision

Viewing changes to .svn/pristine/c9/c94f4f8f946a5ea8291423ba9807da15defc5324.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 20140403 (r209054).
 
2
 
 
3
last_updated()
 
4
{
 
5
        cat > ${dir}LAST_UPDATED <<EOF
 
6
Thu Apr  3 14:54:43 CEST 2014
 
7
Thu Apr  3 12:54:43 UTC 2014 (revision 209054)
 
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,24 @@
 
20
+2014-03-26  Jakub Jelinek  <jakub@redhat.com>
 
21
+
 
22
+       * config/linux/futex_bits.h: Include errno.h.
 
23
+       (sys_futex0): If syscall returns -1, return -errno rather than
 
24
+       -1.
 
25
+
 
26
+2014-03-03  Peter Bergner  <bergner@vnet.ibm.com>
 
27
+
 
28
+       Backport from mainline
 
29
+       2013-06-20  Torvald Riegel  <triegel@redhat.com>
 
30
+
 
31
+       * query.cc (_ITM_inTransaction): Abort when using the HTM fastpath.
 
32
+       (_ITM_getTransactionId): Same.
 
33
+       * config/x86/target.h (htm_transaction_active): New.
 
34
+
 
35
+       2013-06-20  Torvald Riegel  <triegel@redhat.com>
 
36
+
 
37
+       PR libitm/57643
 
38
+       * beginend.cc (gtm_thread::begin_transaction): Handle reentrancy in
 
39
+       the HTM fastpath.
 
40
+
 
41
 2013-10-16  Release Manager
 
42
 
 
43
        * GCC 4.8.2 released.
 
44
@@ -8,13 +29,12 @@
 
45
        2013-08-02  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
46
 
 
47
        * configure.tgt: Add -msoft-float to XCFLAGS.
 
48
-       
 
49
 
 
50
 2013-08-14  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
51
 
 
52
        * config/s390/sjlj.S: Add file missing from last commit.
 
53
        * config/s390/target.h: Likewise.
 
54
-       
 
55
+
 
56
 2013-08-02  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
57
 
 
58
        Backports from mainline:
 
59
Index: libitm/query.cc
 
60
===================================================================
 
61
--- a/src/libitm/query.cc       (.../tags/gcc_4_8_2_release)
 
62
+++ b/src/libitm/query.cc       (.../branches/gcc-4_8-branch)
 
63
@@ -43,6 +43,15 @@
 
64
 _ITM_howExecuting ITM_REGPARM
 
65
 _ITM_inTransaction (void)
 
66
 {
 
67
+#if defined(USE_HTM_FASTPATH)
 
68
+  // If we use the HTM fastpath, we cannot reliably detect whether we are
 
69
+  // in a transaction because this function can be called outside of
 
70
+  // a transaction and thus we can't deduce this by looking at just the serial
 
71
+  // lock.  This function isn't used in practice currently, so the easiest
 
72
+  // way to handle it is to just abort.
 
73
+  if (htm_fastpath && htm_transaction_active())
 
74
+    htm_abort();
 
75
+#endif
 
76
   struct gtm_thread *tx = gtm_thr();
 
77
   if (tx && (tx->nesting > 0))
 
78
     {
 
79
@@ -58,6 +67,11 @@
 
80
 _ITM_transactionId_t ITM_REGPARM
 
81
 _ITM_getTransactionId (void)
 
82
 {
 
83
+#if defined(USE_HTM_FASTPATH)
 
84
+  // See ITM_inTransaction.
 
85
+  if (htm_fastpath && htm_transaction_active())
 
86
+    htm_abort();
 
87
+#endif
 
88
   struct gtm_thread *tx = gtm_thr();
 
89
   return (tx && (tx->nesting > 0)) ? tx->id : _ITM_noTransactionId;
 
90
 }
 
91
Index: libitm/beginend.cc
 
92
===================================================================
 
93
--- a/src/libitm/beginend.cc    (.../tags/gcc_4_8_2_release)
 
94
+++ b/src/libitm/beginend.cc    (.../branches/gcc-4_8-branch)
 
95
@@ -197,6 +197,8 @@
 
96
              // We are executing a transaction now.
 
97
              // Monitor the writer flag in the serial-mode lock, and abort
 
98
              // if there is an active or waiting serial-mode transaction.
 
99
+             // Note that this can also happen due to an enclosing
 
100
+             // serial-mode transaction; we handle this case below.
 
101
              if (unlikely(serial_lock.is_write_locked()))
 
102
                htm_abort();
 
103
              else
 
104
@@ -219,6 +221,14 @@
 
105
                  tx = new gtm_thread();
 
106
                  set_gtm_thr(tx);
 
107
                }
 
108
+             // Check whether there is an enclosing serial-mode transaction;
 
109
+             // if so, we just continue as a nested transaction and don't
 
110
+             // try to use the HTM fastpath.  This case can happen when an
 
111
+             // outermost relaxed transaction calls unsafe code that starts
 
112
+             // a transaction.
 
113
+             if (tx->nesting > 0)
 
114
+               break;
 
115
+             // Another thread is running a serial-mode transaction.  Wait.
 
116
              serial_lock.read_lock(tx);
 
117
              serial_lock.read_unlock(tx);
 
118
              // TODO We should probably reset the retry count t here, unless
 
119
Index: libitm/config/linux/futex_bits.h
 
120
===================================================================
 
121
--- a/src/libitm/config/linux/futex_bits.h      (.../tags/gcc_4_8_2_release)
 
122
+++ b/src/libitm/config/linux/futex_bits.h      (.../branches/gcc-4_8-branch)
 
123
@@ -31,9 +31,13 @@
 
124
 
 
125
 #include <unistd.h>
 
126
 #include <sys/syscall.h>
 
127
+#include <errno.h>
 
128
 
 
129
 static inline long
 
130
 sys_futex0 (std::atomic<int> *addr, long op, long val)
 
131
 {
 
132
-  return syscall (SYS_futex, (int*) addr, op, val, 0);
 
133
+  long res = syscall (SYS_futex, (int*) addr, op, val, 0);
 
134
+  if (__builtin_expect (res == -1, 0))
 
135
+    return -errno;
 
136
+  return res;
 
137
 }
 
138
Index: libitm/config/x86/target.h
 
139
===================================================================
 
140
--- a/src/libitm/config/x86/target.h    (.../tags/gcc_4_8_2_release)
 
141
+++ b/src/libitm/config/x86/target.h    (.../branches/gcc-4_8-branch)
 
142
@@ -125,6 +125,13 @@
 
143
 {
 
144
   return begin_ret & _XABORT_RETRY;
 
145
 }
 
146
+
 
147
+/* Returns true iff a hardware transaction is currently being executed.  */
 
148
+static inline bool
 
149
+htm_transaction_active ()
 
150
+{
 
151
+  return _xtest() != 0;
 
152
+}
 
153
 #endif
 
154
 
 
155
 
 
156
Index: libgomp/ChangeLog
 
157
===================================================================
 
158
--- a/src/libgomp/ChangeLog     (.../tags/gcc_4_8_2_release)
 
159
+++ b/src/libgomp/ChangeLog     (.../branches/gcc-4_8-branch)
 
160
@@ -1,3 +1,14 @@
 
161
+2014-04-02  Richard Henderson  <rth@redhat.com>
 
162
+
 
163
+       * config/linux/futex.h (futex_wait): Get error value from errno.
 
164
+       (futex_wake): Likewise.
 
165
+
 
166
+2013-12-12  Jakub Jelinek  <jakub@redhat.com>
 
167
+
 
168
+       PR libgomp/59467
 
169
+       * testsuite/libgomp.fortran/crayptr2.f90: Add private (d) clause to
 
170
+       !$omp parallel.
 
171
+
 
172
 2013-10-16  Release Manager
 
173
 
 
174
        * GCC 4.8.2 released.
 
175
Index: libgomp/testsuite/libgomp.fortran/crayptr2.f90
 
176
===================================================================
 
177
--- a/src/libgomp/testsuite/libgomp.fortran/crayptr2.f90        (.../tags/gcc_4_8_2_release)
 
178
+++ b/src/libgomp/testsuite/libgomp.fortran/crayptr2.f90        (.../branches/gcc-4_8-branch)
 
179
@@ -12,7 +12,7 @@
 
180
   b = 2
 
181
   c = 3
 
182
   l = .false.
 
183
-!$omp parallel num_threads (3) reduction (.or.:l)
 
184
+!$omp parallel num_threads (3) reduction (.or.:l) private (d)
 
185
   if (omp_get_thread_num () .eq. 0) then
 
186
     ip = loc (a)
 
187
   elseif (omp_get_thread_num () .eq. 1) then
 
188
Index: libgomp/config/linux/futex.h
 
189
===================================================================
 
190
--- a/src/libgomp/config/linux/futex.h  (.../tags/gcc_4_8_2_release)
 
191
+++ b/src/libgomp/config/linux/futex.h  (.../branches/gcc-4_8-branch)
 
192
@@ -41,8 +41,8 @@
 
193
 static inline void
 
194
 futex_wait (int *addr, int val)
 
195
 {
 
196
-  long err = syscall (SYS_futex, addr, gomp_futex_wait, val, NULL);
 
197
-  if (__builtin_expect (err == -ENOSYS, 0))
 
198
+  int err = syscall (SYS_futex, addr, gomp_futex_wait, val, NULL);
 
199
+  if (__builtin_expect (err < 0 && errno == ENOSYS, 0))
 
200
     {
 
201
       gomp_futex_wait &= ~FUTEX_PRIVATE_FLAG;
 
202
       gomp_futex_wake &= ~FUTEX_PRIVATE_FLAG;
 
203
@@ -53,8 +53,8 @@
 
204
 static inline void
 
205
 futex_wake (int *addr, int count)
 
206
 {
 
207
-  long err = syscall (SYS_futex, addr, gomp_futex_wake, count);
 
208
-  if (__builtin_expect (err == -ENOSYS, 0))
 
209
+  int err = syscall (SYS_futex, addr, gomp_futex_wake, count);
 
210
+  if (__builtin_expect (err < 0 && errno == ENOSYS, 0))
 
211
     {
 
212
       gomp_futex_wait &= ~FUTEX_PRIVATE_FLAG;
 
213
       gomp_futex_wake &= ~FUTEX_PRIVATE_FLAG;
 
214
Index: libstdc++-v3/configure
 
215
===================================================================
 
216
--- a/src/libstdc++-v3/configure        (.../tags/gcc_4_8_2_release)
 
217
+++ b/src/libstdc++-v3/configure        (.../branches/gcc-4_8-branch)
 
218
@@ -71573,7 +71573,7 @@
 
219
 fi
 
220
 
 
221
 # For libtool versioning info, format is CURRENT:REVISION:AGE
 
222
-libtool_VERSION=6:18:0
 
223
+libtool_VERSION=6:19:0
 
224
 
 
225
 # Everything parsed; figure out what files and settings to use.
 
226
 case $enable_symvers in
 
227
Index: libstdc++-v3/src/c++11/thread.cc
 
228
===================================================================
 
229
--- a/src/libstdc++-v3/src/c++11/thread.cc      (.../tags/gcc_4_8_2_release)
 
230
+++ b/src/libstdc++-v3/src/c++11/thread.cc      (.../branches/gcc-4_8-branch)
 
231
@@ -183,7 +183,7 @@
 
232
         ::usleep(__us);
 
233
       }
 
234
 # else
 
235
-    ::sleep(__s.count() + (__ns >= 1000000));
 
236
+    ::sleep(__s.count() + (__ns.count() >= 1000000));
 
237
 # endif
 
238
 #elif defined(_GLIBCXX_HAVE_WIN32_SLEEP)
 
239
     unsigned long ms = __ns.count() / 1000000;
 
240
Index: libstdc++-v3/doc/xml/manual/abi.xml
 
241
===================================================================
 
242
--- a/src/libstdc++-v3/doc/xml/manual/abi.xml   (.../tags/gcc_4_8_2_release)
 
243
+++ b/src/libstdc++-v3/doc/xml/manual/abi.xml   (.../branches/gcc-4_8-branch)
 
244
@@ -203,6 +203,7 @@
 
245
     <listitem><para>GCC 4.5.0: GCC_4.5.0</para></listitem>
 
246
     <listitem><para>GCC 4.6.0: GCC_4.6.0</para></listitem>
 
247
     <listitem><para>GCC 4.7.0: GCC_4.7.0</para></listitem>
 
248
+    <listitem><para>GCC 4.8.0: GCC_4.8.0</para></listitem>
 
249
     </itemizedlist>
 
250
     </listitem>
 
251
 
 
252
@@ -261,6 +262,7 @@
 
253
     <listitem><para>GCC 4.6.1: libstdc++.so.6.0.16</para></listitem>
 
254
     <listitem><para>GCC 4.7.0: libstdc++.so.6.0.17</para></listitem>
 
255
     <listitem><para>GCC 4.8.0: libstdc++.so.6.0.18</para></listitem>
 
256
+    <listitem><para>GCC 4.8.3: libstdc++.so.6.0.19</para></listitem>
 
257
     </itemizedlist>
 
258
     <para>
 
259
       Note 1: Error should be libstdc++.so.3.0.3.
 
260
@@ -324,6 +326,7 @@
 
261
     <listitem><para>GCC 4.6.1: GLIBCXX_3.4.16, CXXABI_1.3.5</para></listitem>
 
262
     <listitem><para>GCC 4.7.0: GLIBCXX_3.4.17, CXXABI_1.3.6</para></listitem>
 
263
     <listitem><para>GCC 4.8.0: GLIBCXX_3.4.18, CXXABI_1.3.7</para></listitem>
 
264
+    <listitem><para>GCC 4.8.3: GLIBCXX_3.4.19, CXXABI_1.3.7</para></listitem>
 
265
     </itemizedlist>
 
266
     </listitem>
 
267
 
 
268
Index: libstdc++-v3/doc/xml/manual/status_cxx2011.xml
 
269
===================================================================
 
270
--- a/src/libstdc++-v3/doc/xml/manual/status_cxx2011.xml        (.../tags/gcc_4_8_2_release)
 
271
+++ b/src/libstdc++-v3/doc/xml/manual/status_cxx2011.xml        (.../branches/gcc-4_8-branch)
 
272
@@ -877,10 +877,11 @@
 
273
       <entry/>
 
274
     </row>
 
275
     <row>
 
276
+      <?dbhtml bgcolor="#B0B0B0" ?>
 
277
       <entry>20.9.7.6</entry>
 
278
       <entry>Other transformations</entry>
 
279
-      <entry>Y</entry>
 
280
-      <entry/>
 
281
+      <entry>Partial</entry>
 
282
+      <entry>Missing <code>aligned_union</code>.</entry>
 
283
     </row>
 
284
     <row>
 
285
       <entry>20.10</entry>
 
286
Index: libstdc++-v3/doc/xml/manual/spine.xml
 
287
===================================================================
 
288
--- a/src/libstdc++-v3/doc/xml/manual/spine.xml (.../tags/gcc_4_8_2_release)
 
289
+++ b/src/libstdc++-v3/doc/xml/manual/spine.xml (.../branches/gcc-4_8-branch)
 
290
@@ -20,6 +20,7 @@
 
291
     <year>2010</year>
 
292
     <year>2011</year>
 
293
     <year>2012</year>
 
294
+    <year>2013</year>
 
295
     <holder>
 
296
       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">FSF</link>
 
297
     </holder>
 
298
Index: libstdc++-v3/doc/html/bk02.html
 
299
===================================================================
 
300
--- a/src/libstdc++-v3/doc/html/bk02.html       (.../tags/gcc_4_8_2_release)
 
301
+++ b/src/libstdc++-v3/doc/html/bk02.html       (.../branches/gcc-4_8-branch)
 
302
@@ -1,2 +1,2 @@
 
303
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
304
-<!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>
 
305
\ No newline at end of file
 
306
+<!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>
 
307
\ No newline at end of file
 
308
Index: libstdc++-v3/doc/html/bk03.html
 
309
===================================================================
 
310
--- a/src/libstdc++-v3/doc/html/bk03.html       (.../tags/gcc_4_8_2_release)
 
311
+++ b/src/libstdc++-v3/doc/html/bk03.html       (.../branches/gcc-4_8-branch)
 
312
@@ -1,2 +1,2 @@
 
313
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
314
-<!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>
 
315
\ No newline at end of file
 
316
+<!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>
 
317
\ No newline at end of file
 
318
Index: libstdc++-v3/doc/html/faq.html
 
319
===================================================================
 
320
--- a/src/libstdc++-v3/doc/html/faq.html        (.../tags/gcc_4_8_2_release)
 
321
+++ b/src/libstdc++-v3/doc/html/faq.html        (.../branches/gcc-4_8-branch)
 
322
@@ -1,9 +1,9 @@
 
323
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
324
-<!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 © 
 
325
+<!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 © 
 
326
       2008, 2010
 
327
      
 
328
       <a class="link" href="http://www.fsf.org" target="_top">FSF</a>
 
329
-    </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">
 
330
+    </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">
 
331
       What is libstdc++?
 
332
     </a></dt><dt>1.2. <a href="faq.html#faq.why">
 
333
       Why should I use libstdc++?
 
334
Index: libstdc++-v3/doc/html/index.html
 
335
===================================================================
 
336
--- a/src/libstdc++-v3/doc/html/index.html      (.../tags/gcc_4_8_2_release)
 
337
+++ b/src/libstdc++-v3/doc/html/index.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>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>
 
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>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>
 
342
       Copyright (C) 2008-2013
 
343
       <a class="link" href="http://www.fsf.org/" target="_top">FSF
 
344
       </a>
 
345
@@ -20,7 +20,7 @@
 
346
          </p></li><li class="listitem"><p>
 
347
            <a class="link" href="api.html" title="The GNU C++ Library API Reference">API and Source Documentation</a>
 
348
          </p></li></ul></div><p>
 
349
-    </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. 
 
350
+    </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. 
 
351
   Introduction
 
352
   
 
353
 </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. 
 
354
@@ -34,13 +34,13 @@
 
355
 </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. 
 
356
   Utilities
 
357
   
 
358
-</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. 
 
359
+</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. 
 
360
   Strings
 
361
   
 
362
 </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. 
 
363
   Localization
 
364
   
 
365
-</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. 
 
366
+</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. 
 
367
   Containers
 
368
   
 
369
 </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. 
 
370
Index: libstdc++-v3/doc/html/api.html
 
371
===================================================================
 
372
--- a/src/libstdc++-v3/doc/html/api.html        (.../tags/gcc_4_8_2_release)
 
373
+++ b/src/libstdc++-v3/doc/html/api.html        (.../branches/gcc-4_8-branch)
 
374
@@ -1,5 +1,5 @@
 
375
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
376
-<!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 © 
 
377
+<!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 © 
 
378
       2008
 
379
     , 
 
380
       2010
 
381
@@ -6,7 +6,7 @@
 
382
      
 
383
       <a class="link" href="http://www.fsf.org/" target="_top">FSF
 
384
       </a>
 
385
-    </p></div><div><div class="legalnotice"><a id="idp3706336"></a><p>
 
386
+    </p></div><div><div class="legalnotice"><a id="idm270006235696"></a><p>
 
387
       <a class="link" href="manual/license.html" title="License">License
 
388
       </a>
 
389
     </p></div></div></div><hr /></div><p>
 
390
Index: libstdc++-v3/doc/html/manual/dynamic_memory.html
 
391
===================================================================
 
392
--- a/src/libstdc++-v3/doc/html/manual/dynamic_memory.html      (.../tags/gcc_4_8_2_release)
 
393
+++ b/src/libstdc++-v3/doc/html/manual/dynamic_memory.html      (.../branches/gcc-4_8-branch)
 
394
@@ -1,5 +1,5 @@
 
395
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
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>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. 
 
397
+<!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. 
 
398
   Support
 
399
   
 
400
 </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>
 
401
Index: libstdc++-v3/doc/html/manual/iterators.html
 
402
===================================================================
 
403
--- a/src/libstdc++-v3/doc/html/manual/iterators.html   (.../tags/gcc_4_8_2_release)
 
404
+++ b/src/libstdc++-v3/doc/html/manual/iterators.html   (.../branches/gcc-4_8-branch)
 
405
@@ -1,5 +1,5 @@
 
406
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
407
-<!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. 
 
408
+<!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. 
 
409
   Iterators
 
410
   
 
411
 </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. 
 
412
@@ -6,8 +6,8 @@
 
413
     Standard Contents
 
414
   </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. 
 
415
   Iterators
 
416
-  <a id="idp16156992" class="indexterm"></a>
 
417
-</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>
 
418
+  <a id="idm269999374096" class="indexterm"></a>
 
419
+</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>
 
420
      The following
 
421
 FAQ <a class="link" href="../faq.html#faq.iterator_as_pod" title="7.1.">entry</a> points out that
 
422
 iterators are not implemented as pointers.  They are a generalization
 
423
Index: libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html
 
424
===================================================================
 
425
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html      (.../tags/gcc_4_8_2_release)
 
426
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html      (.../branches/gcc-4_8-branch)
 
427
@@ -1,5 +1,5 @@
 
428
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
429
-<!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>
 
430
+<!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>
 
431
 Let's start by describing how the data on a freelist is laid out in memory.
 
432
 This is the first two blocks in freelist for thread id 3 in bin 3 (8 bytes):
 
433
 </p><pre class="programlisting">
 
434
Index: libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
 
435
===================================================================
 
436
--- a/src/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html      (.../tags/gcc_4_8_2_release)
 
437
+++ b/src/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html      (.../branches/gcc-4_8-branch)
 
438
@@ -1,5 +1,5 @@
 
439
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
440
-<!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. 
 
441
+<!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. 
 
442
   Numerics
 
443
   
 
444
 </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>
 
445
Index: libstdc++-v3/doc/html/manual/mt_allocator.html
 
446
===================================================================
 
447
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator.html        (.../tags/gcc_4_8_2_release)
 
448
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator.html        (.../branches/gcc-4_8-branch)
 
449
@@ -1,8 +1,8 @@
 
450
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
451
-<!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. 
 
452
+<!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. 
 
453
   Extensions
 
454
   
 
455
-</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>
 
456
+</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>
 
457
 </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>
 
458
   The mt allocator [hereinafter referred to simply as "the allocator"]
 
459
   is a fixed size (power of two) allocator that was initially
 
460
Index: libstdc++-v3/doc/html/manual/unordered_associative.html
 
461
===================================================================
 
462
--- a/src/libstdc++-v3/doc/html/manual/unordered_associative.html       (.../tags/gcc_4_8_2_release)
 
463
+++ b/src/libstdc++-v3/doc/html/manual/unordered_associative.html       (.../branches/gcc-4_8-branch)
 
464
@@ -1,5 +1,5 @@
 
465
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
466
-<!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. 
 
467
+<!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. 
 
468
   Containers
 
469
   
 
470
 </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>
 
471
Index: libstdc++-v3/doc/html/manual/configure.html
 
472
===================================================================
 
473
--- a/src/libstdc++-v3/doc/html/manual/configure.html   (.../tags/gcc_4_8_2_release)
 
474
+++ b/src/libstdc++-v3/doc/html/manual/configure.html   (.../branches/gcc-4_8-branch)
 
475
@@ -1,5 +1,5 @@
 
476
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
477
-<!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>
 
478
+<!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>
 
479
   When configuring libstdc++, you'll have to configure the entire
 
480
   <span class="emphasis"><em>gccsrcdir</em></span> directory. Consider using the
 
481
   toplevel gcc configuration option
 
482
Index: libstdc++-v3/doc/html/manual/status.html
 
483
===================================================================
 
484
--- a/src/libstdc++-v3/doc/html/manual/status.html      (.../tags/gcc_4_8_2_release)
 
485
+++ b/src/libstdc++-v3/doc/html/manual/status.html      (.../branches/gcc-4_8-branch)
 
486
@@ -1,13 +1,13 @@
 
487
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
488
-<!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. 
 
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>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. 
 
490
   Introduction
 
491
   
 
492
-</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>
 
493
+</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>
 
494
 This status table is based on the table of contents of ISO/IEC 14882:2003.
 
495
 </p><p>
 
496
 This page describes the C++ support in mainline GCC SVN, not in any
 
497
 particular release.
 
498
-</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">
 
499
+</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">
 
500
        <span class="emphasis"><em>18</em></span>
 
501
       </td><td colspan="3" align="left">
 
502
        <span class="emphasis"><em>Language support</em></span>
 
503
@@ -157,7 +157,7 @@
 
504
 </p><p>
 
505
 This page describes the C++11 support in mainline GCC SVN, not in any
 
506
 particular release.
 
507
-</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">
 
508
+</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">
 
509
        <span class="emphasis"><em>18</em></span>
 
510
       </td><td colspan="3" align="left">
 
511
        <span class="emphasis"><em>Language support</em></span>
 
512
@@ -183,7 +183,7 @@
 
513
       is_trivially_copy_constructible, is_trivially_move_constructible,
 
514
       is_trivially_assignable, is_trivially_default_assignable,
 
515
       is_trivially_copy_assignable, is_trivially_move_assignable
 
516
-      </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">
 
517
+      </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">
 
518
        <span class="emphasis"><em>21</em></span>
 
519
       </td><td colspan="3" align="left">
 
520
        <span class="emphasis"><em>Strings</em></span>
 
521
@@ -302,7 +302,7 @@
 
522
 </p><p>
 
523
 This page describes the TR1 support in mainline GCC SVN, not in any particular
 
524
 release.
 
525
-</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">
 
526
+</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">
 
527
        <p>
 
528
          Uses code from
 
529
          <a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">boost::shared_ptr</a>.
 
530
@@ -323,7 +323,7 @@
 
531
 </p><p>
 
532
 This page describes the TR 24733 support in mainline GCC SVN, not in any
 
533
 particular release.
 
534
-</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">
 
535
+</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">
 
536
        <span class="emphasis"><em>0</em></span>
 
537
       </td><td colspan="3" align="left">
 
538
        <span class="emphasis"><em>Introduction</em></span>
 
539
Index: libstdc++-v3/doc/html/manual/profile_mode_devel.html
 
540
===================================================================
 
541
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_devel.html  (.../tags/gcc_4_8_2_release)
 
542
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_devel.html  (.../branches/gcc-4_8-branch)
 
543
@@ -1,5 +1,5 @@
 
544
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
545
-<!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
 
546
+<!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
 
547
    <code class="code">-D_GLIBCXX_PROFILE</code> through preprocessor directives in
 
548
    <code class="code">include/std/*</code>.
 
549
   </p><p>Instrumented implementations are provided in
 
550
Index: libstdc++-v3/doc/html/manual/debug_mode_design.html
 
551
===================================================================
 
552
--- a/src/libstdc++-v3/doc/html/manual/debug_mode_design.html   (.../tags/gcc_4_8_2_release)
 
553
+++ b/src/libstdc++-v3/doc/html/manual/debug_mode_design.html   (.../branches/gcc-4_8-branch)
 
554
@@ -1,5 +1,5 @@
 
555
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
556
-<!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>
 
557
+<!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>
 
558
   </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>
 
559
     </p><p> The libstdc++ debug mode replaces unsafe (but efficient) standard
 
560
   containers and iterators with semantically equivalent safe standard
 
561
@@ -391,7 +391,7 @@
 
562
     </p><p> There are several existing implementations of debug modes for C++
 
563
   standard library implementations, although none of them directly
 
564
   supports debugging for programs using libstdc++. The existing
 
565
-  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>:
 
566
+  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>:
 
567
   SafeSTL was the original debugging version of the Standard Template
 
568
   Library (STL), implemented by Cay S. Horstmann on top of the
 
569
   Hewlett-Packard STL. Though it inspired much work in this area, it
 
570
Index: libstdc++-v3/doc/html/manual/policy_data_structures_design.html
 
571
===================================================================
 
572
--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures_design.html       (.../tags/gcc_4_8_2_release)
 
573
+++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures_design.html       (.../branches/gcc-4_8-branch)
 
574
@@ -1,5 +1,5 @@
 
575
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
576
-<!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>
 
577
+<!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>
 
578
        Associative containers are typically parametrized by various
 
579
        policies. For example, a hash-based associative container is
 
580
        parametrized by a hash-functor, transforming each key into an
 
581
@@ -170,7 +170,7 @@
 
582
          naturally; collision-chaining hash tables (label B) store
 
583
          equivalent-key values in the same bucket, the bucket can be
 
584
          arranged so that equivalent-key values are consecutive.
 
585
-       </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>
 
586
+       </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>
 
587
          Put differently, the standards' non-unique mapping
 
588
          associative-containers are associative containers that map
 
589
          primary keys to linked lists that are embedded into the
 
590
@@ -252,7 +252,7 @@
 
591
          first graphic above. Labels A and B, respectively. Each shaded
 
592
          box represents some size-type or secondary
 
593
          associative-container.
 
594
-       </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>
 
595
+       </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>
 
596
          In the first example above, then, one would use an associative
 
597
          container mapping each user to an associative container which
 
598
          maps each application id to a start time (see
 
599
@@ -305,7 +305,7 @@
 
600
        shows invariants for order-preserving containers: point-type
 
601
        iterators are synonymous with range-type iterators.
 
602
        Orthogonally,  <span class="emphasis"><em>C</em></span>shows invariants for "set"
 
603
-       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
 
604
+       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
 
605
        (hash-based associative containers) lack movement
 
606
        operators, such as <code class="literal">operator++</code> - in fact, this
 
607
        is the reason why this library differentiates from the standard C++ librarys
 
608
@@ -344,7 +344,7 @@
 
609
          to the question of whether point-type iterators and range-type
 
610
          iterators are valid. The graphic below shows tags corresponding to
 
611
          different types of invalidation guarantees.
 
612
-       </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>
 
613
+       </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>
 
614
              <code class="classname">basic_invalidation_guarantee</code>
 
615
              corresponds to a basic guarantee that a point-type iterator,
 
616
              a found pointer, or a found reference, remains valid as long
 
617
@@ -428,7 +428,7 @@
 
618
        </p><p>
 
619
          This library contains a container tag hierarchy corresponding to the
 
620
          diagram below.
 
621
-       </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>
 
622
+       </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>
 
623
          Given any container <span class="type">Cntnr</span>, the tag of
 
624
          the underlying data structure can be found via <code class="literal">typename
 
625
          Cntnr::container_category</code>.
 
626
@@ -487,7 +487,7 @@
 
627
        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
 
628
          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
 
629
        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
 
630
-           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
 
631
+           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
 
632
              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
 
633
            strings of 3 characters). A hash-table algorithm needs to map
 
634
            elements of U "uniformly" into the range [0,..., m -
 
635
@@ -504,7 +504,7 @@
 
636
            Z<sub>+</sub>,</p><p>which maps a non-negative hash value, and a non-negative
 
637
            range upper-bound into a non-negative integral in the range
 
638
            between 0 (inclusive) and the range upper bound (exclusive),
 
639
-           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">
 
640
+           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">
 
641
                f(u , m) = g(h(u), m)
 
642
              </span></div></div><br class="equation-break" /><p>From the above, it is obvious that given g and
 
643
            h, f can always be composed (however the converse
 
644
@@ -524,7 +524,7 @@
 
645
            transforming the sequence of hash values into a sequence of
 
646
            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
 
647
            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
 
648
-           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">
 
649
+           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">
 
650
                g(r, m) = r mod m
 
651
              </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
 
652
            v (typically powers of 2), and some a. Each of
 
653
@@ -535,9 +535,9 @@
 
654
            implement using the low
 
655
            level % (modulo) operation (for any m), or the
 
656
            low level &amp; (bit-mask) operation (for the case where
 
657
-           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">
 
658
+           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">
 
659
                g(r, m) = r % m
 
660
-             </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">
 
661
+             </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">
 
662
                g(r, m) = r &amp; m - 1, (with m =
 
663
                2<sup>k</sup> for some k)
 
664
              </span></div></div><br class="equation-break" /><p>respectively.</p><p>The % (modulo) implementation has the advantage that for
 
665
@@ -563,7 +563,7 @@
 
666
              s = [ s<sub>0</sub>,..., s<sub>t - 1</sub>]
 
667
            </p><p>be a string of t characters, each of which is from
 
668
            domain S. Consider the following ranged-hash
 
669
-           function:</p><div class="equation"><a id="idp18163200"></a><p class="title"><strong>Equation 22.5. 
 
670
+           function:</p><div class="equation"><a id="idm269997367984"></a><p class="title"><strong>Equation 22.5. 
 
671
                A Standard String Hash Function
 
672
              </strong></p><div class="equation-contents"><span class="mathphrase">
 
673
                f<sub>1</sub>(s, m) = ∑ <sub>i =
 
674
@@ -575,7 +575,7 @@
 
675
            of a long DNA sequence (and so S = {'A', 'C', 'G',
 
676
            'T'}). In this case, scanning the entire string might be
 
677
            prohibitively expensive. A possible alternative might be to use
 
678
-           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. 
 
679
+           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. 
 
680
                Only k String DNA Hash
 
681
              </strong></p><div class="equation-contents"><span class="mathphrase">
 
682
                f<sub>2</sub>(s, m) = ∑ <sub>i
 
683
@@ -606,12 +606,12 @@
 
684
              the container transforms the key into a non-negative integral
 
685
              using the hash functor (points B and C), and transforms the
 
686
              result into a position using the combining functor (points D
 
687
-             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
 
688
+             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
 
689
              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
 
690
              a ranged-hash function. The graphic below shows an <code class="function">insert</code> sequence
 
691
              diagram. The user inserts an element (point A), the container
 
692
              transforms the key into a position using the combining functor
 
693
-             (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>
 
694
+             (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>
 
695
                Probing tables
 
696
              </h6></div></div></div><p><code class="classname">gp_hash_table</code> is parametrized by
 
697
              <code class="classname">Hash_Fn</code>, <code class="classname">Probe_Fn</code>,
 
698
@@ -634,7 +634,7 @@
 
699
                a linear probe and a quadratic probe function,
 
700
                respectively.</p></li></ol></div><p>
 
701
                The graphic below shows the relationships.
 
702
-             </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
 
703
+             </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
 
704
            shrink. It is necessary to specify policies to determine how
 
705
            and when a hash table should change its size. Usually, resize
 
706
            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
 
707
@@ -667,10 +667,10 @@
 
708
            and some load factor be denoted by Α. We would like to
 
709
            calculate the minimal length of k, such that if there were Α
 
710
            m elements in the hash table, a probe sequence of length k would
 
711
-           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
 
712
+           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
 
713
            k appears in bin i by p<sub>i</sub>, the
 
714
            length of the probe sequence of bin i by
 
715
-           l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idp18240448"></a><p class="title"><strong>Equation 22.7. 
 
716
+           l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idm269997290864"></a><p class="title"><strong>Equation 22.7. 
 
717
                Probability of Probe Sequence of Length k
 
718
              </strong></p><div class="equation-contents"><span class="mathphrase">
 
719
                p<sub>1</sub> = 
 
720
@@ -684,7 +684,7 @@
 
721
            l<sub>i</sub> are negatively-dependent
 
722
            (<a class="xref" href="policy_data_structures.html#biblio.dubhashi98neg" title="Balls and bins: A study in negative dependence">[biblio.dubhashi98neg]</a>)
 
723
            . Let
 
724
-           I(.) denote the indicator function. Then</p><div class="equation"><a id="idp18247216"></a><p class="title"><strong>Equation 22.8. 
 
725
+           I(.) denote the indicator function. Then</p><div class="equation"><a id="idm269997284096"></a><p class="title"><strong>Equation 22.8. 
 
726
                Probability Probe Sequence in Some Bin
 
727
              </strong></p><div class="equation-contents"><span class="mathphrase">
 
728
                P( exists<sub>i</sub> l<sub>i</sub> ≥ k ) = 
 
729
@@ -723,7 +723,7 @@
 
730
              a resize is needed, and if so, what is the new size (points D
 
731
              to G); following the resize, it notifies the policy that a
 
732
              resize has completed (point H); finally, the element is
 
733
-             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
 
734
+             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
 
735
              decomposed to a size policy and a trigger policy. Consequently,
 
736
              the library contains a single class for instantiating a resize
 
737
              policy: <code class="classname">hash_standard_resize_policy</code>
 
738
@@ -732,8 +732,8 @@
 
739
              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>)
 
740
              to these policies.</p><p>The two graphics immediately below show sequence diagrams
 
741
              illustrating the interaction between the standard resize policy
 
742
-             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
 
743
-               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
 
744
+             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
 
745
+               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
 
746
                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
 
747
              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>
 
748
                implements a load check trigger policy.</p></li><li class="listitem"><p><code class="classname">cc_hash_max_collision_check_resize_trigger</code>
 
749
@@ -876,7 +876,7 @@
 
750
          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
 
751
          each node the size of the sub-tree rooted at the node; the
 
752
          second stores at each node the maximal endpoint of the
 
753
-         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
 
754
+         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
 
755
          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
 
756
            should be (if any).</p></li><li class="listitem"><p>Various operations can invalidate node
 
757
            invariants.  The graphic below shows how a right rotation,
 
758
@@ -890,7 +890,7 @@
 
759
            metadata.</p></li><li class="listitem"><p>It is not feasible to know in advance which methods trees
 
760
            can support. Besides the usual <code class="classname">find</code> method, the
 
761
            first tree can support a <code class="classname">find_by_order</code> method, while
 
762
-           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:
 
763
+           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:
 
764
          node iterators, and template-template node updater
 
765
          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
 
766
            types, <code class="classname">const_node_iterator</code>
 
767
@@ -919,7 +919,7 @@
 
768
            <code class="classname">node_update</code> class, and publicly subclasses
 
769
            <code class="classname">node_update</code>. The graphic below shows this
 
770
            scheme, as well as some predefined policies (which are explained
 
771
-           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
 
772
+           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
 
773
            <code class="classname">Node_Update</code>) must define <code class="classname">metadata_type</code> as
 
774
            the type of metadata it requires. For order statistics,
 
775
            e.g., <code class="classname">metadata_type</code> might be <code class="classname">size_t</code>.
 
776
@@ -938,7 +938,7 @@
 
777
            <code class="classname">nd_it</code>. For example, say node x in the
 
778
            graphic below label A has an invalid invariant, but its' children,
 
779
            y and z have valid invariants. After the invocation, all three
 
780
-           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,
 
781
+           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,
 
782
            it invokes this method in its <code class="classname">node_update</code> base to
 
783
            restore the invariant. For example, the graphic below shows
 
784
            an <code class="function">insert</code> operation (point A); the tree performs some
 
785
@@ -946,7 +946,7 @@
 
786
            C, and D). (It is well known that any <code class="function">insert</code>,
 
787
            <code class="function">erase</code>, <code class="function">split</code> or <code class="function">join</code>, can restore
 
788
            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>)
 
789
-           .</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
 
790
+           .</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
 
791
            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
 
792
              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
 
793
              tree?</p></li><li class="listitem"><p>How can the following cyclic dependency be resolved?
 
794
@@ -988,7 +988,7 @@
 
795
              node's metadata (this is halting reducible). In the graphic
 
796
              below, assume the shaded node is inserted. The tree would have
 
797
              to traverse the useless path shown to the root, applying
 
798
-             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>
 
799
+             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>
 
800
            solves both these problems. The tree detects that node
 
801
            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.
 
802
          It is possible to split a tree so that it passes
 
803
@@ -1071,7 +1071,7 @@
 
804
          sub-tree with leafs "a" and "as". The maximal common prefix is
 
805
          "a". The internal node contains, consequently, to const
 
806
          iterators, one pointing to <code class="varname">'a'</code>, and the other to
 
807
-         <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
 
808
+         <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
 
809
          tree-based containers. There are two minor
 
810
          differences, though, which, unfortunately, thwart sharing them
 
811
          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
 
812
@@ -1080,7 +1080,7 @@
 
813
            parametrized by <code class="classname">Cmp_Fn</code>.</p></li><li class="listitem"><p>Tree-based containers store values in all nodes, while
 
814
            trie-based containers (at least in this implementation) store
 
815
            values in leafs.</p></li></ol></div><p>The graphic below shows the scheme, as well as some predefined
 
816
-         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
 
817
+         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
 
818
          updating policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
 
819
                <code class="classname">trie_order_statistics_node_update</code>
 
820
                supports order statistics.
 
821
@@ -1128,7 +1128,7 @@
 
822
          simple list of integer keys. If we search for the integer 6, we
 
823
          are paying an overhead: the link with key 6 is only the fifth
 
824
          link; if it were the first link, it could be accessed
 
825
-         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
 
826
+         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
 
827
          accessed. They try to determine, by the access history, which
 
828
          keys to move to the front of the list. Some of these algorithms
 
829
          require adding some metadata alongside each entry.</p><p>For example, in the graphic below label A shows the counter
 
830
@@ -1138,7 +1138,7 @@
 
831
          predetermined value, say 10, as shown in label C, the count is set
 
832
          to 0 and the node is moved to the front of the list, as in label
 
833
          D.
 
834
-         </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
 
835
+         </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
 
836
          implementing any algorithm moving nodes to the front of the
 
837
          list (policies implementing algorithms interchanging nodes are
 
838
          unsupported).</p><p>Associative containers based on lists are parametrized by a
 
839
@@ -1310,7 +1310,7 @@
 
840
          sequence; the second uses a tree (or forest of trees), which is
 
841
          typically less structured than an associative container's tree;
 
842
          the third simply uses an associative container. These are
 
843
-         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
 
844
+         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
 
845
          from a priority queue must incur a logarithmic expense (in the
 
846
          amortized sense). Any priority queue implementation that would
 
847
          avoid this, would violate known bounds on comparison-based
 
848
@@ -1390,7 +1390,7 @@
 
849
          container <code class="classname">Cntnr</code>, the tag of the underlying
 
850
          data structure can be found via <code class="classname">typename 
 
851
          Cntnr::container_category</code>; this is one of the possible tags shown in the graphic below.
 
852
-         </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
 
853
+         </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
 
854
          container type for its attributes. Given any container
 
855
          <code class="classname">Cntnr</code>, then </p><pre class="programlisting">__gnu_pbds::container_traits&lt;Cntnr&gt;</pre><p>
 
856
          is a traits class identifying the properties of the
 
857
Index: libstdc++-v3/doc/html/manual/using.html
 
858
===================================================================
 
859
--- a/src/libstdc++-v3/doc/html/manual/using.html       (.../tags/gcc_4_8_2_release)
 
860
+++ b/src/libstdc++-v3/doc/html/manual/using.html       (.../branches/gcc-4_8-branch)
 
861
@@ -1,8 +1,8 @@
 
862
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
863
-<!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. 
 
864
+<!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. 
 
865
   Introduction
 
866
   
 
867
-</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>
 
868
+</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>
 
869
       The set of features available in the GNU C++ library is shaped
 
870
       by
 
871
       several <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Invoking-GCC.html" target="_top">GCC
 
872
@@ -10,5 +10,5 @@
 
873
       enumerated and detailed in the table below.
 
874
     </p><p>
 
875
       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.
 
876
-    </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;,
 
877
+    </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;,
 
878
       &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>
 
879
\ No newline at end of file
 
880
Index: libstdc++-v3/doc/html/manual/profile_mode_impl.html
 
881
===================================================================
 
882
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_impl.html   (.../tags/gcc_4_8_2_release)
 
883
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_impl.html   (.../branches/gcc-4_8-branch)
 
884
@@ -1,5 +1,5 @@
 
885
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
886
-<!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>
 
887
+<!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>
 
888
   Accurate stack traces are needed during profiling since we group events by
 
889
   call context and dynamic instance.  Without accurate traces, diagnostics
 
890
   may be hard to interpret.  For instance, when giving advice to the user
 
891
Index: libstdc++-v3/doc/html/manual/ext_containers.html
 
892
===================================================================
 
893
--- a/src/libstdc++-v3/doc/html/manual/ext_containers.html      (.../tags/gcc_4_8_2_release)
 
894
+++ b/src/libstdc++-v3/doc/html/manual/ext_containers.html      (.../branches/gcc-4_8-branch)
 
895
@@ -1,8 +1,8 @@
 
896
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
897
-<!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. 
 
898
+<!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. 
 
899
   Extensions
 
900
   
 
901
-</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
 
902
+</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
 
903
     been made with containers.  Those dealing with older SGI-style
 
904
     allocators are dealt with elsewhere.  The remaining ones all deal
 
905
     with bits:
 
906
Index: libstdc++-v3/doc/html/manual/ext_concurrency_use.html
 
907
===================================================================
 
908
--- a/src/libstdc++-v3/doc/html/manual/ext_concurrency_use.html (.../tags/gcc_4_8_2_release)
 
909
+++ b/src/libstdc++-v3/doc/html/manual/ext_concurrency_use.html (.../branches/gcc-4_8-branch)
 
910
@@ -1,5 +1,5 @@
 
911
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
912
-<!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:
 
913
+<!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:
 
914
 </p><pre class="programlisting">
 
915
 #include &lt;ext/concurrence.h&gt;
 
916
 
 
917
Index: libstdc++-v3/doc/html/manual/ext_io.html
 
918
===================================================================
 
919
--- a/src/libstdc++-v3/doc/html/manual/ext_io.html      (.../tags/gcc_4_8_2_release)
 
920
+++ b/src/libstdc++-v3/doc/html/manual/ext_io.html      (.../branches/gcc-4_8-branch)
 
921
@@ -1,8 +1,8 @@
 
922
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
923
-<!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. 
 
924
+<!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. 
 
925
   Extensions
 
926
   
 
927
-</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>
 
928
+</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>
 
929
     Extensions allowing <code class="code">filebuf</code>s to be constructed from
 
930
     "C" types like  FILE*s and file descriptors.
 
931
   </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
 
932
Index: libstdc++-v3/doc/html/manual/termination.html
 
933
===================================================================
 
934
--- a/src/libstdc++-v3/doc/html/manual/termination.html (.../tags/gcc_4_8_2_release)
 
935
+++ b/src/libstdc++-v3/doc/html/manual/termination.html (.../branches/gcc-4_8-branch)
 
936
@@ -1,5 +1,5 @@
 
937
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
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>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. 
 
939
+<!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. 
 
940
   Support
 
941
   
 
942
 </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>
 
943
Index: libstdc++-v3/doc/html/manual/using_macros.html
 
944
===================================================================
 
945
--- a/src/libstdc++-v3/doc/html/manual/using_macros.html        (.../tags/gcc_4_8_2_release)
 
946
+++ b/src/libstdc++-v3/doc/html/manual/using_macros.html        (.../branches/gcc-4_8-branch)
 
947
@@ -1,5 +1,5 @@
 
948
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
949
-<!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>
 
950
+<!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>
 
951
      All library macros begin with <code class="code">_GLIBCXX_</code>.
 
952
    </p><p>
 
953
      Furthermore, all pre-processor macros, switches, and
 
954
Index: libstdc++-v3/doc/html/manual/concurrency.html
 
955
===================================================================
 
956
--- a/src/libstdc++-v3/doc/html/manual/concurrency.html (.../tags/gcc_4_8_2_release)
 
957
+++ b/src/libstdc++-v3/doc/html/manual/concurrency.html (.../branches/gcc-4_8-branch)
 
958
@@ -1,5 +1,5 @@
 
959
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
960
-<!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. 
 
961
+<!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. 
 
962
   Concurrency
 
963
   
 
964
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="atomics.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
965
@@ -6,8 +6,8 @@
 
966
     Standard Contents
 
967
   </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. 
 
968
   Concurrency
 
969
-  <a id="idp16404464" class="indexterm"></a>
 
970
-</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>
 
971
+  <a id="idm269999126816" class="indexterm"></a>
 
972
+</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>
 
973
   Facilities for concurrent operation, and control thereof.
 
974
 </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>
 
975
     All items are declared in one of four standard header files.
 
976
Index: libstdc++-v3/doc/html/manual/ext_utilities.html
 
977
===================================================================
 
978
--- a/src/libstdc++-v3/doc/html/manual/ext_utilities.html       (.../tags/gcc_4_8_2_release)
 
979
+++ b/src/libstdc++-v3/doc/html/manual/ext_utilities.html       (.../branches/gcc-4_8-branch)
 
980
@@ -1,5 +1,5 @@
 
981
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
982
-<!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. 
 
983
+<!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. 
 
984
   Extensions
 
985
   
 
986
 </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>
 
987
Index: libstdc++-v3/doc/html/manual/policy_data_structures.html
 
988
===================================================================
 
989
--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures.html      (.../tags/gcc_4_8_2_release)
 
990
+++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures.html      (.../branches/gcc-4_8-branch)
 
991
@@ -1,8 +1,8 @@
 
992
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
993
-<!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. 
 
994
+<!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. 
 
995
   Extensions
 
996
   
 
997
-</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">
 
998
+</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">
 
999
            Configuring via Template Parameters
 
1000
          </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
 
1001
            Querying Container Attributes
 
1002
@@ -248,7 +248,7 @@
 
1003
                these invariants, one must supply some policy that is aware
 
1004
                of these changes.  Without this, it would be better to use a
 
1005
                linked list (in itself very efficient for these purposes).
 
1006
-             </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>
 
1007
+             </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>
 
1008
            The standard C++ library contains associative containers based on
 
1009
            red-black trees and collision-chaining hash tables. These are
 
1010
            very useful, but they are not ideal for all types of
 
1011
@@ -256,7 +256,7 @@
 
1012
          </p><p>
 
1013
            The figure below shows the different underlying data structures
 
1014
            currently supported in this library.
 
1015
-         </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>
 
1016
+         </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>
 
1017
            A shows a collision-chaining hash-table, B shows a probing
 
1018
            hash-table, C shows a red-black tree, D shows a splay tree, E shows
 
1019
            a tree based on an ordered vector(implicit in the order of the
 
1020
@@ -375,7 +375,7 @@
 
1021
              no guarantee that the elements traversed will coincide with the
 
1022
              <span class="emphasis"><em>logical</em></span> elements between 1 and 5, as in
 
1023
              label B.
 
1024
-           </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>
 
1025
+           </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>
 
1026
              In our opinion, this problem is not caused just because
 
1027
              red-black trees are order preserving while
 
1028
              collision-chaining hash tables are (generally) not - it
 
1029
@@ -426,7 +426,7 @@
 
1030
              list, as in the graphic below, label B.  Here the iterators are as
 
1031
              light as can be, but the hash-table's operations are more
 
1032
              complicated.
 
1033
-           </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>
 
1034
+           </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>
 
1035
              It should be noted that containers based on collision-chaining
 
1036
              hash-tables are not the only ones with this type of behavior;
 
1037
              many other self-organizing data structures display it as well.
 
1038
@@ -442,7 +442,7 @@
 
1039
              container. The graphic below shows three cases: A1 and A2 show
 
1040
              a red-black tree; B1 and B2 show a probing hash-table; C1 and C2
 
1041
              show a collision-chaining hash table.
 
1042
-           </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>
 
1043
+           </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>
 
1044
                  Erasing 5 from A1 yields A2. Clearly, an iterator to 3 can
 
1045
                  be de-referenced and incremented. The sequence of iterators
 
1046
                  changed, but in a way that is well-defined by the interface.
 
1047
@@ -678,7 +678,7 @@
 
1048
            typically less structured than an associative container's tree;
 
1049
            the third simply uses an associative container. These are
 
1050
            shown in the figure below with labels A1 and A2, B, and C.
 
1051
-         </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>
 
1052
+         </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>
 
1053
            No single implementation can completely replace any of the
 
1054
            others. Some have better <code class="function">push</code>
 
1055
            and <code class="function">pop</code> amortized performance, some have
 
1056
@@ -1098,7 +1098,7 @@
 
1057
          </span>. </span><span class="publisher"><span class="publishername">
 
1058
          Proceedings of International Conference on Very Large Data Bases
 
1059
        . </span></span></p></div><div class="biblioentry"><a id="biblio.maverik_lowerbounds"></a><p>[biblio.maverik_lowerbounds] <span class="title"><em>
 
1060
-       <a class="link" href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps" target="_top">
 
1061
+       <a class="link" href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps/" target="_top">
 
1062
          Deamortization - Part 2: Binomial Heaps
 
1063
        </a>
 
1064
       </em>. </span><span class="date">
 
1065
@@ -1190,7 +1190,7 @@
 
1066
            </span>. </span><span class="publisher"><span class="publishername">
 
1067
          Addison-Wesley Publishing Company
 
1068
        . </span></span></p></div><div class="biblioentry"><a id="biblio.nelson96stlpq"></a><p>[biblio.nelson96stlpq] <span class="title"><em>
 
1069
-       <a class="link" href="http://www.dogma.net/markn/articles/pq_stl/priority.htm" target="_top">Priority Queues and the STL
 
1070
+       <a class="link" href="http://marknelson.us/1996/01/01/priority-queues/" target="_top">Priority Queues and the STL
 
1071
        </a>
 
1072
       </em>. </span><span class="date">
 
1073
        January 1996
 
1074
Index: libstdc++-v3/doc/html/manual/ext_iterators.html
 
1075
===================================================================
 
1076
--- a/src/libstdc++-v3/doc/html/manual/ext_iterators.html       (.../tags/gcc_4_8_2_release)
 
1077
+++ b/src/libstdc++-v3/doc/html/manual/ext_iterators.html       (.../branches/gcc-4_8-branch)
 
1078
@@ -1,5 +1,5 @@
 
1079
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1080
-<!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. 
 
1081
+<!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. 
 
1082
   Extensions
 
1083
   
 
1084
 </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
 
1085
Index: libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html
 
1086
===================================================================
 
1087
--- a/src/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html       (.../tags/gcc_4_8_2_release)
 
1088
+++ b/src/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html       (.../branches/gcc-4_8-branch)
 
1089
@@ -1,5 +1,5 @@
 
1090
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1091
-<!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>
 
1092
+<!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>
 
1093
     The Free List Store (referred to as FLS for the remaining part of this
 
1094
     document) is the Global memory pool that is shared by all instances of
 
1095
     the bitmapped allocator instantiated for any type. This maintains a
 
1096
@@ -75,7 +75,7 @@
 
1097
   </p><p>
 
1098
     Consider a block of size 64 ints. In memory, it would look like this:
 
1099
     (assume a 32-bit system where, size_t is a 32-bit entity).
 
1100
-  </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>
 
1101
+  </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>
 
1102
     The first Column(268) represents the size of the Block in bytes as
 
1103
     seen by the Bitmap Allocator. Internally, a global free list is
 
1104
     used to keep track of the free blocks used and given back by the
 
1105
Index: libstdc++-v3/doc/html/manual/appendix_contributing.html
 
1106
===================================================================
 
1107
--- a/src/libstdc++-v3/doc/html/manual/appendix_contributing.html       (.../tags/gcc_4_8_2_release)
 
1108
+++ b/src/libstdc++-v3/doc/html/manual/appendix_contributing.html       (.../branches/gcc-4_8-branch)
 
1109
@@ -1,5 +1,5 @@
 
1110
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1111
-<!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. 
 
1112
+<!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. 
 
1113
   Contributing
 
1114
   
 
1115
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix.html">Prev</a> </td><th width="60%" align="center">Part IV. 
 
1116
@@ -6,8 +6,8 @@
 
1117
   Appendices
 
1118
 </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>
 
1119
   Contributing
 
1120
-  <a id="idp21875168" class="indexterm"></a>
 
1121
-</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>
 
1122
+  <a id="idm269993657472" class="indexterm"></a>
 
1123
+</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>
 
1124
   The GNU C++ Library follows an open development model. Active
 
1125
   contributors are assigned maintainer-ship responsibility, and given
 
1126
   write access to the source repository. First time contributors
 
1127
@@ -36,7 +36,7 @@
 
1128
           for this group is quite useful.
 
1129
       </p></li><li class="listitem"><p>
 
1130
          Peruse
 
1131
-         the <a class="link" href="http://www.gnu.org/prep/standards" target="_top">GNU
 
1132
+         the <a class="link" href="http://www.gnu.org/prep/standards/" target="_top">GNU
 
1133
          Coding Standards</a>, and chuckle when you hit the part
 
1134
          about <span class="quote">“<span class="quote">Using Languages Other Than C</span>”</span>.
 
1135
        </p></li><li class="listitem"><p>
 
1136
Index: libstdc++-v3/doc/html/manual/parallel_mode_test.html
 
1137
===================================================================
 
1138
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode_test.html  (.../tags/gcc_4_8_2_release)
 
1139
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode_test.html  (.../branches/gcc-4_8-branch)
 
1140
@@ -1,5 +1,5 @@
 
1141
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1142
-<!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>
 
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>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>
 
1144
     Both the normal conformance and regression tests and the
 
1145
     supplemental performance tests work.
 
1146
   </p><p>
 
1147
Index: libstdc++-v3/doc/html/manual/profile_mode.html
 
1148
===================================================================
 
1149
--- a/src/libstdc++-v3/doc/html/manual/profile_mode.html        (.../tags/gcc_4_8_2_release)
 
1150
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode.html        (.../branches/gcc-4_8-branch)
 
1151
@@ -1,8 +1,8 @@
 
1152
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1153
-<!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. 
 
1154
+<!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. 
 
1155
   Extensions
 
1156
   
 
1157
-</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>
 
1158
+</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>
 
1159
   <span class="emphasis"><em>Goal: </em></span>Give performance improvement advice based on
 
1160
   recognition of suboptimal usage patterns of the standard library.
 
1161
   </p><p>
 
1162
@@ -137,7 +137,7 @@
 
1163
    call context.
 
1164
    (Environment variable not supported.)
 
1165
    </p></li></ul></div><p>
 
1166
-  </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">
 
1167
+  </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">
 
1168
       Perflint: A Context Sensitive Performance Advisor for C++ Programs
 
1169
     </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">
 
1170
        Proceedings of the 2009 International Symposium on Code Generation
 
1171
Index: libstdc++-v3/doc/html/manual/stringstreams.html
 
1172
===================================================================
 
1173
--- a/src/libstdc++-v3/doc/html/manual/stringstreams.html       (.../tags/gcc_4_8_2_release)
 
1174
+++ b/src/libstdc++-v3/doc/html/manual/stringstreams.html       (.../branches/gcc-4_8-branch)
 
1175
@@ -1,5 +1,5 @@
 
1176
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1177
-<!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. 
 
1178
+<!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. 
 
1179
   Input and Output
 
1180
   
 
1181
 </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>
 
1182
Index: libstdc++-v3/doc/html/manual/traits.html
 
1183
===================================================================
 
1184
--- a/src/libstdc++-v3/doc/html/manual/traits.html      (.../tags/gcc_4_8_2_release)
 
1185
+++ b/src/libstdc++-v3/doc/html/manual/traits.html      (.../branches/gcc-4_8-branch)
 
1186
@@ -1,5 +1,5 @@
 
1187
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1188
-<!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. 
 
1189
+<!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. 
 
1190
   Utilities
 
1191
   
 
1192
 </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>
 
1193
Index: libstdc++-v3/doc/html/manual/policy_data_structures_ack.html
 
1194
===================================================================
 
1195
--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html  (.../tags/gcc_4_8_2_release)
 
1196
+++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html  (.../branches/gcc-4_8-branch)
 
1197
@@ -1,10 +1,9 @@
 
1198
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1199
-<!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>
 
1200
+<!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>
 
1201
       Written by Ami Tavory and Vladimir Dreizin (IBM Haifa Research
 
1202
       Laboratories), and Benjamin Kosnik (Red Hat).
 
1203
     </p><p>
 
1204
-      This library was partially written at
 
1205
-      <a class="link" href="http://www.haifa.il.ibm.com/" target="_top">IBM's Haifa Research Labs</a>.
 
1206
+      This library was partially written at IBM's Haifa Research Labs.
 
1207
       It is based heavily on policy-based design and uses many useful
 
1208
       techniques from Modern C++ Design: Generic Programming and Design
 
1209
       Patterns Applied by Andrei Alexandrescu.
 
1210
Index: libstdc++-v3/doc/html/manual/associative.html
 
1211
===================================================================
 
1212
--- a/src/libstdc++-v3/doc/html/manual/associative.html (.../tags/gcc_4_8_2_release)
 
1213
+++ b/src/libstdc++-v3/doc/html/manual/associative.html (.../branches/gcc-4_8-branch)
 
1214
@@ -1,5 +1,5 @@
 
1215
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1216
-<!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. 
 
1217
+<!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. 
 
1218
   Containers
 
1219
   
 
1220
 </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>
 
1221
Index: libstdc++-v3/doc/html/manual/ext_concurrency.html
 
1222
===================================================================
 
1223
--- a/src/libstdc++-v3/doc/html/manual/ext_concurrency.html     (.../tags/gcc_4_8_2_release)
 
1224
+++ b/src/libstdc++-v3/doc/html/manual/ext_concurrency.html     (.../branches/gcc-4_8-branch)
 
1225
@@ -1,8 +1,8 @@
 
1226
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1227
-<!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. 
 
1228
+<!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. 
 
1229
   Extensions
 
1230
   
 
1231
-</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>
 
1232
+</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>
 
1233
 contains all the higher-level
 
1234
 constructs for playing with threads. In contrast to the atomics layer,
 
1235
 the concurrence layer consists largely of types. All types are defined within <code class="code">namespace __gnu_cxx</code>.
 
1236
Index: libstdc++-v3/doc/html/manual/support.html
 
1237
===================================================================
 
1238
--- a/src/libstdc++-v3/doc/html/manual/support.html     (.../tags/gcc_4_8_2_release)
 
1239
+++ b/src/libstdc++-v3/doc/html/manual/support.html     (.../branches/gcc-4_8-branch)
 
1240
@@ -1,5 +1,5 @@
 
1241
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1242
-<!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. 
 
1243
+<!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. 
 
1244
   Support
 
1245
   
 
1246
 </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. 
 
1247
@@ -6,8 +6,8 @@
 
1248
     Standard Contents
 
1249
   </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. 
 
1250
   Support
 
1251
-  <a id="idp13745936" class="indexterm"></a>
 
1252
-</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>
 
1253
+  <a id="idm270001786944" class="indexterm"></a>
 
1254
+</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>
 
1255
     This part deals with the functions called and objects created
 
1256
     automatically during the course of a program's existence.
 
1257
   </p><p>
 
1258
Index: libstdc++-v3/doc/html/manual/bitmap_allocator.html
 
1259
===================================================================
 
1260
--- a/src/libstdc++-v3/doc/html/manual/bitmap_allocator.html    (.../tags/gcc_4_8_2_release)
 
1261
+++ b/src/libstdc++-v3/doc/html/manual/bitmap_allocator.html    (.../branches/gcc-4_8-branch)
 
1262
@@ -1,8 +1,8 @@
 
1263
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1264
-<!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. 
 
1265
+<!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. 
 
1266
   Extensions
 
1267
   
 
1268
-</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>
 
1269
+</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>
 
1270
 </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>
 
1271
     As this name suggests, this allocator uses a bit-map to keep track
 
1272
     of the used and unused memory locations for its book-keeping
 
1273
Index: libstdc++-v3/doc/html/manual/license.html
 
1274
===================================================================
 
1275
--- a/src/libstdc++-v3/doc/html/manual/license.html     (.../tags/gcc_4_8_2_release)
 
1276
+++ b/src/libstdc++-v3/doc/html/manual/license.html     (.../branches/gcc-4_8-branch)
 
1277
@@ -1,5 +1,5 @@
 
1278
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1279
-<!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>
 
1280
+<!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>
 
1281
     There are two licenses affecting GNU libstdc++: one for the code,
 
1282
     and one for the documentation.
 
1283
     </p><p>
 
1284
Index: libstdc++-v3/doc/html/manual/numerics.html
 
1285
===================================================================
 
1286
--- a/src/libstdc++-v3/doc/html/manual/numerics.html    (.../tags/gcc_4_8_2_release)
 
1287
+++ b/src/libstdc++-v3/doc/html/manual/numerics.html    (.../branches/gcc-4_8-branch)
 
1288
@@ -1,5 +1,5 @@
 
1289
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1290
-<!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. 
 
1291
+<!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. 
 
1292
   Numerics
 
1293
   
 
1294
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
1295
@@ -6,8 +6,8 @@
 
1296
     Standard Contents
 
1297
   </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. 
 
1298
   Numerics
 
1299
-  <a id="idp16214640" class="indexterm"></a>
 
1300
-</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>
 
1301
+  <a id="idm269999316576" class="indexterm"></a>
 
1302
+</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>
 
1303
   </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>
 
1304
     </p><p>Using <code class="code">complex&lt;&gt;</code> becomes even more comple- er, sorry,
 
1305
       <span class="emphasis"><em>complicated</em></span>, with the not-quite-gratuitously-incompatible
 
1306
Index: libstdc++-v3/doc/html/manual/using_exceptions.html
 
1307
===================================================================
 
1308
--- a/src/libstdc++-v3/doc/html/manual/using_exceptions.html    (.../tags/gcc_4_8_2_release)
 
1309
+++ b/src/libstdc++-v3/doc/html/manual/using_exceptions.html    (.../branches/gcc-4_8-branch)
 
1310
@@ -1,5 +1,5 @@
 
1311
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1312
-<!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>
 
1313
+<!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>
 
1314
 The C++ language provides language support for stack unwinding
 
1315
 with <code class="literal">try</code> and <code class="literal">catch</code> blocks and
 
1316
 the <code class="literal">throw</code> keyword.
 
1317
@@ -265,7 +265,7 @@
 
1318
   }
 
1319
   catch(...)
 
1320
   { this-&gt;_M_setstate(ios_base::badbit); }
 
1321
-</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>
 
1322
+</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>
 
1323
        <a class="link" href="http://www.opengroup.org/austin/" target="_top">
 
1324
        System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
 
1325
        </a>
 
1326
@@ -274,39 +274,39 @@
 
1327
     . </span><span class="copyright">Copyright © 2008 
 
1328
        The Open Group/The Institute of Electrical and Electronics
 
1329
        Engineers, Inc.
 
1330
-      . </span></p></div><div class="biblioentry"><a id="idp13647696"></a><p><span class="title"><em>
 
1331
+      . </span></p></div><div class="biblioentry"><a id="idm270001885328"></a><p><span class="title"><em>
 
1332
        <a class="link" href="http://www.boost.org/community/error_handling.html" target="_top">
 
1333
        Error and Exception Handling
 
1334
        </a>
 
1335
       </em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams </span>. </span><span class="publisher"><span class="publishername">
 
1336
        Boost
 
1337
-      . </span></span></p></div><div class="biblioentry"><a id="idp13651392"></a><p><span class="title"><em>
 
1338
+      . </span></span></p></div><div class="biblioentry"><a id="idm270001881632"></a><p><span class="title"><em>
 
1339
        <a class="link" href="http://www.boost.org/community/exception_safety.html" target="_top">
 
1340
        Exception-Safety in Generic Components
 
1341
        </a>
 
1342
       </em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams</span>. </span><span class="publisher"><span class="publishername">
 
1343
        Boost
 
1344
-      . </span></span></p></div><div class="biblioentry"><a id="idp13655104"></a><p><span class="title"><em>
 
1345
+      . </span></span></p></div><div class="biblioentry"><a id="idm270001877920"></a><p><span class="title"><em>
 
1346
        <a class="link" href="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf" target="_top">
 
1347
        Standard Library Exception Policy
 
1348
        </a>
 
1349
       </em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
 
1350
        WG21 N1077
 
1351
-      . </span></span></p></div><div class="biblioentry"><a id="idp13658816"></a><p><span class="title"><em>
 
1352
+      . </span></span></p></div><div class="biblioentry"><a id="idm270001874208"></a><p><span class="title"><em>
 
1353
        <a class="link" href="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html" target="_top">
 
1354
        ia64 c++ abi exception handling
 
1355
        </a>
 
1356
       </em>. </span><span class="author"><span class="firstname">Richard</span> <span class="surname">Henderson</span>. </span><span class="publisher"><span class="publishername">
 
1357
        GNU
 
1358
-      . </span></span></p></div><div class="biblioentry"><a id="idp13662512"></a><p><span class="title"><em>
 
1359
+      . </span></span></p></div><div class="biblioentry"><a id="idm270001870512"></a><p><span class="title"><em>
 
1360
        <a class="link" href="http://www.research.att.com/~bs/3rd_safe.pdf" target="_top">
 
1361
        Appendix E: Standard-Library Exception Safety
 
1362
        </a>
 
1363
-      </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">
 
1364
+      </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">
 
1365
       Exceptional C++
 
1366
     </em>. </span><span class="pagenums">
 
1367
       Exception-Safety Issues and Techniques
 
1368
-    . </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>
 
1369
+    . </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>
 
1370
        <a class="link" href="http://gcc.gnu.org/PR25191" target="_top">
 
1371
       GCC Bug 25191: exception_defines.h #defines try/catch
 
1372
        </a>
 
1373
Index: libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
 
1374
===================================================================
 
1375
--- a/src/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html   (.../tags/gcc_4_8_2_release)
 
1376
+++ b/src/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html   (.../branches/gcc-4_8-branch)
 
1377
@@ -1,5 +1,5 @@
 
1378
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1379
-<!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.
 
1380
+<!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.
 
1381
     For a given container type in this library, the test creates
 
1382
     an object of the container type and an object of the
 
1383
     corresponding standard type (e.g., <code class="classname">std::set</code>). It
 
1384
Index: libstdc++-v3/doc/html/manual/parallel_mode_design.html
 
1385
===================================================================
 
1386
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode_design.html        (.../tags/gcc_4_8_2_release)
 
1387
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode_design.html        (.../branches/gcc-4_8-branch)
 
1388
@@ -1,5 +1,5 @@
 
1389
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1390
-<!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>
 
1391
+<!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>
 
1392
   </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>
 
1393
 All parallel algorithms are intended to have signatures that are
 
1394
 equivalent to the ISO C++ algorithms replaced. For instance, the
 
1395
Index: libstdc++-v3/doc/html/manual/abi.html
 
1396
===================================================================
 
1397
--- a/src/libstdc++-v3/doc/html/manual/abi.html (.../tags/gcc_4_8_2_release)
 
1398
+++ b/src/libstdc++-v3/doc/html/manual/abi.html (.../branches/gcc-4_8-branch)
 
1399
@@ -1,5 +1,5 @@
 
1400
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1401
-<!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. 
 
1402
+<!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. 
 
1403
   Porting and Maintenance
 
1404
   
 
1405
 </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>
 
1406
@@ -493,39 +493,39 @@
 
1407
        <a class="link" href="http://www.codesourcery.com/cxx-abi/" target="_top">
 
1408
          C++ ABI Summary
 
1409
        </a>
 
1410
-      </em>. </span></p></div><div class="biblioentry"><a id="idp22945936"></a><p><span class="title"><em>
 
1411
+      </em>. </span></p></div><div class="biblioentry"><a id="idm269992586624"></a><p><span class="title"><em>
 
1412
        <a class="link" href="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm" target="_top">
 
1413
        Intel Compilers for Linux Compatibility with the GNU Compilers
 
1414
        </a>
 
1415
-      </em>. </span></p></div><div class="biblioentry"><a id="idp22947792"></a><p><span class="title"><em>
 
1416
+      </em>. </span></p></div><div class="biblioentry"><a id="idm269992584768"></a><p><span class="title"><em>
 
1417
        <a class="link" href="http://download.oracle.com/docs/cd/E19963-01/html/819-0690/index.html" target="_top">
 
1418
        Linker and Libraries Guide (document 819-0690)
 
1419
        </a>
 
1420
-      </em>. </span></p></div><div class="biblioentry"><a id="idp22949632"></a><p><span class="title"><em>
 
1421
+      </em>. </span></p></div><div class="biblioentry"><a id="idm269992582928"></a><p><span class="title"><em>
 
1422
        <a class="link" href="http://download.oracle.com/docs/cd/E19422-01/819-3689/index.html" target="_top">
 
1423
       Sun Studio 11: C++ Migration Guide (document 819-3689)
 
1424
        </a>
 
1425
-      </em>. </span></p></div><div class="biblioentry"><a id="idp22951488"></a><p><span class="title"><em>
 
1426
+      </em>. </span></p></div><div class="biblioentry"><a id="idm269992581072"></a><p><span class="title"><em>
 
1427
        <a class="link" href="http://www.akkadia.org/drepper/dsohowto.pdf" target="_top">
 
1428
       How to Write Shared Libraries
 
1429
        </a>
 
1430
-      </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>
 
1431
+      </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>
 
1432
        <a class="link" href="http://www.arm.com/miscPDFs/8033.pdf" target="_top">
 
1433
       C++ ABI for the ARM Architecture
 
1434
        </a>
 
1435
-      </em>. </span></p></div><div class="biblioentry"><a id="idp22956736"></a><p><span class="title"><em>
 
1436
+      </em>. </span></p></div><div class="biblioentry"><a id="idm269992575824"></a><p><span class="title"><em>
 
1437
        <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html" target="_top">
 
1438
       Dynamic Shared Objects: Survey and Issues
 
1439
        </a>
 
1440
       </em>. </span><span class="subtitle">
 
1441
       ISO C++ J16/06-0046
 
1442
-    . </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>
 
1443
+    . </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>
 
1444
        <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html" target="_top">
 
1445
        Versioning With Namespaces
 
1446
        </a>
 
1447
       </em>. </span><span class="subtitle">
 
1448
       ISO C++ J16/06-0083
 
1449
-    . </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>
 
1450
+    . </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>
 
1451
        <a class="link" href="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf" target="_top">
 
1452
       Binary Compatibility of Shared Libraries Implemented in C++
 
1453
       on GNU/Linux Systems
 
1454
Index: libstdc++-v3/doc/html/manual/intro.html
 
1455
===================================================================
 
1456
--- a/src/libstdc++-v3/doc/html/manual/intro.html       (.../tags/gcc_4_8_2_release)
 
1457
+++ b/src/libstdc++-v3/doc/html/manual/intro.html       (.../branches/gcc-4_8-branch)
 
1458
@@ -1,8 +1,8 @@
 
1459
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1460
-<!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. 
 
1461
+<!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. 
 
1462
   Introduction
 
1463
   
 
1464
 </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. 
 
1465
   Introduction
 
1466
-  <a id="idp9040416" class="indexterm"></a>
 
1467
-</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>
 
1468
\ No newline at end of file
 
1469
+  <a id="idm270013458800" class="indexterm"></a>
 
1470
+</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>
 
1471
\ No newline at end of file
 
1472
Index: libstdc++-v3/doc/html/manual/profile_mode_api.html
 
1473
===================================================================
 
1474
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_api.html    (.../tags/gcc_4_8_2_release)
 
1475
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_api.html    (.../branches/gcc-4_8-branch)
 
1476
@@ -1,5 +1,5 @@
 
1477
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1478
-<!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>
 
1479
+<!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>
 
1480
   Many large projects use their own data structures instead of the ones in the
 
1481
   standard library.  If these data structures are similar in functionality
 
1482
   to the standard library, they can be instrumented with the same hooks
 
1483
Index: libstdc++-v3/doc/html/manual/atomics.html
 
1484
===================================================================
 
1485
--- a/src/libstdc++-v3/doc/html/manual/atomics.html     (.../tags/gcc_4_8_2_release)
 
1486
+++ b/src/libstdc++-v3/doc/html/manual/atomics.html     (.../branches/gcc-4_8-branch)
 
1487
@@ -1,5 +1,5 @@
 
1488
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1489
-<!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. 
 
1490
+<!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. 
 
1491
   Atomics
 
1492
   
 
1493
 </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. 
 
1494
@@ -6,8 +6,8 @@
 
1495
     Standard Contents
 
1496
   </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. 
 
1497
   Atomics
 
1498
-  <a id="idp16390640" class="indexterm"></a>
 
1499
-</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>
 
1500
+  <a id="idm269999140704" class="indexterm"></a>
 
1501
+</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>
 
1502
   Facilities for atomic operations.
 
1503
 </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>
 
1504
     All items are declared in the standard header
 
1505
Index: libstdc++-v3/doc/html/manual/internals.html
 
1506
===================================================================
 
1507
--- a/src/libstdc++-v3/doc/html/manual/internals.html   (.../tags/gcc_4_8_2_release)
 
1508
+++ b/src/libstdc++-v3/doc/html/manual/internals.html   (.../branches/gcc-4_8-branch)
 
1509
@@ -1,5 +1,5 @@
 
1510
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1511
-<!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. 
 
1512
+<!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. 
 
1513
   Porting and Maintenance
 
1514
   
 
1515
 </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>
 
1516
Index: libstdc++-v3/doc/html/manual/policy_data_structures_using.html
 
1517
===================================================================
 
1518
--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures_using.html        (.../tags/gcc_4_8_2_release)
 
1519
+++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures_using.html        (.../branches/gcc-4_8-branch)
 
1520
@@ -1,5 +1,5 @@
 
1521
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1522
-<!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
 
1523
+<!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
 
1524
       other libraries except the standard C++ library . All classes are
 
1525
       defined in namespace <code class="code">__gnu_pbds</code>. The library internally
 
1526
       uses macros beginning with <code class="code">PB_DS</code>, but
 
1527
@@ -61,7 +61,7 @@
 
1528
        In addition, there are the following diagnostics classes,
 
1529
        used to report errors specific to this library's data
 
1530
        structures.
 
1531
-      </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>
 
1532
+      </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>
 
1533
          For the most part, the policy-based containers containers in
 
1534
          namespace <code class="literal">__gnu_pbds</code> have the same interface as
 
1535
          the equivalent containers in the standard C++ library, except for
 
1536
Index: libstdc++-v3/doc/html/manual/bugs.html
 
1537
===================================================================
 
1538
--- a/src/libstdc++-v3/doc/html/manual/bugs.html        (.../tags/gcc_4_8_2_release)
 
1539
+++ b/src/libstdc++-v3/doc/html/manual/bugs.html        (.../branches/gcc-4_8-branch)
 
1540
@@ -1,5 +1,5 @@
 
1541
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1542
-<!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>
 
1543
+<!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>
 
1544
       Information on known bugs, details on efforts to fix them, and
 
1545
       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>,
 
1546
       with the category set to <code class="literal">libstdc++</code>.
 
1547
Index: libstdc++-v3/doc/html/manual/parallel_mode_using.html
 
1548
===================================================================
 
1549
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode_using.html (.../tags/gcc_4_8_2_release)
 
1550
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode_using.html (.../branches/gcc-4_8-branch)
 
1551
@@ -1,5 +1,5 @@
 
1552
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1553
-<!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>
 
1554
+<!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>
 
1555
   Any use of parallel functionality requires additional compiler
 
1556
   and runtime support, in particular support for OpenMP. Adding this support is
 
1557
   not difficult: just compile your application with the compiler
 
1558
@@ -62,4 +62,4 @@
 
1559
 flags for atomic operations.)
 
1560
 </p><p> The following table provides the names and headers of all the
 
1561
   parallel algorithms that can be used in a similar manner:
 
1562
-</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>
 
1563
\ No newline at end of file
 
1564
+</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>
 
1565
\ No newline at end of file
 
1566
Index: libstdc++-v3/doc/html/manual/ext_numerics.html
 
1567
===================================================================
 
1568
--- a/src/libstdc++-v3/doc/html/manual/ext_numerics.html        (.../tags/gcc_4_8_2_release)
 
1569
+++ b/src/libstdc++-v3/doc/html/manual/ext_numerics.html        (.../branches/gcc-4_8-branch)
 
1570
@@ -1,5 +1,5 @@
 
1571
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1572
-<!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. 
 
1573
+<!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. 
 
1574
   Extensions
 
1575
   
 
1576
 </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>,
 
1577
Index: libstdc++-v3/doc/html/manual/parallel_mode_semantics.html
 
1578
===================================================================
 
1579
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html     (.../tags/gcc_4_8_2_release)
 
1580
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html     (.../branches/gcc-4_8-branch)
 
1581
@@ -1,5 +1,5 @@
 
1582
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1583
-<!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,
 
1584
+<!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,
 
1585
 i.e. user-defined functors must not throw exceptions.
 
1586
 Also, the order of execution is not guaranteed for some functions, of course.
 
1587
 Therefore, user-defined functors should not have any concurrent side effects.
 
1588
Index: libstdc++-v3/doc/html/manual/std_contents.html
 
1589
===================================================================
 
1590
--- a/src/libstdc++-v3/doc/html/manual/std_contents.html        (.../tags/gcc_4_8_2_release)
 
1591
+++ b/src/libstdc++-v3/doc/html/manual/std_contents.html        (.../branches/gcc-4_8-branch)
 
1592
@@ -1,9 +1,9 @@
 
1593
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1594
-<!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. 
 
1595
+<!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. 
 
1596
     Standard Contents
 
1597
   </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. 
 
1598
     Standard Contents
 
1599
-  </h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="chapter"><a href="support.html">4. 
 
1600
+  </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. 
 
1601
   Support
 
1602
   
 
1603
 </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. 
 
1604
@@ -12,13 +12,13 @@
 
1605
 </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. 
 
1606
   Utilities
 
1607
   
 
1608
-</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. 
 
1609
+</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. 
 
1610
   Strings
 
1611
   
 
1612
 </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. 
 
1613
   Localization
 
1614
   
 
1615
-</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. 
 
1616
+</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. 
 
1617
   Containers
 
1618
   
 
1619
 </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. 
 
1620
Index: libstdc++-v3/doc/html/manual/appendix.html
 
1621
===================================================================
 
1622
--- a/src/libstdc++-v3/doc/html/manual/appendix.html    (.../tags/gcc_4_8_2_release)
 
1623
+++ b/src/libstdc++-v3/doc/html/manual/appendix.html    (.../branches/gcc-4_8-branch)
 
1624
@@ -1,9 +1,9 @@
 
1625
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1626
-<!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. 
 
1627
+<!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. 
 
1628
   Appendices
 
1629
 </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. 
 
1630
   Appendices
 
1631
-</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. 
 
1632
+</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. 
 
1633
   Contributing
 
1634
   
 
1635
 </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. 
 
1636
Index: libstdc++-v3/doc/html/manual/memory.html
 
1637
===================================================================
 
1638
--- a/src/libstdc++-v3/doc/html/manual/memory.html      (.../tags/gcc_4_8_2_release)
 
1639
+++ b/src/libstdc++-v3/doc/html/manual/memory.html      (.../branches/gcc-4_8-branch)
 
1640
@@ -1,5 +1,5 @@
 
1641
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1642
-<!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. 
 
1643
+<!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. 
 
1644
   Utilities
 
1645
   
 
1646
 </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>
 
1647
@@ -92,7 +92,7 @@
 
1648
     or loading and unloading shared objects in memory. As such, using
 
1649
     caching allocators on systems that do not support
 
1650
     <code class="function">abi::__cxa_atexit</code> is not recommended.
 
1651
-  </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>
 
1652
+  </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>
 
1653
      The only allocator interface that
 
1654
      is supported is the standard C++ interface. As such, all STL
 
1655
      containers have been adjusted, and all external allocators have
 
1656
@@ -105,7 +105,7 @@
 
1657
    </p><p>
 
1658
      The base class that <code class="classname">allocator</code> is derived from
 
1659
      may not be user-configurable.
 
1660
-</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>
 
1661
+</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>
 
1662
      It's difficult to pick an allocation strategy that will provide
 
1663
    maximum utility, without excessively penalizing some behavior. In
 
1664
    fact, it's difficult just deciding which typical actions to measure
 
1665
@@ -142,7 +142,7 @@
 
1666
      The current default choice for
 
1667
      <code class="classname">allocator</code> is
 
1668
      <code class="classname">__gnu_cxx::new_allocator</code>.
 
1669
-   </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>
 
1670
+   </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>
 
1671
       In use, <code class="classname">allocator</code> may allocate and
 
1672
       deallocate using implementation-specific strategies and
 
1673
       heuristics. Because of this, a given call to an allocator object's
 
1674
@@ -309,33 +309,33 @@
 
1675
         of the used and unused memory locations. It has its own
 
1676
         <a class="link" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator">chapter</a>
 
1677
          in the documentation.
 
1678
-       </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">
 
1679
+       </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">
 
1680
     ISO/IEC 14882:1998 Programming languages - C++
 
1681
     </em>. </span>
 
1682
       isoc++_1998
 
1683
-    <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="idp13994688"></a><p><span class="title"><em>
 
1684
-       <a class="link" href="http://www.drdobbs.com/cpp/184403759" target="_top">
 
1685
+    <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="idm270000082384"></a><p><span class="title"><em>
 
1686
+       <a class="link" href="http://www.drdobbs.com/the-standard-librarian-what-are-allocato/184403759" target="_top">
 
1687
       The Standard Librarian: What Are Allocators Good For?
 
1688
        </a>
 
1689
       </em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
 
1690
        C/C++ Users Journal
 
1691
-      . </span></span></p></div><div class="biblioentry"><a id="idp13998416"></a><p><span class="title"><em>
 
1692
+      . </span></span></p></div><div class="biblioentry"><a id="idm270000078608"></a><p><span class="title"><em>
 
1693
        <a class="link" href="http://www.hoard.org/" target="_top">
 
1694
       The Hoard Memory Allocator
 
1695
        </a>
 
1696
-      </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>
 
1697
+      </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>
 
1698
        <a class="link" href="http://people.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf" target="_top">
 
1699
       Reconsidering Custom Memory Allocation
 
1700
        </a>
 
1701
-      </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>
 
1702
+      </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>
 
1703
        <a class="link" href="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html" target="_top">
 
1704
       Allocator Types
 
1705
        </a>
 
1706
       </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">
 
1707
        C/C++ Users Journal
 
1708
-      . </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">
 
1709
+      . </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">
 
1710
        Addison Wesley
 
1711
-      . </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
 
1712
+      . </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
 
1713
    happen with misuse of the <code class="classname">auto_ptr</code> class
 
1714
    template (called <acronym class="acronym">AP</acronym> here) would take some
 
1715
    time. Suffice it to say that the use of <acronym class="acronym">AP</acronym>
 
1716
@@ -445,7 +445,7 @@
 
1717
 Derived classes override those functions to destroy resources in a context
 
1718
 where the correct dynamic type is known. This is an application of the
 
1719
 technique known as type erasure.
 
1720
-  </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>
 
1721
+  </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>
 
1722
 A <code class="classname">shared_ptr&lt;T&gt;</code> contains a pointer of
 
1723
 type <span class="type">T*</span> and an object of type
 
1724
 <code class="classname">__shared_count</code>. The shared_count contains a
 
1725
@@ -492,9 +492,9 @@
 
1726
 aliasing constructor, make_shared &amp; allocate_shared. Additionally,
 
1727
 the constructors taking <code class="classname">auto_ptr</code> parameters are
 
1728
 deprecated in C++11 mode.
 
1729
-    </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15534784"></a>Thread Safety</h5></div></div></div><p>
 
1730
+    </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999996832"></a>Thread Safety</h5></div></div></div><p>
 
1731
 The
 
1732
-<a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
 
1733
+<a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
 
1734
 Safety</a> section of the Boost shared_ptr documentation says "shared_ptr
 
1735
 objects offer the same level of thread safety as built-in types."
 
1736
 The implementation must ensure that concurrent updates to separate shared_ptr
 
1737
@@ -537,7 +537,7 @@
 
1738
 shared_ptr in libstdc++ the compiler and library are fixed, which
 
1739
 makes things much simpler: we have an atomic CAS or we don't, see Lock
 
1740
 Policy below for details.
 
1741
-</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>
 
1742
+</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>
 
1743
     </p><p>
 
1744
 There is a single <code class="classname">_Sp_counted_base</code> class,
 
1745
 which is a template parameterized on the enum
 
1746
@@ -578,7 +578,7 @@
 
1747
        <code class="filename">ext/atomicity.h</code>, which detect if the program
 
1748
        is multi-threaded.  If only one thread of execution exists in
 
1749
        the program then less expensive non-atomic operations are used.
 
1750
-     </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>,
 
1751
+     </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>,
 
1752
 <code class="code">const_pointer_cast</code></span></dt><dd><p>
 
1753
 As noted in N2351, these functions can be implemented non-intrusively using
 
1754
 the alias constructor.  However the aliasing constructor is only available
 
1755
@@ -611,13 +611,13 @@
 
1756
 As well as the extra constructors, this implementation also needs some
 
1757
 members of _Sp_counted_deleter to be protected where they could otherwise
 
1758
 be private.
 
1759
-    </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>
 
1760
+    </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>
 
1761
       Examples of use can be found in the testsuite, under
 
1762
       <code class="filename">testsuite/tr1/2_general_utilities/shared_ptr</code>,
 
1763
       <code class="filename">testsuite/20_util/shared_ptr</code>
 
1764
       and
 
1765
       <code class="filename">testsuite/20_util/weak_ptr</code>.
 
1766
-    </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15576640"></a>Unresolved Issues</h5></div></div></div><p>
 
1767
+    </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999954912"></a>Unresolved Issues</h5></div></div></div><p>
 
1768
       The <span class="emphasis"><em><code class="classname">shared_ptr</code> atomic access</em></span>
 
1769
       clause in the C++11 standard is not implemented in GCC.
 
1770
     </p><p>
 
1771
@@ -658,25 +658,25 @@
 
1772
     code to work with, Peter Dimov in particular for his help and
 
1773
     invaluable advice on thread safety.  Phillip Jordan and Paolo
 
1774
     Carlini for the lock policy implementation.
 
1775
-  </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>
 
1776
+  </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>
 
1777
        <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm" target="_top">
 
1778
       Improving shared_ptr for C++0x, Revision 2
 
1779
        </a>
 
1780
       </em>. </span><span class="subtitle">
 
1781
       N2351
 
1782
-    . </span></p></div><div class="biblioentry"><a id="idp15590224"></a><p><span class="title"><em>
 
1783
+    . </span></p></div><div class="biblioentry"><a id="idm269999941392"></a><p><span class="title"><em>
 
1784
        <a class="link" href="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html" target="_top">
 
1785
       C++ Standard Library Active Issues List
 
1786
        </a>
 
1787
       </em>. </span><span class="subtitle">
 
1788
       N2456
 
1789
-    . </span></p></div><div class="biblioentry"><a id="idp15592512"></a><p><span class="title"><em>
 
1790
+    . </span></p></div><div class="biblioentry"><a id="idm269999939104"></a><p><span class="title"><em>
 
1791
        <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf" target="_top">
 
1792
       Working Draft, Standard for Programming Language C++
 
1793
        </a>
 
1794
       </em>. </span><span class="subtitle">
 
1795
       N2461
 
1796
-    . </span></p></div><div class="biblioentry"><a id="idp15594816"></a><p><span class="title"><em>
 
1797
+    . </span></p></div><div class="biblioentry"><a id="idm269999936800"></a><p><span class="title"><em>
 
1798
        <a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">
 
1799
       Boost C++ Libraries documentation, shared_ptr
 
1800
        </a>
 
1801
Index: libstdc++-v3/doc/html/manual/api.html
 
1802
===================================================================
 
1803
--- a/src/libstdc++-v3/doc/html/manual/api.html (.../tags/gcc_4_8_2_release)
 
1804
+++ b/src/libstdc++-v3/doc/html/manual/api.html (.../branches/gcc-4_8-branch)
 
1805
@@ -1,5 +1,5 @@
 
1806
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1807
-<!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. 
 
1808
+<!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. 
 
1809
   Porting and Maintenance
 
1810
   
 
1811
 </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>
 
1812
@@ -77,11 +77,11 @@
 
1813
    <span class="type">__alloc</span> to select an underlying allocator that
 
1814
    satisfied memory allocation requests. The selection of this
 
1815
    underlying allocator was not user-configurable.
 
1816
-   </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
 
1817
+   </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
 
1818
    of available allocators. All of these new allocators are
 
1819
    standard-style. The following table includes details, along with
 
1820
    the first released version of GCC that included the extension allocator.
 
1821
-   </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>
 
1822
+   </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>
 
1823
 Debug mode first appears.
 
1824
 </p><p>
 
1825
 Precompiled header support <acronym class="acronym">PCH</acronym> support.
 
1826
Index: libstdc++-v3/doc/html/manual/source_organization.html
 
1827
===================================================================
 
1828
--- a/src/libstdc++-v3/doc/html/manual/source_organization.html (.../tags/gcc_4_8_2_release)
 
1829
+++ b/src/libstdc++-v3/doc/html/manual/source_organization.html (.../branches/gcc-4_8-branch)
 
1830
@@ -1,5 +1,5 @@
 
1831
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1832
-<!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. 
 
1833
+<!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. 
 
1834
   Contributing
 
1835
   
 
1836
 </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>
 
1837
Index: libstdc++-v3/doc/html/manual/fstreams.html
 
1838
===================================================================
 
1839
--- a/src/libstdc++-v3/doc/html/manual/fstreams.html    (.../tags/gcc_4_8_2_release)
 
1840
+++ b/src/libstdc++-v3/doc/html/manual/fstreams.html    (.../branches/gcc-4_8-branch)
 
1841
@@ -1,5 +1,5 @@
 
1842
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1843
-<!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. 
 
1844
+<!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. 
 
1845
   Input and Output
 
1846
   
 
1847
 </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>
 
1848
Index: libstdc++-v3/doc/html/manual/ext_demangling.html
 
1849
===================================================================
 
1850
--- a/src/libstdc++-v3/doc/html/manual/ext_demangling.html      (.../tags/gcc_4_8_2_release)
 
1851
+++ b/src/libstdc++-v3/doc/html/manual/ext_demangling.html      (.../branches/gcc-4_8-branch)
 
1852
@@ -1,5 +1,5 @@
 
1853
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1854
-<!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. 
 
1855
+<!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. 
 
1856
   Extensions
 
1857
   
 
1858
 </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>
 
1859
Index: libstdc++-v3/doc/html/manual/ext_preface.html
 
1860
===================================================================
 
1861
--- a/src/libstdc++-v3/doc/html/manual/ext_preface.html (.../tags/gcc_4_8_2_release)
 
1862
+++ b/src/libstdc++-v3/doc/html/manual/ext_preface.html (.../branches/gcc-4_8-branch)
 
1863
@@ -1,8 +1,8 @@
 
1864
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1865
-<!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. 
 
1866
+<!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. 
 
1867
   Extensions
 
1868
   
 
1869
-</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>
 
1870
+</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>
 
1871
   Here we will make an attempt at describing the non-Standard
 
1872
   extensions to the library.  Some of these are from older versions of
 
1873
   standard library components, namely SGI's STL, and some of these are
 
1874
Index: libstdc++-v3/doc/html/manual/concept_checking.html
 
1875
===================================================================
 
1876
--- a/src/libstdc++-v3/doc/html/manual/concept_checking.html    (.../tags/gcc_4_8_2_release)
 
1877
+++ b/src/libstdc++-v3/doc/html/manual/concept_checking.html    (.../branches/gcc-4_8-branch)
 
1878
@@ -1,5 +1,5 @@
 
1879
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
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>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. 
 
1881
+<!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. 
 
1882
   Diagnostics
 
1883
   
 
1884
 </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>
 
1885
Index: libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html
 
1886
===================================================================
 
1887
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html       (.../tags/gcc_4_8_2_release)
 
1888
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html       (.../branches/gcc-4_8-branch)
 
1889
@@ -1,5 +1,5 @@
 
1890
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
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>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>
 
1892
+<!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>
 
1893
 In the ST example we never used the thread_id variable present in each block.
 
1894
 Let's start by explaining the purpose of this in a MT application.
 
1895
 </p><p>
 
1896
Index: libstdc++-v3/doc/html/manual/ext_compile_checks.html
 
1897
===================================================================
 
1898
--- a/src/libstdc++-v3/doc/html/manual/ext_compile_checks.html  (.../tags/gcc_4_8_2_release)
 
1899
+++ b/src/libstdc++-v3/doc/html/manual/ext_compile_checks.html  (.../branches/gcc-4_8-branch)
 
1900
@@ -1,5 +1,5 @@
 
1901
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1902
-<!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. 
 
1903
+<!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. 
 
1904
   Extensions
 
1905
   
 
1906
 </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>
 
1907
Index: libstdc++-v3/doc/html/manual/strings.html
 
1908
===================================================================
 
1909
--- a/src/libstdc++-v3/doc/html/manual/strings.html     (.../tags/gcc_4_8_2_release)
 
1910
+++ b/src/libstdc++-v3/doc/html/manual/strings.html     (.../branches/gcc-4_8-branch)
 
1911
@@ -1,5 +1,5 @@
 
1912
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1913
-<!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. 
 
1914
+<!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. 
 
1915
   Strings
 
1916
   
 
1917
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="traits.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
1918
@@ -6,8 +6,8 @@
 
1919
     Standard Contents
 
1920
   </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. 
 
1921
   Strings
 
1922
-  <a id="idp15603440" class="indexterm"></a>
 
1923
-</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>
 
1924
+  <a id="idm269999928112" class="indexterm"></a>
 
1925
+</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>
 
1926
       Here are Standard, simple, and portable ways to perform common
 
1927
       transformations on a <code class="code">string</code> instance, such as
 
1928
       "convert to all upper case." The word transformations
 
1929
Index: libstdc++-v3/doc/html/manual/containers_and_c.html
 
1930
===================================================================
 
1931
--- a/src/libstdc++-v3/doc/html/manual/containers_and_c.html    (.../tags/gcc_4_8_2_release)
 
1932
+++ b/src/libstdc++-v3/doc/html/manual/containers_and_c.html    (.../branches/gcc-4_8-branch)
 
1933
@@ -1,5 +1,5 @@
 
1934
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1935
-<!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. 
 
1936
+<!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. 
 
1937
   Containers
 
1938
   
 
1939
 </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>
 
1940
Index: libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html
 
1941
===================================================================
 
1942
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html    (.../tags/gcc_4_8_2_release)
 
1943
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html    (.../branches/gcc-4_8-branch)
 
1944
@@ -1,5 +1,5 @@
 
1945
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1946
-<!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>
 
1947
+<!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>
 
1948
   The table below presents all the diagnostics we intend to implement.
 
1949
   Each diagnostic has a corresponding compile time switch
 
1950
   <code class="code">-D_GLIBCXX_PROFILE_&lt;diagnostic&gt;</code>.
 
1951
@@ -17,7 +17,7 @@
 
1952
   A high accuracy means that the diagnostic is unlikely to be wrong.
 
1953
   These grades are not perfect.  They are just meant to guide users with
 
1954
   specific needs or time budgets.
 
1955
-  </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">
 
1956
+  </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">
 
1957
     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">
 
1958
     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">
 
1959
     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">
 
1960
@@ -374,7 +374,7 @@
 
1961
   Quick Sort for a particular call context.
 
1962
   </p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
 
1963
   See papers:
 
1964
-  <a class="link" href="http://portal.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
 
1965
+  <a class="link" href="https://dl.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
 
1966
   A framework for adaptive algorithm selection in STAPL</a> and
 
1967
   <a class="link" href="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4228227" target="_top">
 
1968
   Optimizing Sorting with Machine Learning Algorithms</a>.
 
1969
@@ -500,7 +500,7 @@
 
1970
   Keep a shadow for each container.  Record iterator dereferences and
 
1971
   container member accesses.  Issue advice for elements referenced by
 
1972
   multiple threads.
 
1973
-  See paper: <a class="link" href="http://portal.acm.org/citation.cfm?id=207110.207148" target="_top">
 
1974
+  See paper: <a class="link" href="https://dl.acm.org/citation.cfm?id=207110.207148" target="_top">
 
1975
   The LRPD test: speculative run-time parallelization of loops with
 
1976
   privatization and reduction parallelization</a>.
 
1977
   </p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
 
1978
Index: libstdc++-v3/doc/html/manual/ext_concurrency_impl.html
 
1979
===================================================================
 
1980
--- a/src/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html        (.../tags/gcc_4_8_2_release)
 
1981
+++ b/src/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html        (.../branches/gcc-4_8-branch)
 
1982
@@ -1,5 +1,5 @@
 
1983
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1984
-<!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
 
1985
+<!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
 
1986
 implemented via compiler intrinsics (if the underlying host is
 
1987
 capable) or by library fallbacks.</p><p>Compiler intrinsics (builtins) are always preferred.  However, as
 
1988
 the compiler builtins for atomics are not universally implemented,
 
1989
Index: libstdc++-v3/doc/html/manual/io_and_c.html
 
1990
===================================================================
 
1991
--- a/src/libstdc++-v3/doc/html/manual/io_and_c.html    (.../tags/gcc_4_8_2_release)
 
1992
+++ b/src/libstdc++-v3/doc/html/manual/io_and_c.html    (.../branches/gcc-4_8-branch)
 
1993
@@ -1,5 +1,5 @@
 
1994
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1995
-<!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. 
 
1996
+<!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. 
 
1997
   Input and Output
 
1998
   
 
1999
 </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>
 
2000
Index: libstdc++-v3/doc/html/manual/documentation_hacking.html
 
2001
===================================================================
 
2002
--- a/src/libstdc++-v3/doc/html/manual/documentation_hacking.html       (.../tags/gcc_4_8_2_release)
 
2003
+++ b/src/libstdc++-v3/doc/html/manual/documentation_hacking.html       (.../branches/gcc-4_8-branch)
 
2004
@@ -1,5 +1,5 @@
 
2005
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
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>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. 
 
2007
+<!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. 
 
2008
   Porting and Maintenance
 
2009
   
 
2010
 </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>
 
2011
@@ -112,7 +112,7 @@
 
2012
       supported, and are always aliased to dummy rules. These
 
2013
       unsupported formats are: <span class="emphasis"><em>info</em></span>,
 
2014
       <span class="emphasis"><em>ps</em></span>, and <span class="emphasis"><em>dvi</em></span>.
 
2015
-    </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>
 
2016
+    </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>
 
2017
        Prerequisite tools are Bash 2.0 or later,
 
2018
        <a class="link" href="http://www.doxygen.org/" target="_top">Doxygen</a>, and
 
2019
        the <a class="link" href="http://www.gnu.org/software/coreutils/" target="_top">GNU
 
2020
@@ -232,9 +232,8 @@
 
2021
        member functions.
 
2022
       </p><p>
 
2023
        Some commentary to accompany
 
2024
-       the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/docblocks.html" target="_top">Special
 
2025
-       Documentation Blocks</a> section of
 
2026
-       the Doxygen manual:
 
2027
+       the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html" target="_top">Special
 
2028
+       Documentation Blocks</a> section of the Doxygen manual:
 
2029
       </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>
 
2030
            ...not the Qt style. The intermediate *'s are preferred.
 
2031
          </p></li><li class="listitem"><p>
 
2032
@@ -310,7 +309,7 @@
 
2033
        writing Doxygen comments. Single and double quotes, and
 
2034
        separators in filenames are two common trouble spots. When in
 
2035
        doubt, consult the following table.
 
2036
-      </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>
 
2037
+      </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>
 
2038
        Editing the DocBook sources requires an XML editor. Many
 
2039
        exist: some notable options
 
2040
        include <span class="command"><strong>emacs</strong></span>, <span class="application">Kate</span>,
 
2041
@@ -520,11 +519,11 @@
 
2042
        <a class="link" href="http://www.docbook.org/tdg/en/html/part2.html" target="_top">online</a>.
 
2043
        An incomplete reference for HTML to Docbook conversion is
 
2044
        detailed in the table below.
 
2045
-      </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;,
 
2046
+      </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;,
 
2047
        &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>
 
2048
   And examples of detailed markup for which there are no real HTML
 
2049
   equivalents are listed in the table below.
 
2050
-</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">
 
2051
+</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">
 
2052
        <p>&lt;function&gt;clear()&lt;/function&gt;</p>
 
2053
        <p>&lt;function&gt;fs.clear()&lt;/function&gt;</p>
 
2054
       </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">
 
2055
Index: libstdc++-v3/doc/html/manual/extensions.html
 
2056
===================================================================
 
2057
--- a/src/libstdc++-v3/doc/html/manual/extensions.html  (.../tags/gcc_4_8_2_release)
 
2058
+++ b/src/libstdc++-v3/doc/html/manual/extensions.html  (.../branches/gcc-4_8-branch)
 
2059
@@ -1,11 +1,11 @@
 
2060
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2061
-<!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. 
 
2062
+<!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. 
 
2063
   Extensions
 
2064
   
 
2065
 </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. 
 
2066
   Extensions
 
2067
-  <a id="idp16423680" class="indexterm"></a>
 
2068
-</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
 
2069
+  <a id="idm269999107536" class="indexterm"></a>
 
2070
+</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
 
2071
     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">
 
2072
            Configuring via Template Parameters
 
2073
          </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
 
2074
Index: libstdc++-v3/doc/html/manual/debug_mode_using.html
 
2075
===================================================================
 
2076
--- a/src/libstdc++-v3/doc/html/manual/debug_mode_using.html    (.../tags/gcc_4_8_2_release)
 
2077
+++ b/src/libstdc++-v3/doc/html/manual/debug_mode_using.html    (.../branches/gcc-4_8-branch)
 
2078
@@ -1,5 +1,5 @@
 
2079
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2080
-<!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>
 
2081
+<!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>
 
2082
   </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
 
2083
   compiler flag <code class="code">-D_GLIBCXX_DEBUG</code>. Note that this flag
 
2084
   changes the sizes and behavior of standard class templates such
 
2085
@@ -18,6 +18,6 @@
 
2086
   mode or with debug mode. The
 
2087
   following table provides the names and headers of the debugging
 
2088
   containers:
 
2089
-</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
 
2090
+</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
 
2091
 containers have additional debug capability.
 
2092
-</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>
 
2093
\ No newline at end of file
 
2094
+</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>
 
2095
\ No newline at end of file
 
2096
Index: libstdc++-v3/doc/html/manual/parallel_mode.html
 
2097
===================================================================
 
2098
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode.html       (.../tags/gcc_4_8_2_release)
 
2099
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode.html       (.../branches/gcc-4_8-branch)
 
2100
@@ -1,8 +1,8 @@
 
2101
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
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>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. 
 
2103
+<!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. 
 
2104
   Extensions
 
2105
   
 
2106
-</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
 
2107
+</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
 
2108
 implementation of many algorithms the C++ Standard Library.
 
2109
 </p><p>
 
2110
 Several of the standard algorithms, for instance
 
2111
@@ -12,11 +12,11 @@
 
2112
 specific compiler flag.
 
2113
 </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
 
2114
 <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
 
2115
-<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">
 
2116
+<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">
 
2117
       Parallelization of Bulk Operations for STL Dictionaries
 
2118
     </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">
 
2119
        Workshop on Highly Parallel Processing on a Chip (HPPC) 2007. (LNCS)
 
2120
-      . </span></span></p></div><div class="biblioentry"><a id="idp16931936"></a><p><span class="citetitle"><em class="citetitle">
 
2121
+      . </span></span></p></div><div class="biblioentry"><a id="idm269998599392"></a><p><span class="citetitle"><em class="citetitle">
 
2122
       The Multi-Core Standard Template Library
 
2123
     </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">
 
2124
         Euro-Par 2007: Parallel Processing. (LNCS 4641)
 
2125
Index: libstdc++-v3/doc/html/manual/debug_mode_semantics.html
 
2126
===================================================================
 
2127
--- a/src/libstdc++-v3/doc/html/manual/debug_mode_semantics.html        (.../tags/gcc_4_8_2_release)
 
2128
+++ b/src/libstdc++-v3/doc/html/manual/debug_mode_semantics.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>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>
 
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>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>
 
2133
   </p><p>A program that uses the C++ standard library correctly
 
2134
   will maintain the same semantics under debug mode as it had with
 
2135
   the normal (release) library. All functional and exception-handling
 
2136
Index: libstdc++-v3/doc/html/manual/setup.html
 
2137
===================================================================
 
2138
--- a/src/libstdc++-v3/doc/html/manual/setup.html       (.../tags/gcc_4_8_2_release)
 
2139
+++ b/src/libstdc++-v3/doc/html/manual/setup.html       (.../branches/gcc-4_8-branch)
 
2140
@@ -1,8 +1,8 @@
 
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>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. 
 
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>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. 
 
2144
   Introduction
 
2145
   
 
2146
-</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
 
2147
+</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
 
2148
    and properly built binaries useful for linking to other software is
 
2149
    a multi-step process. Steps include getting the sources,
 
2150
    configuring and building the sources, testing, and installation.
 
2151
Index: libstdc++-v3/doc/html/manual/backwards.html
 
2152
===================================================================
 
2153
--- a/src/libstdc++-v3/doc/html/manual/backwards.html   (.../tags/gcc_4_8_2_release)
 
2154
+++ b/src/libstdc++-v3/doc/html/manual/backwards.html   (.../branches/gcc-4_8-branch)
 
2155
@@ -1,5 +1,5 @@
 
2156
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2157
-<!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. 
 
2158
+<!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. 
 
2159
   Porting and Maintenance
 
2160
   
 
2161
 </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
 
2162
@@ -940,15 +940,15 @@
 
2163
   This is a change in behavior from older versions. Now, most
 
2164
   <span class="type">iterator_type</span> typedefs in container classes are POD
 
2165
   objects, not <span class="type">value_type</span> pointers.
 
2166
-</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>
 
2167
+</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>
 
2168
        <a class="link" href="http://www.kegel.com/gcc/gcc4.html" target="_top">
 
2169
       Migrating to GCC 4.1
 
2170
        </a>
 
2171
-      </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>
 
2172
+      </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>
 
2173
        <a class="link" href="http://lists.debian.org/debian-gcc/2006/03/msg00405.html" target="_top">
 
2174
       Building the Whole Debian Archive with GCC 4.1: A Summary
 
2175
        </a>
 
2176
-      </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>
 
2177
+      </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>
 
2178
        <a class="link" href="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html" target="_top">
 
2179
       Migration guide for GCC-3.2
 
2180
        </a>
 
2181
Index: libstdc++-v3/doc/html/manual/source_design_notes.html
 
2182
===================================================================
 
2183
--- a/src/libstdc++-v3/doc/html/manual/source_design_notes.html (.../tags/gcc_4_8_2_release)
 
2184
+++ b/src/libstdc++-v3/doc/html/manual/source_design_notes.html (.../branches/gcc-4_8-branch)
 
2185
@@ -1,5 +1,5 @@
 
2186
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2187
-<!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. 
 
2188
+<!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. 
 
2189
   Contributing
 
2190
   
 
2191
 </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>
 
2192
Index: libstdc++-v3/doc/html/manual/ext_sgi.html
 
2193
===================================================================
 
2194
--- a/src/libstdc++-v3/doc/html/manual/ext_sgi.html     (.../tags/gcc_4_8_2_release)
 
2195
+++ b/src/libstdc++-v3/doc/html/manual/ext_sgi.html     (.../branches/gcc-4_8-branch)
 
2196
@@ -1,5 +1,5 @@
 
2197
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2198
-<!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>
 
2199
+<!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>
 
2200
      The SGI hashing classes <code class="classname">hash_set</code> and
 
2201
      <code class="classname">hash_set</code> have been deprecated by the
 
2202
      unordered_set, unordered_multiset, unordered_map,
 
2203
Index: libstdc++-v3/doc/html/manual/facets.html
 
2204
===================================================================
 
2205
--- a/src/libstdc++-v3/doc/html/manual/facets.html      (.../tags/gcc_4_8_2_release)
 
2206
+++ b/src/libstdc++-v3/doc/html/manual/facets.html      (.../branches/gcc-4_8-branch)
 
2207
@@ -1,8 +1,8 @@
 
2208
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2209
-<!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. 
 
2210
+<!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. 
 
2211
   Localization
 
2212
   
 
2213
-</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>
 
2214
+</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>
 
2215
 For the required specialization codecvt&lt;wchar_t, char, mbstate_t&gt; ,
 
2216
 conversions are made between the internal character set (always UCS4
 
2217
 on GNU/Linux) and whatever the currently selected locale for the
 
2218
@@ -49,24 +49,24 @@
 
2219
    </p></li><li class="listitem"><p>
 
2220
        Rename abstract base class. See if just smash-overriding is a
 
2221
        better approach. Clarify, add sanity to naming.
 
2222
-     </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">
 
2223
+     </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">
 
2224
       The GNU C Library
 
2225
-    </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">
 
2226
+    </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">
 
2227
       Correspondence
 
2228
-    </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">
 
2229
+    </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">
 
2230
       ISO/IEC 14882:1998 Programming languages - C++
 
2231
-    </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">
 
2232
+    </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">
 
2233
       ISO/IEC 9899:1999 Programming languages - C
 
2234
-    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp15805792"></a><p><span class="title"><em>
 
2235
+    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999725632"></a><p><span class="title"><em>
 
2236
        <a class="link" href="http://www.unix.org/version3/ieee_std.html" target="_top">
 
2237
        The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
 
2238
        </a>
 
2239
       </em>. </span><span class="copyright">Copyright © 1999 
 
2240
-      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">
 
2241
+      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">
 
2242
       The C++ Programming Language, Special Edition
 
2243
     </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">
 
2244
        Addison Wesley
 
2245
-      . </span></span></p></div><div class="biblioentry"><a id="idp15813664"></a><p><span class="citetitle"><em class="citetitle">
 
2246
+      . </span></span></p></div><div class="biblioentry"><a id="idm269999717760"></a><p><span class="citetitle"><em class="citetitle">
 
2247
       Standard C++ IOStreams and Locales
 
2248
     </em>. </span><span class="subtitle">
 
2249
       Advanced Programmer's Guide and Reference
 
2250
@@ -409,17 +409,17 @@
 
2251
       </p></li><li class="listitem"><p>
 
2252
       wchar_t/char internal buffers and conversions between
 
2253
       internal/external buffers?
 
2254
-      </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">
 
2255
+      </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">
 
2256
       The GNU C Library
 
2257
     </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">
 
2258
       Chapters 6 Character Set Handling and 7 Locales and Internationalization
 
2259
-    . </span></p></div><div class="biblioentry"><a id="idp15895888"></a><p><span class="citetitle"><em class="citetitle">
 
2260
+    . </span></p></div><div class="biblioentry"><a id="idm269999635328"></a><p><span class="citetitle"><em class="citetitle">
 
2261
       Correspondence
 
2262
-    </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">
 
2263
+    </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">
 
2264
       ISO/IEC 14882:1998 Programming languages - C++
 
2265
-    </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">
 
2266
+    </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">
 
2267
       ISO/IEC 9899:1999 Programming languages - C
 
2268
-    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp15903536"></a><p><span class="title"><em>
 
2269
+    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999627680"></a><p><span class="title"><em>
 
2270
        <a class="link" href="http://www.opengroup.org/austin/" target="_top">
 
2271
       System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
 
2272
        </a>
 
2273
@@ -426,25 +426,25 @@
 
2274
       </em>. </span><span class="copyright">Copyright © 2008 
 
2275
        The Open Group/The Institute of Electrical and Electronics
 
2276
        Engineers, Inc.
 
2277
-      . </span></p></div><div class="biblioentry"><a id="idp15906768"></a><p><span class="citetitle"><em class="citetitle">
 
2278
+      . </span></p></div><div class="biblioentry"><a id="idm269999624448"></a><p><span class="citetitle"><em class="citetitle">
 
2279
       The C++ Programming Language, Special Edition
 
2280
     </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">
 
2281
        Addison Wesley
 
2282
-      . </span></span></p></div><div class="biblioentry"><a id="idp15911392"></a><p><span class="citetitle"><em class="citetitle">
 
2283
+      . </span></span></p></div><div class="biblioentry"><a id="idm269999619824"></a><p><span class="citetitle"><em class="citetitle">
 
2284
       Standard C++ IOStreams and Locales
 
2285
     </em>. </span><span class="subtitle">
 
2286
       Advanced Programmer's Guide and Reference
 
2287
     . </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">
 
2288
        Addison Wesley Longman
 
2289
-      . </span></span></p></div><div class="biblioentry"><a id="idp15917056"></a><p><span class="title"><em>
 
2290
+      . </span></span></p></div><div class="biblioentry"><a id="idm269999614160"></a><p><span class="title"><em>
 
2291
        <a class="link" href="http://www.lysator.liu.se/c/na1.html" target="_top">
 
2292
       A brief description of Normative Addendum 1
 
2293
        </a>
 
2294
-      </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>
 
2295
+      </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>
 
2296
        <a class="link" href="http://tldp.org/HOWTO/Unicode-HOWTO.html" target="_top">
 
2297
          The Unicode HOWTO
 
2298
        </a>
 
2299
-      </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>
 
2300
+      </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>
 
2301
        <a class="link" href="http://www.cl.cam.ac.uk/~mgk25/unicode.html" target="_top">
 
2302
       UTF-8 and Unicode FAQ for Unix/Linux
 
2303
        </a>
 
2304
@@ -690,16 +690,16 @@
 
2305
    model. As of this writing, it is unknown how to query to see
 
2306
    if a specified message catalog exists using the gettext
 
2307
    package.
 
2308
-   </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">
 
2309
+   </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">
 
2310
       The GNU C Library
 
2311
     </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
 
2312
-    . </span></p></div><div class="biblioentry"><a id="idp16008384"></a><p><span class="citetitle"><em class="citetitle">
 
2313
+    . </span></p></div><div class="biblioentry"><a id="idm269999522832"></a><p><span class="citetitle"><em class="citetitle">
 
2314
       Correspondence
 
2315
-    </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">
 
2316
+    </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">
 
2317
       ISO/IEC 14882:1998 Programming languages - C++
 
2318
-    </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">
 
2319
+    </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">
 
2320
       ISO/IEC 9899:1999 Programming languages - C
 
2321
-    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp16016032"></a><p><span class="title"><em>
 
2322
+    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999515184"></a><p><span class="title"><em>
 
2323
        <a class="link" href="http://www.opengroup.org/austin/" target="_top">
 
2324
       System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
 
2325
        </a>
 
2326
@@ -706,23 +706,23 @@
 
2327
       </em>. </span><span class="copyright">Copyright © 2008 
 
2328
        The Open Group/The Institute of Electrical and Electronics
 
2329
        Engineers, Inc.
 
2330
-      . </span></p></div><div class="biblioentry"><a id="idp16019264"></a><p><span class="citetitle"><em class="citetitle">
 
2331
+      . </span></p></div><div class="biblioentry"><a id="idm269999511952"></a><p><span class="citetitle"><em class="citetitle">
 
2332
       The C++ Programming Language, Special Edition
 
2333
     </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">
 
2334
        Addison Wesley
 
2335
-      . </span></span></p></div><div class="biblioentry"><a id="idp16023888"></a><p><span class="citetitle"><em class="citetitle">
 
2336
+      . </span></span></p></div><div class="biblioentry"><a id="idm269999507328"></a><p><span class="citetitle"><em class="citetitle">
 
2337
       Standard C++ IOStreams and Locales
 
2338
     </em>. </span><span class="subtitle">
 
2339
       Advanced Programmer's Guide and Reference
 
2340
     . </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">
 
2341
        Addison Wesley Longman
 
2342
-      . </span></span></p></div><div class="biblioentry"><a id="idp16029552"></a><p><span class="title"><em>
 
2343
-       <a class="link" href="http://java.sun.com/reference/api/index.html" target="_top">
 
2344
+      . </span></span></p></div><div class="biblioentry"><a id="idm269999501664"></a><p><span class="title"><em>
 
2345
+       <a class="link" href="http://www.oracle.com/technetwork/java/api/index.html" target="_top">
 
2346
        API Specifications, Java Platform
 
2347
        </a>
 
2348
       </em>. </span><span class="pagenums">java.util.Properties, java.text.MessageFormat,
 
2349
 java.util.Locale, java.util.ResourceBundle
 
2350
-    . </span></p></div><div class="biblioentry"><a id="idp16031888"></a><p><span class="title"><em>
 
2351
+    . </span></p></div><div class="biblioentry"><a id="idm269999499328"></a><p><span class="title"><em>
 
2352
        <a class="link" href="https://www.gnu.org/software/gettext/" target="_top">
 
2353
       GNU gettext tools, version 0.10.38, Native Language Support
 
2354
       Library and Tools.
 
2355
Index: libstdc++-v3/doc/html/manual/diagnostics.html
 
2356
===================================================================
 
2357
--- a/src/libstdc++-v3/doc/html/manual/diagnostics.html (.../tags/gcc_4_8_2_release)
 
2358
+++ b/src/libstdc++-v3/doc/html/manual/diagnostics.html (.../branches/gcc-4_8-branch)
 
2359
@@ -1,5 +1,5 @@
 
2360
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2361
-<!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. 
 
2362
+<!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. 
 
2363
   Diagnostics
 
2364
   
 
2365
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
2366
@@ -6,8 +6,8 @@
 
2367
     Standard Contents
 
2368
   </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. 
 
2369
   Diagnostics
 
2370
-  <a id="idp13835248" class="indexterm"></a>
 
2371
-</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>
 
2372
+  <a id="idm270001697504" class="indexterm"></a>
 
2373
+</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>
 
2374
       All exception objects are defined in one of the standard header
 
2375
       files: <code class="filename">exception</code>,
 
2376
       <code class="filename">stdexcept</code>, <code class="filename">new</code>, and
 
2377
Index: libstdc++-v3/doc/html/manual/mt_allocator_design.html
 
2378
===================================================================
 
2379
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator_design.html (.../tags/gcc_4_8_2_release)
 
2380
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator_design.html (.../branches/gcc-4_8-branch)
 
2381
@@ -1,5 +1,5 @@
 
2382
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2383
-<!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
 
2384
+<!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
 
2385
 describing the characteristics of the memory pool, a policy class
 
2386
 containing this pool that links instantiation types to common or
 
2387
 individual pools, and a class inheriting from the policy class that is
 
2388
Index: libstdc++-v3/doc/html/manual/appendix_free.html
 
2389
===================================================================
 
2390
--- a/src/libstdc++-v3/doc/html/manual/appendix_free.html       (.../tags/gcc_4_8_2_release)
 
2391
+++ b/src/libstdc++-v3/doc/html/manual/appendix_free.html       (.../branches/gcc-4_8-branch)
 
2392
@@ -1,5 +1,5 @@
 
2393
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2394
-<!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. 
 
2395
+<!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. 
 
2396
   Free Software Needs Free Documentation
 
2397
   
 
2398
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><th width="60%" align="center">Part IV. 
 
2399
@@ -6,7 +6,7 @@
 
2400
   Appendices
 
2401
 </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>
 
2402
   Free Software Needs Free Documentation
 
2403
-  <a id="idp23426192" class="indexterm"></a>
 
2404
+  <a id="idm269992106560" class="indexterm"></a>
 
2405
 </h1></div></div></div><p>
 
2406
 The biggest deficiency in free operating systems is not in the
 
2407
 software--it is the lack of good free manuals that we can include in
 
2408
Index: libstdc++-v3/doc/html/manual/algorithms.html
 
2409
===================================================================
 
2410
--- a/src/libstdc++-v3/doc/html/manual/algorithms.html  (.../tags/gcc_4_8_2_release)
 
2411
+++ b/src/libstdc++-v3/doc/html/manual/algorithms.html  (.../branches/gcc-4_8-branch)
 
2412
@@ -1,5 +1,5 @@
 
2413
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2414
-<!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. 
 
2415
+<!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. 
 
2416
   Algorithms
 
2417
   
 
2418
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
2419
@@ -6,8 +6,8 @@
 
2420
     Standard Contents
 
2421
   </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. 
 
2422
   Algorithms
 
2423
-  <a id="idp16191968" class="indexterm"></a>
 
2424
-</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>
 
2425
+  <a id="idm269999339120" class="indexterm"></a>
 
2426
+</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>
 
2427
   The neatest accomplishment of the algorithms section is that all the
 
2428
   work is done via iterators, not containers directly.  This means two
 
2429
   important things:
 
2430
Index: libstdc++-v3/doc/html/manual/appendix_porting.html
 
2431
===================================================================
 
2432
--- a/src/libstdc++-v3/doc/html/manual/appendix_porting.html    (.../tags/gcc_4_8_2_release)
 
2433
+++ b/src/libstdc++-v3/doc/html/manual/appendix_porting.html    (.../branches/gcc-4_8-branch)
 
2434
@@ -1,5 +1,5 @@
 
2435
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2436
-<!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. 
 
2437
+<!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. 
 
2438
   Porting and Maintenance
 
2439
   
 
2440
 </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. 
 
2441
@@ -6,8 +6,8 @@
 
2442
   Appendices
 
2443
 </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>
 
2444
   Porting and Maintenance
 
2445
-  <a id="idp22008864" class="indexterm"></a>
 
2446
-</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">
 
2447
+  <a id="idm269993523968" class="indexterm"></a>
 
2448
+</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">
 
2449
   Qualifying Exception Safety Guarantees
 
2450
   
 
2451
 </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">
 
2452
@@ -61,7 +61,7 @@
 
2453
 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
 
2454
 <span class="command"><strong>automake</strong></span>) from the file
 
2455
 <code class="filename">Makefile.am</code>.
 
2456
-</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>
 
2457
+</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>
 
2458
     Regenerate all generated files by using the command 
 
2459
     <code class="code">autoreconf</code> at the top level of the libstdc++ source
 
2460
     directory.
 
2461
Index: libstdc++-v3/doc/html/manual/profile_mode_cost_model.html
 
2462
===================================================================
 
2463
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html     (.../tags/gcc_4_8_2_release)
 
2464
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html     (.../branches/gcc-4_8-branch)
 
2465
@@ -1,5 +1,5 @@
 
2466
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2467
-<!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>
 
2468
+<!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>
 
2469
   Currently, the cost model uses formulas with predefined relative weights
 
2470
   for alternative containers or container implementations.  For instance,
 
2471
   iterating through a vector is X times faster than iterating through a list.
 
2472
Index: libstdc++-v3/doc/html/manual/make.html
 
2473
===================================================================
 
2474
--- a/src/libstdc++-v3/doc/html/manual/make.html        (.../tags/gcc_4_8_2_release)
 
2475
+++ b/src/libstdc++-v3/doc/html/manual/make.html        (.../branches/gcc-4_8-branch)
 
2476
@@ -1,5 +1,5 @@
 
2477
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2478
-<!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
 
2479
+<!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
 
2480
       <a class="link" href="http://gcc.gnu.org/install/" target="_top">GCC Installation
 
2481
       Instructions</a> first.  Read <span class="emphasis"><em>all of them</em></span>.
 
2482
       <span class="emphasis"><em>Twice.</em></span>
 
2483
Index: libstdc++-v3/doc/html/manual/pairs.html
 
2484
===================================================================
 
2485
--- a/src/libstdc++-v3/doc/html/manual/pairs.html       (.../tags/gcc_4_8_2_release)
 
2486
+++ b/src/libstdc++-v3/doc/html/manual/pairs.html       (.../branches/gcc-4_8-branch)
 
2487
@@ -1,5 +1,5 @@
 
2488
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2489
-<!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. 
 
2490
+<!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. 
 
2491
   Utilities
 
2492
   
 
2493
 </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
 
2494
Index: libstdc++-v3/doc/html/manual/test.html
 
2495
===================================================================
 
2496
--- a/src/libstdc++-v3/doc/html/manual/test.html        (.../tags/gcc_4_8_2_release)
 
2497
+++ b/src/libstdc++-v3/doc/html/manual/test.html        (.../branches/gcc-4_8-branch)
 
2498
@@ -1,5 +1,5 @@
 
2499
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2500
-<!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. 
 
2501
+<!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. 
 
2502
   Porting and Maintenance
 
2503
   
 
2504
 </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>
 
2505
@@ -492,7 +492,7 @@
 
2506
        reporting functions including:
 
2507
        </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>
 
2508
   Qualifying Exception Safety Guarantees
 
2509
-  <a id="idp22628992" class="indexterm"></a>
 
2510
+  <a id="idm269992903504" class="indexterm"></a>
 
2511
 </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>
 
2512
         Testing is composed of running a particular test sequence,
 
2513
         and looking at what happens to the surrounding code when
 
2514
Index: libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
 
2515
===================================================================
 
2516
--- a/src/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html     (.../tags/gcc_4_8_2_release)
 
2517
+++ b/src/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html     (.../branches/gcc-4_8-branch)
 
2518
@@ -1,5 +1,5 @@
 
2519
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2520
-<!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>
 
2521
+<!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>
 
2522
        Or as close as it gets: freestanding. This is a minimal
 
2523
        configuration, with only partial support for the standard
 
2524
        library. Assume only the following header files can be used:
 
2525
Index: libstdc++-v3/doc/html/manual/using_headers.html
 
2526
===================================================================
 
2527
--- a/src/libstdc++-v3/doc/html/manual/using_headers.html       (.../tags/gcc_4_8_2_release)
 
2528
+++ b/src/libstdc++-v3/doc/html/manual/using_headers.html       (.../branches/gcc-4_8-branch)
 
2529
@@ -1,5 +1,5 @@
 
2530
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2531
-<!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>
 
2532
+<!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>
 
2533
      The C++ standard specifies the entire set of header files that
 
2534
      must be available to all hosted implementations.  Actually, the
 
2535
      word "files" is a misnomer, since the contents of the
 
2536
@@ -18,19 +18,19 @@
 
2537
      the 1998 standard as updated for 2003, and the current 2011 standard.
 
2538
    </p><p>
 
2539
      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>.
 
2540
-   </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>
 
2541
+   </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>
 
2542
 C++11 include files. These are only available in C++11 compilation
 
2543
 mode, i.e. <code class="literal">-std=c++11</code> or <code class="literal">-std=gnu++11</code>.
 
2544
-</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>
 
2545
+</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>
 
2546
   In addition, TR1 includes as:
 
2547
-</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++
 
2548
+</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++
 
2549
 compiler supports scalar decimal floating-point types defined via
 
2550
 <code class="code">__attribute__((mode(SD|DD|LD)))</code>.
 
2551
-</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>
 
2552
+</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>
 
2553
   Also included are files for the C++ ABI interface:
 
2554
-</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>
 
2555
+</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>
 
2556
   And a large variety of extensions.
 
2557
-</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.
 
2558
+</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.
 
2559
 </p><p>First, mixing different dialects of the standard headers is not
 
2560
 possible. It's an all-or-nothing affair. Thus, code like
 
2561
 </p><pre class="programlisting">
 
2562
Index: libstdc++-v3/doc/html/manual/using_namespaces.html
 
2563
===================================================================
 
2564
--- a/src/libstdc++-v3/doc/html/manual/using_namespaces.html    (.../tags/gcc_4_8_2_release)
 
2565
+++ b/src/libstdc++-v3/doc/html/manual/using_namespaces.html    (.../branches/gcc-4_8-branch)
 
2566
@@ -1,5 +1,5 @@
 
2567
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2568
-<!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.
 
2569
+<!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.
 
2570
 </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
 
2571
 within namespace std." This includes namespaces nested
 
2572
 within <code class="code">namespace std</code>, such as <code class="code">namespace
 
2573
Index: libstdc++-v3/doc/html/manual/debug.html
 
2574
===================================================================
 
2575
--- a/src/libstdc++-v3/doc/html/manual/debug.html       (.../tags/gcc_4_8_2_release)
 
2576
+++ b/src/libstdc++-v3/doc/html/manual/debug.html       (.../branches/gcc-4_8-branch)
 
2577
@@ -1,5 +1,5 @@
 
2578
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2579
-<!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>
 
2580
+<!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>
 
2581
   There are numerous things that can be done to improve the ease with
 
2582
   which C++ binaries are debugged when using the GNU tool chain. Here
 
2583
   are some of them.
 
2584
@@ -161,7 +161,7 @@
 
2585
   DRD</a>,
 
2586
   <a class="link" href="http://valgrind.org/docs/manual/hg-manual.html" target="_top"> 
 
2587
   Helgrind</a>, and
 
2588
-  <a class="link" href="http://code.google.com/p/data-race-test" target="_top"> 
 
2589
+  <a class="link" href="http://code.google.com/p/data-race-test/" target="_top"> 
 
2590
   ThreadSanitizer</a>.
 
2591
 </p><p>
 
2592
   With DRD, Helgrind and ThreadSanitizer you will need to define
 
2593
Index: libstdc++-v3/doc/html/manual/localization.html
 
2594
===================================================================
 
2595
--- a/src/libstdc++-v3/doc/html/manual/localization.html        (.../tags/gcc_4_8_2_release)
 
2596
+++ b/src/libstdc++-v3/doc/html/manual/localization.html        (.../branches/gcc-4_8-branch)
 
2597
@@ -1,5 +1,5 @@
 
2598
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2599
-<!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. 
 
2600
+<!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. 
 
2601
   Localization
 
2602
   
 
2603
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
2604
@@ -6,8 +6,8 @@
 
2605
     Standard Contents
 
2606
   </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. 
 
2607
   Localization
 
2608
-  <a id="idp15701088" class="indexterm"></a>
 
2609
-</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>
 
2610
+  <a id="idm269999830208" class="indexterm"></a>
 
2611
+</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>
 
2612
 Describes the basic locale object, including nested
 
2613
 classes id, facet, and the reference-counted implementation object,
 
2614
 class _Impl.
 
2615
@@ -402,18 +402,18 @@
 
2616
        What should non-required facet instantiations do?  If the
 
2617
        generic implementation is provided, then how to end-users
 
2618
        provide specializations?
 
2619
-   </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">
 
2620
+   </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">
 
2621
       The GNU C Library
 
2622
     </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">
 
2623
       Chapters 6 Character Set Handling and 7 Locales and
 
2624
       Internationalization
 
2625
-    . </span></p></div><div class="biblioentry"><a id="idp15748832"></a><p><span class="citetitle"><em class="citetitle">
 
2626
+    . </span></p></div><div class="biblioentry"><a id="idm269999782464"></a><p><span class="citetitle"><em class="citetitle">
 
2627
       Correspondence
 
2628
-    </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">
 
2629
+    </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">
 
2630
       ISO/IEC 14882:1998 Programming languages - C++
 
2631
-    </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">
 
2632
+    </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">
 
2633
       ISO/IEC 9899:1999 Programming languages - C
 
2634
-    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp15756480"></a><p><span class="title"><em>
 
2635
+    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999774816"></a><p><span class="title"><em>
 
2636
        <a class="link" href="http://www.opengroup.org/austin/" target="_top">
 
2637
       System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
 
2638
        </a>
 
2639
@@ -420,11 +420,11 @@
 
2640
       </em>. </span><span class="copyright">Copyright © 2008 
 
2641
        The Open Group/The Institute of Electrical and Electronics
 
2642
        Engineers, Inc.
 
2643
-      . </span></p></div><div class="biblioentry"><a id="idp15759712"></a><p><span class="citetitle"><em class="citetitle">
 
2644
+      . </span></p></div><div class="biblioentry"><a id="idm269999771584"></a><p><span class="citetitle"><em class="citetitle">
 
2645
       The C++ Programming Language, Special Edition
 
2646
     </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">
 
2647
        Addison Wesley
 
2648
-      . </span></span></p></div><div class="biblioentry"><a id="idp15764336"></a><p><span class="citetitle"><em class="citetitle">
 
2649
+      . </span></span></p></div><div class="biblioentry"><a id="idm269999766960"></a><p><span class="citetitle"><em class="citetitle">
 
2650
       Standard C++ IOStreams and Locales
 
2651
     </em>. </span><span class="subtitle">
 
2652
       Advanced Programmer's Guide and Reference
 
2653
Index: libstdc++-v3/doc/html/manual/ext_algorithms.html
 
2654
===================================================================
 
2655
--- a/src/libstdc++-v3/doc/html/manual/ext_algorithms.html      (.../tags/gcc_4_8_2_release)
 
2656
+++ b/src/libstdc++-v3/doc/html/manual/ext_algorithms.html      (.../branches/gcc-4_8-branch)
 
2657
@@ -1,5 +1,5 @@
 
2658
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2659
-<!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. 
 
2660
+<!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. 
 
2661
   Extensions
 
2662
   
 
2663
 </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
 
2664
Index: libstdc++-v3/doc/html/manual/debug_mode.html
 
2665
===================================================================
 
2666
--- a/src/libstdc++-v3/doc/html/manual/debug_mode.html  (.../tags/gcc_4_8_2_release)
 
2667
+++ b/src/libstdc++-v3/doc/html/manual/debug_mode.html  (.../branches/gcc-4_8-branch)
 
2668
@@ -1,8 +1,8 @@
 
2669
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2670
-<!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. 
 
2671
+<!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. 
 
2672
   Extensions
 
2673
   
 
2674
-</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
 
2675
+</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
 
2676
     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>
 
2677
     By default, libstdc++ is built with efficiency in mind, and
 
2678
     therefore performs little or no error checking that is not
 
2679
Index: libstdc++-v3/doc/html/manual/profile_mode_design.html
 
2680
===================================================================
 
2681
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_design.html (.../tags/gcc_4_8_2_release)
 
2682
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_design.html (.../branches/gcc-4_8-branch)
 
2683
@@ -1,6 +1,6 @@
 
2684
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2685
-<!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>
 
2686
-</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
 
2687
+<!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>
 
2688
+</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
 
2689
      only included from <code class="code">impl/profiler.h</code>, which is the only
 
2690
      file included from the public headers.</td></tr></tbody></table></div></div><br class="table-break" /><p>
 
2691
 </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>
 
2692
Index: libstdc++-v3/doc/html/manual/using_concurrency.html
 
2693
===================================================================
 
2694
--- a/src/libstdc++-v3/doc/html/manual/using_concurrency.html   (.../tags/gcc_4_8_2_release)
 
2695
+++ b/src/libstdc++-v3/doc/html/manual/using_concurrency.html   (.../branches/gcc-4_8-branch)
 
2696
@@ -1,5 +1,5 @@
 
2697
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
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>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
 
2699
+<!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
 
2700
       of multithreaded applications which use the Standard C++
 
2701
       library.  This information is GCC-specific since the C++
 
2702
       standard does not address matters of multithreaded applications.
 
2703
Index: libstdc++-v3/doc/html/manual/mt_allocator_impl.html
 
2704
===================================================================
 
2705
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator_impl.html   (.../tags/gcc_4_8_2_release)
 
2706
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator_impl.html   (.../branches/gcc-4_8-branch)
 
2707
@@ -1,5 +1,5 @@
 
2708
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2709
-<!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
 
2710
+<!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
 
2711
 exists a nested <code class="code">struct __pool_base::_Tune</code> that contains all
 
2712
 these parameters, which include settings for
 
2713
 </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
 
2714
Index: libstdc++-v3/doc/html/manual/appendix_gfdl.html
 
2715
===================================================================
 
2716
--- a/src/libstdc++-v3/doc/html/manual/appendix_gfdl.html       (.../tags/gcc_4_8_2_release)
 
2717
+++ b/src/libstdc++-v3/doc/html/manual/appendix_gfdl.html       (.../branches/gcc-4_8-branch)
 
2718
@@ -1,5 +1,5 @@
 
2719
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
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>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. 
 
2721
+<!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. 
 
2722
   Appendices
 
2723
 </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>
 
2724
     Copyright © 2000, 2001, 2002, 2007, 2008
 
2725
Index: libstdc++-v3/doc/html/manual/containers.html
 
2726
===================================================================
 
2727
--- a/src/libstdc++-v3/doc/html/manual/containers.html  (.../tags/gcc_4_8_2_release)
 
2728
+++ b/src/libstdc++-v3/doc/html/manual/containers.html  (.../branches/gcc-4_8-branch)
 
2729
@@ -1,5 +1,5 @@
 
2730
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2731
-<!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. 
 
2732
+<!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. 
 
2733
   Containers
 
2734
   
 
2735
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
2736
@@ -6,8 +6,8 @@
 
2737
     Standard Contents
 
2738
   </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. 
 
2739
   Containers
 
2740
-  <a id="idp16037808" class="indexterm"></a>
 
2741
-</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>
 
2742
+  <a id="idm269999493408" class="indexterm"></a>
 
2743
+</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>
 
2744
      Yes it is, and that's okay.  This is a decision that we preserved
 
2745
      when we imported SGI's STL implementation.  The following is
 
2746
      quoted from <a class="link" href="http://www.sgi.com/tech/stl/FAQ.html" target="_top">their FAQ</a>:
 
2747
Index: libstdc++-v3/doc/html/manual/io.html
 
2748
===================================================================
 
2749
--- a/src/libstdc++-v3/doc/html/manual/io.html  (.../tags/gcc_4_8_2_release)
 
2750
+++ b/src/libstdc++-v3/doc/html/manual/io.html  (.../branches/gcc-4_8-branch)
 
2751
@@ -1,5 +1,5 @@
 
2752
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2753
-<!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. 
 
2754
+<!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. 
 
2755
   Input and Output
 
2756
   
 
2757
 </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. 
 
2758
@@ -6,8 +6,8 @@
 
2759
     Standard Contents
 
2760
   </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. 
 
2761
   Input and Output
 
2762
-  <a id="idp16257600" class="indexterm"></a>
 
2763
-</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
 
2764
+  <a id="idm269999273616" class="indexterm"></a>
 
2765
+</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
 
2766
       only include the headers you really need.  Many people simply include
 
2767
       &lt;iostream&gt; when they don't need to -- and that can <span class="emphasis"><em>penalize
 
2768
       your runtime as well.</em></span>  Here are some tips on which header to use
 
2769
Index: libstdc++-v3/doc/html/manual/index.html
 
2770
===================================================================
 
2771
--- a/src/libstdc++-v3/doc/html/manual/index.html       (.../tags/gcc_4_8_2_release)
 
2772
+++ b/src/libstdc++-v3/doc/html/manual/index.html       (.../branches/gcc-4_8-branch)
 
2773
@@ -1,7 +1,7 @@
 
2774
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2775
-<!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 
 
2776
+<!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 
 
2777
       <a class="link" href="http://www.fsf.org" target="_top">FSF</a>
 
2778
-    </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. 
 
2779
+    </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. 
 
2780
   Introduction
 
2781
   
 
2782
 </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. 
 
2783
@@ -15,13 +15,13 @@
 
2784
 </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. 
 
2785
   Utilities
 
2786
   
 
2787
-</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. 
 
2788
+</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. 
 
2789
   Strings
 
2790
   
 
2791
 </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. 
 
2792
   Localization
 
2793
   
 
2794
-</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. 
 
2795
+</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. 
 
2796
   Containers
 
2797
   
 
2798
 </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. 
 
2799
@@ -143,19 +143,19 @@
 
2800
   
 
2801
 </a></span></dt><dt><span class="appendix"><a href="appendix_gpl.html">D. 
 
2802
     <acronym class="acronym">GNU</acronym> General Public License version 3
 
2803
-  </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">
 
2804
+  </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">
 
2805
            Effect of embedded lists in
 
2806
            <code class="classname">std::multimap</code>
 
2807
-         </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
 
2808
-             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
 
2809
-               diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idp18277664">Standard resize policy size sequence
 
2810
-               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">
 
2811
+         </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
 
2812
+             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
 
2813
+               diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idm269997253712">Standard resize policy size sequence
 
2814
+               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">
 
2815
                A Standard String Hash Function
 
2816
-             </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idp18169344">
 
2817
+             </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idm269997361840">
 
2818
                Only k String DNA Hash
 
2819
-             </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idp18240448">
 
2820
+             </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idm269997290864">
 
2821
                Probability of Probe Sequence of Length k
 
2822
-             </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idp18247216">
 
2823
+             </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idm269997284096">
 
2824
                Probability Probe Sequence in Some Bin
 
2825
              </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. 
 
2826
   Introduction
 
2827
Index: libstdc++-v3/doc/html/manual/numerics_and_c.html
 
2828
===================================================================
 
2829
--- a/src/libstdc++-v3/doc/html/manual/numerics_and_c.html      (.../tags/gcc_4_8_2_release)
 
2830
+++ b/src/libstdc++-v3/doc/html/manual/numerics_and_c.html      (.../branches/gcc-4_8-branch)
 
2831
@@ -1,5 +1,5 @@
 
2832
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2833
-<!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. 
 
2834
+<!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. 
 
2835
   Numerics
 
2836
   
 
2837
 </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
 
2838
Index: libstdc++-v3/doc/html/manual/appendix_gpl.html
 
2839
===================================================================
 
2840
--- a/src/libstdc++-v3/doc/html/manual/appendix_gpl.html        (.../tags/gcc_4_8_2_release)
 
2841
+++ b/src/libstdc++-v3/doc/html/manual/appendix_gpl.html        (.../branches/gcc-4_8-branch)
 
2842
@@ -1,5 +1,5 @@
 
2843
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2844
-<!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. 
 
2845
+<!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. 
 
2846
     <acronym class="acronym">GNU</acronym> General Public License version 3
 
2847
   </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. 
 
2848
   Appendices
 
2849
@@ -77,7 +77,7 @@
 
2850
   </p><p>
 
2851
     The precise terms and conditions for copying, distribution and modification
 
2852
     follow.
 
2853
-  </p><h2><a id="idp23466384"></a>
 
2854
+  </p><h2><a id="idm269992066368"></a>
 
2855
     TERMS AND CONDITIONS
 
2856
   </h2><h2><a id="gpl-3-definitions"></a>
 
2857
     0. Definitions.
 
2858
@@ -618,7 +618,7 @@
 
2859
     waiver of all civil liability in connection with the Program, unless a
 
2860
     warranty or assumption of liability accompanies a copy of the Program in
 
2861
     return for a fee.
 
2862
-  </p><h2><a id="idp23565184"></a>
 
2863
+  </p><h2><a id="idm269991967568"></a>
 
2864
     END OF TERMS AND CONDITIONS
 
2865
   </h2><h2><a id="HowToApply"></a>
 
2866
     How to Apply These Terms to Your New Programs
 
2867
Index: libstdc++-v3/doc/html/manual/source_code_style.html
 
2868
===================================================================
 
2869
--- a/src/libstdc++-v3/doc/html/manual/source_code_style.html   (.../tags/gcc_4_8_2_release)
 
2870
+++ b/src/libstdc++-v3/doc/html/manual/source_code_style.html   (.../branches/gcc-4_8-branch)
 
2871
@@ -1,5 +1,5 @@
 
2872
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2873
-<!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. 
 
2874
+<!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. 
 
2875
   Contributing
 
2876
   
 
2877
 </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>
 
2878
Index: libstdc++-v3/doc/html/manual/streambufs.html
 
2879
===================================================================
 
2880
--- a/src/libstdc++-v3/doc/html/manual/streambufs.html  (.../tags/gcc_4_8_2_release)
 
2881
+++ b/src/libstdc++-v3/doc/html/manual/streambufs.html  (.../branches/gcc-4_8-branch)
 
2882
@@ -1,5 +1,5 @@
 
2883
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2884
-<!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. 
 
2885
+<!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. 
 
2886
   Input and Output
 
2887
   
 
2888
 </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>
 
2889
Index: libstdc++-v3/doc/html/manual/utilities.html
 
2890
===================================================================
 
2891
--- a/src/libstdc++-v3/doc/html/manual/utilities.html   (.../tags/gcc_4_8_2_release)
 
2892
+++ b/src/libstdc++-v3/doc/html/manual/utilities.html   (.../branches/gcc-4_8-branch)
 
2893
@@ -1,5 +1,5 @@
 
2894
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2895
-<!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. 
 
2896
+<!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. 
 
2897
   Utilities
 
2898
   
 
2899
 </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. 
 
2900
@@ -6,8 +6,8 @@
 
2901
     Standard Contents
 
2902
   </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. 
 
2903
   Utilities
 
2904
-  <a id="idp13862416" class="indexterm"></a>
 
2905
-</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
 
2906
+  <a id="idm270001670464" class="indexterm"></a>
 
2907
+</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
 
2908
       get slightly the wrong idea.  In the interest of not reinventing
 
2909
       the wheel, we will refer you to the introduction to the functor
 
2910
       concept written by SGI as part of their STL, in
 
2911
Index: libstdc++-v3/include/debug/functions.h
 
2912
===================================================================
 
2913
--- a/src/libstdc++-v3/include/debug/functions.h        (.../tags/gcc_4_8_2_release)
 
2914
+++ b/src/libstdc++-v3/include/debug/functions.h        (.../branches/gcc-4_8-branch)
 
2915
@@ -345,11 +345,13 @@
 
2916
       return __check_sorted_set_aux(__first, __last, __pred, _SameType());
 
2917
    }
 
2918
 
 
2919
+  // _GLIBCXX_RESOLVE_LIB_DEFECTS
 
2920
+  // 270. Binary search requirements overly strict
 
2921
+  // Determine if a sequence is partitioned w.r.t. this element.
 
2922
   template<typename _ForwardIterator, typename _Tp>
 
2923
     inline bool
 
2924
-  __check_partitioned_lower_aux(_ForwardIterator __first,
 
2925
-                               _ForwardIterator __last, const _Tp& __value,
 
2926
-                               std::forward_iterator_tag)
 
2927
+    __check_partitioned_lower(_ForwardIterator __first,
 
2928
+                             _ForwardIterator __last, const _Tp& __value)
 
2929
     {
 
2930
       while (__first != __last && *__first < __value)
 
2931
        ++__first;
 
2932
@@ -362,38 +364,11 @@
 
2933
       return __first == __last;
 
2934
     }
 
2935
 
 
2936
-  // For performance reason, as the iterator range has been validated, check on
 
2937
-  // random access safe iterators is done using the base iterator.
 
2938
-  template<typename _Iterator, typename _Sequence, typename _Tp>
 
2939
-    inline bool
 
2940
-    __check_partitioned_lower_aux(
 
2941
-                       const _Safe_iterator<_Iterator, _Sequence>& __first,
 
2942
-                       const _Safe_iterator<_Iterator, _Sequence>& __last,
 
2943
-                       const _Tp& __value,
 
2944
-                       std::random_access_iterator_tag __tag)
 
2945
-    {
 
2946
-      return __check_partitioned_lower_aux(__first.base(), __last.base(),
 
2947
-                                          __value, __tag);
 
2948
-    }
 
2949
-
 
2950
-  // _GLIBCXX_RESOLVE_LIB_DEFECTS
 
2951
-  // 270. Binary search requirements overly strict
 
2952
-  // Determine if a sequence is partitioned w.r.t. this element.
 
2953
   template<typename _ForwardIterator, typename _Tp>
 
2954
     inline bool
 
2955
-    __check_partitioned_lower(_ForwardIterator __first,
 
2956
+    __check_partitioned_upper(_ForwardIterator __first,
 
2957
                              _ForwardIterator __last, const _Tp& __value)
 
2958
     {
 
2959
-      return __check_partitioned_lower_aux(__first, __last, __value,
 
2960
-                                          std::__iterator_category(__first));
 
2961
-    }
 
2962
-
 
2963
-  template<typename _ForwardIterator, typename _Tp>
 
2964
-    inline bool
 
2965
-    __check_partitioned_upper_aux(_ForwardIterator __first,
 
2966
-                                 _ForwardIterator __last, const _Tp& __value,
 
2967
-                                 std::forward_iterator_tag)
 
2968
-    {
 
2969
       while (__first != __last && !(__value < *__first))
 
2970
        ++__first;
 
2971
       if (__first != __last)
 
2972
@@ -405,35 +380,12 @@
 
2973
       return __first == __last;
 
2974
     }
 
2975
 
 
2976
-  // For performance reason, as the iterator range has been validated, check on
 
2977
-  // random access safe iterators is done using the base iterator.
 
2978
-  template<typename _Iterator, typename _Sequence, typename _Tp>
 
2979
-    inline bool
 
2980
-    __check_partitioned_upper_aux(
 
2981
-                       const _Safe_iterator<_Iterator, _Sequence>& __first,
 
2982
-                       const _Safe_iterator<_Iterator, _Sequence>& __last,
 
2983
-                       const _Tp& __value,
 
2984
-                       std::random_access_iterator_tag __tag)
 
2985
-    {
 
2986
-      return __check_partitioned_upper_aux(__first.base(), __last.base(),
 
2987
-                                          __value, __tag);
 
2988
-    }
 
2989
-
 
2990
-  template<typename _ForwardIterator, typename _Tp>
 
2991
-    inline bool
 
2992
-    __check_partitioned_upper(_ForwardIterator __first,
 
2993
-                             _ForwardIterator __last, const _Tp& __value)
 
2994
-    {
 
2995
-      return __check_partitioned_upper_aux(__first, __last, __value,
 
2996
-                                          std::__iterator_category(__first));
 
2997
-    }
 
2998
-
 
2999
+  // Determine if a sequence is partitioned w.r.t. this element.
 
3000
   template<typename _ForwardIterator, typename _Tp, typename _Pred>
 
3001
     inline bool
 
3002
-    __check_partitioned_lower_aux(_ForwardIterator __first,
 
3003
-                                 _ForwardIterator __last, const _Tp& __value,
 
3004
-                                 _Pred __pred,
 
3005
-                                 std::forward_iterator_tag)
 
3006
+    __check_partitioned_lower(_ForwardIterator __first,
 
3007
+                             _ForwardIterator __last, const _Tp& __value,
 
3008
+                             _Pred __pred)
 
3009
     {
 
3010
       while (__first != __last && bool(__pred(*__first, __value)))
 
3011
        ++__first;
 
3012
@@ -446,39 +398,12 @@
 
3013
       return __first == __last;
 
3014
     }
 
3015
 
 
3016
-  // For performance reason, as the iterator range has been validated, check on
 
3017
-  // random access safe iterators is done using the base iterator.
 
3018
-  template<typename _Iterator, typename _Sequence,
 
3019
-          typename _Tp, typename _Pred>
 
3020
-    inline bool
 
3021
-    __check_partitioned_lower_aux(
 
3022
-                       const _Safe_iterator<_Iterator, _Sequence>& __first,
 
3023
-                       const _Safe_iterator<_Iterator, _Sequence>& __last,
 
3024
-                       const _Tp& __value, _Pred __pred,
 
3025
-                       std::random_access_iterator_tag __tag)
 
3026
-    {
 
3027
-      return __check_partitioned_lower_aux(__first.base(), __last.base(),
 
3028
-                                          __value, __pred, __tag);
 
3029
-    }
 
3030
-
 
3031
-  // Determine if a sequence is partitioned w.r.t. this element.
 
3032
   template<typename _ForwardIterator, typename _Tp, typename _Pred>
 
3033
     inline bool
 
3034
-    __check_partitioned_lower(_ForwardIterator __first,
 
3035
+    __check_partitioned_upper(_ForwardIterator __first,
 
3036
                              _ForwardIterator __last, const _Tp& __value,
 
3037
                              _Pred __pred)
 
3038
     {
 
3039
-      return __check_partitioned_lower_aux(__first, __last, __value, __pred,
 
3040
-                                          std::__iterator_category(__first));
 
3041
-    }
 
3042
-
 
3043
-  template<typename _ForwardIterator, typename _Tp, typename _Pred>
 
3044
-    inline bool
 
3045
-    __check_partitioned_upper_aux(_ForwardIterator __first,
 
3046
-                                 _ForwardIterator __last, const _Tp& __value,
 
3047
-                                 _Pred __pred,
 
3048
-                                 std::forward_iterator_tag)
 
3049
-    {
 
3050
       while (__first != __last && !bool(__pred(__value, *__first)))
 
3051
        ++__first;
 
3052
       if (__first != __last)
 
3053
@@ -490,31 +415,6 @@
 
3054
       return __first == __last;
 
3055
     }
 
3056
 
 
3057
-  // For performance reason, as the iterator range has been validated, check on
 
3058
-  // random access safe iterators is done using the base iterator.
 
3059
-  template<typename _Iterator, typename _Sequence,
 
3060
-          typename _Tp, typename _Pred>
 
3061
-    inline bool
 
3062
-    __check_partitioned_upper_aux(
 
3063
-                       const _Safe_iterator<_Iterator, _Sequence>& __first,
 
3064
-                       const _Safe_iterator<_Iterator, _Sequence>& __last,
 
3065
-                       const _Tp& __value, _Pred __pred,
 
3066
-                       std::random_access_iterator_tag __tag)
 
3067
-    {
 
3068
-      return __check_partitioned_upper_aux(__first.base(), __last.base(),
 
3069
-                                          __value, __pred, __tag);
 
3070
-    }
 
3071
-
 
3072
-  template<typename _ForwardIterator, typename _Tp, typename _Pred>
 
3073
-    inline bool
 
3074
-    __check_partitioned_upper(_ForwardIterator __first,
 
3075
-                             _ForwardIterator __last, const _Tp& __value,
 
3076
-                             _Pred __pred)
 
3077
-    {
 
3078
-      return __check_partitioned_upper_aux(__first, __last, __value, __pred,
 
3079
-                                          std::__iterator_category(__first));
 
3080
-    }
 
3081
-
 
3082
   // Helper struct to detect random access safe iterators.
 
3083
   template<typename _Iterator>
 
3084
     struct __is_safe_random_iterator
 
3085
Index: libstdc++-v3/include/debug/safe_unordered_base.h
 
3086
===================================================================
 
3087
--- a/src/libstdc++-v3/include/debug/safe_unordered_base.h      (.../tags/gcc_4_8_2_release)
 
3088
+++ b/src/libstdc++-v3/include/debug/safe_unordered_base.h      (.../branches/gcc-4_8-branch)
 
3089
@@ -133,9 +133,19 @@
 
3090
   protected:
 
3091
     // Initialize with a version number of 1 and no iterators
 
3092
     _Safe_unordered_container_base()
 
3093
-    : _M_local_iterators(0), _M_const_local_iterators(0)
 
3094
+    : _M_local_iterators(nullptr), _M_const_local_iterators(nullptr)
 
3095
     { }
 
3096
 
 
3097
+    // Initialize with a version number of 1 and no iterators
 
3098
+    _Safe_unordered_container_base(const _Safe_unordered_container_base&)
 
3099
+    noexcept
 
3100
+    : _Safe_unordered_container_base() { }
 
3101
+
 
3102
+    _Safe_unordered_container_base(_Safe_unordered_container_base&& __x)
 
3103
+    noexcept
 
3104
+    : _Safe_unordered_container_base()
 
3105
+    { this->_M_swap(__x); }
 
3106
+
 
3107
     /** Notify all iterators that reference this container that the
 
3108
        container is being destroyed. */
 
3109
     ~_Safe_unordered_container_base()
 
3110
Index: libstdc++-v3/include/debug/macros.h
 
3111
===================================================================
 
3112
--- a/src/libstdc++-v3/include/debug/macros.h   (.../tags/gcc_4_8_2_release)
 
3113
+++ b/src/libstdc++-v3/include/debug/macros.h   (.../branches/gcc-4_8-branch)
 
3114
@@ -261,8 +261,9 @@
 
3115
     w.r.t. the value _Value. */
 
3116
 #define __glibcxx_check_partitioned_lower(_First,_Last,_Value)         \
 
3117
 __glibcxx_check_valid_range(_First,_Last);                             \
 
3118
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
 
3119
-                                                           _Value),    \
 
3120
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(          \
 
3121
+                       __gnu_debug::__base(_First),                    \
 
3122
+                       __gnu_debug::__base(_Last), _Value),            \
 
3123
                      _M_message(__gnu_debug::__msg_unpartitioned)      \
 
3124
                      ._M_iterator(_First, #_First)                     \
 
3125
                      ._M_iterator(_Last, #_Last)                       \
 
3126
@@ -270,8 +271,9 @@
 
3127
 
 
3128
 #define __glibcxx_check_partitioned_upper(_First,_Last,_Value)         \
 
3129
 __glibcxx_check_valid_range(_First,_Last);                             \
 
3130
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
 
3131
-                                                           _Value),    \
 
3132
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(          \
 
3133
+                       __gnu_debug::__base(_First),                    \
 
3134
+                       __gnu_debug::__base(_Last), _Value),            \
 
3135
                      _M_message(__gnu_debug::__msg_unpartitioned)      \
 
3136
                      ._M_iterator(_First, #_First)                     \
 
3137
                      ._M_iterator(_Last, #_Last)                       \
 
3138
@@ -281,8 +283,9 @@
 
3139
     w.r.t. the value _Value and predicate _Pred. */
 
3140
 #define __glibcxx_check_partitioned_lower_pred(_First,_Last,_Value,_Pred) \
 
3141
 __glibcxx_check_valid_range(_First,_Last);                             \
 
3142
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
 
3143
-                                                        _Value, _Pred), \
 
3144
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(          \
 
3145
+                       __gnu_debug::__base(_First),                    \
 
3146
+                       __gnu_debug::__base(_Last), _Value, _Pred),     \
 
3147
                      _M_message(__gnu_debug::__msg_unpartitioned_pred) \
 
3148
                      ._M_iterator(_First, #_First)                     \
 
3149
                      ._M_iterator(_Last, #_Last)                       \
 
3150
@@ -293,8 +296,9 @@
 
3151
     w.r.t. the value _Value and predicate _Pred. */
 
3152
 #define __glibcxx_check_partitioned_upper_pred(_First,_Last,_Value,_Pred) \
 
3153
 __glibcxx_check_valid_range(_First,_Last);                             \
 
3154
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
 
3155
-                                                        _Value, _Pred), \
 
3156
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(          \
 
3157
+                       __gnu_debug::__base(_First),                    \
 
3158
+                       __gnu_debug::__base(_Last), _Value, _Pred),     \
 
3159
                      _M_message(__gnu_debug::__msg_unpartitioned_pred) \
 
3160
                      ._M_iterator(_First, #_First)                     \
 
3161
                      ._M_iterator(_Last, #_Last)                       \
 
3162
Index: libstdc++-v3/include/std/future
 
3163
===================================================================
 
3164
--- a/src/libstdc++-v3/include/std/future       (.../tags/gcc_4_8_2_release)
 
3165
+++ b/src/libstdc++-v3/include/std/future       (.../branches/gcc-4_8-branch)
 
3166
@@ -1261,9 +1261,11 @@
 
3167
     struct __future_base::_Task_state<_Fn, _Alloc, _Res(_Args...)> final
 
3168
     : __future_base::_Task_state_base<_Res(_Args...)>
 
3169
     {
 
3170
-      _Task_state(_Fn&& __fn, const _Alloc& __a)
 
3171
-      : _Task_state_base<_Res(_Args...)>(__a), _M_impl(std::move(__fn), __a)
 
3172
-      { }
 
3173
+      template<typename _Fn2>
 
3174
+       _Task_state(_Fn2&& __fn, const _Alloc& __a)
 
3175
+       : _Task_state_base<_Res(_Args...)>(__a),
 
3176
+         _M_impl(std::forward<_Fn2>(__fn), __a)
 
3177
+       { }
 
3178
 
 
3179
     private:
 
3180
       virtual void
 
3181
@@ -1292,19 +1294,21 @@
 
3182
 
 
3183
       struct _Impl : _Alloc
 
3184
       {
 
3185
-       _Impl(_Fn&& __fn, const _Alloc& __a)
 
3186
-         : _Alloc(__a), _M_fn(std::move(__fn)) { }
 
3187
+       template<typename _Fn2>
 
3188
+         _Impl(_Fn2&& __fn, const _Alloc& __a)
 
3189
+         : _Alloc(__a), _M_fn(std::forward<_Fn2>(__fn)) { }
 
3190
        _Fn _M_fn;
 
3191
       } _M_impl;
 
3192
     };
 
3193
 
 
3194
-    template<typename _Signature, typename _Fn, typename _Alloc>
 
3195
-      static shared_ptr<__future_base::_Task_state_base<_Signature>>
 
3196
-      __create_task_state(_Fn&& __fn, const _Alloc& __a)
 
3197
-      {
 
3198
-       typedef __future_base::_Task_state<_Fn, _Alloc, _Signature> _State;
 
3199
-       return std::allocate_shared<_State>(__a, std::move(__fn), __a);
 
3200
-      }
 
3201
+  template<typename _Signature, typename _Fn, typename _Alloc>
 
3202
+    static shared_ptr<__future_base::_Task_state_base<_Signature>>
 
3203
+    __create_task_state(_Fn&& __fn, const _Alloc& __a)
 
3204
+    {
 
3205
+      typedef typename decay<_Fn>::type _Fn2;
 
3206
+      typedef __future_base::_Task_state<_Fn2, _Alloc, _Signature> _State;
 
3207
+      return std::allocate_shared<_State>(__a, std::forward<_Fn>(__fn), __a);
 
3208
+    }
 
3209
 
 
3210
   template<typename _Fn, typename _Alloc, typename _Res, typename... _Args>
 
3211
     shared_ptr<__future_base::_Task_state_base<_Res(_Args...)>>
 
3212
@@ -1344,7 +1348,8 @@
 
3213
               __constrain_pkgdtask<packaged_task, _Fn>::__type>
 
3214
        explicit
 
3215
        packaged_task(_Fn&& __fn)
 
3216
-       : packaged_task(allocator_arg, std::allocator<int>(), std::move(__fn))
 
3217
+       : packaged_task(allocator_arg, std::allocator<int>(),
 
3218
+                       std::forward<_Fn>(__fn))
 
3219
        { }
 
3220
 
 
3221
       // _GLIBCXX_RESOLVE_LIB_DEFECTS
 
3222
Index: libstdc++-v3/include/bits/atomic_base.h
 
3223
===================================================================
 
3224
--- a/src/libstdc++-v3/include/bits/atomic_base.h       (.../tags/gcc_4_8_2_release)
 
3225
+++ b/src/libstdc++-v3/include/bits/atomic_base.h       (.../branches/gcc-4_8-branch)
 
3226
@@ -764,11 +764,11 @@
 
3227
 
 
3228
       bool
 
3229
       is_lock_free() const noexcept
 
3230
-      { return __atomic_is_lock_free(_M_type_size(1), nullptr); }
 
3231
+      { return __atomic_is_lock_free(sizeof(__pointer_type), nullptr); }
 
3232
 
 
3233
       bool
 
3234
       is_lock_free() const volatile noexcept
 
3235
-      { return __atomic_is_lock_free(_M_type_size(1), nullptr); }
 
3236
+      { return __atomic_is_lock_free(sizeof(__pointer_type), nullptr); }
 
3237
 
 
3238
       void
 
3239
       store(__pointer_type __p,
 
3240
Index: libstdc++-v3/include/bits/stl_vector.h
 
3241
===================================================================
 
3242
--- a/src/libstdc++-v3/include/bits/stl_vector.h        (.../tags/gcc_4_8_2_release)
 
3243
+++ b/src/libstdc++-v3/include/bits/stl_vector.h        (.../branches/gcc-4_8-branch)
 
3244
@@ -1361,7 +1361,8 @@
 
3245
       void
 
3246
       _M_move_assign(vector&& __x, std::true_type) noexcept
 
3247
       {
 
3248
-       const vector __tmp(std::move(*this));
 
3249
+       vector __tmp(get_allocator());
 
3250
+       this->_M_impl._M_swap_data(__tmp._M_impl);
 
3251
        this->_M_impl._M_swap_data(__x._M_impl);
 
3252
        if (_Alloc_traits::_S_propagate_on_move_assign())
 
3253
          std::__alloc_on_move(_M_get_Tp_allocator(),
 
3254
Index: libstdc++-v3/include/bits/stl_algo.h
 
3255
===================================================================
 
3256
--- a/src/libstdc++-v3/include/bits/stl_algo.h  (.../tags/gcc_4_8_2_release)
 
3257
+++ b/src/libstdc++-v3/include/bits/stl_algo.h  (.../branches/gcc-4_8-branch)
 
3258
@@ -2279,7 +2279,7 @@
 
3259
                                _RandomAccessIterator __last)
 
3260
     {
 
3261
       _RandomAccessIterator __mid = __first + (__last - __first) / 2;
 
3262
-      std::__move_median_to_first(__first, __first + 1, __mid, (__last - 2));
 
3263
+      std::__move_median_to_first(__first, __first + 1, __mid, __last - 1);
 
3264
       return std::__unguarded_partition(__first + 1, __last, *__first);
 
3265
     }
 
3266
 
 
3267
@@ -2291,7 +2291,7 @@
 
3268
                                _RandomAccessIterator __last, _Compare __comp)
 
3269
     {
 
3270
       _RandomAccessIterator __mid = __first + (__last - __first) / 2;
 
3271
-      std::__move_median_to_first(__first, __first + 1, __mid, (__last - 2),
 
3272
+      std::__move_median_to_first(__first, __first + 1, __mid, __last - 1,
 
3273
                                  __comp);
 
3274
       return std::__unguarded_partition(__first + 1, __last, *__first, __comp);
 
3275
     }
 
3276
Index: libstdc++-v3/include/bits/shared_ptr_base.h
 
3277
===================================================================
 
3278
--- a/src/libstdc++-v3/include/bits/shared_ptr_base.h   (.../tags/gcc_4_8_2_release)
 
3279
+++ b/src/libstdc++-v3/include/bits/shared_ptr_base.h   (.../branches/gcc-4_8-branch)
 
3280
@@ -233,7 +233,7 @@
 
3281
     _M_add_ref_lock()
 
3282
     {
 
3283
       // Perform lock-free add-if-not-zero operation.
 
3284
-      _Atomic_word __count = _M_use_count;
 
3285
+      _Atomic_word __count = _M_get_use_count();
 
3286
       do
 
3287
        {
 
3288
          if (__count == 0)
 
3289
@@ -391,7 +391,7 @@
 
3290
     public:
 
3291
       template<typename... _Args>
 
3292
        _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
 
3293
-       : _M_impl(__a), _M_storage()
 
3294
+       : _M_impl(__a)
 
3295
        {
 
3296
          _M_impl._M_ptr = static_cast<_Tp*>(static_cast<void*>(&_M_storage));
 
3297
          // _GLIBCXX_RESOLVE_LIB_DEFECTS
 
3298
@@ -819,7 +819,7 @@
 
3299
        : _M_ptr(__r.get()), _M_refcount()
 
3300
        {
 
3301
          __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>)
 
3302
-         auto __tmp = std::__addressof(*__r.get());
 
3303
+         auto __tmp = __r.get();
 
3304
          _M_refcount = __shared_count<_Lp>(std::move(__r));
 
3305
          __enable_shared_from_this_helper(_M_refcount, __tmp, __tmp);
 
3306
        }
 
3307
Index: libstdc++-v3/include/c_global/cstdio
 
3308
===================================================================
 
3309
--- a/src/libstdc++-v3/include/c_global/cstdio  (.../tags/gcc_4_8_2_release)
 
3310
+++ b/src/libstdc++-v3/include/c_global/cstdio  (.../branches/gcc-4_8-branch)
 
3311
@@ -69,6 +69,7 @@
 
3312
 #undef ftell
 
3313
 #undef fwrite
 
3314
 #undef getc
 
3315
+#undef getchar
 
3316
 #undef gets
 
3317
 #undef perror
 
3318
 #undef printf
 
3319
Index: libstdc++-v3/ChangeLog
 
3320
===================================================================
 
3321
--- a/src/libstdc++-v3/ChangeLog        (.../tags/gcc_4_8_2_release)
 
3322
+++ b/src/libstdc++-v3/ChangeLog        (.../branches/gcc-4_8-branch)
 
3323
@@ -1,3 +1,150 @@
 
3324
+2014-03-26  Jonathan Wakely  <jwakely@redhat.com>
 
3325
+
 
3326
+       PR libstdc++/59548
 
3327
+       * include/debug/safe_unordered_base.h (_Safe_unordered_container_base):
 
3328
+       Define copy and move constructors that handle iterators correctly.
 
3329
+       * testsuite/23_containers/unordered_map/59548.cc: New.
 
3330
+
 
3331
+2014-03-25  Jonathan Wakely  <jwakely@redhat.com>
 
3332
+
 
3333
+       PR libstdc++/60658
 
3334
+       * include/bits/atomic_base.h (__atomic_base<_PTp*>::is_lock_free()):
 
3335
+       Use sizeof pointer type not the element type.
 
3336
+       * testsuite/29_atomics/atomic/60658.cc: New.
 
3337
+
 
3338
+2014-03-18  Jonathan Wakely  <jwakely@redhat.com>
 
3339
+
 
3340
+       PR libstdc++/60564
 
3341
+       * include/std/future (__future_base::_Task_state<>): Change
 
3342
+       constructors to template functions using perfect forwarding.
 
3343
+       (__create_task_state): Use decayed type as stored task.
 
3344
+       (packaged_task::packaged_task(_Fn&&)): Forward instead of moving.
 
3345
+       * testsuite/30_threads/packaged_task/60564.cc: New.
 
3346
+
 
3347
+2014-03-12  Roland McGrath  <mcgrathr@google.com>
 
3348
+           Mark Seaborn  <mseaborn@google.com>
 
3349
+
 
3350
+       PR libstdc++/59392
 
3351
+       * libsupc++/eh_call.cc (__cxa_call_unexpected): Call __do_catch with
 
3352
+       the address of a null pointer, not with a null pointer to pointer.
 
3353
+       Copy comment for this case from eh_personality.cc:__cxa_call_unexpected.
 
3354
+       * testsuite/18_support/bad_exception/59392.cc: New file.
 
3355
+
 
3356
+2014-03-11  Jonathan Wakely  <jwakely@redhat.com>
 
3357
+
 
3358
+       Backport from mainline.
 
3359
+       2014-01-09  Jonathan Wakely  <jwakely@redhat.com>
 
3360
+
 
3361
+       PR libstdc++/59680
 
3362
+       * src/c++11/thread.cc (__sleep_for): Fix call to ::sleep.
 
3363
+
 
3364
+2014-03-11  Jonathan Wakely  <jwakely@redhat.com>
 
3365
+
 
3366
+       Backport from mainline.
 
3367
+       2014-01-27  Jonathan Wakely  <jwakely@redhat.com>
 
3368
+
 
3369
+       PR libstdc++/59215
 
3370
+       * include/bits/shared_ptr_base.h
 
3371
+       (_Sp_counted_base<_S_atomic>::_M_add_ref_lock()): Use relaxed atomic
 
3372
+       load.
 
3373
+
 
3374
+2014-03-11  Jonathan Wakely  <jwakely@redhat.com>
 
3375
+
 
3376
+       Backport from mainline.
 
3377
+
 
3378
+       2014-01-09  Jonathan Wakely  <jwakely@redhat.com>
 
3379
+
 
3380
+       PR libstdc++/59738
 
3381
+       * include/bits/stl_vector.h (vector<>::_M_move_assign): Restore
 
3382
+       support for non-Movable types.
 
3383
+
 
3384
+       2014-01-08  François Dumont  <fdumont@gcc.gnu.org>
 
3385
+
 
3386
+       * include/bits/stl_vector.h (std::vector<>::_M_move_assign): Pass
 
3387
+       *this allocator instance when building temporary vector instance
 
3388
+       so that *this allocator does not get moved.
 
3389
+       * testsuite/23_containers/vector/allocator/move.cc (test01): Add
 
3390
+       check on a vector iterator.
 
3391
+       * testsuite/23_containers/vector/allocator/move_assign.cc
 
3392
+       (test02): Likewise.
 
3393
+       (test03): New, test with a non-propagating allocator.
 
3394
+
 
3395
+       2013-11-15  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
3396
+
 
3397
+       * testsuite/23_containers/vector/allocator/move.cc: New
 
3398
+
 
3399
+2014-01-27  Jason Merrill  <jason@redhat.com>
 
3400
+
 
3401
+       Core DR 475
 
3402
+       PR c++/41174
 
3403
+       PR c++/59224
 
3404
+       * libsupc++/eh_throw.cc (__cxa_throw): Set uncaughtExceptions.
 
3405
+       * libsupc++/eh_alloc.cc (__cxa_allocate_dependent_exception)
 
3406
+       (__cxa_allocate_exception): Don't set it here.
 
3407
+
 
3408
+2013-12-15  H.J. Lu  <hongjiu.lu@intel.com>
 
3409
+
 
3410
+       * config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt: Update.
 
3411
+
 
3412
+2013-11-22  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
3413
+
 
3414
+       * acinclude.m4 (libtool_VERSION): Bump.
 
3415
+       * configure: Regenerate.
 
3416
+       * doc/xml/manual/abi.xml: Update version information.
 
3417
+
 
3418
+2013-11-05  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
3419
+
 
3420
+       * doc/xml/manual/status_cxx2011.xml: Document aligned_union as
 
3421
+       missing.
 
3422
+
 
3423
+       * doc/xml/manual/spine.xml: Update copyright years.
 
3424
+       * doc/html/*: Regenerate.
 
3425
+
 
3426
+2013-11-01  Paolo Carlini  <paolo.carlini@oracle.com>
 
3427
+
 
3428
+       PR libstdc++/58952
 
3429
+       * include/c_global/cstdio: Undef getchar.
 
3430
+
 
3431
+2013-10-31  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
3432
+
 
3433
+       * testsuite/20_util/shared_ptr/cons/58839.cc: Do not use
 
3434
+       default_delete<void>.
 
3435
+
 
3436
+2013-10-30  Chris Studholme  <cvs@cs.utoronto.ca>
 
3437
+
 
3438
+       PR libstdc++/58912
 
3439
+       * include/bits/shared_ptr_base.h (_Sp_counted_ptr_inplace): Remove
 
3440
+       unnecessary initialization of storage buffer.
 
3441
+
 
3442
+2013-10-29  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
3443
+
 
3444
+       PR libstdc++/58839
 
3445
+       * include/bits/shared_ptr_base.h
 
3446
+       (__shared_ptr<T>::__shared_ptr(unique_ptr<U,D>&&)): Do not dereference
 
3447
+       pointer.
 
3448
+       * testsuite/20_util/shared_ptr/cons/58839.cc: New.
 
3449
+
 
3450
+2013-10-20  Chris Jefferson  <chris@bubblescope.net>
 
3451
+           Paolo Carlini  <paolo.carlini@oracle.com>
 
3452
+
 
3453
+       PR libstdc++/58800
 
3454
+       * include/bits/stl_algo.h (__unguarded_partition_pivot): Change
 
3455
+       __last - 2 to __last - 1.
 
3456
+       * testsuite/25_algorithms/nth_element/58800.cc: New
 
3457
+
 
3458
+2013-10-16  François Dumont  <fdumont@gcc.gnu.org>
 
3459
+
 
3460
+       PR libstdc++/58191
 
3461
+       * include/debug/macros.h (__glibcxx_check_partitioned_lower): Add
 
3462
+       __gnu_debug::__base calls on iterators passed to internal debug
 
3463
+       check.
 
3464
+       (__glibcxx_check_partitioned_lower_pred): Likewise.
 
3465
+       (__glibcxx_check_partitioned_upper): Likewise.
 
3466
+       (__glibcxx_check_partitioned_upper_pred): Likewise.
 
3467
+       * include/debug/functions.h (__check_partitioned_lower):
 
3468
+       Remove code to detect safe iterators.
 
3469
+       (__check_partitioned_upper): Likewise.
 
3470
+
 
3471
 2013-10-16  Release Manager
 
3472
 
 
3473
        * GCC 4.8.2 released.
 
3474
Index: libstdc++-v3/libsupc++/eh_call.cc
 
3475
===================================================================
 
3476
--- a/src/libstdc++-v3/libsupc++/eh_call.cc     (.../tags/gcc_4_8_2_release)
 
3477
+++ b/src/libstdc++-v3/libsupc++/eh_call.cc     (.../branches/gcc-4_8-branch)
 
3478
@@ -104,14 +104,14 @@
 
3479
   } end_catch_protect_obj;
 
3480
 
 
3481
 
 
3482
-  __try 
 
3483
-    { 
 
3484
+  __try
 
3485
+    {
 
3486
       if (foreign_exception)
 
3487
        std::unexpected();
 
3488
       else
 
3489
        __unexpected(unexpectedHandler);
 
3490
     }
 
3491
-  __catch(...) 
 
3492
+  __catch(...)
 
3493
     {
 
3494
       /* See if the new exception matches the rtti list.  */
 
3495
       if (foreign_exception)
 
3496
@@ -140,15 +140,19 @@
 
3497
                               &new_ptr) != ctm_failed)
 
3498
            __throw_exception_again;
 
3499
 
 
3500
-         if (catch_type->__do_catch(&bad_exc, 0, 1))
 
3501
+         // If the exception spec allows std::bad_exception, throw that.
 
3502
+         // We don't have a thrown object to compare against, but since
 
3503
+         // bad_exception doesn't have virtual bases, that's OK; just pass NULL.
 
3504
+         void* obj = NULL;
 
3505
+         if (catch_type->__do_catch(&bad_exc, &obj, 1))
 
3506
            bad_exception_allowed = true;
 
3507
        }
 
3508
 
 
3509
       // If the exception spec allows std::bad_exception, throw that.
 
3510
-#ifdef __EXCEPTIONS  
 
3511
+#ifdef __EXCEPTIONS
 
3512
       if (bad_exception_allowed)
 
3513
        throw std::bad_exception();
 
3514
-#endif   
 
3515
+#endif
 
3516
 
 
3517
       // Otherwise, die.
 
3518
       __terminate(terminateHandler);
 
3519
Index: libstdc++-v3/libsupc++/eh_alloc.cc
 
3520
===================================================================
 
3521
--- a/src/libstdc++-v3/libsupc++/eh_alloc.cc    (.../tags/gcc_4_8_2_release)
 
3522
+++ b/src/libstdc++-v3/libsupc++/eh_alloc.cc    (.../branches/gcc-4_8-branch)
 
3523
@@ -129,12 +129,6 @@
 
3524
        std::terminate ();
 
3525
     }
 
3526
 
 
3527
-  // We have an uncaught exception as soon as we allocate memory.  This
 
3528
-  // yields uncaught_exception() true during the copy-constructor that
 
3529
-  // initializes the exception object.  See Issue 475.
 
3530
-  __cxa_eh_globals *globals = __cxa_get_globals ();
 
3531
-  globals->uncaughtExceptions += 1;
 
3532
-
 
3533
   memset (ret, 0, sizeof (__cxa_refcounted_exception));
 
3534
 
 
3535
   return (void *)((char *)ret + sizeof (__cxa_refcounted_exception));
 
3536
@@ -191,12 +185,6 @@
 
3537
        std::terminate ();
 
3538
     }
 
3539
 
 
3540
-  // We have an uncaught exception as soon as we allocate memory.  This
 
3541
-  // yields uncaught_exception() true during the copy-constructor that
 
3542
-  // initializes the exception object.  See Issue 475.
 
3543
-  __cxa_eh_globals *globals = __cxa_get_globals ();
 
3544
-  globals->uncaughtExceptions += 1;
 
3545
-
 
3546
   memset (ret, 0, sizeof (__cxa_dependent_exception));
 
3547
 
 
3548
   return ret;
 
3549
Index: libstdc++-v3/libsupc++/eh_throw.cc
 
3550
===================================================================
 
3551
--- a/src/libstdc++-v3/libsupc++/eh_throw.cc    (.../tags/gcc_4_8_2_release)
 
3552
+++ b/src/libstdc++-v3/libsupc++/eh_throw.cc    (.../branches/gcc-4_8-branch)
 
3553
@@ -62,6 +62,9 @@
 
3554
 {
 
3555
   PROBE2 (throw, obj, tinfo);
 
3556
 
 
3557
+  __cxa_eh_globals *globals = __cxa_get_globals ();
 
3558
+  globals->uncaughtExceptions += 1;
 
3559
+
 
3560
   // Definitely a primary.
 
3561
   __cxa_refcounted_exception *header
 
3562
     = __get_refcounted_exception_header_from_obj (obj);
 
3563
Index: libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc
 
3564
===================================================================
 
3565
--- a/src/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc     (.../tags/gcc_4_8_2_release)
 
3566
+++ b/src/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc     (.../branches/gcc-4_8-branch)
 
3567
@@ -0,0 +1,52 @@
 
3568
+// Copyright (C) 2013 Free Software Foundation, Inc.
 
3569
+//
 
3570
+// This file is part of the GNU ISO C++ Library.  This library is free
 
3571
+// software; you can redistribute it and/or modify it under the
 
3572
+// terms of the GNU General Public License as published by the
 
3573
+// Free Software Foundation; either version 3, or (at your option)
 
3574
+// any later version.
 
3575
+
 
3576
+// This library is distributed in the hope that it will be useful,
 
3577
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
3578
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
3579
+// GNU General Public License for more details.
 
3580
+
 
3581
+// You should have received a copy of the GNU General Public License along
 
3582
+// with this library; see the file COPYING3.  If not see
 
3583
+// <http://www.gnu.org/licenses/>.
 
3584
+
 
3585
+// 25.3.2 [lib.alg.nth.element]
 
3586
+
 
3587
+// { dg-options "-std=gnu++11" }
 
3588
+
 
3589
+#include <algorithm>
 
3590
+#include <testsuite_hooks.h>
 
3591
+#include <testsuite_iterators.h>
 
3592
+
 
3593
+using __gnu_test::test_container;
 
3594
+using __gnu_test::random_access_iterator_wrapper;
 
3595
+
 
3596
+typedef test_container<int, random_access_iterator_wrapper> Container;
 
3597
+
 
3598
+void test01()
 
3599
+{
 
3600
+  std::vector<int> v = {
 
3601
+    207089,
 
3602
+    202585,
 
3603
+    180067,
 
3604
+    157549,
 
3605
+    211592,
 
3606
+    216096,
 
3607
+    207089
 
3608
+  };
 
3609
+
 
3610
+  Container con(v.data(), v.data() + 7);
 
3611
+
 
3612
+  std::nth_element(con.begin(), con.begin() + 3, con.end());
 
3613
+}
 
3614
+
 
3615
+int main()
 
3616
+{
 
3617
+  test01();
 
3618
+  return 0;
 
3619
+}
 
3620
Index: libstdc++-v3/testsuite/18_support/bad_exception/59392.cc
 
3621
===================================================================
 
3622
--- a/src/libstdc++-v3/testsuite/18_support/bad_exception/59392.cc      (.../tags/gcc_4_8_2_release)
 
3623
+++ b/src/libstdc++-v3/testsuite/18_support/bad_exception/59392.cc      (.../branches/gcc-4_8-branch)
 
3624
@@ -0,0 +1,51 @@
 
3625
+// Copyright (C) 2014 Free Software Foundation, Inc.
 
3626
+//
 
3627
+// This file is part of the GNU ISO C++ Library.  This library is free
 
3628
+// software; you can redistribute it and/or modify it under the
 
3629
+// terms of the GNU General Public License as published by the
 
3630
+// Free Software Foundation; either version 3, or (at your option)
 
3631
+// any later version.
 
3632
+
 
3633
+// This library is distributed in the hope that it will be useful,
 
3634
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
3635
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
3636
+// GNU General Public License for more details.
 
3637
+
 
3638
+// You should have received a copy of the GNU General Public License along
 
3639
+// with this library; see the file COPYING3.  If not see
 
3640
+// <http://www.gnu.org/licenses/>.
 
3641
+
 
3642
+#include <exception>
 
3643
+#include <cstdlib>
 
3644
+
 
3645
+class expected {};
 
3646
+class unexpected {};
 
3647
+class from_handler {};
 
3648
+
 
3649
+static void func_with_exception_spec() throw(expected)
 
3650
+{
 
3651
+  throw unexpected();
 
3652
+}
 
3653
+
 
3654
+static void unexpected_handler()
 
3655
+{
 
3656
+  throw from_handler();
 
3657
+}
 
3658
+
 
3659
+static void terminate_handler()
 
3660
+{
 
3661
+  exit(0);
 
3662
+}
 
3663
+
 
3664
+// libstdc++/59392
 
3665
+int main()
 
3666
+{
 
3667
+  std::set_unexpected(unexpected_handler);
 
3668
+  std::set_terminate(terminate_handler);
 
3669
+  try {
 
3670
+    func_with_exception_spec();
 
3671
+  } catch (expected&) {
 
3672
+    abort();
 
3673
+  }
 
3674
+  abort();
 
3675
+}
 
3676
 
 
3677
Property changes on: libstdc++-v3/testsuite/18_support/bad_exception/59392.cc
 
3678
___________________________________________________________________
 
3679
Added: svn:eol-style
 
3680
## -0,0 +1 ##
 
3681
+LF
 
3682
\ No newline at end of property
 
3683
Index: libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc
 
3684
===================================================================
 
3685
--- a/src/libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc      (.../tags/gcc_4_8_2_release)
 
3686
+++ b/src/libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc      (.../branches/gcc-4_8-branch)
 
3687
@@ -0,0 +1,51 @@
 
3688
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* *-*-solaris* *-*-cygwin *-*-darwin* powerpc-ibm-aix* } }
 
3689
+// { dg-options " -std=gnu++11 -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* powerpc-ibm-aix* } }
 
3690
+// { dg-options " -std=gnu++11 -pthreads" { target *-*-solaris* } }
 
3691
+// { dg-options " -std=gnu++11 " { target *-*-cygwin *-*-darwin* } }
 
3692
+// { dg-require-cstdint "" }
 
3693
+// { dg-require-gthreads "" }
 
3694
+// { dg-require-atomic-builtins "" }
 
3695
+
 
3696
+// Copyright (C) 2014 Free Software Foundation, Inc.
 
3697
+//
 
3698
+// This file is part of the GNU ISO C++ Library.  This library is free
 
3699
+// software; you can redistribute it and/or modify it under the
 
3700
+// terms of the GNU General Public License as published by the
 
3701
+// Free Software Foundation; either version 3, or (at your option)
 
3702
+// any later version.
 
3703
+
 
3704
+// This library is distributed in the hope that it will be useful,
 
3705
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
3706
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
3707
+// GNU General Public License for more details.
 
3708
+
 
3709
+// You should have received a copy of the GNU General Public License along
 
3710
+// with this library; see the file COPYING3.  If not see
 
3711
+// <http://www.gnu.org/licenses/>.
 
3712
+
 
3713
+
 
3714
+#include <future>
 
3715
+#include <testsuite_hooks.h>
 
3716
+
 
3717
+struct X
 
3718
+{
 
3719
+  X() = default;
 
3720
+  X(const X&) = default;
 
3721
+  X(X&& x) { x.moved = true; }
 
3722
+
 
3723
+  void operator()() const { }
 
3724
+
 
3725
+  bool moved = false;
 
3726
+};
 
3727
+
 
3728
+void test01()
 
3729
+{
 
3730
+  X x;
 
3731
+  std::packaged_task<void()> p(x);
 
3732
+  VERIFY( !x.moved );
 
3733
+}
 
3734
+
 
3735
+int main()
 
3736
+{
 
3737
+  test01();
 
3738
+}
 
3739
Index: libstdc++-v3/testsuite/29_atomics/atomic/60658.cc
 
3740
===================================================================
 
3741
--- a/src/libstdc++-v3/testsuite/29_atomics/atomic/60658.cc     (.../tags/gcc_4_8_2_release)
 
3742
+++ b/src/libstdc++-v3/testsuite/29_atomics/atomic/60658.cc     (.../branches/gcc-4_8-branch)
 
3743
@@ -0,0 +1,43 @@
 
3744
+// { dg-require-atomic-builtins "" }
 
3745
+// { dg-options "-std=gnu++11" }
 
3746
+
 
3747
+// Copyright (C) 2014 Free Software Foundation, Inc.
 
3748
+//
 
3749
+// This file is part of the GNU ISO C++ Library.  This library is free
 
3750
+// software; you can redistribute it and/or modify it under the
 
3751
+// terms of the GNU General Public License as published by the
 
3752
+// Free Software Foundation; either version 3, or (at your option)
 
3753
+// any later version.
 
3754
+
 
3755
+// This library is distributed in the hope that it will be useful,
 
3756
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
3757
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
3758
+// GNU General Public License for more details.
 
3759
+
 
3760
+// You should have received a copy of the GNU General Public License along
 
3761
+// with this library; see the file COPYING3.  If not see
 
3762
+// <http://www.gnu.org/licenses/>.
 
3763
+
 
3764
+#include <atomic>
 
3765
+#include <testsuite_hooks.h>
 
3766
+
 
3767
+// libstdc++/60658
 
3768
+
 
3769
+struct Foo {
 
3770
+  char buf[1];
 
3771
+};
 
3772
+
 
3773
+struct Bar {
 
3774
+  char buf[100];
 
3775
+};
 
3776
+
 
3777
+int
 
3778
+main ()
 
3779
+{
 
3780
+  bool test __attribute__((unused)) = true;
 
3781
+
 
3782
+  std::atomic<Foo*> a;
 
3783
+  std::atomic<Bar*> b;
 
3784
+
 
3785
+  VERIFY (a.is_lock_free() == b.is_lock_free());
 
3786
+}
 
3787
Index: libstdc++-v3/testsuite/23_containers/unordered_map/59548.cc
 
3788
===================================================================
 
3789
--- a/src/libstdc++-v3/testsuite/23_containers/unordered_map/59548.cc   (.../tags/gcc_4_8_2_release)
 
3790
+++ b/src/libstdc++-v3/testsuite/23_containers/unordered_map/59548.cc   (.../branches/gcc-4_8-branch)
 
3791
@@ -0,0 +1,34 @@
 
3792
+// { dg-options "-std=gnu++11" }
 
3793
+// { dg-do compile }
 
3794
+// { dg-require-debug-mode "" }
 
3795
+
 
3796
+// Copyright (C) 2014 Free Software Foundation, Inc.
 
3797
+//
 
3798
+// This file is part of the GNU ISO C++ Library.  This library is free
 
3799
+// software; you can redistribute it and/or modify it under the
 
3800
+// terms of the GNU General Public License as published by the
 
3801
+// Free Software Foundation; either version 3, or (at your option)
 
3802
+// any later version.
 
3803
+
 
3804
+// This library is distributed in the hope that it will be useful,
 
3805
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
3806
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
3807
+// GNU General Public License for more details.
 
3808
+
 
3809
+// You should have received a copy of the GNU General Public License along
 
3810
+// with this library; see the file COPYING3.  If not see
 
3811
+// <http://www.gnu.org/licenses/>.
 
3812
+
 
3813
+// libstdc++/59548
 
3814
+
 
3815
+#include <unordered_map>
 
3816
+
 
3817
+int main()
 
3818
+{
 
3819
+  std::unordered_map<int,int> foo{ {0,1} };
 
3820
+  auto i = foo.begin();
 
3821
+  {
 
3822
+    auto bar = foo;
 
3823
+  }
 
3824
+  return i->first;
 
3825
+}
 
3826
Index: libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc
 
3827
===================================================================
 
3828
--- a/src/libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc (.../tags/gcc_4_8_2_release)
 
3829
+++ b/src/libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc (.../branches/gcc-4_8-branch)
 
3830
@@ -0,0 +1,59 @@
 
3831
+// Copyright (C) 2013 Free Software Foundation, Inc.
 
3832
+//
 
3833
+// This file is part of the GNU ISO C++ Library.  This library is free
 
3834
+// software; you can redistribute it and/or modify it under the
 
3835
+// terms of the GNU General Public License as published by the
 
3836
+// Free Software Foundation; either version 3, or (at your option)
 
3837
+// any later version.
 
3838
+
 
3839
+// This library is distributed in the hope that it will be useful,
 
3840
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
3841
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
3842
+// GNU General Public License for more details.
 
3843
+
 
3844
+// You should have received a copy of the GNU General Public License along
 
3845
+// with this library; see the file COPYING3.  If not see
 
3846
+// <http://www.gnu.org/licenses/>.
 
3847
+
 
3848
+// { dg-options "-std=gnu++11" }
 
3849
+
 
3850
+#include <vector>
 
3851
+#include <testsuite_hooks.h>
 
3852
+#include <testsuite_allocator.h>
 
3853
+
 
3854
+struct T { int i; };
 
3855
+
 
3856
+using __gnu_test::uneq_allocator;
 
3857
+
 
3858
+void test01()
 
3859
+{
 
3860
+  bool test __attribute__((unused)) = true;
 
3861
+  typedef uneq_allocator<T> alloc_type;
 
3862
+  typedef std::vector<T, alloc_type> test_type;
 
3863
+  test_type v1(alloc_type(1));
 
3864
+  v1 = { T() };
 
3865
+  auto it = v1.begin();
 
3866
+  test_type v2(std::move(v1));
 
3867
+  VERIFY(1 == v1.get_allocator().get_personality());
 
3868
+  VERIFY(1 == v2.get_allocator().get_personality());
 
3869
+  VERIFY( it == v2.begin() );
 
3870
+}
 
3871
+
 
3872
+void test02()
 
3873
+{
 
3874
+  bool test __attribute__((unused)) = true;
 
3875
+  typedef uneq_allocator<T> alloc_type;
 
3876
+  typedef std::vector<T, alloc_type> test_type;
 
3877
+  test_type v1(alloc_type(1));
 
3878
+  v1 = { T() };
 
3879
+  test_type v2(std::move(v1), alloc_type(2));
 
3880
+  VERIFY(1 == v1.get_allocator().get_personality());
 
3881
+  VERIFY(2 == v2.get_allocator().get_personality());
 
3882
+}
 
3883
+
 
3884
+int main()
 
3885
+{
 
3886
+  test01();
 
3887
+  test02();
 
3888
+  return 0;
 
3889
+}
 
3890
Index: libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc
 
3891
===================================================================
 
3892
--- a/src/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc  (.../tags/gcc_4_8_2_release)
 
3893
+++ b/src/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc  (.../branches/gcc-4_8-branch)
 
3894
@@ -46,16 +46,35 @@
 
3895
   typedef std::vector<T, alloc_type> test_type;
 
3896
   test_type v1(alloc_type(1));
 
3897
   v1.push_back(T());
 
3898
+  auto it = v1.begin();
 
3899
   test_type v2(alloc_type(2));
 
3900
+  v2.push_back(T());
 
3901
   v2 = std::move(v1);
 
3902
-  v2.push_back(T());
 
3903
+  VERIFY( it == v2.begin() );
 
3904
   VERIFY(0 == v1.get_allocator().get_personality());
 
3905
   VERIFY(1 == v2.get_allocator().get_personality());
 
3906
 }
 
3907
 
 
3908
+void test03()
 
3909
+{
 
3910
+  bool test __attribute__((unused)) = true;
 
3911
+  typedef propagating_allocator<T, false> alloc_type;
 
3912
+  typedef std::vector<T, alloc_type> test_type;
 
3913
+  test_type v1(alloc_type(1));
 
3914
+  v1.push_back(T());
 
3915
+  auto it = v1.begin();
 
3916
+  test_type v2(alloc_type(1));
 
3917
+  v2.push_back(T());
 
3918
+  v2 = std::move(v1);
 
3919
+  VERIFY( it == v2.begin() );
 
3920
+  VERIFY(1 == v1.get_allocator().get_personality());
 
3921
+  VERIFY(1 == v2.get_allocator().get_personality());
 
3922
+}
 
3923
+
 
3924
 int main()
 
3925
 {
 
3926
   test01();
 
3927
   test02();
 
3928
+  test03();
 
3929
   return 0;
 
3930
 }
 
3931
Index: libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc
 
3932
===================================================================
 
3933
--- a/src/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc       (.../tags/gcc_4_8_2_release)
 
3934
+++ b/src/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc       (.../branches/gcc-4_8-branch)
 
3935
@@ -0,0 +1,33 @@
 
3936
+// { dg-options "-std=gnu++11" }
 
3937
+// { dg-do compile }
 
3938
+
 
3939
+// Copyright (C) 2013 Free Software Foundation, Inc.
 
3940
+//
 
3941
+// This file is part of the GNU ISO C++ Library.  This library is free
 
3942
+// software; you can redistribute it and/or modify it under the
 
3943
+// terms of the GNU General Public License as published by the
 
3944
+// Free Software Foundation; either version 3, or (at your option)
 
3945
+// any later version.
 
3946
+
 
3947
+// This library is distributed in the hope that it will be useful,
 
3948
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
3949
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
3950
+// GNU General Public License for more details.
 
3951
+
 
3952
+// You should have received a copy of the GNU General Public License along
 
3953
+// with this library; see the file COPYING3.  If not see
 
3954
+// <http://www.gnu.org/licenses/>.
 
3955
+
 
3956
+#include <memory>
 
3957
+
 
3958
+// libstdc++/58839
 
3959
+
 
3960
+struct D {
 
3961
+  void operator()(void*) const noexcept { }
 
3962
+};
 
3963
+
 
3964
+void test01()
 
3965
+{
 
3966
+  std::unique_ptr<void, D> y;
 
3967
+  std::shared_ptr<void> x = std::move(y);
 
3968
+}
 
3969
Index: libstdc++-v3/testsuite/20_util/bind/57899.cc
 
3970
===================================================================
 
3971
--- a/src/libstdc++-v3/testsuite/20_util/bind/57899.cc  (.../tags/gcc_4_8_2_release)
 
3972
+++ b/src/libstdc++-v3/testsuite/20_util/bind/57899.cc  (.../branches/gcc-4_8-branch)
 
3973
@@ -0,0 +1,48 @@
 
3974
+// Copyright (C) 2010-2014 Free Software Foundation, Inc.
 
3975
+//
 
3976
+// This file is part of the GNU ISO C++ Library.  This library is free
 
3977
+// software; you can redistribute it and/or modify it under the
 
3978
+// terms of the GNU General Public License as published by the
 
3979
+// Free Software Foundation; either version 3, or (at your option)
 
3980
+// any later version.
 
3981
+
 
3982
+// This library is distributed in the hope that it will be useful,
 
3983
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
3984
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
3985
+// GNU General Public License for more details.
 
3986
+
 
3987
+// You should have received a copy of the GNU General Public License along
 
3988
+// with this library; see the file COPYING3.  If not see
 
3989
+// <http://www.gnu.org/licenses/>.
 
3990
+
 
3991
+// 20.7.11 Function template bind
 
3992
+
 
3993
+// PR c++/57899
 
3994
+// { dg-do compile }
 
3995
+// { dg-options -std=c++11 }
 
3996
+
 
3997
+#include <functional>
 
3998
+using std::bind;
 
3999
+using std::placeholders::_1;
 
4000
+
 
4001
+struct S { int i; };
 
4002
+
 
4003
+struct P { S s; };
 
4004
+
 
4005
+struct get_s
 
4006
+{
 
4007
+  const S& operator()(const P& p) const { return p.s; }
 
4008
+} gs;
 
4009
+
 
4010
+int gi(const S& s) { return s.i; }
 
4011
+
 
4012
+bool cmp(int, int) { return true; }
 
4013
+
 
4014
+int main()
 
4015
+{
 
4016
+  P p{};
 
4017
+  auto f1 = bind(gs, _1);
 
4018
+  auto f2 = bind(gi, f1);
 
4019
+  auto f3 = bind(cmp, f2, 5);
 
4020
+  f3(p);
 
4021
+}
 
4022
Index: libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
 
4023
===================================================================
 
4024
--- a/src/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt        (.../tags/gcc_4_8_2_release)
 
4025
+++ b/src/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt        (.../branches/gcc-4_8-branch)
 
4026
@@ -403,6 +403,7 @@
 
4027
 FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE6getlocEv@@GLIBCXX_3.4
 
4028
 FUNC:_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4
 
4029
 FUNC:_ZNKSt15basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4
 
4030
+FUNC:_ZNKSt17bad_function_call4whatEv@@GLIBCXX_3.4.18
 
4031
 FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4
 
4032
 FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4
 
4033
 FUNC:_ZNKSt18basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4
 
4034
@@ -590,6 +591,8 @@
 
4035
 FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewm@@GLIBCXX_3.4
 
4036
 FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewx@@GLIBCXX_3.4
 
4037
 FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewy@@GLIBCXX_3.4
 
4038
+FUNC:_ZNKSt8__detail20_Prime_rehash_policy11_M_next_bktEj@@GLIBCXX_3.4.18
 
4039
+FUNC:_ZNKSt8__detail20_Prime_rehash_policy14_M_need_rehashEjjj@@GLIBCXX_3.4.18
 
4040
 FUNC:_ZNKSt8bad_cast4whatEv@@GLIBCXX_3.4.9
 
4041
 FUNC:_ZNKSt8ios_base7failure4whatEv@@GLIBCXX_3.4
 
4042
 FUNC:_ZNKSt8messagesIcE18_M_convert_to_charERKSs@@GLIBCXX_3.4
 
4043
@@ -1207,6 +1210,7 @@
 
4044
 FUNC:_ZNSt11regex_errorD0Ev@@GLIBCXX_3.4.15
 
4045
 FUNC:_ZNSt11regex_errorD1Ev@@GLIBCXX_3.4.15
 
4046
 FUNC:_ZNSt11regex_errorD2Ev@@GLIBCXX_3.4.15
 
4047
+FUNC:_ZNSt11this_thread11__sleep_forENSt6chrono8durationIxSt5ratioILx1ELx1EEEENS1_IxS2_ILx1ELx1000000000EEEE@@GLIBCXX_3.4.18
 
4048
 FUNC:_ZNSt12__basic_fileIcE2fdEv@@GLIBCXX_3.4
 
4049
 FUNC:_ZNSt12__basic_fileIcE4fileEv@@GLIBCXX_3.4.1
 
4050
 FUNC:_ZNSt12__basic_fileIcE4openEPKcSt13_Ios_Openmodei@@GLIBCXX_3.4
 
4051
@@ -1485,6 +1489,11 @@
 
4052
 FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEt@@GLIBCXX_3.4
 
4053
 FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEx@@GLIBCXX_3.4
 
4054
 FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEy@@GLIBCXX_3.4
 
4055
+FUNC:_ZNSt13random_device14_M_init_pretr1ERKSs@@GLIBCXX_3.4.18
 
4056
+FUNC:_ZNSt13random_device16_M_getval_pretr1Ev@@GLIBCXX_3.4.18
 
4057
+FUNC:_ZNSt13random_device7_M_finiEv@@GLIBCXX_3.4.18
 
4058
+FUNC:_ZNSt13random_device7_M_initERKSs@@GLIBCXX_3.4.18
 
4059
+FUNC:_ZNSt13random_device9_M_getvalEv@@GLIBCXX_3.4.18
 
4060
 FUNC:_ZNSt13runtime_errorC1ERKSs@@GLIBCXX_3.4
 
4061
 FUNC:_ZNSt13runtime_errorC2ERKSs@@GLIBCXX_3.4
 
4062
 FUNC:_ZNSt13runtime_errorD0Ev@@GLIBCXX_3.4
 
4063
@@ -1929,6 +1938,8 @@
 
4064
 FUNC:_ZNSt6__norm15_List_node_base8transferEPS0_S1_@@GLIBCXX_3.4.9
 
4065
 FUNC:_ZNSt6__norm15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14
 
4066
 FUNC:_ZNSt6chrono12system_clock3nowEv@@GLIBCXX_3.4.11
 
4067
+FUNC:_ZNSt6chrono3_V212steady_clock3nowEv@@GLIBCXX_3.4.19
 
4068
+FUNC:_ZNSt6chrono3_V212system_clock3nowEv@@GLIBCXX_3.4.19
 
4069
 FUNC:_ZNSt6gslice8_IndexerC1EjRKSt8valarrayIjES4_@@GLIBCXX_3.4
 
4070
 FUNC:_ZNSt6gslice8_IndexerC2EjRKSt8valarrayIjES4_@@GLIBCXX_3.4
 
4071
 FUNC:_ZNSt6locale11_M_coalesceERKS_S1_i@@GLIBCXX_3.4
 
4072
@@ -2467,6 +2478,7 @@
 
4073
 FUNC:__cxa_guard_release@@CXXABI_1.3
 
4074
 FUNC:__cxa_pure_virtual@@CXXABI_1.3
 
4075
 FUNC:__cxa_rethrow@@CXXABI_1.3
 
4076
+FUNC:__cxa_thread_atexit@@CXXABI_1.3.7
 
4077
 FUNC:__cxa_throw@@CXXABI_1.3
 
4078
 FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
 
4079
 FUNC:__cxa_vec_cctor@@CXXABI_1.3
 
4080
@@ -2491,6 +2503,7 @@
 
4081
 OBJECT:0:CXXABI_1.3.4
 
4082
 OBJECT:0:CXXABI_1.3.5
 
4083
 OBJECT:0:CXXABI_1.3.6
 
4084
+OBJECT:0:CXXABI_1.3.7
 
4085
 OBJECT:0:CXXABI_TM_1
 
4086
 OBJECT:0:GLIBCXX_3.4
 
4087
 OBJECT:0:GLIBCXX_3.4.1
 
4088
@@ -2502,6 +2515,8 @@
 
4089
 OBJECT:0:GLIBCXX_3.4.15
 
4090
 OBJECT:0:GLIBCXX_3.4.16
 
4091
 OBJECT:0:GLIBCXX_3.4.17
 
4092
+OBJECT:0:GLIBCXX_3.4.18
 
4093
+OBJECT:0:GLIBCXX_3.4.19
 
4094
 OBJECT:0:GLIBCXX_3.4.2
 
4095
 OBJECT:0:GLIBCXX_3.4.3
 
4096
 OBJECT:0:GLIBCXX_3.4.4
 
4097
@@ -3033,6 +3048,8 @@
 
4098
 OBJECT:1:_ZNSt21__numeric_limits_base9is_moduloE@@GLIBCXX_3.4
 
4099
 OBJECT:1:_ZNSt21__numeric_limits_base9is_signedE@@GLIBCXX_3.4
 
4100
 OBJECT:1:_ZNSt6chrono12system_clock12is_monotonicE@@GLIBCXX_3.4.11
 
4101
+OBJECT:1:_ZNSt6chrono3_V212steady_clock9is_steadyE@@GLIBCXX_3.4.19
 
4102
+OBJECT:1:_ZNSt6chrono3_V212system_clock9is_steadyE@@GLIBCXX_3.4.19
 
4103
 OBJECT:1:_ZSt10adopt_lock@@GLIBCXX_3.4.11
 
4104
 OBJECT:1:_ZSt10defer_lock@@GLIBCXX_3.4.11
 
4105
 OBJECT:1:_ZSt11try_to_lock@@GLIBCXX_3.4.11
 
4106
Index: libstdc++-v3/acinclude.m4
 
4107
===================================================================
 
4108
--- a/src/libstdc++-v3/acinclude.m4     (.../tags/gcc_4_8_2_release)
 
4109
+++ b/src/libstdc++-v3/acinclude.m4     (.../branches/gcc-4_8-branch)
 
4110
@@ -3266,7 +3266,7 @@
 
4111
 fi
 
4112
 
 
4113
 # For libtool versioning info, format is CURRENT:REVISION:AGE
 
4114
-libtool_VERSION=6:18:0
 
4115
+libtool_VERSION=6:19:0
 
4116
 
 
4117
 # Everything parsed; figure out what files and settings to use.
 
4118
 case $enable_symvers in
 
4119
Index: boehm-gc/include/private/gcconfig.h
 
4120
===================================================================
 
4121
--- a/src/boehm-gc/include/private/gcconfig.h   (.../tags/gcc_4_8_2_release)
 
4122
+++ b/src/boehm-gc/include/private/gcconfig.h   (.../branches/gcc-4_8-branch)
 
4123
@@ -837,7 +837,15 @@
 
4124
 #     define NO_PTHREAD_TRYLOCK
 
4125
 #   endif
 
4126
 #   ifdef FREEBSD
 
4127
+#   if defined(__powerpc64__)
 
4128
+#       define ALIGNMENT 8
 
4129
+#       define CPP_WORDSZ 64
 
4130
+#       ifndef HBLKSIZE
 
4131
+#           define HBLKSIZE 4096
 
4132
+#       endif
 
4133
+#   else
 
4134
 #       define ALIGNMENT 4
 
4135
+#   endif
 
4136
 #       define OS_TYPE "FREEBSD"
 
4137
 #       ifndef GC_FREEBSD_THREADS
 
4138
 #           define MPROTECT_VDB
 
4139
Index: boehm-gc/ChangeLog
 
4140
===================================================================
 
4141
--- a/src/boehm-gc/ChangeLog    (.../tags/gcc_4_8_2_release)
 
4142
+++ b/src/boehm-gc/ChangeLog    (.../branches/gcc-4_8-branch)
 
4143
@@ -1,3 +1,8 @@
 
4144
+2013-12-29  Andreas Tobler  <andreast@gcc.gnu.org>
 
4145
+
 
4146
+       Merge from trunk:
 
4147
+       * include/private/gcconfig.h: Add FreeBSD powerpc64 defines.
 
4148
+
 
4149
 2013-10-16  Release Manager
 
4150
 
 
4151
        * GCC 4.8.2 released.
 
4152
Index: contrib/ChangeLog
 
4153
===================================================================
 
4154
--- a/src/contrib/ChangeLog     (.../tags/gcc_4_8_2_release)
 
4155
+++ b/src/contrib/ChangeLog     (.../branches/gcc-4_8-branch)
 
4156
@@ -1,3 +1,7 @@
 
4157
+2013-10-21  Mike Stump  <mikestump@comcast.net>
 
4158
+
 
4159
+       * gcc_update (configure): Update to handle svn 1.8.1.
 
4160
+
 
4161
 2013-10-16  Release Manager
 
4162
 
 
4163
        * GCC 4.8.2 released.
 
4164
Index: contrib/gcc_update
 
4165
===================================================================
 
4166
--- a/src/contrib/gcc_update    (.../tags/gcc_4_8_2_release)
 
4167
+++ b/src/contrib/gcc_update    (.../branches/gcc-4_8-branch)
 
4168
@@ -382,7 +382,7 @@
 
4169
        fi
 
4170
 
 
4171
        revision=`$GCC_SVN info | awk '/Revision:/ { print $2 }'`
 
4172
-       branch=`$GCC_SVN info | sed -ne "/URL:/ {
 
4173
+       branch=`$GCC_SVN info | sed -ne "/^URL:/ {
 
4174
            s,.*/trunk,trunk,
 
4175
            s,.*/branches/,,
 
4176
            s,.*/tags/,,
 
4177
Index: libatomic/cas_n.c
 
4178
===================================================================
 
4179
--- a/src/libatomic/cas_n.c     (.../tags/gcc_4_8_2_release)
 
4180
+++ b/src/libatomic/cas_n.c     (.../branches/gcc-4_8-branch)
 
4181
@@ -51,10 +51,9 @@
 
4182
 #if !DONE && N <= WORDSIZE && defined(atomic_compare_exchange_w)
 
4183
 bool
 
4184
 SIZE(libat_compare_exchange) (UTYPE *mptr, UTYPE *eptr, UTYPE newval,
 
4185
-                             int smodel, int fmodel UNUSED)
 
4186
+                             int smodel, int fmodel)
 
4187
 {
 
4188
   UWORD mask, shift, weval, woldval, wnewval, t, *wptr;
 
4189
-  bool ret = false;
 
4190
 
 
4191
   pre_barrier (smodel);
 
4192
 
 
4193
@@ -82,12 +81,13 @@
 
4194
     }
 
4195
   while (!atomic_compare_exchange_w (wptr, &woldval, t, true,
 
4196
                                     __ATOMIC_RELAXED, __ATOMIC_RELAXED));
 
4197
-  ret = true;
 
4198
+  post_barrier (smodel);
 
4199
+  return true;
 
4200
+
 
4201
  failure:
 
4202
   *eptr = woldval >> shift;
 
4203
-
 
4204
-  post_barrier (smodel);
 
4205
-  return ret;
 
4206
+  post_barrier (fmodel);
 
4207
+  return false;
 
4208
 }
 
4209
 
 
4210
 #define DONE 1
 
4211
@@ -102,18 +102,17 @@
 
4212
 {
 
4213
   UTYPE oldval;
 
4214
   UWORD magic;
 
4215
-  bool ret = false;
 
4216
+  bool ret;
 
4217
 
 
4218
   pre_seq_barrier (smodel);
 
4219
   magic = protect_start (mptr);
 
4220
 
 
4221
   oldval = *mptr;
 
4222
-  if (oldval == *eptr)
 
4223
-    {
 
4224
-      *mptr = newval;
 
4225
-      ret = true;
 
4226
-    }
 
4227
-  *eptr = oldval;
 
4228
+  ret = (oldval == *eptr);
 
4229
+  if (ret)
 
4230
+    *mptr = newval;
 
4231
+  else
 
4232
+    *eptr = oldval;
 
4233
 
 
4234
   protect_end (mptr, magic);
 
4235
   post_seq_barrier (smodel);
 
4236
Index: libatomic/ChangeLog
 
4237
===================================================================
 
4238
--- a/src/libatomic/ChangeLog   (.../tags/gcc_4_8_2_release)
 
4239
+++ b/src/libatomic/ChangeLog   (.../branches/gcc-4_8-branch)
 
4240
@@ -1,3 +1,9 @@
 
4241
+2014-02-20  Richard Henderson  <rth@redhat.com>
 
4242
+
 
4243
+       PR c++/60272
 
4244
+       * cas_n.c (libat_compare_exchange): Conditionalize on failure
 
4245
+       the store back to EPTR.
 
4246
+
 
4247
 2013-10-16  Release Manager
 
4248
 
 
4249
        * GCC 4.8.2 released.
 
4250
Index: libbacktrace/configure
 
4251
===================================================================
 
4252
--- a/src/libbacktrace/configure        (.../tags/gcc_4_8_2_release)
 
4253
+++ b/src/libbacktrace/configure        (.../branches/gcc-4_8-branch)
 
4254
@@ -11667,12 +11667,13 @@
 
4255
   return 0;
 
4256
 }
 
4257
 _ACEOF
 
4258
-if ac_fn_c_try_compile "$LINENO"; then :
 
4259
+if ac_fn_c_try_link "$LINENO"; then :
 
4260
   have_unwind_getipinfo=yes
 
4261
 else
 
4262
   have_unwind_getipinfo=no
 
4263
 fi
 
4264
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
4265
+rm -f core conftest.err conftest.$ac_objext \
 
4266
+    conftest$ac_exeext conftest.$ac_ext
 
4267
   CFLAGS="$ac_save_CFLAGS"
 
4268
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_unwind_getipinfo" >&5
 
4269
 $as_echo "$have_unwind_getipinfo" >&6; }
 
4270
Index: libbacktrace/Makefile.in
 
4271
===================================================================
 
4272
--- a/src/libbacktrace/Makefile.in      (.../tags/gcc_4_8_2_release)
 
4273
+++ b/src/libbacktrace/Makefile.in      (.../branches/gcc-4_8-branch)
 
4274
@@ -16,7 +16,7 @@
 
4275
 @SET_MAKE@
 
4276
 
 
4277
 # Makefile.am -- Backtrace Makefile.
 
4278
-# Copyright (C) 2012 Free Software Foundation, Inc.
 
4279
+# Copyright (C) 2012-2013 Free Software Foundation, Inc.
 
4280
 
 
4281
 # Redistribution and use in source and binary forms, with or without
 
4282
 # modification, are permitted provided that the following conditions are
 
4283
Index: libbacktrace/dwarf.c
 
4284
===================================================================
 
4285
--- a/src/libbacktrace/dwarf.c  (.../tags/gcc_4_8_2_release)
 
4286
+++ b/src/libbacktrace/dwarf.c  (.../branches/gcc-4_8-branch)
 
4287
@@ -2507,7 +2507,6 @@
 
4288
   if (pfvec->count == 0)
 
4289
     return;
 
4290
 
 
4291
-  addrs = (struct function_addrs *) pfvec->vec.base;
 
4292
   addrs_count = pfvec->count;
 
4293
 
 
4294
   if (fvec == NULL)
 
4295
@@ -2514,12 +2513,17 @@
 
4296
     {
 
4297
       if (!backtrace_vector_release (state, &lvec.vec, error_callback, data))
 
4298
        return;
 
4299
+      addrs = (struct function_addrs *) pfvec->vec.base;
 
4300
     }
 
4301
   else
 
4302
     {
 
4303
       /* Finish this list of addresses, but leave the remaining space in
 
4304
         the vector available for the next function unit.  */
 
4305
-      backtrace_vector_finish (state, &fvec->vec);
 
4306
+      addrs = ((struct function_addrs *)
 
4307
+              backtrace_vector_finish (state, &fvec->vec,
 
4308
+                                       error_callback, data));
 
4309
+      if (addrs == NULL)
 
4310
+       return;
 
4311
       fvec->count = 0;
 
4312
     }
 
4313
 
 
4314
Index: libbacktrace/ChangeLog
 
4315
===================================================================
 
4316
--- a/src/libbacktrace/ChangeLog        (.../tags/gcc_4_8_2_release)
 
4317
+++ b/src/libbacktrace/ChangeLog        (.../branches/gcc-4_8-branch)
 
4318
@@ -1,3 +1,28 @@
 
4319
+2014-02-07  Misty De Meo  <misty@brew.sh>
 
4320
+
 
4321
+       PR target/58710
 
4322
+       * configure.ac: Use AC_LINK_IFELSE in check for
 
4323
+       _Unwind_GetIPInfo.
 
4324
+       * configure: Regenerate.
 
4325
+
 
4326
+2013-12-05  Ian Lance Taylor  <iant@google.com>
 
4327
+
 
4328
+       * alloc.c (backtrace_vector_finish): Add error_callback and data
 
4329
+       parameters.  Call backtrace_vector_release.  Return address base.
 
4330
+       * mmap.c (backtrace_vector_finish): Add error_callback and data
 
4331
+       parameters.  Return address base.
 
4332
+       * dwarf.c (read_function_info): Get new address base from
 
4333
+       backtrace_vector_finish.
 
4334
+       * internal.h (backtrace_vector_finish): Update declaration.
 
4335
+
 
4336
+2013-11-30  Ian Lance Taylor  <iant@google.com>
 
4337
+
 
4338
+       Backport from mainline:
 
4339
+       2013-10-17  Ian Lance Taylor  <iant@google.com>
 
4340
+
 
4341
+       * elf.c (elf_add): Don't get the wrong offsets if a debug section
 
4342
+       is missing.
 
4343
+
 
4344
 2013-10-16  Release Manager
 
4345
 
 
4346
        * GCC 4.8.2 released.
 
4347
Index: libbacktrace/elf.c
 
4348
===================================================================
 
4349
--- a/src/libbacktrace/elf.c    (.../tags/gcc_4_8_2_release)
 
4350
+++ b/src/libbacktrace/elf.c    (.../branches/gcc-4_8-branch)
 
4351
@@ -725,6 +725,8 @@
 
4352
     {
 
4353
       off_t end;
 
4354
 
 
4355
+      if (sections[i].size == 0)
 
4356
+       continue;
 
4357
       if (min_offset == 0 || sections[i].offset < min_offset)
 
4358
        min_offset = sections[i].offset;
 
4359
       end = sections[i].offset + sections[i].size;
 
4360
@@ -751,8 +753,13 @@
 
4361
   descriptor = -1;
 
4362
 
 
4363
   for (i = 0; i < (int) DEBUG_MAX; ++i)
 
4364
-    sections[i].data = ((const unsigned char *) debug_view.data
 
4365
-                       + (sections[i].offset - min_offset));
 
4366
+    {
 
4367
+      if (sections[i].size == 0)
 
4368
+       sections[i].data = NULL;
 
4369
+      else
 
4370
+       sections[i].data = ((const unsigned char *) debug_view.data
 
4371
+                           + (sections[i].offset - min_offset));
 
4372
+    }
 
4373
 
 
4374
   if (!backtrace_dwarf_add (state, base_address,
 
4375
                            sections[DEBUG_INFO].data,
 
4376
Index: libbacktrace/internal.h
 
4377
===================================================================
 
4378
--- a/src/libbacktrace/internal.h       (.../tags/gcc_4_8_2_release)
 
4379
+++ b/src/libbacktrace/internal.h       (.../branches/gcc-4_8-branch)
 
4380
@@ -192,13 +192,17 @@
 
4381
                                    struct backtrace_vector *vec);
 
4382
 
 
4383
 /* Finish the current allocation on VEC.  Prepare to start a new
 
4384
-   allocation.  The finished allocation will never be freed.  */
 
4385
+   allocation.  The finished allocation will never be freed.  Returns
 
4386
+   a pointer to the base of the finished entries, or NULL on
 
4387
+   failure.  */
 
4388
 
 
4389
-extern void backtrace_vector_finish (struct backtrace_state *state,
 
4390
-                                    struct backtrace_vector *vec);
 
4391
+extern void* backtrace_vector_finish (struct backtrace_state *state,
 
4392
+                                     struct backtrace_vector *vec,
 
4393
+                                     backtrace_error_callback error_callback,
 
4394
+                                     void *data);
 
4395
 
 
4396
-/* Release any extra space allocated for VEC.  Returns 1 on success, 0
 
4397
-   on failure.  */
 
4398
+/* Release any extra space allocated for VEC.  This may change
 
4399
+   VEC->base.  Returns 1 on success, 0 on failure.  */
 
4400
 
 
4401
 extern int backtrace_vector_release (struct backtrace_state *state,
 
4402
                                     struct backtrace_vector *vec,
 
4403
Index: libbacktrace/configure.ac
 
4404
===================================================================
 
4405
--- a/src/libbacktrace/configure.ac     (.../tags/gcc_4_8_2_release)
 
4406
+++ b/src/libbacktrace/configure.ac     (.../branches/gcc-4_8-branch)
 
4407
@@ -144,7 +144,7 @@
 
4408
   ac_save_CFFLAGS="$CFLAGS"
 
4409
   CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
 
4410
   AC_MSG_CHECKING([for _Unwind_GetIPInfo])
 
4411
-  AC_COMPILE_IFELSE(
 
4412
+  AC_LINK_IFELSE(
 
4413
     [AC_LANG_PROGRAM(
 
4414
        [#include "unwind.h"
 
4415
        struct _Unwind_Context *context;
 
4416
Index: libbacktrace/alloc.c
 
4417
===================================================================
 
4418
--- a/src/libbacktrace/alloc.c  (.../tags/gcc_4_8_2_release)
 
4419
+++ b/src/libbacktrace/alloc.c  (.../branches/gcc-4_8-branch)
 
4420
@@ -113,12 +113,24 @@
 
4421
 
 
4422
 /* Finish the current allocation on VEC.  */
 
4423
 
 
4424
-void
 
4425
-backtrace_vector_finish (struct backtrace_state *state ATTRIBUTE_UNUSED,
 
4426
-                        struct backtrace_vector *vec)
 
4427
+void *
 
4428
+backtrace_vector_finish (struct backtrace_state *state,
 
4429
+                        struct backtrace_vector *vec,
 
4430
+                        backtrace_error_callback error_callback,
 
4431
+                        void *data)
 
4432
 {
 
4433
-  vec->base = (char *) vec->base + vec->size;
 
4434
+  void *ret;
 
4435
+
 
4436
+  /* With this allocator we call realloc in backtrace_vector_grow,
 
4437
+     which means we can't easily reuse the memory here.  So just
 
4438
+     release it.  */
 
4439
+  if (!backtrace_vector_release (state, vec, error_callback, data))
 
4440
+    return NULL;
 
4441
+  ret = vec->base;
 
4442
+  vec->base = NULL;
 
4443
   vec->size = 0;
 
4444
+  vec->alc = 0;
 
4445
+  return ret;
 
4446
 }
 
4447
 
 
4448
 /* Release any extra space allocated for VEC.  */
 
4449
Index: libbacktrace/mmap.c
 
4450
===================================================================
 
4451
--- a/src/libbacktrace/mmap.c   (.../tags/gcc_4_8_2_release)
 
4452
+++ b/src/libbacktrace/mmap.c   (.../branches/gcc-4_8-branch)
 
4453
@@ -230,12 +230,19 @@
 
4454
 
 
4455
 /* Finish the current allocation on VEC.  */
 
4456
 
 
4457
-void
 
4458
-backtrace_vector_finish (struct backtrace_state *state ATTRIBUTE_UNUSED,
 
4459
-                        struct backtrace_vector *vec)
 
4460
+void *
 
4461
+backtrace_vector_finish (
 
4462
+  struct backtrace_state *state ATTRIBUTE_UNUSED,
 
4463
+  struct backtrace_vector *vec,
 
4464
+  backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
 
4465
+  void *data ATTRIBUTE_UNUSED)
 
4466
 {
 
4467
+  void *ret;
 
4468
+
 
4469
+  ret = vec->base;
 
4470
   vec->base = (char *) vec->base + vec->size;
 
4471
   vec->size = 0;
 
4472
+  return ret;
 
4473
 }
 
4474
 
 
4475
 /* Release any extra space allocated for VEC.  */
 
4476
Index: libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
 
4477
===================================================================
 
4478
--- a/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c     (.../tags/gcc_4_8_2_release)
 
4479
+++ b/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c     (.../branches/gcc-4_8-branch)
 
4480
@@ -39,10 +39,11 @@
 
4481
 #include <pango/pango.h>
 
4482
 #include <pango/pangoft2.h>
 
4483
 #include <pango/pangofc-font.h>
 
4484
-#include <freetype/ftglyph.h>
 
4485
-#include <freetype/ftoutln.h>
 
4486
-#include <freetype/fttypes.h>
 
4487
-#include <freetype/tttables.h>
 
4488
+#include <ft2build.h>
 
4489
+#include FT_GLYPH_H
 
4490
+#include FT_OUTLINE_H
 
4491
+#include FT_TYPES_H
 
4492
+#include FT_TRUETYPE_TABLES_H
 
4493
 #include "gdkfont.h"
 
4494
 #include "gtkpeer.h"
 
4495
 #include "gnu_java_awt_peer_gtk_GdkFontPeer.h"
 
4496
Index: libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c
 
4497
===================================================================
 
4498
--- a/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c     (.../tags/gcc_4_8_2_release)
 
4499
+++ b/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c     (.../branches/gcc-4_8-branch)
 
4500
@@ -42,8 +42,9 @@
 
4501
 #include <pango/pango.h>
 
4502
 #include <pango/pangoft2.h>
 
4503
 #include <pango/pangofc-font.h>
 
4504
-#include <freetype/ftglyph.h>
 
4505
-#include <freetype/ftoutln.h>
 
4506
+#include <ft2build.h>
 
4507
+#include FT_GLYPH_H
 
4508
+#include FT_OUTLINE_H
 
4509
 #include "jcl.h"
 
4510
 #include "gdkfont.h"
 
4511
 #include "gnu_java_awt_peer_gtk_FreetypeGlyphVector.h"
 
4512
Index: libjava/classpath/ChangeLog.gcj
 
4513
===================================================================
 
4514
--- a/src/libjava/classpath/ChangeLog.gcj       (.../tags/gcc_4_8_2_release)
 
4515
+++ b/src/libjava/classpath/ChangeLog.gcj       (.../branches/gcc-4_8-branch)
 
4516
@@ -1,3 +1,9 @@
 
4517
+2013-11-29  Matthias Klose  <doko@ubuntu.com>
 
4518
+
 
4519
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c,
 
4520
+       native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c:
 
4521
+       Fix freetype includes.
 
4522
+
 
4523
 2013-03-22  Jakub Jelinek  <jakub@redhat.com>
 
4524
 
 
4525
        PR other/43620
 
4526
Index: libjava/classpath
 
4527
===================================================================
 
4528
--- a/src/libjava/classpath     (.../tags/gcc_4_8_2_release)
 
4529
+++ b/src/libjava/classpath     (.../branches/gcc-4_8-branch)
 
4530
 
 
4531
Property changes on: libjava/classpath
 
4532
___________________________________________________________________
 
4533
Modified: svn:mergeinfo
 
4534
   Merged /trunk/libjava/classpath:r206395
 
4535
Index: libjava/ChangeLog
 
4536
===================================================================
 
4537
--- a/src/libjava/ChangeLog     (.../tags/gcc_4_8_2_release)
 
4538
+++ b/src/libjava/ChangeLog     (.../branches/gcc-4_8-branch)
 
4539
@@ -1,3 +1,14 @@
 
4540
+2014-04-01  Dominique d'Humieres <dominiq@lps.ens.fr>
 
4541
+           Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
4542
+
 
4543
+       PR libgcj/55637
 
4544
+       * testsuite/libjava.lang/sourcelocation.xfail: New file.
 
4545
+
 
4546
+2014-03-11  Uros Bizjak  <ubizjak@gmail.com>
 
4547
+
 
4548
+       * java/lang/natObject.cc (_Jv_MonitorEnter): Add missing parenthesis
 
4549
+       around comparison with (address | LOCKED) in JvAssert.
 
4550
+
 
4551
 2013-10-16  Release Manager
 
4552
 
 
4553
        * GCC 4.8.2 released.
 
4554
Index: libjava/testsuite/libjava.lang/sourcelocation.xfail
 
4555
===================================================================
 
4556
--- a/src/libjava/testsuite/libjava.lang/sourcelocation.xfail   (.../tags/gcc_4_8_2_release)
 
4557
+++ b/src/libjava/testsuite/libjava.lang/sourcelocation.xfail   (.../branches/gcc-4_8-branch)
 
4558
@@ -0,0 +1 @@
 
4559
+xfail-output
 
4560
Index: libjava/java/lang/natObject.cc
 
4561
===================================================================
 
4562
--- a/src/libjava/java/lang/natObject.cc        (.../tags/gcc_4_8_2_release)
 
4563
+++ b/src/libjava/java/lang/natObject.cc        (.../branches/gcc-4_8-branch)
 
4564
@@ -929,7 +929,7 @@
 
4565
          // only be held by other threads waiting for conversion, and
 
4566
          // they, like us, drop it quickly without blocking.
 
4567
          _Jv_MutexLock(&(hl->si.mutex));
 
4568
-         JvAssert(he -> address == address | LOCKED );
 
4569
+         JvAssert(he -> address == (address | LOCKED));
 
4570
          release_set(&(he -> address), (address | REQUEST_CONVERSION | HEAVY));
 
4571
                                // release lock on he
 
4572
          LOG(REQ_CONV, (address | REQUEST_CONVERSION | HEAVY), self);
 
4573
@@ -961,7 +961,7 @@
 
4574
     }
 
4575
   obj_addr_t was_heavy = (address & HEAVY);
 
4576
   if ((address & LOCKED) ||
 
4577
-      !compare_and_swap(&(he -> address), address, (address | LOCKED )))
 
4578
+      !compare_and_swap(&(he -> address), address, address | LOCKED ))
 
4579
     {
 
4580
       wait_unlocked(he);
 
4581
       goto retry;
 
4582
Index: gnattools/configure
 
4583
===================================================================
 
4584
--- a/src/gnattools/configure   (.../tags/gcc_4_8_2_release)
 
4585
+++ b/src/gnattools/configure   (.../branches/gcc-4_8-branch)
 
4586
@@ -2029,66 +2029,59 @@
 
4587
 # Per-target case statement
 
4588
 # -------------------------
 
4589
 case "${target}" in
 
4590
-  alpha*-dec-vx*) # Unlike all other Vxworks
 
4591
+  *-*-aix*)
 
4592
+    TOOLS_TARGET_PAIRS="\
 
4593
+    mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
 
4594
+    indepsw.adb<indepsw-aix.adb"
 
4595
     ;;
 
4596
-  m68k*-wrs-vx* \
 
4597
-  | powerpc*-wrs-vxworks \
 
4598
-  | sparc*-wrs-vx* \
 
4599
-  | *86-wrs-vxworks \
 
4600
-  | mips*-wrs-vx*)
 
4601
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb"
 
4602
+  *-*-darwin*)
 
4603
+    TOOLS_TARGET_PAIRS="\
 
4604
+    mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \
 
4605
+    indepsw.adb<indepsw-darwin.adb"
 
4606
     ;;
 
4607
-  sparc-sun-solaris*)
 
4608
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
 
4609
+  *-*-freebsd*)
 
4610
+    TOOLS_TARGET_PAIRS="\
 
4611
+    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
 
4612
+    indepsw.adb<indepsw-gnu.adb"
 
4613
     ;;
 
4614
-  *86-*-solaris2* | x86_64-*-solaris2.1[0-9]*)
 
4615
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
 
4616
-    ;;
 
4617
-  *86-*-linux* \
 
4618
-  | powerpc*-*-linux* \
 
4619
-  | *ia64-*-linux* \
 
4620
-  | alpha*-*-linux* \
 
4621
-  | sparc*-*-linux* \
 
4622
-  | hppa*-*-linux* \
 
4623
-  | *x86_64-*-linux*)
 
4624
+  *-*-linux*)
 
4625
     TOOLS_TARGET_PAIRS="\
 
4626
     mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
 
4627
     indepsw.adb<indepsw-gnu.adb"
 
4628
     ;;
 
4629
-  s390*-*-linux*)
 
4630
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb"
 
4631
+  *-*-lynxos*)
 
4632
+    TOOLS_TARGET_PAIRS="\
 
4633
+    mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
 
4634
+    indepsw.adb<indepsw-gnu.adb"
 
4635
     ;;
 
4636
-  *86-*-freebsd*)
 
4637
+  *-*-solaris*)
 
4638
+    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
 
4639
+    ;;
 
4640
+  *-*-vxworks*)
 
4641
     TOOLS_TARGET_PAIRS="\
 
4642
-    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
 
4643
+    mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb \
 
4644
     indepsw.adb<indepsw-gnu.adb"
 
4645
     ;;
 
4646
-  hppa*-hp-hpux10*) # Unlike hpux11
 
4647
+  hppa*-hp-hpux10*)
 
4648
     ;;
 
4649
   hppa*-hp-hpux11*)
 
4650
     TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-hpux.adb"
 
4651
     ;;
 
4652
-  *-ibm-aix*)
 
4653
-    TOOLS_TARGET_PAIRS="\
 
4654
-    mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
 
4655
-    indepsw.adb<indepsw-aix.adb"
 
4656
+  ia64-hp-hpux11*)
 
4657
+    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-ia64-hpux.adb"
 
4658
     ;;
 
4659
-  alpha*-dec-vms* | alpha*-dec-openvms* | alpha*-dec-vms* \
 
4660
-  | alpha*-hp-vms* | alpha*-hp-openvms* | alpha*-hp-vms*)
 
4661
+  alpha*-*-vms* | alpha*-*-openvms*)
 
4662
     TOOLS_TARGET_PAIRS="\
 
4663
     mlib-tgt-specific.adb<mlib-tgt-specific-vms-alpha.adb \
 
4664
     symbols.adb<symbols-vms.adb \
 
4665
     symbols-processing.adb<symbols-processing-vms-alpha.adb"
 
4666
-
 
4667
     EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
 
4668
     ;;
 
4669
-  ia64*-dec-vms* | ia64*-dec-openvms* | ia64*-dec-vms* \
 
4670
-  | ia64*-hp-vms* | ia64*-hp-openvms* | ia64*-hp-vms*)
 
4671
+  ia64-*-vms* | ia64-*-openvms*)
 
4672
     TOOLS_TARGET_PAIRS="\
 
4673
     mlib-tgt-specific.adb<mlib-tgt-specific-vms-ia64.adb \
 
4674
     symbols.adb<symbols-vms.adb \
 
4675
     symbols-processing.adb<symbols-processing-vms-ia64.adb"
 
4676
-
 
4677
     EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
 
4678
     ;;
 
4679
   *-*-cygwin32* | *-*-mingw32* | *-*-pe)
 
4680
@@ -2097,14 +2090,6 @@
 
4681
     indepsw.adb<indepsw-mingw.adb"
 
4682
     EXTRA_GNATTOOLS='../../gnatdll$(exeext)'
 
4683
     ;;
 
4684
-  *-*-darwin*)
 
4685
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb"
 
4686
-    ;;
 
4687
-  *-*-lynxos)
 
4688
-    TOOLS_TARGET_PAIRS="\
 
4689
-    mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
 
4690
-    indepsw.adb<indepsw-gnu.adb"
 
4691
-    ;;
 
4692
 esac
 
4693
 
 
4694
 # From user or toplevel makefile.
 
4695
Index: gnattools/Makefile.in
 
4696
===================================================================
 
4697
--- a/src/gnattools/Makefile.in (.../tags/gcc_4_8_2_release)
 
4698
+++ b/src/gnattools/Makefile.in (.../branches/gcc-4_8-branch)
 
4699
@@ -24,6 +24,8 @@
 
4700
 libdir = @libdir@
 
4701
 build = @build@
 
4702
 target = @target@
 
4703
+host = @host@
 
4704
+host_alias = @host_alias@
 
4705
 prefix = @prefix@
 
4706
 INSTALL = @INSTALL@
 
4707
 INSTALL_DATA = @INSTALL_DATA@
 
4708
@@ -84,6 +86,7 @@
 
4709
 TOOLS_FLAGS_TO_PASS_RE= \
 
4710
        "CC=../../xgcc -B../../" \
 
4711
        "CFLAGS=$(CFLAGS)" \
 
4712
+       "LDFLAGS=$(LDFLAGS)" \
 
4713
        "ADAFLAGS=$(ADAFLAGS)" \
 
4714
        "ADA_CFLAGS=$(ADA_CFLAGS)" \
 
4715
        "INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
 
4716
@@ -97,6 +100,22 @@
 
4717
        "TOOLSCASE=cross"
 
4718
 
 
4719
 # Variables for gnattools, cross
 
4720
+ifeq ($(build), $(host))
 
4721
+  GNATMAKE_FOR_HOST=gnatmake
 
4722
+  GNATLINK_FOR_HOST=gnatlink
 
4723
+  GNATBIND_FOR_HOST=gnatbind
 
4724
+  GNATLS_FOR_HOST=gnatls
 
4725
+else
 
4726
+  GNATMAKE_FOR_HOST=$(host_alias)-gnatmake
 
4727
+  GNATLINK_FOR_HOST=$(host_alias)-gnatlink
 
4728
+  GNATBIND_FOR_HOST=$(host_alias)-gnatbind
 
4729
+  GNATLS_FOR_HOST=$(host_alias)-gnatls
 
4730
+endif
 
4731
+
 
4732
+# Put the host RTS dir first in the PATH to hide the default runtime
 
4733
+# files that are among the sources
 
4734
+RTS_DIR:=$(strip $(subst \,/,$(shell $(GNATLS_FOR_HOST) -v | grep adalib )))
 
4735
+
 
4736
 TOOLS_FLAGS_TO_PASS_CROSS= \
 
4737
        "CC=$(CC)" \
 
4738
        "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
 
4739
@@ -108,9 +127,9 @@
 
4740
        "exeext=$(exeext)" \
 
4741
        "fsrcdir=$(fsrcdir)" \
 
4742
        "srcdir=$(fsrcdir)" \
 
4743
-       "GNATMAKE=gnatmake" \
 
4744
-       "GNATLINK=gnatlink" \
 
4745
-       "GNATBIND=gnatbind" \
 
4746
+       "GNATMAKE=$(GNATMAKE_FOR_HOST)" \
 
4747
+       "GNATLINK=$(GNATLINK_FOR_HOST)" \
 
4748
+       "GNATBIND=$(GNATBIND_FOR_HOST)" \
 
4749
        "TOOLSCASE=cross" \
 
4750
        "LIBGNAT="
 
4751
 
 
4752
@@ -179,11 +198,6 @@
 
4753
        $(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
 
4754
          $(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools
 
4755
 
 
4756
-# For cross builds of gnattools,
 
4757
-# put the host RTS dir first in the PATH to hide the default runtime
 
4758
-# files that are among the sources
 
4759
-# FIXME: This should be done in configure.
 
4760
-RTS_DIR:=$(strip $(subst \,/,$(shell gnatls -v | grep adalib )))
 
4761
 gnattools-cross: $(GCC_DIR)/stamp-tools
 
4762
        # gnattools1-re
 
4763
        $(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
 
4764
Index: gnattools/configure.ac
 
4765
===================================================================
 
4766
--- a/src/gnattools/configure.ac        (.../tags/gcc_4_8_2_release)
 
4767
+++ b/src/gnattools/configure.ac        (.../branches/gcc-4_8-branch)
 
4768
@@ -69,66 +69,59 @@
 
4769
 # Per-target case statement
 
4770
 # -------------------------
 
4771
 case "${target}" in
 
4772
-  alpha*-dec-vx*) # Unlike all other Vxworks
 
4773
+  *-*-aix*)
 
4774
+    TOOLS_TARGET_PAIRS="\
 
4775
+    mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
 
4776
+    indepsw.adb<indepsw-aix.adb"
 
4777
     ;;
 
4778
-  m68k*-wrs-vx* \
 
4779
-  | powerpc*-wrs-vxworks \
 
4780
-  | sparc*-wrs-vx* \
 
4781
-  | *86-wrs-vxworks \
 
4782
-  | mips*-wrs-vx*)
 
4783
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb"
 
4784
+  *-*-darwin*)
 
4785
+    TOOLS_TARGET_PAIRS="\
 
4786
+    mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \
 
4787
+    indepsw.adb<indepsw-darwin.adb"
 
4788
     ;;
 
4789
-  sparc-sun-solaris*)
 
4790
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
 
4791
+  *-*-freebsd*)
 
4792
+    TOOLS_TARGET_PAIRS="\
 
4793
+    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
 
4794
+    indepsw.adb<indepsw-gnu.adb"
 
4795
     ;;
 
4796
-  *86-*-solaris2* | x86_64-*-solaris2.1[[0-9]]*)
 
4797
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
 
4798
-    ;;
 
4799
-  *86-*-linux* \
 
4800
-  | powerpc*-*-linux* \
 
4801
-  | *ia64-*-linux* \
 
4802
-  | alpha*-*-linux* \
 
4803
-  | sparc*-*-linux* \
 
4804
-  | hppa*-*-linux* \
 
4805
-  | *x86_64-*-linux*)
 
4806
+  *-*-linux*)
 
4807
     TOOLS_TARGET_PAIRS="\
 
4808
     mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
 
4809
     indepsw.adb<indepsw-gnu.adb"
 
4810
     ;;
 
4811
-  s390*-*-linux*)
 
4812
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb"
 
4813
+  *-*-lynxos*)
 
4814
+    TOOLS_TARGET_PAIRS="\
 
4815
+    mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
 
4816
+    indepsw.adb<indepsw-gnu.adb"
 
4817
     ;;
 
4818
-  *86-*-freebsd*)
 
4819
+  *-*-solaris*)
 
4820
+    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
 
4821
+    ;;
 
4822
+  *-*-vxworks*)
 
4823
     TOOLS_TARGET_PAIRS="\
 
4824
-    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
 
4825
+    mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb \
 
4826
     indepsw.adb<indepsw-gnu.adb"
 
4827
     ;;
 
4828
-  hppa*-hp-hpux10*) # Unlike hpux11
 
4829
+  hppa*-hp-hpux10*)
 
4830
     ;;
 
4831
   hppa*-hp-hpux11*)
 
4832
     TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-hpux.adb"
 
4833
     ;;
 
4834
-  *-ibm-aix*)
 
4835
-    TOOLS_TARGET_PAIRS="\
 
4836
-    mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
 
4837
-    indepsw.adb<indepsw-aix.adb"
 
4838
+  ia64-hp-hpux11*)
 
4839
+    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-ia64-hpux.adb"
 
4840
     ;;
 
4841
-  alpha*-dec-vms* | alpha*-dec-openvms* | alpha*-dec-vms* \
 
4842
-  | alpha*-hp-vms* | alpha*-hp-openvms* | alpha*-hp-vms*)
 
4843
+  alpha*-*-vms* | alpha*-*-openvms*)
 
4844
     TOOLS_TARGET_PAIRS="\
 
4845
     mlib-tgt-specific.adb<mlib-tgt-specific-vms-alpha.adb \
 
4846
     symbols.adb<symbols-vms.adb \
 
4847
     symbols-processing.adb<symbols-processing-vms-alpha.adb"
 
4848
-
 
4849
     EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
 
4850
     ;;
 
4851
-  ia64*-dec-vms* | ia64*-dec-openvms* | ia64*-dec-vms* \
 
4852
-  | ia64*-hp-vms* | ia64*-hp-openvms* | ia64*-hp-vms*)
 
4853
+  ia64-*-vms* | ia64-*-openvms*)
 
4854
     TOOLS_TARGET_PAIRS="\
 
4855
     mlib-tgt-specific.adb<mlib-tgt-specific-vms-ia64.adb \
 
4856
     symbols.adb<symbols-vms.adb \
 
4857
     symbols-processing.adb<symbols-processing-vms-ia64.adb"
 
4858
-
 
4859
     EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
 
4860
     ;;
 
4861
   *-*-cygwin32* | *-*-mingw32* | *-*-pe)
 
4862
@@ -137,14 +130,6 @@
 
4863
     indepsw.adb<indepsw-mingw.adb"
 
4864
     EXTRA_GNATTOOLS='../../gnatdll$(exeext)'
 
4865
     ;;
 
4866
-  *-*-darwin*)
 
4867
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb"
 
4868
-    ;;
 
4869
-  *-*-lynxos)
 
4870
-    TOOLS_TARGET_PAIRS="\
 
4871
-    mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
 
4872
-    indepsw.adb<indepsw-gnu.adb"
 
4873
-    ;;
 
4874
 esac
 
4875
 
 
4876
 # From user or toplevel makefile.
 
4877
Index: gnattools/ChangeLog
 
4878
===================================================================
 
4879
--- a/src/gnattools/ChangeLog   (.../tags/gcc_4_8_2_release)
 
4880
+++ b/src/gnattools/ChangeLog   (.../branches/gcc-4_8-branch)
 
4881
@@ -1,3 +1,23 @@
 
4882
+2013-12-12  Eric Botcazou  <ebotcazou@adacore.com>
 
4883
+           Iain Sandoe  <iain@codesourcery.com>
 
4884
+
 
4885
+       PR ada/55946
 
4886
+       * Makefile.in (host): Define.
 
4887
+       (host_alias): Likewise.
 
4888
+       (TOOLS_FLAGS_TO_PASS_RE): Add LDFLAGS.
 
4889
+       (GNATMAKE_FOR_HOST): Define.
 
4890
+       (GNATLINK_FOR_HOST): Likewise.
 
4891
+       (GNATBIND_FOR_HOST): Likewise.
 
4892
+       (GNATLS_FOR_HOST): Likewise.
 
4893
+       (RTS_DIR): Move around and use GNATLS_FOR_HOST.
 
4894
+       (TOOLS_FLAGS_TO_PASS_CROSS): Use the other *_HOST variables.
 
4895
+
 
4896
+2013-12-04  Eric Botcazou  <ebotcazou@adacore.com>
 
4897
+
 
4898
+       PR ada/59382
 
4899
+       * configure.ac (target parameterization): Rewrite.
 
4900
+       * configure: Regenerate.
 
4901
+
 
4902
 2013-10-16  Release Manager
 
4903
 
 
4904
        * GCC 4.8.2 released.
 
4905
Index: maintainer-scripts/ChangeLog
 
4906
===================================================================
 
4907
--- a/src/maintainer-scripts/ChangeLog  (.../tags/gcc_4_8_2_release)
 
4908
+++ b/src/maintainer-scripts/ChangeLog  (.../branches/gcc-4_8-branch)
 
4909
@@ -1,3 +1,9 @@
 
4910
+2014-02-01  Dmitry Gorbachev  <d.g.gorbachev@gmail.com>
 
4911
+
 
4912
+       PR other/56653
 
4913
+       * gcc_release: Avoid printing empty line to generated MD5SUMS files.
 
4914
+       Bump copyright year.
 
4915
+
 
4916
 2013-10-16  Release Manager
 
4917
 
 
4918
        * GCC 4.8.2 released.
 
4919
Index: maintainer-scripts/gcc_release
 
4920
===================================================================
 
4921
--- a/src/maintainer-scripts/gcc_release        (.../tags/gcc_4_8_2_release)
 
4922
+++ b/src/maintainer-scripts/gcc_release        (.../branches/gcc-4_8-branch)
 
4923
@@ -9,7 +9,7 @@
 
4924
 # Contents:
 
4925
 #   Script to create a GCC release.
 
4926
 #
 
4927
-# Copyright (c) 2001, 2002, 2006, 2009, 2010, 2011 Free Software Foundation.
 
4928
+# Copyright (c) 2001-2014 Free Software Foundation.
 
4929
 #
 
4930
 # This file is part of GCC.
 
4931
 #
 
4932
@@ -213,7 +213,7 @@
 
4933
 #
 
4934
 # Suggested usage:
 
4935
 # md5sum -c MD5SUMS | grep -v \"OK$\"
 
4936
-" > MD5SUMS
 
4937
+#" > MD5SUMS
 
4938
 
 
4939
   find . -type f |
 
4940
   sed -e 's:^\./::' -e '/MD5SUMS/d' |
 
4941
Index: libgcc/config.host
 
4942
===================================================================
 
4943
--- a/src/libgcc/config.host    (.../tags/gcc_4_8_2_release)
 
4944
+++ b/src/libgcc/config.host    (.../branches/gcc-4_8-branch)
 
4945
@@ -331,10 +331,10 @@
 
4946
        ;;
 
4947
 arm*-*-uclinux*)               # ARM ucLinux
 
4948
        tmake_file="${tmake_file} t-fixedpoint-gnu-prefix"
 
4949
+       tmake_file="$tmake_file arm/t-arm arm/t-elf t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
 
4950
        tmake_file="${tmake_file} arm/t-bpabi"
 
4951
        tm_file="$tm_file arm/bpabi-lib.h"
 
4952
        unwind_header=config/arm/unwind-arm.h
 
4953
-       tmake_file="$tmake_file arm/t-arm arm/t-elf t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
 
4954
        extra_parts="$extra_parts crti.o crtn.o"
 
4955
        ;;
 
4956
 arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems*)
 
4957
@@ -718,6 +718,10 @@
 
4958
        tmake_file="${tmake_file} microblaze/t-microblaze t-fdpbit"
 
4959
        extra_parts="$extra_parts crtbeginS.o crtendS.o crtbeginT.o crti.o crtn.o"
 
4960
        ;;
 
4961
+microblaze*-*-rtems*)
 
4962
+       tmake_file="${tmake_file} microblaze/t-microblaze t-fdpbit"
 
4963
+       extra_parts="$extra_parts crtbeginS.o crtendS.o crtbeginT.o crti.o crtn.o"
 
4964
+       ;;
 
4965
 mips*-*-netbsd*)                       # NetBSD/mips, either endian.
 
4966
        ;;
 
4967
 mips*-*-linux*)                                # Linux MIPS, either endian.
 
4968
@@ -1081,7 +1085,7 @@
 
4969
        md_unwind_header=tilepro/linux-unwind.h
 
4970
         ;;
 
4971
 v850*-*-*)
 
4972
-       tmake_file="v850/t-v850 t-fdpbit"
 
4973
+       tmake_file="${tmake_file} v850/t-v850 t-fdpbit"
 
4974
        ;;
 
4975
 vax-*-linux*)
 
4976
        tmake_file="$tmake_file vax/t-linux"
 
4977
@@ -1098,7 +1102,7 @@
 
4978
        extra_parts="$extra_parts crti.o crtn.o"
 
4979
        ;;
 
4980
 xtensa*-*-linux*)
 
4981
-       tmake_file="$tmake_file xtensa/t-xtensa xtensa/t-linux"
 
4982
+       tmake_file="$tmake_file xtensa/t-xtensa xtensa/t-linux t-slibgcc-libgcc"
 
4983
        md_unwind_header=xtensa/linux-unwind.h
 
4984
        ;;
 
4985
 am33_2.0-*-linux*)
 
4986
Index: libgcc/ChangeLog
 
4987
===================================================================
 
4988
--- a/src/libgcc/ChangeLog      (.../tags/gcc_4_8_2_release)
 
4989
+++ b/src/libgcc/ChangeLog      (.../branches/gcc-4_8-branch)
 
4990
@@ -1,3 +1,170 @@
 
4991
+2014-03-20  Joel Sherrill  <joel.sherrill@oarcorp.com>
 
4992
+
 
4993
+       * config.host (v850*-*-*): Add to tmake_file instead of resetting it.
 
4994
+
 
4995
+2014-02-28  Joey Ye  <joey.ye@arm.com>
 
4996
+
 
4997
+       Backport from mainline r208229
 
4998
+       2014-02-28  Joey Ye  <joey.ye@arm.com>
 
4999
+
 
5000
+       PR libgcc/60166
 
5001
+       * config/arm/sfp-machine.h (_FP_NANFRAC_H,
 
5002
+       _FP_NANFRAC_S, _FP_NANFRAC_D, _FP_NANFRAC_Q):
 
5003
+       Set to zero.
 
5004
+
 
5005
+2014-02-18  Kai Tietz  <ktietz@redhat.com>
 
5006
+       Jonathan Schleifer  <js@webkeks.org>
 
5007
+
 
5008
+       PR objc/56870
 
5009
+       * unwind-seh.c (_GCC_specific_handler): Pass proper
 
5010
+       value to unwind-handler.
 
5011
+
 
5012
+2014-01-25  Walter Lee  <walt@tilera.com>
 
5013
+
 
5014
+       Backport from mainline
 
5015
+       2014-01-25  Walter Lee  <walt@tilera.com>
 
5016
+
 
5017
+       * config/tilepro/atomic.c (pre_atomic_barrier): Mark inline.
 
5018
+       (post_atomic_barrier): Ditto.
 
5019
+       (__fetch_and_do): New macro.
 
5020
+       (__atomic_fetch_and_do): Use __fetch_and_do.
 
5021
+       (__sync_fetch_and_do): New macro.
 
5022
+       (__sync_fetch_and_add_4): New function.
 
5023
+       (__sync_fetch_and_sub_4): New function.
 
5024
+       (__sync_fetch_and_or_4): New function.
 
5025
+       (__sync_fetch_and_and_4): New function.
 
5026
+       (__sync_fetch_and_xor_4): New function.
 
5027
+       (__sync_fetch_and_nand_4): New function.
 
5028
+       (__sync_fetch_and_add_8): New function.
 
5029
+       (__sync_fetch_and_sub_8): New function.
 
5030
+       (__sync_fetch_and_or_8): New function.
 
5031
+       (__sync_fetch_and_and_8): New function.
 
5032
+       (__sync_fetch_and_xor_8): New function.
 
5033
+       (__sync_fetch_and_nand_8): New function.
 
5034
+       (__do_and_fetch): New macro.
 
5035
+       (__atomic_do_and_fetch): Use __do_and_fetch.
 
5036
+       (__sync_do_and_fetch): New macro.
 
5037
+       (__sync_add_and_fetch_4): New function.
 
5038
+       (__sync_sub_and_fetch_4): New function.
 
5039
+       (__sync_or_and_fetch_4): New function.
 
5040
+       (__sync_and_and_fetch_4): New function.
 
5041
+       (__sync_xor_and_fetch_4): New function.
 
5042
+       (__sync_nand_and_fetch_4): New function.
 
5043
+       (__sync_add_and_fetch_8): New function.
 
5044
+       (__sync_sub_and_fetch_8): New function.
 
5045
+       (__sync_or_and_fetch_8): New function.
 
5046
+       (__sync_and_and_fetch_8): New function.
 
5047
+       (__sync_xor_and_fetch_8): New function.
 
5048
+       (__sync_nand_and_fetch_8): New function.
 
5049
+       (__sync_exchange_methods): New macro.
 
5050
+       (__sync_val_compare_and_swap_4): New function.
 
5051
+       (__sync_bool_compare_and_swap_4): New function.
 
5052
+       (__sync_lock_test_and_test_4): New function.
 
5053
+       (__sync_val_compare_and_swap_8): New function.
 
5054
+       (__sync_bool_compare_and_swap_8): New function.
 
5055
+       (__sync_lock_test_and_test_8): New function.
 
5056
+       (__subword_cmpxchg_body): New macro.
 
5057
+       (__atomic_compare_exchange_1): Use __subword_cmpxchg_body.
 
5058
+       (__atomic_compare_exchange_2): Ditto.
 
5059
+       (__sync_subword_cmpxchg): New macro.
 
5060
+       (__sync_val_compare_and_swap_1): New function.
 
5061
+       (__sync_bool_compare_and_swap_1): New function.
 
5062
+       (__sync_val_compare_and_swap_2): New function.
 
5063
+       (__sync_bool_compare_and_swap_2): New function.
 
5064
+       (__atomic_subword): Rename to ...
 
5065
+       (__subword): ... New name.
 
5066
+       (__atomic_subword_fetch): Use __subword.
 
5067
+       (__sync_subword_fetch): New macro.
 
5068
+       (__sync_fetch_and_add_1): New function.
 
5069
+       (__sync_fetch_and_sub_1): New function.
 
5070
+       (__sync_fetch_and_or_1): New function.
 
5071
+       (__sync_fetch_and_and_1): New function.
 
5072
+       (__sync_fetch_and_xor_1): New function.
 
5073
+       (__sync_fetch_and_nand_1): New function.
 
5074
+       (__sync_fetch_and_add_2): New function.
 
5075
+       (__sync_fetch_and_sub_2): New function.
 
5076
+       (__sync_fetch_and_or_2): New function.
 
5077
+       (__sync_fetch_and_and_2): New function.
 
5078
+       (__sync_fetch_and_xor_2): New function.
 
5079
+       (__sync_fetch_and_nand_2): New function.
 
5080
+       (__sync_add_and_fetch_1): New function.
 
5081
+       (__sync_sub_and_fetch_1): New function.
 
5082
+       (__sync_or_and_fetch_1): New function.
 
5083
+       (__sync_and_and_fetch_1): New function.
 
5084
+       (__sync_xor_and_fetch_1): New function.
 
5085
+       (__sync_nand_and_fetch_1): New function.
 
5086
+       (__sync_add_and_fetch_2): New function.
 
5087
+       (__sync_sub_and_fetch_2): New function.
 
5088
+       (__sync_or_and_fetch_2): New function.
 
5089
+       (__sync_and_and_fetch_2): New function.
 
5090
+       (__sync_xor_and_fetch_2): New function.
 
5091
+       (__sync_nand_and_fetch_2): New function.
 
5092
+       (__atomic_subword_lock): Use __subword.
 
5093
+       (__sync_subword_lock): New macro.
 
5094
+       (__sync_lock_test_and_set_1): New function.
 
5095
+       (__sync_lock_test_and_set_2): New function.
 
5096
+
 
5097
+2014-01-25  Walter Lee  <walt@tilera.com>
 
5098
+
 
5099
+       Backport from mainline
 
5100
+       2014-01-25  Walter Lee  <walt@tilera.com>
 
5101
+
 
5102
+       * config/tilepro/atomic.c (BIT_OFFSET): Define.
 
5103
+       (__atomic_subword_cmpxchg): Use BIT_OFFSET.
 
5104
+       (__atomic_subword): Ditto.
 
5105
+
 
5106
+2014-01-25  Walter Lee  <walt@tilera.com>
 
5107
+
 
5108
+       Backport from mainline
 
5109
+       2014-01-25  Walter Lee  <walt@tilera.com>
 
5110
+
 
5111
+       * config/tilepro/atomic.c (__atomic_do_and_fetch): Add
 
5112
+       a prefix op argument.
 
5113
+       (__atomic_nand_fetch_4): Add prefix op.
 
5114
+       (__atomic_nand_fetch_8): Ditto.
 
5115
+
 
5116
+2014-01-21  Baruch Siach <barch@tkos.co.il>
 
5117
+
 
5118
+       * config.host (tmake_file): add t-slibgcc-libgcc for xtensa*-*-linux*.
 
5119
+
 
5120
+2014-01-03  Joseph Myers  <joseph@codesourcery.com>
 
5121
+
 
5122
+       * config/rs6000/ibm-ldouble.c (__gcc_qdiv): Scale up arguments in
 
5123
+       case of small numerator and finite nonzero result.
 
5124
+
 
5125
+2013-12-12  Zhenqiang Chen  <zhenqiang.chen@arm.com>
 
5126
+
 
5127
+       Backport from trunk r205917.
 
5128
+       2013-12-12  Zhenqiang Chen  <zhenqiang.chen@arm.com>
 
5129
+       * config.host (arm*-*-uclinux*): Move t-arm before t-bpabi.
 
5130
+
 
5131
+2013-12-10  Uros Bizjak  <ubizjak@gmail.com>
 
5132
+
 
5133
+       * config/i386/sfp-exceptions.c (__sfp_handle_exceptions): Emit SSE
 
5134
+       instructions when __SSE_MATH__ is defined.
 
5135
+
 
5136
+2013-12-06  Ralf Corsépius  <ralf.corsepius@rtems.org>
 
5137
+
 
5138
+       * config.host (microblaze-*-rtems*): New.
 
5139
+
 
5140
+2013-11-10  Kai Tietz  <ktietz@redhat.com>
 
5141
+
 
5142
+       Back-merged from trunk
 
5143
+       * config/i386/cygming-crtbegin.c (__gcc_register_frame):
 
5144
+       Increment load-count on use of LIBGCC_SONAME DLL.
 
5145
+       (hmod_libgcc): New static variable to hold handle of
 
5146
+       LIBGCC_SONAME DLL.
 
5147
+       (__gcc_deregister_frame): Decrement load-count of
 
5148
+       LIBGCC_SONAME DLL.
 
5149
+
 
5150
+2013-11-07  Uros Bizjak  <ubizjak@gmail.com>
 
5151
+
 
5152
+       * config/i386/sfp-exceptions.c (__sfp_handle_exceptions): Handle
 
5153
+       FP_EX_DENORM.  Store result to volatile location after SSE division
 
5154
+       to close interrupt window.  Remove unneeded fwait after x87
 
5155
+       division since interrupt window will be closed by emitted fstp.
 
5156
+       Rewrite FP_EX_INEXACT handling.
 
5157
+
 
5158
 2013-10-16  Release Manager
 
5159
 
 
5160
        * GCC 4.8.2 released.
 
5161
@@ -151,7 +318,7 @@
 
5162
        * config/mips/crtn.S (fini, init): New labels.
 
5163
 
 
5164
 2012-02-19  Edgar E. Iglesias  <edgar.iglesias@gmail.com>
 
5165
-       * config/microblaze/modsi3.S (modsi3): Fix case with 0x80000000 
 
5166
+       * config/microblaze/modsi3.S (modsi3): Fix case with 0x80000000
 
5167
        as dividend.
 
5168
 
 
5169
 2013-02-16  Alan Modra  <amodra@gmail.com>
 
5170
Index: libgcc/config/i386/sfp-exceptions.c
 
5171
===================================================================
 
5172
--- a/src/libgcc/config/i386/sfp-exceptions.c   (.../tags/gcc_4_8_2_release)
 
5173
+++ b/src/libgcc/config/i386/sfp-exceptions.c   (.../branches/gcc-4_8-branch)
 
5174
@@ -47,21 +47,33 @@
 
5175
   if (_fex & FP_EX_INVALID)
 
5176
     {
 
5177
       float f = 0.0f;
 
5178
-#ifdef __x86_64__
 
5179
+#ifdef __SSE_MATH__
 
5180
+      volatile float r __attribute__ ((unused));
 
5181
       asm volatile ("%vdivss\t{%0, %d0|%d0, %0}" : "+x" (f));
 
5182
+      r = f; /* Needed to trigger exception.   */
 
5183
 #else
 
5184
       asm volatile ("fdiv\t{%y0, %0|%0, %y0}" : "+t" (f));
 
5185
-      asm volatile ("fwait");
 
5186
+      /* No need for fwait, exception is triggered by emitted fstp.  */
 
5187
 #endif
 
5188
     }
 
5189
+  if (_fex & FP_EX_DENORM)
 
5190
+    {
 
5191
+      struct fenv temp;
 
5192
+      asm volatile ("fnstenv\t%0" : "=m" (temp));
 
5193
+      temp.__status_word |= FP_EX_DENORM;
 
5194
+      asm volatile ("fldenv\t%0" : : "m" (temp));
 
5195
+      asm volatile ("fwait");
 
5196
+    }
 
5197
   if (_fex & FP_EX_DIVZERO)
 
5198
     {
 
5199
       float f = 1.0f, g = 0.0f;
 
5200
-#ifdef __x86_64__
 
5201
+#ifdef __SSE_MATH__
 
5202
+      volatile float r __attribute__ ((unused));
 
5203
       asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g));
 
5204
+      r = f; /* Needed to trigger exception.   */
 
5205
 #else
 
5206
       asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g));
 
5207
-      asm volatile ("fwait");
 
5208
+      /* No need for fwait, exception is triggered by emitted fstp.  */
 
5209
 #endif
 
5210
     }
 
5211
   if (_fex & FP_EX_OVERFLOW)
 
5212
@@ -82,11 +94,15 @@
 
5213
     }
 
5214
   if (_fex & FP_EX_INEXACT)
 
5215
     {
 
5216
-      struct fenv temp;
 
5217
-      asm volatile ("fnstenv\t%0" : "=m" (temp));
 
5218
-      temp.__status_word |= FP_EX_INEXACT;
 
5219
-      asm volatile ("fldenv\t%0" : : "m" (temp));
 
5220
-      asm volatile ("fwait");
 
5221
+      float f = 1.0f, g = 3.0f;
 
5222
+#ifdef __SSE_MATH__
 
5223
+      volatile float r __attribute__ ((unused));
 
5224
+      asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g));
 
5225
+      r = f; /* Needed to trigger exception.   */
 
5226
+#else
 
5227
+      asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g));
 
5228
+      /* No need for fwait, exception is triggered by emitted fstp.  */
 
5229
+#endif
 
5230
     }
 
5231
 };
 
5232
 #endif
 
5233
Index: libgcc/config/i386/cygming-crtbegin.c
 
5234
===================================================================
 
5235
--- a/src/libgcc/config/i386/cygming-crtbegin.c (.../tags/gcc_4_8_2_release)
 
5236
+++ b/src/libgcc/config/i386/cygming-crtbegin.c (.../branches/gcc-4_8-branch)
 
5237
@@ -69,6 +69,9 @@
 
5238
   = { };
 
5239
 
 
5240
 static struct object obj;
 
5241
+
 
5242
+/* Handle of libgcc's DLL reference.  */
 
5243
+HANDLE hmod_libgcc;
 
5244
 #endif
 
5245
 
 
5246
 #if TARGET_USE_JCR_SECTION
 
5247
@@ -93,9 +96,14 @@
 
5248
 
 
5249
   void (*register_frame_fn) (const void *, struct object *);
 
5250
   HANDLE h = GetModuleHandle (LIBGCC_SONAME);
 
5251
+
 
5252
   if (h)
 
5253
-    register_frame_fn = (void (*) (const void *, struct object *))
 
5254
-                       GetProcAddress (h, "__register_frame_info");
 
5255
+    {
 
5256
+      /* Increasing the load-count of LIBGCC_SONAME DLL.  */
 
5257
+      hmod_libgcc = LoadLibrary (LIBGCC_SONAME);
 
5258
+      register_frame_fn = (void (*) (const void *, struct object *))
 
5259
+                         GetProcAddress (h, "__register_frame_info");
 
5260
+    }
 
5261
   else 
 
5262
     register_frame_fn = __register_frame_info;
 
5263
   if (register_frame_fn)
 
5264
@@ -132,5 +140,7 @@
 
5265
     deregister_frame_fn = __deregister_frame_info;
 
5266
   if (deregister_frame_fn)
 
5267
      deregister_frame_fn (__EH_FRAME_BEGIN__);
 
5268
+  if (hmod_libgcc)
 
5269
+    FreeLibrary (hmod_libgcc);
 
5270
 #endif
 
5271
 }
 
5272
Index: libgcc/config/rs6000/ibm-ldouble.c
 
5273
===================================================================
 
5274
--- a/src/libgcc/config/rs6000/ibm-ldouble.c    (.../tags/gcc_4_8_2_release)
 
5275
+++ b/src/libgcc/config/rs6000/ibm-ldouble.c    (.../branches/gcc-4_8-branch)
 
5276
@@ -188,7 +188,16 @@
 
5277
       || nonfinite (t))
 
5278
     return t;
 
5279
 
 
5280
-  /* Finite nonzero result requires corrections to the highest order term.  */
 
5281
+  /* Finite nonzero result requires corrections to the highest order
 
5282
+     term.  These corrections require the low part of c * t to be
 
5283
+     exactly represented in double.  */
 
5284
+  if (fabs (a) <= 0x1p-969)
 
5285
+    {
 
5286
+      a *= 0x1p106;
 
5287
+      b *= 0x1p106;
 
5288
+      c *= 0x1p106;
 
5289
+      d *= 0x1p106;
 
5290
+    }
 
5291
 
 
5292
   s = c * t;                    /* (s,sigma) = c*t exactly.  */
 
5293
   w = -(-b + d * t);   /* Written to get fnmsub for speed, but not
 
5294
Index: libgcc/config/tilepro/atomic.c
 
5295
===================================================================
 
5296
--- a/src/libgcc/config/tilepro/atomic.c        (.../tags/gcc_4_8_2_release)
 
5297
+++ b/src/libgcc/config/tilepro/atomic.c        (.../branches/gcc-4_8-branch)
 
5298
@@ -28,7 +28,7 @@
 
5299
 /* This code should be inlined by the compiler, but for now support
 
5300
    it as out-of-line methods in libgcc.  */
 
5301
 
 
5302
-static void
 
5303
+static inline void
 
5304
 pre_atomic_barrier (int model)
 
5305
 {
 
5306
   switch ((enum memmodel) model)
 
5307
@@ -44,7 +44,7 @@
 
5308
   return;
 
5309
 }
 
5310
 
 
5311
-static void
 
5312
+static inline void
 
5313
 post_atomic_barrier (int model)
 
5314
 {
 
5315
   switch ((enum memmodel) model)
 
5316
@@ -62,16 +62,21 @@
 
5317
 
 
5318
 #define __unused __attribute__((unused))
 
5319
 
 
5320
-#define __atomic_fetch_and_do(type, size, opname)              \
 
5321
-type                                                           \
 
5322
-__atomic_fetch_##opname##_##size(type* p, type i, int model)   \
 
5323
+#define __fetch_and_do(proto, type, size, opname, top, bottom) \
 
5324
+proto                                                          \
 
5325
 {                                                              \
 
5326
-  pre_atomic_barrier(model);                                   \
 
5327
+  top;                                                         \
 
5328
   type rv = arch_atomic_##opname(p, i);                                \
 
5329
-  post_atomic_barrier(model);                                  \
 
5330
+  bottom;                                                      \
 
5331
   return rv;                                                   \
 
5332
 }
 
5333
 
 
5334
+#define __atomic_fetch_and_do(type, size, opname)                      \
 
5335
+  __fetch_and_do(type __atomic_fetch_##opname##_##size(type* p, type i, int model), \
 
5336
+                type, size, opname,                                    \
 
5337
+                pre_atomic_barrier(model),                             \
 
5338
+                post_atomic_barrier(model))                            \
 
5339
+
 
5340
 __atomic_fetch_and_do (int, 4, add)
 
5341
 __atomic_fetch_and_do (int, 4, sub)
 
5342
 __atomic_fetch_and_do (int, 4, or)
 
5343
@@ -84,27 +89,73 @@
 
5344
 __atomic_fetch_and_do (long long, 8, and)
 
5345
 __atomic_fetch_and_do (long long, 8, xor)
 
5346
 __atomic_fetch_and_do (long long, 8, nand)
 
5347
-#define __atomic_do_and_fetch(type, size, opname, op)          \
 
5348
-type                                                           \
 
5349
-__atomic_##opname##_fetch_##size(type* p, type i, int model)   \
 
5350
-{                                                              \
 
5351
-  pre_atomic_barrier(model);                                   \
 
5352
-  type rv = arch_atomic_##opname(p, i) op i;                   \
 
5353
-  post_atomic_barrier(model);                                  \
 
5354
-  return rv;                                                   \
 
5355
+
 
5356
+#define __sync_fetch_and_do(type, size, opname)                                \
 
5357
+  __fetch_and_do(type __sync_fetch_and_##opname##_##size(type* p, type i), \
 
5358
+                type, size, opname,                                    \
 
5359
+                arch_atomic_write_barrier(),                           \
 
5360
+                arch_atomic_read_barrier())
 
5361
+
 
5362
+__sync_fetch_and_do (int, 4, add)
 
5363
+__sync_fetch_and_do (int, 4, sub)
 
5364
+__sync_fetch_and_do (int, 4, or)
 
5365
+__sync_fetch_and_do (int, 4, and)
 
5366
+__sync_fetch_and_do (int, 4, xor)
 
5367
+__sync_fetch_and_do (int, 4, nand)
 
5368
+__sync_fetch_and_do (long long, 8, add)
 
5369
+__sync_fetch_and_do (long long, 8, sub)
 
5370
+__sync_fetch_and_do (long long, 8, or)
 
5371
+__sync_fetch_and_do (long long, 8, and)
 
5372
+__sync_fetch_and_do (long long, 8, xor)
 
5373
+__sync_fetch_and_do (long long, 8, nand)
 
5374
+
 
5375
+#define __do_and_fetch(proto, type, size, opname, op, op2, top, bottom)        \
 
5376
+proto                                                                  \
 
5377
+{                                                                      \
 
5378
+  top;                                                                 \
 
5379
+  type rv = op2 (arch_atomic_##opname(p, i) op i);                     \
 
5380
+  bottom;                                                              \
 
5381
+  return rv;                                                           \
 
5382
 }
 
5383
-__atomic_do_and_fetch (int, 4, add, +)
 
5384
-__atomic_do_and_fetch (int, 4, sub, -)
 
5385
-__atomic_do_and_fetch (int, 4, or, |)
 
5386
-__atomic_do_and_fetch (int, 4, and, &)
 
5387
-__atomic_do_and_fetch (int, 4, xor, |)
 
5388
-__atomic_do_and_fetch (int, 4, nand, &)
 
5389
-__atomic_do_and_fetch (long long, 8, add, +)
 
5390
-__atomic_do_and_fetch (long long, 8, sub, -)
 
5391
-__atomic_do_and_fetch (long long, 8, or, |)
 
5392
-__atomic_do_and_fetch (long long, 8, and, &)
 
5393
-__atomic_do_and_fetch (long long, 8, xor, |)
 
5394
-__atomic_do_and_fetch (long long, 8, nand, &)
 
5395
+
 
5396
+#define __atomic_do_and_fetch(type, size, opname, op, op2)             \
 
5397
+  __do_and_fetch(type __atomic_##opname##_fetch_##size(type* p, type i, int model), \
 
5398
+                type, size, opname, op, op2,                           \
 
5399
+                pre_atomic_barrier(model),                             \
 
5400
+                post_atomic_barrier(model))                            \
 
5401
+
 
5402
+__atomic_do_and_fetch (int, 4, add, +, )
 
5403
+__atomic_do_and_fetch (int, 4, sub, -, )
 
5404
+__atomic_do_and_fetch (int, 4, or, |, )
 
5405
+__atomic_do_and_fetch (int, 4, and, &, )
 
5406
+__atomic_do_and_fetch (int, 4, xor, |, )
 
5407
+__atomic_do_and_fetch (int, 4, nand, &, ~)
 
5408
+__atomic_do_and_fetch (long long, 8, add, +, )
 
5409
+__atomic_do_and_fetch (long long, 8, sub, -, )
 
5410
+__atomic_do_and_fetch (long long, 8, or, |, )
 
5411
+__atomic_do_and_fetch (long long, 8, and, &, )
 
5412
+__atomic_do_and_fetch (long long, 8, xor, |, )
 
5413
+__atomic_do_and_fetch (long long, 8, nand, &, ~)
 
5414
+
 
5415
+#define __sync_do_and_fetch(type, size, opname, op, op2)               \
 
5416
+  __do_and_fetch(type __sync_##opname##_and_fetch_##size(type* p, type i), \
 
5417
+                type, size, opname, op, op2,                           \
 
5418
+                arch_atomic_write_barrier(),                           \
 
5419
+                arch_atomic_read_barrier())                            \
 
5420
+
 
5421
+__sync_do_and_fetch (int, 4, add, +, )
 
5422
+__sync_do_and_fetch (int, 4, sub, -, )
 
5423
+__sync_do_and_fetch (int, 4, or, |, )
 
5424
+__sync_do_and_fetch (int, 4, and, &, )
 
5425
+__sync_do_and_fetch (int, 4, xor, |, )
 
5426
+__sync_do_and_fetch (int, 4, nand, &, ~)
 
5427
+__sync_do_and_fetch (long long, 8, add, +, )
 
5428
+__sync_do_and_fetch (long long, 8, sub, -, )
 
5429
+__sync_do_and_fetch (long long, 8, or, |, )
 
5430
+__sync_do_and_fetch (long long, 8, and, &, )
 
5431
+__sync_do_and_fetch (long long, 8, xor, |, )
 
5432
+__sync_do_and_fetch (long long, 8, nand, &, ~)
 
5433
+
 
5434
 #define __atomic_exchange_methods(type, size)                          \
 
5435
 bool                                                                   \
 
5436
 __atomic_compare_exchange_##size(volatile type* ptr, type* oldvalp,    \
 
5437
@@ -128,49 +179,117 @@
 
5438
   post_atomic_barrier(model);                                          \
 
5439
   return retval;                                                       \
 
5440
 }
 
5441
+
 
5442
 __atomic_exchange_methods (int, 4)
 
5443
 __atomic_exchange_methods (long long, 8)
 
5444
 
 
5445
+#define __sync_exchange_methods(type, size)                            \
 
5446
+type                                                                   \
 
5447
+__sync_val_compare_and_swap_##size(type* ptr, type oldval, type newval)        \
 
5448
+{                                                                      \
 
5449
+  arch_atomic_write_barrier();                                         \
 
5450
+  type retval = arch_atomic_val_compare_and_exchange(ptr, oldval, newval); \
 
5451
+  arch_atomic_read_barrier();                                          \
 
5452
+  return retval;                                                       \
 
5453
+}                                                                      \
 
5454
+                                                                       \
 
5455
+bool                                                                   \
 
5456
+__sync_bool_compare_and_swap_##size(type* ptr, type oldval, type newval) \
 
5457
+{                                                                      \
 
5458
+  arch_atomic_write_barrier();                                         \
 
5459
+  bool retval = arch_atomic_bool_compare_and_exchange(ptr, oldval, newval); \
 
5460
+  arch_atomic_read_barrier();                                          \
 
5461
+  return retval;                                                       \
 
5462
+}                                                                      \
 
5463
+                                                                       \
 
5464
+type                                                                   \
 
5465
+__sync_lock_test_and_set_##size(type* ptr, type val)                   \
 
5466
+{                                                                      \
 
5467
+  type retval = arch_atomic_exchange(ptr, val);                                \
 
5468
+  arch_atomic_acquire_barrier_value(retval);                           \
 
5469
+  return retval;                                                       \
 
5470
+}
 
5471
+
 
5472
+__sync_exchange_methods (int, 4)
 
5473
+__sync_exchange_methods (long long, 8)
 
5474
+
 
5475
+#ifdef __LITTLE_ENDIAN__
 
5476
+#define BIT_OFFSET(n, type) ((n) * 8)
 
5477
+#else
 
5478
+#define BIT_OFFSET(n, type) ((4 - sizeof(type) - (n)) * 8)
 
5479
+#endif
 
5480
+
 
5481
 /* Subword methods require the same approach for both TILEPro and
 
5482
    TILE-Gx.  We load the background data for the word, insert the
 
5483
    desired subword piece, then compare-and-exchange it into place.  */
 
5484
 #define u8 unsigned char
 
5485
 #define u16 unsigned short
 
5486
+
 
5487
+#define __subword_cmpxchg_body(type, size, ptr, guess, val)            \
 
5488
+  ({                                                                   \
 
5489
+    unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL);     \
 
5490
+    const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type);      \
 
5491
+    const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1;                \
 
5492
+    const unsigned int bgmask = ~(valmask << shift);                   \
 
5493
+    unsigned int oldword = *p;                                         \
 
5494
+    type oldval = (oldword >> shift) & valmask;                                \
 
5495
+    if (__builtin_expect((oldval == guess), 1)) {                      \
 
5496
+      unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
 
5497
+      oldword = arch_atomic_val_compare_and_exchange(p, oldword, word);        \
 
5498
+      oldval = (oldword >> shift) & valmask;                           \
 
5499
+    }                                                                  \
 
5500
+    oldval;                                                            \
 
5501
+  })                                                                   \
 
5502
+
 
5503
 #define __atomic_subword_cmpxchg(type, size)                           \
 
5504
                                                                        \
 
5505
 bool                                                                   \
 
5506
-__atomic_compare_exchange_##size(volatile type* ptr, type* guess,      \
 
5507
+__atomic_compare_exchange_##size(volatile type* ptr, type* guess_ptr,  \
 
5508
                                 type val, bool weak __unused, int models, \
 
5509
                                 int modelf __unused)                   \
 
5510
 {                                                                      \
 
5511
   pre_atomic_barrier(models);                                          \
 
5512
-  unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL);       \
 
5513
-  const int shift = ((unsigned long)ptr & 3UL) * 8;                    \
 
5514
-  const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1;          \
 
5515
-  const unsigned int bgmask = ~(valmask << shift);                     \
 
5516
-  unsigned int oldword = *p;                                           \
 
5517
-  type oldval = (oldword >> shift) & valmask;                          \
 
5518
-  if (__builtin_expect((oldval == *guess), 1)) {                       \
 
5519
-    unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
 
5520
-    oldword = arch_atomic_val_compare_and_exchange(p, oldword, word);  \
 
5521
-    oldval = (oldword >> shift) & valmask;                             \
 
5522
-  }                                                                    \
 
5523
+  type guess = *guess_ptr;                                             \
 
5524
+  type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val);   \
 
5525
   post_atomic_barrier(models);                                         \
 
5526
-  bool success = (oldval == *guess);                                   \
 
5527
-  *guess = oldval;                                                     \
 
5528
+  bool success = (oldval == guess);                                    \
 
5529
+  *guess_ptr = oldval;                                                 \
 
5530
   return success;                                                      \
 
5531
 }
 
5532
+
 
5533
 __atomic_subword_cmpxchg (u8, 1)
 
5534
 __atomic_subword_cmpxchg (u16, 2)
 
5535
+
 
5536
+#define __sync_subword_cmpxchg(type, size)                             \
 
5537
+                                                                       \
 
5538
+type                                                                   \
 
5539
+__sync_val_compare_and_swap_##size(type* ptr, type guess, type val)    \
 
5540
+{                                                                      \
 
5541
+  arch_atomic_write_barrier();                                         \
 
5542
+  type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val);   \
 
5543
+  arch_atomic_read_barrier();                                          \
 
5544
+  return oldval;                                                       \
 
5545
+}                                                                      \
 
5546
+                                                                       \
 
5547
+bool                                                                   \
 
5548
+__sync_bool_compare_and_swap_##size(type* ptr, type guess, type val)   \
 
5549
+{                                                                      \
 
5550
+  type oldval = __sync_val_compare_and_swap_##size(ptr, guess, val);   \
 
5551
+  return oldval == guess;                                              \
 
5552
+}
 
5553
+
 
5554
+__sync_subword_cmpxchg (u8, 1)
 
5555
+__sync_subword_cmpxchg (u16, 2)
 
5556
+
 
5557
 /* For the atomic-update subword methods, we use the same approach as
 
5558
    above, but we retry until we succeed if the compare-and-exchange
 
5559
    fails.  */
 
5560
-#define __atomic_subword(type, proto, top, expr, bottom)               \
 
5561
+#define __subword(type, proto, top, expr, bottom)                      \
 
5562
 proto                                                                  \
 
5563
 {                                                                      \
 
5564
   top                                                                  \
 
5565
   unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL);       \
 
5566
-  const int shift = ((unsigned long)ptr & 3UL) * 8;                    \
 
5567
+  const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type);                \
 
5568
   const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1;          \
 
5569
   const unsigned int bgmask = ~(valmask << shift);                     \
 
5570
   unsigned int oldword, xword = *p;                                    \
 
5571
@@ -184,12 +303,14 @@
 
5572
   } while (__builtin_expect(xword != oldword, 0));                     \
 
5573
   bottom                                                               \
 
5574
 }
 
5575
+
 
5576
 #define __atomic_subword_fetch(type, funcname, expr, retval)           \
 
5577
-  __atomic_subword(type,                                               \
 
5578
-                  type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
 
5579
-                  pre_atomic_barrier(model);,                          \
 
5580
-                  expr,                                                \
 
5581
-                  post_atomic_barrier(model); return retval;)
 
5582
+  __subword(type,                                                      \
 
5583
+           type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
 
5584
+           pre_atomic_barrier(model);,                                 \
 
5585
+           expr,                                                       \
 
5586
+           post_atomic_barrier(model); return retval;)
 
5587
+
 
5588
 __atomic_subword_fetch (u8, fetch_add_1, oldval + i, oldval)
 
5589
 __atomic_subword_fetch (u8, fetch_sub_1, oldval - i, oldval)
 
5590
 __atomic_subword_fetch (u8, fetch_or_1, oldval | i, oldval)
 
5591
@@ -196,6 +317,7 @@
 
5592
 __atomic_subword_fetch (u8, fetch_and_1, oldval & i, oldval)
 
5593
 __atomic_subword_fetch (u8, fetch_xor_1, oldval ^ i, oldval)
 
5594
 __atomic_subword_fetch (u8, fetch_nand_1, ~(oldval & i), oldval)
 
5595
+
 
5596
 __atomic_subword_fetch (u16, fetch_add_2, oldval + i, oldval)
 
5597
 __atomic_subword_fetch (u16, fetch_sub_2, oldval - i, oldval)
 
5598
 __atomic_subword_fetch (u16, fetch_or_2, oldval | i, oldval)
 
5599
@@ -202,6 +324,7 @@
 
5600
 __atomic_subword_fetch (u16, fetch_and_2, oldval & i, oldval)
 
5601
 __atomic_subword_fetch (u16, fetch_xor_2, oldval ^ i, oldval)
 
5602
 __atomic_subword_fetch (u16, fetch_nand_2, ~(oldval & i), oldval)
 
5603
+
 
5604
 __atomic_subword_fetch (u8, add_fetch_1, oldval + i, val)
 
5605
 __atomic_subword_fetch (u8, sub_fetch_1, oldval - i, val)
 
5606
 __atomic_subword_fetch (u8, or_fetch_1, oldval | i, val)
 
5607
@@ -208,6 +331,7 @@
 
5608
 __atomic_subword_fetch (u8, and_fetch_1, oldval & i, val)
 
5609
 __atomic_subword_fetch (u8, xor_fetch_1, oldval ^ i, val)
 
5610
 __atomic_subword_fetch (u8, nand_fetch_1, ~(oldval & i), val)
 
5611
+
 
5612
 __atomic_subword_fetch (u16, add_fetch_2, oldval + i, val)
 
5613
 __atomic_subword_fetch (u16, sub_fetch_2, oldval - i, val)
 
5614
 __atomic_subword_fetch (u16, or_fetch_2, oldval | i, val)
 
5615
@@ -214,12 +338,58 @@
 
5616
 __atomic_subword_fetch (u16, and_fetch_2, oldval & i, val)
 
5617
 __atomic_subword_fetch (u16, xor_fetch_2, oldval ^ i, val)
 
5618
 __atomic_subword_fetch (u16, nand_fetch_2, ~(oldval & i), val)
 
5619
+
 
5620
+#define __sync_subword_fetch(type, funcname, expr, retval)     \
 
5621
+  __subword(type,                                              \
 
5622
+           type __sync_ ## funcname(type *ptr, type i),        \
 
5623
+           arch_atomic_read_barrier();,                        \
 
5624
+           expr,                                               \
 
5625
+           arch_atomic_write_barrier(); return retval;)
 
5626
+
 
5627
+__sync_subword_fetch (u8, fetch_and_add_1, oldval + i, oldval)
 
5628
+__sync_subword_fetch (u8, fetch_and_sub_1, oldval - i, oldval)
 
5629
+__sync_subword_fetch (u8, fetch_and_or_1, oldval | i, oldval)
 
5630
+__sync_subword_fetch (u8, fetch_and_and_1, oldval & i, oldval)
 
5631
+__sync_subword_fetch (u8, fetch_and_xor_1, oldval ^ i, oldval)
 
5632
+__sync_subword_fetch (u8, fetch_and_nand_1, ~(oldval & i), oldval)
 
5633
+
 
5634
+__sync_subword_fetch (u16, fetch_and_add_2, oldval + i, oldval)
 
5635
+__sync_subword_fetch (u16, fetch_and_sub_2, oldval - i, oldval)
 
5636
+__sync_subword_fetch (u16, fetch_and_or_2, oldval | i, oldval)
 
5637
+__sync_subword_fetch (u16, fetch_and_and_2, oldval & i, oldval)
 
5638
+__sync_subword_fetch (u16, fetch_and_xor_2, oldval ^ i, oldval)
 
5639
+__sync_subword_fetch (u16, fetch_and_nand_2, ~(oldval & i), oldval)
 
5640
+
 
5641
+__sync_subword_fetch (u8, add_and_fetch_1, oldval + i, val)
 
5642
+__sync_subword_fetch (u8, sub_and_fetch_1, oldval - i, val)
 
5643
+__sync_subword_fetch (u8, or_and_fetch_1, oldval | i, val)
 
5644
+__sync_subword_fetch (u8, and_and_fetch_1, oldval & i, val)
 
5645
+__sync_subword_fetch (u8, xor_and_fetch_1, oldval ^ i, val)
 
5646
+__sync_subword_fetch (u8, nand_and_fetch_1, ~(oldval & i), val)
 
5647
+
 
5648
+__sync_subword_fetch (u16, add_and_fetch_2, oldval + i, val)
 
5649
+__sync_subword_fetch (u16, sub_and_fetch_2, oldval - i, val)
 
5650
+__sync_subword_fetch (u16, or_and_fetch_2, oldval | i, val)
 
5651
+__sync_subword_fetch (u16, and_and_fetch_2, oldval & i, val)
 
5652
+__sync_subword_fetch (u16, xor_and_fetch_2, oldval ^ i, val)
 
5653
+__sync_subword_fetch (u16, nand_and_fetch_2, ~(oldval & i), val)
 
5654
+
 
5655
 #define __atomic_subword_lock(type, size)                              \
 
5656
-                                                                       \
 
5657
-__atomic_subword(type,                                                 \
 
5658
-                type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
 
5659
-                pre_atomic_barrier(model);,                            \
 
5660
-                nval,                                                  \
 
5661
-                post_atomic_barrier(model); return oldval;)
 
5662
+  __subword(type,                                                      \
 
5663
+           type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
 
5664
+           pre_atomic_barrier(model);,                                 \
 
5665
+           nval,                                                       \
 
5666
+           post_atomic_barrier(model); return oldval;)
 
5667
+
 
5668
 __atomic_subword_lock (u8, 1)
 
5669
 __atomic_subword_lock (u16, 2)
 
5670
+
 
5671
+#define __sync_subword_lock(type, size)                                        \
 
5672
+  __subword(type,                                                      \
 
5673
+           type __sync_lock_test_and_set_##size(type* ptr, type nval), \
 
5674
+           ,                                                           \
 
5675
+           nval,                                                       \
 
5676
+           arch_atomic_acquire_barrier_value(oldval); return oldval;)
 
5677
+
 
5678
+__sync_subword_lock (u8, 1)
 
5679
+__sync_subword_lock (u16, 2)
 
5680
Index: libgcc/config/arm/sfp-machine.h
 
5681
===================================================================
 
5682
--- a/src/libgcc/config/arm/sfp-machine.h       (.../tags/gcc_4_8_2_release)
 
5683
+++ b/src/libgcc/config/arm/sfp-machine.h       (.../branches/gcc-4_8-branch)
 
5684
@@ -19,10 +19,12 @@
 
5685
 #define _FP_DIV_MEAT_D(R,X,Y)  _FP_DIV_MEAT_2_udiv(D,R,X,Y)
 
5686
 #define _FP_DIV_MEAT_Q(R,X,Y)  _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
 
5687
 
 
5688
-#define _FP_NANFRAC_H          ((_FP_QNANBIT_H << 1) - 1)
 
5689
-#define _FP_NANFRAC_S          ((_FP_QNANBIT_S << 1) - 1)
 
5690
-#define _FP_NANFRAC_D          ((_FP_QNANBIT_D << 1) - 1), -1
 
5691
-#define _FP_NANFRAC_Q          ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
 
5692
+/* According to RTABI, QNAN is only with the most significant bit of the
 
5693
+   significand set, and all other significand bits zero.  */
 
5694
+#define _FP_NANFRAC_H          0
 
5695
+#define _FP_NANFRAC_S          0
 
5696
+#define _FP_NANFRAC_D          0, 0
 
5697
+#define _FP_NANFRAC_Q          0, 0, 0, 0
 
5698
 #define _FP_NANSIGN_H          0
 
5699
 #define _FP_NANSIGN_S          0
 
5700
 #define _FP_NANSIGN_D          0
 
5701
Index: libgcc/unwind-seh.c
 
5702
===================================================================
 
5703
--- a/src/libgcc/unwind-seh.c   (.../tags/gcc_4_8_2_release)
 
5704
+++ b/src/libgcc/unwind-seh.c   (.../branches/gcc-4_8-branch)
 
5705
@@ -313,8 +313,9 @@
 
5706
          ms_exc->ExceptionInformation[3] = gcc_context.reg[1];
 
5707
 
 
5708
          /* Begin phase 2.  Perform the unwinding.  */
 
5709
-         RtlUnwindEx (this_frame, gcc_context.ra, ms_exc, gcc_exc,
 
5710
-                      ms_orig_context, ms_disp->HistoryTable);
 
5711
+         RtlUnwindEx (this_frame, gcc_context.ra, ms_exc,
 
5712
+                      (PVOID)gcc_context.reg[0], ms_orig_context,
 
5713
+                      ms_disp->HistoryTable);
 
5714
        }
 
5715
 
 
5716
       /* In _Unwind_RaiseException we return _URC_FATAL_PHASE1_ERROR.  */
 
5717
Index: gcc/tree-vrp.c
 
5718
===================================================================
 
5719
--- a/src/gcc/tree-vrp.c        (.../tags/gcc_4_8_2_release)
 
5720
+++ b/src/gcc/tree-vrp.c        (.../branches/gcc-4_8-branch)
 
5721
@@ -5271,9 +5271,13 @@
 
5722
     }
 
5723
   else if (CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (op_def)))
 
5724
     {
 
5725
-      /* Recurse through the type conversion.  */
 
5726
-      retval |= register_edge_assert_for_1 (gimple_assign_rhs1 (op_def),
 
5727
-                                           code, e, bsi);
 
5728
+      /* Recurse through the type conversion, unless it is a narrowing
 
5729
+        conversion or conversion from non-integral type.  */
 
5730
+      tree rhs = gimple_assign_rhs1 (op_def);
 
5731
+      if (INTEGRAL_TYPE_P (TREE_TYPE (rhs))
 
5732
+         && (TYPE_PRECISION (TREE_TYPE (rhs))
 
5733
+             <= TYPE_PRECISION (TREE_TYPE (op))))
 
5734
+       retval |= register_edge_assert_for_1 (rhs, code, e, bsi);
 
5735
     }
 
5736
 
 
5737
   return retval;
 
5738
@@ -7453,7 +7457,8 @@
 
5739
     }
 
5740
   else if ((operand_less_p (vr1min, *vr0max) == 1
 
5741
            || operand_equal_p (vr1min, *vr0max, 0))
 
5742
-          && operand_less_p (*vr0min, vr1min) == 1)
 
5743
+          && operand_less_p (*vr0min, vr1min) == 1
 
5744
+          && operand_less_p (*vr0max, vr1max) == 1)
 
5745
     {
 
5746
       /* [  (  ]  ) or [   ](   ) */
 
5747
       if (*vr0type == VR_RANGE
 
5748
@@ -7487,7 +7492,8 @@
 
5749
     }
 
5750
   else if ((operand_less_p (*vr0min, vr1max) == 1
 
5751
            || operand_equal_p (*vr0min, vr1max, 0))
 
5752
-          && operand_less_p (vr1min, *vr0min) == 1)
 
5753
+          && operand_less_p (vr1min, *vr0min) == 1
 
5754
+          && operand_less_p (vr1max, *vr0max) == 1)
 
5755
     {
 
5756
       /* (  [  )  ] or (   )[   ] */
 
5757
       if (*vr0type == VR_RANGE
 
5758
Index: gcc/loop-unswitch.c
 
5759
===================================================================
 
5760
--- a/src/gcc/loop-unswitch.c   (.../tags/gcc_4_8_2_release)
 
5761
+++ b/src/gcc/loop-unswitch.c   (.../branches/gcc-4_8-branch)
 
5762
@@ -191,6 +191,7 @@
 
5763
   if (!test)
 
5764
     return NULL_RTX;
 
5765
 
 
5766
+  mode = VOIDmode;
 
5767
   for (i = 0; i < 2; i++)
 
5768
     {
 
5769
       op[i] = XEXP (test, i);
 
5770
@@ -205,11 +206,15 @@
 
5771
        return NULL_RTX;
 
5772
 
 
5773
       op[i] = get_iv_value (&iv, const0_rtx);
 
5774
+      if (iv.extend != IV_UNKNOWN_EXTEND
 
5775
+         && iv.mode != iv.extend_mode)
 
5776
+       op[i] = lowpart_subreg (iv.mode, op[i], iv.extend_mode);
 
5777
+      if (mode == VOIDmode)
 
5778
+       mode = iv.mode;
 
5779
+      else
 
5780
+       gcc_assert (mode == iv.mode);
 
5781
     }
 
5782
 
 
5783
-  mode = GET_MODE (op[0]);
 
5784
-  if (mode == VOIDmode)
 
5785
-    mode = GET_MODE (op[1]);
 
5786
   if (GET_MODE_CLASS (mode) == MODE_CC)
 
5787
     {
 
5788
       if (at != BB_END (bb))
 
5789
Index: gcc/tree-ssa-loop-im.c
 
5790
===================================================================
 
5791
--- a/src/gcc/tree-ssa-loop-im.c        (.../tags/gcc_4_8_2_release)
 
5792
+++ b/src/gcc/tree-ssa-loop-im.c        (.../branches/gcc-4_8-branch)
 
5793
@@ -1190,6 +1190,67 @@
 
5794
   fini_walk_dominator_tree (&walk_data);
 
5795
 }
 
5796
 
 
5797
+/* Return true if CODE is an operation that when operating on signed
 
5798
+   integer types involves undefined behavior on overflow and the
 
5799
+   operation can be expressed with unsigned arithmetic.  */
 
5800
+
 
5801
+static bool
 
5802
+arith_code_with_undefined_signed_overflow (tree_code code)
 
5803
+{
 
5804
+  switch (code)
 
5805
+    {
 
5806
+    case PLUS_EXPR:
 
5807
+    case MINUS_EXPR:
 
5808
+    case MULT_EXPR:
 
5809
+    case NEGATE_EXPR:
 
5810
+    case POINTER_PLUS_EXPR:
 
5811
+      return true;
 
5812
+    default:
 
5813
+      return false;
 
5814
+    }
 
5815
+}
 
5816
+
 
5817
+/* Rewrite STMT, an assignment with a signed integer or pointer arithmetic
 
5818
+   operation that can be transformed to unsigned arithmetic by converting
 
5819
+   its operand, carrying out the operation in the corresponding unsigned
 
5820
+   type and converting the result back to the original type.
 
5821
+
 
5822
+   Returns a sequence of statements that replace STMT and also contain
 
5823
+   a modified form of STMT itself.  */
 
5824
+
 
5825
+static gimple_seq
 
5826
+rewrite_to_defined_overflow (gimple stmt)
 
5827
+{
 
5828
+  if (dump_file && (dump_flags & TDF_DETAILS))
 
5829
+    {
 
5830
+      fprintf (dump_file, "rewriting stmt with undefined signed "
 
5831
+              "overflow ");
 
5832
+      print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
 
5833
+    }
 
5834
+
 
5835
+  tree lhs = gimple_assign_lhs (stmt);
 
5836
+  tree type = unsigned_type_for (TREE_TYPE (lhs));
 
5837
+  gimple_seq stmts = NULL;
 
5838
+  for (unsigned i = 1; i < gimple_num_ops (stmt); ++i)
 
5839
+    {
 
5840
+      gimple_seq stmts2 = NULL;
 
5841
+      gimple_set_op (stmt, i,
 
5842
+                    force_gimple_operand (fold_convert (type,
 
5843
+                                                        gimple_op (stmt, i)),
 
5844
+                                          &stmts2, true, NULL_TREE));
 
5845
+      gimple_seq_add_seq (&stmts, stmts2);
 
5846
+    }
 
5847
+  gimple_assign_set_lhs (stmt, make_ssa_name (type, stmt));
 
5848
+  if (gimple_assign_rhs_code (stmt) == POINTER_PLUS_EXPR)
 
5849
+    gimple_assign_set_rhs_code (stmt, PLUS_EXPR);
 
5850
+  gimple_seq_add_stmt (&stmts, stmt);
 
5851
+  gimple cvt = gimple_build_assign_with_ops
 
5852
+      (NOP_EXPR, lhs, gimple_assign_lhs (stmt), NULL_TREE);
 
5853
+  gimple_seq_add_stmt (&stmts, cvt);
 
5854
+
 
5855
+  return stmts;
 
5856
+}
 
5857
+
 
5858
 /* Hoist the statements in basic block BB out of the loops prescribed by
 
5859
    data stored in LIM_DATA structures associated with each statement.  Callback
 
5860
    for walk_dominator_tree.  */
 
5861
@@ -1321,7 +1382,21 @@
 
5862
            }
 
5863
        }
 
5864
       gsi_remove (&bsi, false);
 
5865
-      gsi_insert_on_edge (e, stmt);
 
5866
+      /* In case this is a stmt that is not unconditionally executed
 
5867
+         when the target loop header is executed and the stmt may
 
5868
+        invoke undefined integer or pointer overflow rewrite it to
 
5869
+        unsigned arithmetic.  */
 
5870
+      if (is_gimple_assign (stmt)
 
5871
+         && INTEGRAL_TYPE_P (TREE_TYPE (gimple_assign_lhs (stmt)))
 
5872
+         && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (gimple_assign_lhs (stmt)))
 
5873
+         && arith_code_with_undefined_signed_overflow
 
5874
+              (gimple_assign_rhs_code (stmt))
 
5875
+         && (!ALWAYS_EXECUTED_IN (bb)
 
5876
+             || !(ALWAYS_EXECUTED_IN (bb) == level
 
5877
+                  || flow_loop_nested_p (ALWAYS_EXECUTED_IN (bb), level))))
 
5878
+       gsi_insert_seq_on_edge (e, rewrite_to_defined_overflow (stmt));
 
5879
+      else
 
5880
+       gsi_insert_on_edge (e, stmt);
 
5881
     }
 
5882
 }
 
5883
 
 
5884
Index: gcc/tree-ssa-tail-merge.c
 
5885
===================================================================
 
5886
--- a/src/gcc/tree-ssa-tail-merge.c     (.../tags/gcc_4_8_2_release)
 
5887
+++ b/src/gcc/tree-ssa-tail-merge.c     (.../branches/gcc-4_8-branch)
 
5888
@@ -297,7 +297,8 @@
 
5889
   tree val;
 
5890
   def_operand_p def_p;
 
5891
 
 
5892
-  if (gimple_has_side_effects (stmt))
 
5893
+  if (gimple_has_side_effects (stmt)
 
5894
+      || gimple_vdef (stmt) != NULL_TREE)
 
5895
     return false;
 
5896
 
 
5897
   def_p = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_DEF);
 
5898
Index: gcc/cgraphbuild.c
 
5899
===================================================================
 
5900
--- a/src/gcc/cgraphbuild.c     (.../tags/gcc_4_8_2_release)
 
5901
+++ b/src/gcc/cgraphbuild.c     (.../branches/gcc-4_8-branch)
 
5902
@@ -73,7 +73,7 @@
 
5903
       decl = get_base_var (*tp);
 
5904
       if (TREE_CODE (decl) == FUNCTION_DECL)
 
5905
        {
 
5906
-         struct cgraph_node *node = cgraph_get_create_node (decl);
 
5907
+         struct cgraph_node *node = cgraph_get_create_real_symbol_node (decl);
 
5908
          if (!ctx->only_vars)
 
5909
            cgraph_mark_address_taken_node (node);
 
5910
          ipa_record_reference ((symtab_node)ctx->varpool_node,
 
5911
@@ -143,7 +143,7 @@
 
5912
     {
 
5913
       struct cgraph_node *per_node;
 
5914
 
 
5915
-      per_node = cgraph_get_create_node (DECL_FUNCTION_PERSONALITY (node->symbol.decl));
 
5916
+      per_node = cgraph_get_create_real_symbol_node (DECL_FUNCTION_PERSONALITY (node->symbol.decl));
 
5917
       ipa_record_reference ((symtab_node)node, (symtab_node)per_node, IPA_REF_ADDR, NULL);
 
5918
       cgraph_mark_address_taken_node (per_node);
 
5919
     }
 
5920
@@ -218,12 +218,12 @@
 
5921
 /* Mark address taken in STMT.  */
 
5922
 
 
5923
 static bool
 
5924
-mark_address (gimple stmt, tree addr, void *data)
 
5925
+mark_address (gimple stmt, tree addr, tree, void *data)
 
5926
 {
 
5927
   addr = get_base_address (addr);
 
5928
   if (TREE_CODE (addr) == FUNCTION_DECL)
 
5929
     {
 
5930
-      struct cgraph_node *node = cgraph_get_create_node (addr);
 
5931
+      struct cgraph_node *node = cgraph_get_create_real_symbol_node (addr);
 
5932
       cgraph_mark_address_taken_node (node);
 
5933
       ipa_record_reference ((symtab_node)data,
 
5934
                            (symtab_node)node,
 
5935
@@ -245,7 +245,7 @@
 
5936
 /* Mark load of T.  */
 
5937
 
 
5938
 static bool
 
5939
-mark_load (gimple stmt, tree t, void *data)
 
5940
+mark_load (gimple stmt, tree t, tree, void *data)
 
5941
 {
 
5942
   t = get_base_address (t);
 
5943
   if (t && TREE_CODE (t) == FUNCTION_DECL)
 
5944
@@ -252,7 +252,7 @@
 
5945
     {
 
5946
       /* ??? This can happen on platforms with descriptors when these are
 
5947
         directly manipulated in the code.  Pretend that it's an address.  */
 
5948
-      struct cgraph_node *node = cgraph_get_create_node (t);
 
5949
+      struct cgraph_node *node = cgraph_get_create_real_symbol_node (t);
 
5950
       cgraph_mark_address_taken_node (node);
 
5951
       ipa_record_reference ((symtab_node)data,
 
5952
                            (symtab_node)node,
 
5953
@@ -273,7 +273,7 @@
 
5954
 /* Mark store of T.  */
 
5955
 
 
5956
 static bool
 
5957
-mark_store (gimple stmt, tree t, void *data)
 
5958
+mark_store (gimple stmt, tree t, tree, void *data)
 
5959
 {
 
5960
   t = get_base_address (t);
 
5961
   if (t && TREE_CODE (t) == VAR_DECL
 
5962
@@ -330,7 +330,7 @@
 
5963
            {
 
5964
              tree fn = gimple_omp_parallel_child_fn (stmt);
 
5965
              ipa_record_reference ((symtab_node)node,
 
5966
-                                   (symtab_node)cgraph_get_create_node (fn),
 
5967
+                                   (symtab_node)cgraph_get_create_real_symbol_node (fn),
 
5968
                                    IPA_REF_ADDR, stmt);
 
5969
            }
 
5970
          if (gimple_code (stmt) == GIMPLE_OMP_TASK)
 
5971
@@ -338,12 +338,12 @@
 
5972
              tree fn = gimple_omp_task_child_fn (stmt);
 
5973
              if (fn)
 
5974
                ipa_record_reference ((symtab_node)node,
 
5975
-                                     (symtab_node) cgraph_get_create_node (fn),
 
5976
+                                     (symtab_node) cgraph_get_create_real_symbol_node (fn),
 
5977
                                      IPA_REF_ADDR, stmt);
 
5978
              fn = gimple_omp_task_copy_fn (stmt);
 
5979
              if (fn)
 
5980
                ipa_record_reference ((symtab_node)node,
 
5981
-                                     (symtab_node)cgraph_get_create_node (fn),
 
5982
+                                     (symtab_node)cgraph_get_create_real_symbol_node (fn),
 
5983
                                      IPA_REF_ADDR, stmt);
 
5984
            }
 
5985
        }
 
5986
Index: gcc/tree-ssa-uninit.c
 
5987
===================================================================
 
5988
--- a/src/gcc/tree-ssa-uninit.c (.../tags/gcc_4_8_2_release)
 
5989
+++ b/src/gcc/tree-ssa-uninit.c (.../branches/gcc-4_8-branch)
 
5990
@@ -36,6 +36,7 @@
 
5991
 #include "hashtab.h"
 
5992
 #include "tree-pass.h"
 
5993
 #include "diagnostic-core.h"
 
5994
+#include "params.h"
 
5995
 
 
5996
 /* This implements the pass that does predicate aware warning on uses of
 
5997
    possibly uninitialized variables. The pass first collects the set of
 
5998
@@ -246,8 +247,8 @@
 
5999
 
 
6000
 /* Computes the control dependence chains (paths of edges)
 
6001
    for DEP_BB up to the dominating basic block BB (the head node of a
 
6002
-   chain should be dominated by it).  CD_CHAINS is pointer to a
 
6003
-   dynamic array holding the result chains. CUR_CD_CHAIN is the current
 
6004
+   chain should be dominated by it).  CD_CHAINS is pointer to an
 
6005
+   array holding the result chains.  CUR_CD_CHAIN is the current
 
6006
    chain being computed.  *NUM_CHAINS is total number of chains.  The
 
6007
    function returns true if the information is successfully computed,
 
6008
    return false if there is no control dependence or not computed.  */
 
6009
@@ -256,7 +257,8 @@
 
6010
 compute_control_dep_chain (basic_block bb, basic_block dep_bb,
 
6011
                            vec<edge> *cd_chains,
 
6012
                            size_t *num_chains,
 
6013
-                           vec<edge> *cur_cd_chain)
 
6014
+                          vec<edge> *cur_cd_chain,
 
6015
+                          int *num_calls)
 
6016
 {
 
6017
   edge_iterator ei;
 
6018
   edge e;
 
6019
@@ -267,6 +269,10 @@
 
6020
   if (EDGE_COUNT (bb->succs) < 2)
 
6021
     return false;
 
6022
 
 
6023
+  if (*num_calls > PARAM_VALUE (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS))
 
6024
+    return false;
 
6025
+  ++*num_calls;
 
6026
+
 
6027
   /* Could  use a set instead.  */
 
6028
   cur_chain_len = cur_cd_chain->length ();
 
6029
   if (cur_chain_len > MAX_CHAIN_LEN)
 
6030
@@ -306,7 +312,7 @@
 
6031
 
 
6032
           /* Now check if DEP_BB is indirectly control dependent on BB.  */
 
6033
           if (compute_control_dep_chain (cd_bb, dep_bb, cd_chains,
 
6034
-                                         num_chains, cur_cd_chain))
 
6035
+                                        num_chains, cur_cd_chain, num_calls))
 
6036
             {
 
6037
               found_cd_chain = true;
 
6038
               break;
 
6039
@@ -438,14 +444,12 @@
 
6040
                  basic_block use_bb)
 
6041
 {
 
6042
   size_t num_chains = 0, i;
 
6043
-  vec<edge> *dep_chains = 0;
 
6044
+  int num_calls = 0;
 
6045
+  vec<edge> dep_chains[MAX_NUM_CHAINS];
 
6046
   vec<edge> cur_chain = vNULL;
 
6047
   bool has_valid_pred = false;
 
6048
   basic_block cd_root = 0;
 
6049
 
 
6050
-  typedef vec<edge> vec_edge_heap;
 
6051
-  dep_chains = XCNEWVEC (vec_edge_heap, MAX_NUM_CHAINS);
 
6052
-
 
6053
   /* First find the closest bb that is control equivalent to PHI_BB
 
6054
      that also dominates USE_BB.  */
 
6055
   cd_root = phi_bb;
 
6056
@@ -458,20 +462,16 @@
 
6057
         break;
 
6058
     }
 
6059
 
 
6060
-  compute_control_dep_chain (cd_root, use_bb,
 
6061
-                             dep_chains, &num_chains,
 
6062
-                             &cur_chain);
 
6063
+  compute_control_dep_chain (cd_root, use_bb, dep_chains, &num_chains,
 
6064
+                            &cur_chain, &num_calls);
 
6065
 
 
6066
   has_valid_pred
 
6067
-      = convert_control_dep_chain_into_preds (dep_chains,
 
6068
-                                              num_chains,
 
6069
-                                              preds,
 
6070
-                                              num_preds);
 
6071
+    = convert_control_dep_chain_into_preds (dep_chains, num_chains, preds,
 
6072
+                                           num_preds);
 
6073
   /* Free individual chain  */
 
6074
   cur_chain.release ();
 
6075
   for (i = 0; i < num_chains; i++)
 
6076
     dep_chains[i].release ();
 
6077
-  free (dep_chains);
 
6078
   return has_valid_pred;
 
6079
 }
 
6080
 
 
6081
@@ -539,7 +539,7 @@
 
6082
                 size_t *num_preds, gimple phi)
 
6083
 {
 
6084
   size_t num_chains = 0, i, n;
 
6085
-  vec<edge> *dep_chains = 0;
 
6086
+  vec<edge> dep_chains[MAX_NUM_CHAINS];
 
6087
   vec<edge> cur_chain = vNULL;
 
6088
   vec<edge> def_edges = vNULL;
 
6089
   bool has_valid_pred = false;
 
6090
@@ -546,9 +546,6 @@
 
6091
   basic_block phi_bb, cd_root = 0;
 
6092
   struct pointer_set_t *visited_phis;
 
6093
 
 
6094
-  typedef vec<edge> vec_edge_heap;
 
6095
-  dep_chains = XCNEWVEC (vec_edge_heap, MAX_NUM_CHAINS);
 
6096
-
 
6097
   phi_bb = gimple_bb (phi);
 
6098
   /* First find the closest dominating bb to be
 
6099
      the control dependence root  */
 
6100
@@ -567,38 +564,33 @@
 
6101
   for (i = 0; i < n; i++)
 
6102
     {
 
6103
       size_t prev_nc, j;
 
6104
+      int num_calls = 0;
 
6105
       edge opnd_edge;
 
6106
 
 
6107
       opnd_edge = def_edges[i];
 
6108
       prev_nc = num_chains;
 
6109
-      compute_control_dep_chain (cd_root, opnd_edge->src,
 
6110
-                                 dep_chains, &num_chains,
 
6111
-                                 &cur_chain);
 
6112
-      /* Free individual chain  */
 
6113
-      cur_chain.release ();
 
6114
+      compute_control_dep_chain (cd_root, opnd_edge->src, dep_chains,
 
6115
+                                &num_chains, &cur_chain, &num_calls);
 
6116
 
 
6117
       /* Now update the newly added chains with
 
6118
          the phi operand edge:  */
 
6119
       if (EDGE_COUNT (opnd_edge->src->succs) > 1)
 
6120
         {
 
6121
-          if (prev_nc == num_chains
 
6122
-              && num_chains < MAX_NUM_CHAINS)
 
6123
-            num_chains++;
 
6124
+         if (prev_nc == num_chains && num_chains < MAX_NUM_CHAINS)
 
6125
+           dep_chains[num_chains++] = vNULL;
 
6126
           for (j = prev_nc; j < num_chains; j++)
 
6127
-            {
 
6128
-              dep_chains[j].safe_push (opnd_edge);
 
6129
-            }
 
6130
+           dep_chains[j].safe_push (opnd_edge);
 
6131
         }
 
6132
     }
 
6133
 
 
6134
+  /* Free individual chain  */
 
6135
+  cur_chain.release ();
 
6136
+
 
6137
   has_valid_pred
 
6138
-      = convert_control_dep_chain_into_preds (dep_chains,
 
6139
-                                              num_chains,
 
6140
-                                              preds,
 
6141
-                                              num_preds);
 
6142
+    = convert_control_dep_chain_into_preds (dep_chains, num_chains, preds,
 
6143
+                                           num_preds);
 
6144
   for (i = 0; i < num_chains; i++)
 
6145
     dep_chains[i].release ();
 
6146
-  free (dep_chains);
 
6147
   return has_valid_pred;
 
6148
 }
 
6149
 
 
6150
Index: gcc/tree-ssa-loop-niter.c
 
6151
===================================================================
 
6152
--- a/src/gcc/tree-ssa-loop-niter.c     (.../tags/gcc_4_8_2_release)
 
6153
+++ b/src/gcc/tree-ssa-loop-niter.c     (.../branches/gcc-4_8-branch)
 
6154
@@ -2075,7 +2075,8 @@
 
6155
       return NULL;
 
6156
     }
 
6157
 
 
6158
-  if (gimple_code (stmt) != GIMPLE_ASSIGN)
 
6159
+  if (gimple_code (stmt) != GIMPLE_ASSIGN
 
6160
+      || gimple_assign_rhs_class (stmt) == GIMPLE_TERNARY_RHS)
 
6161
     return NULL;
 
6162
 
 
6163
   code = gimple_assign_rhs_code (stmt);
 
6164
@@ -2143,7 +2144,7 @@
 
6165
 {
 
6166
   gimple stmt;
 
6167
 
 
6168
-  gcc_assert (is_gimple_min_invariant (base));
 
6169
+  gcc_checking_assert (is_gimple_min_invariant (base));
 
6170
 
 
6171
   if (!x)
 
6172
     return base;
 
6173
@@ -2152,7 +2153,7 @@
 
6174
   if (gimple_code (stmt) == GIMPLE_PHI)
 
6175
     return base;
 
6176
 
 
6177
-  gcc_assert (is_gimple_assign (stmt));
 
6178
+  gcc_checking_assert (is_gimple_assign (stmt));
 
6179
 
 
6180
   /* STMT must be either an assignment of a single SSA name or an
 
6181
      expression involving an SSA name and a constant.  Try to fold that
 
6182
Index: gcc/c-family/ChangeLog
 
6183
===================================================================
 
6184
--- a/src/gcc/c-family/ChangeLog        (.../tags/gcc_4_8_2_release)
 
6185
+++ b/src/gcc/c-family/ChangeLog        (.../branches/gcc-4_8-branch)
 
6186
@@ -1,3 +1,36 @@
 
6187
+2014-03-06  Jakub Jelinek  <jakub@redhat.com>
 
6188
+
 
6189
+       Backport from mainline
 
6190
+       2014-02-19  Jakub Jelinek  <jakub@redhat.com>
 
6191
+
 
6192
+       PR c/37743
 
6193
+       * c-common.c (c_common_nodes_and_builtins): When initializing
 
6194
+       c_uint{16,32,64}_type_node, also set corresponding
 
6195
+       uint{16,32,64}_type_node to the same value.
 
6196
+
 
6197
+       2014-02-12  Jakub Jelinek  <jakub@redhat.com>
 
6198
+
 
6199
+       PR c/60101
 
6200
+       * c-common.c (merge_tlist): If copy is true, call new_tlist,
 
6201
+       if false, add ADD itself, rather than vice versa.
 
6202
+       (verify_tree): For COND_EXPR, don't call merge_tlist with non-zero
 
6203
+       copy.  For SAVE_EXPR, only call merge_tlist once.
 
6204
+
 
6205
+2013-11-29  Jakub Jelinek  <jakub@redhat.com>
 
6206
+
 
6207
+       PR c/59280
 
6208
+       * c-common.c (get_priority): If TREE_VALUE (args) is IDENTIFIER_NODE,
 
6209
+       goto invalid.  If it is error_mark_node, don't issue further
 
6210
+       diagnostics.
 
6211
+
 
6212
+2013-11-04  Marek Polacek  <polacek@redhat.com>
 
6213
+
 
6214
+       Backport from mainline
 
6215
+       2013-11-04  Marek Polacek  <polacek@redhat.com>
 
6216
+
 
6217
+       PR c++/58979
 
6218
+       * c-common.c (invalid_indirection_error): Handle RO_ARROW_STAR case.
 
6219
+
 
6220
 2013-10-16  Release Manager
 
6221
 
 
6222
        * GCC 4.8.2 released.
 
6223
Index: gcc/c-family/c-common.c
 
6224
===================================================================
 
6225
--- a/src/gcc/c-family/c-common.c       (.../tags/gcc_4_8_2_release)
 
6226
+++ b/src/gcc/c-family/c-common.c       (.../branches/gcc-4_8-branch)
 
6227
@@ -2894,7 +2894,7 @@
 
6228
          }
 
6229
       if (!found)
 
6230
        {
 
6231
-         *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
 
6232
+         *end = copy ? new_tlist (NULL, add->expr, add->writer) : add;
 
6233
          end = &(*end)->next;
 
6234
          *end = 0;
 
6235
        }
 
6236
@@ -3052,7 +3052,7 @@
 
6237
       verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
 
6238
       warn_for_collisions (tmp_list2);
 
6239
       merge_tlist (pbefore_sp, tmp_before, 0);
 
6240
-      merge_tlist (pbefore_sp, tmp_list2, 1);
 
6241
+      merge_tlist (pbefore_sp, tmp_list2, 0);
 
6242
 
 
6243
       tmp_list3 = tmp_nosp = 0;
 
6244
       verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
 
6245
@@ -3156,12 +3156,7 @@
 
6246
            warn_for_collisions (tmp_nosp);
 
6247
 
 
6248
            tmp_list3 = 0;
 
6249
-           while (tmp_nosp)
 
6250
-             {
 
6251
-               struct tlist *t = tmp_nosp;
 
6252
-               tmp_nosp = t->next;
 
6253
-               merge_tlist (&tmp_list3, t, 0);
 
6254
-             }
 
6255
+           merge_tlist (&tmp_list3, tmp_nosp, 0);
 
6256
            t->cache_before_sp = tmp_before;
 
6257
            t->cache_after_sp = tmp_list3;
 
6258
          }
 
6259
@@ -5511,13 +5506,13 @@
 
6260
     uint8_type_node =
 
6261
       TREE_TYPE (identifier_global_value (c_get_ident (UINT8_TYPE)));
 
6262
   if (UINT16_TYPE)
 
6263
-    c_uint16_type_node =
 
6264
+    c_uint16_type_node = uint16_type_node =
 
6265
       TREE_TYPE (identifier_global_value (c_get_ident (UINT16_TYPE)));
 
6266
   if (UINT32_TYPE)
 
6267
-    c_uint32_type_node =
 
6268
+    c_uint32_type_node = uint32_type_node =
 
6269
       TREE_TYPE (identifier_global_value (c_get_ident (UINT32_TYPE)));
 
6270
   if (UINT64_TYPE)
 
6271
-    c_uint64_type_node =
 
6272
+    c_uint64_type_node = uint64_type_node =
 
6273
       TREE_TYPE (identifier_global_value (c_get_ident (UINT64_TYPE)));
 
6274
   if (INT_LEAST8_TYPE)
 
6275
     int_least8_type_node =
 
6276
@@ -6917,6 +6912,10 @@
 
6277
     }
 
6278
 
 
6279
   arg = TREE_VALUE (args);
 
6280
+  if (TREE_CODE (arg) == IDENTIFIER_NODE)
 
6281
+    goto invalid;
 
6282
+  if (arg == error_mark_node)
 
6283
+    return DEFAULT_INIT_PRIORITY;
 
6284
   arg = default_conversion (arg);
 
6285
   if (!host_integerp (arg, /*pos=*/0)
 
6286
       || !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
 
6287
@@ -9763,6 +9762,11 @@
 
6288
                "invalid type argument of %<->%> (have %qT)",
 
6289
                type);
 
6290
       break;
 
6291
+    case RO_ARROW_STAR:
 
6292
+      error_at (loc,
 
6293
+               "invalid type argument of %<->*%> (have %qT)",
 
6294
+               type);
 
6295
+      break;
 
6296
     case RO_IMPLICIT_CONVERSION:
 
6297
       error_at (loc,
 
6298
                "invalid type argument of implicit conversion (have %qT)",
 
6299
Index: gcc/c/c-typeck.c
 
6300
===================================================================
 
6301
--- a/src/gcc/c/c-typeck.c      (.../tags/gcc_4_8_2_release)
 
6302
+++ b/src/gcc/c/c-typeck.c      (.../branches/gcc-4_8-branch)
 
6303
@@ -3629,7 +3629,8 @@
 
6304
       /* Report invalid types.  */
 
6305
 
 
6306
       if (typecode != POINTER_TYPE && typecode != FIXED_POINT_TYPE
 
6307
-         && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
 
6308
+         && typecode != INTEGER_TYPE && typecode != REAL_TYPE
 
6309
+         && typecode != VECTOR_TYPE)
 
6310
        {
 
6311
          if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
 
6312
            error_at (location, "wrong type argument to increment");
 
6313
@@ -3694,7 +3695,9 @@
 
6314
          }
 
6315
        else
 
6316
          {
 
6317
-           inc = integer_one_node;
 
6318
+           inc = (TREE_CODE (argtype) == VECTOR_TYPE
 
6319
+                  ? build_one_cst (argtype)
 
6320
+                  : integer_one_node);
 
6321
            inc = convert (argtype, inc);
 
6322
          }
 
6323
 
 
6324
@@ -4331,8 +4334,10 @@
 
6325
     {
 
6326
       if (int_operands)
 
6327
        {
 
6328
-         op1 = remove_c_maybe_const_expr (op1);
 
6329
-         op2 = remove_c_maybe_const_expr (op2);
 
6330
+         /* Use c_fully_fold here, since C_MAYBE_CONST_EXPR might be
 
6331
+            nested inside of the expression.  */
 
6332
+         op1 = c_fully_fold (op1, false, NULL);
 
6333
+         op2 = c_fully_fold (op2, false, NULL);
 
6334
        }
 
6335
       ret = build3 (COND_EXPR, result_type, ifexp, op1, op2);
 
6336
       if (int_operands)
 
6337
@@ -10618,7 +10623,8 @@
 
6338
                        "%qE has invalid type for %<reduction%>", t);
 
6339
              remove = true;
 
6340
            }
 
6341
-         else if (FLOAT_TYPE_P (TREE_TYPE (t)))
 
6342
+         else if (FLOAT_TYPE_P (TREE_TYPE (t))
 
6343
+                  || TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
 
6344
            {
 
6345
              enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
 
6346
              const char *r_name = NULL;
 
6347
@@ -10628,8 +10634,14 @@
 
6348
                case PLUS_EXPR:
 
6349
                case MULT_EXPR:
 
6350
                case MINUS_EXPR:
 
6351
+                 break;
 
6352
                case MIN_EXPR:
 
6353
+                 if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
 
6354
+                   r_name = "min";
 
6355
+                 break;
 
6356
                case MAX_EXPR:
 
6357
+                 if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
 
6358
+                   r_name = "max";
 
6359
                  break;
 
6360
                case BIT_AND_EXPR:
 
6361
                  r_name = "&";
 
6362
@@ -10641,10 +10653,12 @@
 
6363
                  r_name = "|";
 
6364
                  break;
 
6365
                case TRUTH_ANDIF_EXPR:
 
6366
-                 r_name = "&&";
 
6367
+                 if (FLOAT_TYPE_P (TREE_TYPE (t)))
 
6368
+                   r_name = "&&";
 
6369
                  break;
 
6370
                case TRUTH_ORIF_EXPR:
 
6371
-                 r_name = "||";
 
6372
+                 if (FLOAT_TYPE_P (TREE_TYPE (t)))
 
6373
+                   r_name = "||";
 
6374
                  break;
 
6375
                default:
 
6376
                  gcc_unreachable ();
 
6377
Index: gcc/c/ChangeLog
 
6378
===================================================================
 
6379
--- a/src/gcc/c/ChangeLog       (.../tags/gcc_4_8_2_release)
 
6380
+++ b/src/gcc/c/ChangeLog       (.../branches/gcc-4_8-branch)
 
6381
@@ -1,3 +1,33 @@
 
6382
+2014-01-23  Jakub Jelinek  <jakub@redhat.com>
 
6383
+
 
6384
+       PR middle-end/58809
 
6385
+       * c-typeck.c (c_finish_omp_clause): Reject MIN_EXPR, MAX_EXPR,
 
6386
+       BIT_AND_EXPR, BIT_IOR_EXPR and BIT_XOR_EXPR on COMPLEX_TYPEs.
 
6387
+
 
6388
+2014-01-22  Marek Polacek  <polacek@redhat.com>
 
6389
+
 
6390
+       Backport from mainline
 
6391
+       2014-01-22  Marek Polacek  <polacek@redhat.com>
 
6392
+
 
6393
+       PR c/59891
 
6394
+       * c-typeck.c (build_conditional_expr): Call c_fully_fold instead
 
6395
+       of remove_c_maybe_const_expr on op1 and op2.
 
6396
+
 
6397
+2013-12-03  Marek Polacek  <polacek@redhat.com>
 
6398
+
 
6399
+       Backport from mainline
 
6400
+       2013-12-03  Marek Polacek  <polacek@redhat.com>
 
6401
+
 
6402
+       PR c/59351
 
6403
+       * c-decl.c (build_compound_literal): Allow compound literals with
 
6404
+       empty initial value.
 
6405
+
 
6406
+2013-11-27  Tom de Vries  <tom@codesourcery.com>
 
6407
+           Marc Glisse  <marc.glisse@inria.fr>
 
6408
+
 
6409
+       PR c++/59032
 
6410
+       * c-typeck.c (build_unary_op): Allow vector increment and decrement.
 
6411
+
 
6412
 2013-10-16  Release Manager
 
6413
 
 
6414
        * GCC 4.8.2 released.
 
6415
Index: gcc/c/c-decl.c
 
6416
===================================================================
 
6417
--- a/src/gcc/c/c-decl.c        (.../tags/gcc_4_8_2_release)
 
6418
+++ b/src/gcc/c/c-decl.c        (.../branches/gcc-4_8-branch)
 
6419
@@ -4632,7 +4632,9 @@
 
6420
     {
 
6421
       int failure = complete_array_type (&TREE_TYPE (decl),
 
6422
                                         DECL_INITIAL (decl), true);
 
6423
-      gcc_assert (!failure);
 
6424
+      /* If complete_array_type returns 3, it means that the
 
6425
+         initial value of the compound literal is empty.  Allow it.  */
 
6426
+      gcc_assert (failure == 0 || failure == 3);
 
6427
 
 
6428
       type = TREE_TYPE (decl);
 
6429
       TREE_TYPE (DECL_INITIAL (decl)) = type;
 
6430
Index: gcc/cgraph.c
 
6431
===================================================================
 
6432
--- a/src/gcc/cgraph.c  (.../tags/gcc_4_8_2_release)
 
6433
+++ b/src/gcc/cgraph.c  (.../branches/gcc-4_8-branch)
 
6434
@@ -2596,4 +2596,47 @@
 
6435
   FOR_EACH_FUNCTION (node)
 
6436
     verify_cgraph_node (node);
 
6437
 }
 
6438
+
 
6439
+/* Create external decl node for DECL.
 
6440
+   The difference i nbetween cgraph_get_create_node and
 
6441
+   cgraph_get_create_real_symbol_node is that cgraph_get_create_node
 
6442
+   may return inline clone, while cgraph_get_create_real_symbol_node
 
6443
+   will create a new node in this case.
 
6444
+   FIXME: This function should be removed once clones are put out of decl
 
6445
+   hash.  */
 
6446
+
 
6447
+struct cgraph_node *
 
6448
+cgraph_get_create_real_symbol_node (tree decl)
 
6449
+{
 
6450
+  struct cgraph_node *first_clone = cgraph_get_node (decl);
 
6451
+  struct cgraph_node *node;
 
6452
+  /* create symbol table node.  even if inline clone exists, we can not take
 
6453
+     it as a target of non-inlined call.  */
 
6454
+  node = cgraph_get_node (decl);
 
6455
+  if (node && !node->global.inlined_to)
 
6456
+    return node;
 
6457
+
 
6458
+  node = cgraph_create_node (decl);
 
6459
+
 
6460
+  /* ok, we previously inlined the function, then removed the offline copy and
 
6461
+     now we want it back for external call.  this can happen when devirtualizing
 
6462
+     while inlining function called once that happens after extern inlined and
 
6463
+     virtuals are already removed.  in this case introduce the external node
 
6464
+     and make it available for call.  */
 
6465
+  if (first_clone)
 
6466
+    {
 
6467
+      first_clone->clone_of = node;
 
6468
+      node->clones = first_clone;
 
6469
+      symtab_prevail_in_asm_name_hash ((symtab_node) node);
 
6470
+      symtab_insert_node_to_hashtable ((symtab_node) node);
 
6471
+      if (dump_file)
 
6472
+       fprintf (dump_file, "Introduced new external node "
 
6473
+                "(%s/%i) and turned into root of the clone tree.\n",
 
6474
+                xstrdup (cgraph_node_name (node)), node->uid);
 
6475
+    }
 
6476
+  else if (dump_file)
 
6477
+    fprintf (dump_file, "Introduced new external node "
 
6478
+            "(%s/%i).\n", xstrdup (cgraph_node_name (node)), node->uid);
 
6479
+  return node;
 
6480
+}
 
6481
 #include "gt-cgraph.h"
 
6482
Index: gcc/cgraph.h
 
6483
===================================================================
 
6484
--- a/src/gcc/cgraph.h  (.../tags/gcc_4_8_2_release)
 
6485
+++ b/src/gcc/cgraph.h  (.../branches/gcc-4_8-branch)
 
6486
@@ -575,6 +575,7 @@
 
6487
 struct cgraph_node * cgraph_create_node (tree);
 
6488
 struct cgraph_node * cgraph_create_empty_node (void);
 
6489
 struct cgraph_node * cgraph_get_create_node (tree);
 
6490
+struct cgraph_node * cgraph_get_create_real_symbol_node (tree);
 
6491
 struct cgraph_node * cgraph_same_body_alias (struct cgraph_node *, tree, tree);
 
6492
 struct cgraph_node * cgraph_add_thunk (struct cgraph_node *, tree, tree, bool, HOST_WIDE_INT,
 
6493
                                       HOST_WIDE_INT, tree, tree);
 
6494
Index: gcc/optabs.c
 
6495
===================================================================
 
6496
--- a/src/gcc/optabs.c  (.../tags/gcc_4_8_2_release)
 
6497
+++ b/src/gcc/optabs.c  (.../branches/gcc-4_8-branch)
 
6498
@@ -4558,8 +4558,11 @@
 
6499
   if (!COMPARISON_P (comparison))
 
6500
     return NULL_RTX;
 
6501
 
 
6502
+  /* State variables we need to save and restore if cmove can't be used.  */
 
6503
+  int save_pending_stack_adjust = pending_stack_adjust;
 
6504
+  int save_stack_pointer_delta = stack_pointer_delta;
 
6505
+  last = get_last_insn ();
 
6506
   do_pending_stack_adjust ();
 
6507
-  last = get_last_insn ();
 
6508
   prepare_cmp_insn (XEXP (comparison, 0), XEXP (comparison, 1),
 
6509
                    GET_CODE (comparison), NULL_RTX, unsignedp, OPTAB_WIDEN,
 
6510
                    &comparison, &cmode);
 
6511
@@ -4579,6 +4582,8 @@
 
6512
        }
 
6513
     }
 
6514
   delete_insns_since (last);
 
6515
+  pending_stack_adjust = save_pending_stack_adjust;
 
6516
+  stack_pointer_delta = save_stack_pointer_delta;
 
6517
   return NULL_RTX;
 
6518
 }
 
6519
 
 
6520
@@ -6233,7 +6238,7 @@
 
6521
 
 
6522
   /* If the optabs changed, record it.  */
 
6523
   if (memcmp (tmp_optabs, this_target_optabs, sizeof (struct target_optabs)))
 
6524
-    TREE_OPTIMIZATION_OPTABS (optnode) = (unsigned char *) tmp_optabs;
 
6525
+    TREE_OPTIMIZATION_OPTABS (optnode) = tmp_optabs;
 
6526
   else
 
6527
     {
 
6528
       TREE_OPTIMIZATION_OPTABS (optnode) = NULL;
 
6529
@@ -7035,8 +7040,7 @@
 
6530
 
 
6531
       create_output_operand (&ops[0], target, mode);
 
6532
       create_fixed_operand (&ops[1], mem);
 
6533
-      /* VAL may have been promoted to a wider mode.  Shrink it if so.  */
 
6534
-      create_convert_operand_to (&ops[2], val, mode, true);
 
6535
+      create_input_operand (&ops[2], val, mode);
 
6536
       create_integer_operand (&ops[3], model);
 
6537
       if (maybe_expand_insn (icode, 4, ops))
 
6538
        return ops[0].value;
 
6539
@@ -7075,8 +7079,7 @@
 
6540
       struct expand_operand ops[3];
 
6541
       create_output_operand (&ops[0], target, mode);
 
6542
       create_fixed_operand (&ops[1], mem);
 
6543
-      /* VAL may have been promoted to a wider mode.  Shrink it if so.  */
 
6544
-      create_convert_operand_to (&ops[2], val, mode, true);
 
6545
+      create_input_operand (&ops[2], val, mode);
 
6546
       if (maybe_expand_insn (icode, 3, ops))
 
6547
        return ops[0].value;
 
6548
     }
 
6549
@@ -7118,8 +7121,6 @@
 
6550
     {
 
6551
       if (!target || !register_operand (target, mode))
 
6552
        target = gen_reg_rtx (mode);
 
6553
-      if (GET_MODE (val) != VOIDmode && GET_MODE (val) != mode)
 
6554
-       val = convert_modes (mode, GET_MODE (val), val, 1);
 
6555
       if (expand_compare_and_swap_loop (mem, target, val, NULL_RTX))
 
6556
        return target;
 
6557
     }
 
6558
@@ -7331,8 +7332,8 @@
 
6559
       create_output_operand (&ops[0], target_bool, bool_mode);
 
6560
       create_output_operand (&ops[1], target_oval, mode);
 
6561
       create_fixed_operand (&ops[2], mem);
 
6562
-      create_convert_operand_to (&ops[3], expected, mode, true);
 
6563
-      create_convert_operand_to (&ops[4], desired, mode, true);
 
6564
+      create_input_operand (&ops[3], expected, mode);
 
6565
+      create_input_operand (&ops[4], desired, mode);
 
6566
       create_integer_operand (&ops[5], is_weak);
 
6567
       create_integer_operand (&ops[6], succ_model);
 
6568
       create_integer_operand (&ops[7], fail_model);
 
6569
@@ -7353,8 +7354,8 @@
 
6570
 
 
6571
       create_output_operand (&ops[0], target_oval, mode);
 
6572
       create_fixed_operand (&ops[1], mem);
 
6573
-      create_convert_operand_to (&ops[2], expected, mode, true);
 
6574
-      create_convert_operand_to (&ops[3], desired, mode, true);
 
6575
+      create_input_operand (&ops[2], expected, mode);
 
6576
+      create_input_operand (&ops[3], desired, mode);
 
6577
       if (!maybe_expand_insn (icode, 4, ops))
 
6578
        return false;
 
6579
 
 
6580
Index: gcc/DATESTAMP
 
6581
===================================================================
 
6582
--- a/src/gcc/DATESTAMP (.../tags/gcc_4_8_2_release)
 
6583
+++ b/src/gcc/DATESTAMP (.../branches/gcc-4_8-branch)
 
6584
@@ -1 +1 @@
 
6585
-20131016
 
6586
+20140403
 
6587
Index: gcc/value-prof.c
 
6588
===================================================================
 
6589
--- a/src/gcc/value-prof.c      (.../tags/gcc_4_8_2_release)
 
6590
+++ b/src/gcc/value-prof.c      (.../branches/gcc-4_8-branch)
 
6591
@@ -1270,8 +1270,7 @@
 
6592
 
 
6593
   /* Build an EH edge for the direct call if necessary.  */
 
6594
   lp_nr = lookup_stmt_eh_lp (icall_stmt);
 
6595
-  if (lp_nr != 0
 
6596
-      && stmt_could_throw_p (dcall_stmt))
 
6597
+  if (lp_nr > 0 && stmt_could_throw_p (dcall_stmt))
 
6598
     {
 
6599
       edge e_eh, e;
 
6600
       edge_iterator ei;
 
6601
Index: gcc/tree.h
 
6602
===================================================================
 
6603
--- a/src/gcc/tree.h    (.../tags/gcc_4_8_2_release)
 
6604
+++ b/src/gcc/tree.h    (.../branches/gcc-4_8-branch)
 
6605
@@ -3589,7 +3589,7 @@
 
6606
 
 
6607
   /* Target optabs for this set of optimization options.  This is of
 
6608
      type `struct target_optabs *'.  */
 
6609
-  unsigned char *GTY ((atomic)) optabs;
 
6610
+  void *GTY ((atomic)) optabs;
 
6611
 
 
6612
   /* The value of this_target_optabs against which the optabs above were
 
6613
      generated.  */
 
6614
@@ -5854,6 +5854,7 @@
 
6615
 extern tree fold_builtin_fputs (location_t, tree, tree, bool, bool, tree);
 
6616
 extern tree fold_builtin_strcpy (location_t, tree, tree, tree, tree);
 
6617
 extern tree fold_builtin_strncpy (location_t, tree, tree, tree, tree, tree);
 
6618
+extern tree fold_builtin_strcat (location_t, tree, tree, tree);
 
6619
 extern tree fold_builtin_memory_chk (location_t, tree, tree, tree, tree, tree, tree, bool,
 
6620
                                     enum built_in_function);
 
6621
 extern tree fold_builtin_stxcpy_chk (location_t, tree, tree, tree, tree, tree, bool,
 
6622
@@ -6545,4 +6546,18 @@
 
6623
          && builtin_info.implicit_p[uns_fncode]);
 
6624
 }
 
6625
 
 
6626
+/* Return pointer to optimization flags of FNDECL.  */
 
6627
+static inline struct cl_optimization *
 
6628
+opts_for_fn (const_tree fndecl)
 
6629
+{
 
6630
+  tree fn_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (fndecl);
 
6631
+  if (fn_opts == NULL_TREE)
 
6632
+    fn_opts = optimization_default_node;
 
6633
+  return TREE_OPTIMIZATION (fn_opts);
 
6634
+}
 
6635
+
 
6636
+/* opt flag for function FNDECL, e.g. opts_for_fn (fndecl, optimize) is
 
6637
+   the optimization level of function fndecl.  */
 
6638
+#define opt_for_fn(fndecl, opt) (opts_for_fn (fndecl)->x_##opt)
 
6639
+
 
6640
 #endif  /* GCC_TREE_H  */
 
6641
Index: gcc/ipa-cp.c
 
6642
===================================================================
 
6643
--- a/src/gcc/ipa-cp.c  (.../tags/gcc_4_8_2_release)
 
6644
+++ b/src/gcc/ipa-cp.c  (.../branches/gcc-4_8-branch)
 
6645
@@ -444,6 +444,9 @@
 
6646
     reason = "not a tree_versionable_function";
 
6647
   else if (cgraph_function_body_availability (node) <= AVAIL_OVERWRITABLE)
 
6648
     reason = "insufficient body availability";
 
6649
+  else if (!opt_for_fn (node->symbol.decl, optimize)
 
6650
+          || !opt_for_fn (node->symbol.decl, flag_ipa_cp))
 
6651
+    reason = "non-optimized function";
 
6652
 
 
6653
   if (reason && dump_file && !node->alias && !node->thunk.thunk_p)
 
6654
     fprintf (dump_file, "Function %s/%i is not versionable, reason: %s.\n",
 
6655
@@ -3119,6 +3122,7 @@
 
6656
                                          struct cgraph_node *node)
 
6657
 {
 
6658
   struct ipa_node_params *orig_caller_info = IPA_NODE_REF (cs->caller);
 
6659
+  struct ipa_node_params *orig_node_info;
 
6660
   struct ipa_agg_replacement_value *aggval;
 
6661
   int i, ec, count;
 
6662
 
 
6663
@@ -3133,6 +3137,7 @@
 
6664
       if (aggval->index >= ec)
 
6665
        return false;
 
6666
 
 
6667
+  orig_node_info = IPA_NODE_REF (IPA_NODE_REF (node)->ipcp_orig_node);
 
6668
   if (orig_caller_info->ipcp_orig_node)
 
6669
     orig_caller_info = IPA_NODE_REF (orig_caller_info->ipcp_orig_node);
 
6670
 
 
6671
@@ -3150,7 +3155,7 @@
 
6672
       if (!interesting)
 
6673
        continue;
 
6674
 
 
6675
-      plats = ipa_get_parm_lattices (orig_caller_info, aggval->index);
 
6676
+      plats = ipa_get_parm_lattices (orig_node_info, aggval->index);
 
6677
       if (plats->aggs_bottom)
 
6678
        return false;
 
6679
 
 
6680
Index: gcc/rtlanal.c
 
6681
===================================================================
 
6682
--- a/src/gcc/rtlanal.c (.../tags/gcc_4_8_2_release)
 
6683
+++ b/src/gcc/rtlanal.c (.../branches/gcc-4_8-branch)
 
6684
@@ -224,10 +224,10 @@
 
6685
   return 0;
 
6686
 }
 
6687
 
 
6688
-/* Return nonzero if the use of X as an address in a MEM can cause a trap.
 
6689
-   MODE is the mode of the MEM (not that of X) and UNALIGNED_MEMS controls
 
6690
-   whether nonzero is returned for unaligned memory accesses on strict
 
6691
-   alignment machines.  */
 
6692
+/* Return nonzero if the use of X+OFFSET as an address in a MEM with SIZE
 
6693
+   bytes can cause a trap.  MODE is the mode of the MEM (not that of X) and
 
6694
+   UNALIGNED_MEMS controls whether nonzero is returned for unaligned memory
 
6695
+   references on strict alignment machines.  */
 
6696
 
 
6697
 static int
 
6698
 rtx_addr_can_trap_p_1 (const_rtx x, HOST_WIDE_INT offset, HOST_WIDE_INT size,
 
6699
@@ -235,11 +235,12 @@
 
6700
 {
 
6701
   enum rtx_code code = GET_CODE (x);
 
6702
 
 
6703
-  if (STRICT_ALIGNMENT
 
6704
-      && unaligned_mems
 
6705
-      && GET_MODE_SIZE (mode) != 0)
 
6706
+  /* The offset must be a multiple of the mode size if we are considering
 
6707
+     unaligned memory references on strict alignment machines.  */
 
6708
+  if (STRICT_ALIGNMENT && unaligned_mems && GET_MODE_SIZE (mode) != 0)
 
6709
     {
 
6710
       HOST_WIDE_INT actual_offset = offset;
 
6711
+
 
6712
 #ifdef SPARC_STACK_BOUNDARY_HACK
 
6713
       /* ??? The SPARC port may claim a STACK_BOUNDARY higher than
 
6714
             the real alignment of %sp.  However, when it does this, the
 
6715
@@ -298,8 +299,27 @@
 
6716
       return 0;
 
6717
 
 
6718
     case REG:
 
6719
-      /* As in rtx_varies_p, we have to use the actual rtx, not reg number.  */
 
6720
-      if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
 
6721
+      /* Stack references are assumed not to trap, but we need to deal with
 
6722
+        nonsensical offsets.  */
 
6723
+      if (x == frame_pointer_rtx)
 
6724
+       {
 
6725
+         HOST_WIDE_INT adj_offset = offset - STARTING_FRAME_OFFSET;
 
6726
+         if (size == 0)
 
6727
+           size = GET_MODE_SIZE (mode);
 
6728
+         if (FRAME_GROWS_DOWNWARD)
 
6729
+           {
 
6730
+             if (adj_offset < frame_offset || adj_offset + size - 1 >= 0)
 
6731
+               return 1;
 
6732
+           }
 
6733
+         else
 
6734
+           {
 
6735
+             if (adj_offset < 0 || adj_offset + size - 1 >= frame_offset)
 
6736
+               return 1;
 
6737
+           }
 
6738
+         return 0;
 
6739
+       }
 
6740
+      /* ??? Need to add a similar guard for nonsensical offsets.  */
 
6741
+      if (x == hard_frame_pointer_rtx
 
6742
          || x == stack_pointer_rtx
 
6743
          /* The arg pointer varies if it is not a fixed register.  */
 
6744
          || (x == arg_pointer_rtx && fixed_regs[ARG_POINTER_REGNUM]))
 
6745
@@ -320,9 +340,7 @@
 
6746
       if (XEXP (x, 0) == pic_offset_table_rtx && CONSTANT_P (XEXP (x, 1)))
 
6747
        return 0;
 
6748
 
 
6749
-      /* - or it is an address that can't trap plus a constant integer,
 
6750
-          with the proper remainder modulo the mode size if we are
 
6751
-          considering unaligned memory references.  */
 
6752
+      /* - or it is an address that can't trap plus a constant integer.  */
 
6753
       if (CONST_INT_P (XEXP (x, 1))
 
6754
          && !rtx_addr_can_trap_p_1 (XEXP (x, 0), offset + INTVAL (XEXP (x, 1)),
 
6755
                                     size, mode, unaligned_mems))
 
6756
Index: gcc/configure
 
6757
===================================================================
 
6758
--- a/src/gcc/configure (.../tags/gcc_4_8_2_release)
 
6759
+++ b/src/gcc/configure (.../branches/gcc-4_8-branch)
 
6760
@@ -11202,13 +11202,11 @@
 
6761
        /* | A-Za-z:\\/* ) realsrcdir=${srcdir};;
 
6762
        *) realsrcdir=../${srcdir};;
 
6763
        esac
 
6764
-       saved_CFLAGS="${CFLAGS}"
 
6765
        CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
 
6766
-       LDFLAGS="${LDFLAGS_FOR_BUILD}" \
 
6767
+       LDFLAGS="${LDFLAGS_FOR_BUILD}" GMPINC="" \
 
6768
        ${realsrcdir}/configure \
 
6769
                --enable-languages=${enable_languages-all} \
 
6770
                --target=$target_alias --host=$build_alias --build=$build_alias
 
6771
-       CFLAGS="${saved_CFLAGS}"
 
6772
 
 
6773
        # We just finished tests for the build machine, so rename
 
6774
        # the file auto-build.h in the gcc directory.
 
6775
@@ -11703,6 +11701,7 @@
 
6776
 if test x$build != x$host || test "x$coverage_flags" != x
 
6777
 then
 
6778
     BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
 
6779
+    BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CXXFLAGS_FOR_BUILD)'
 
6780
     BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
 
6781
 fi
 
6782
 
 
6783
@@ -17828,7 +17827,7 @@
 
6784
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
 
6785
   lt_status=$lt_dlunknown
 
6786
   cat > conftest.$ac_ext <<_LT_EOF
 
6787
-#line 17831 "configure"
 
6788
+#line 17830 "configure"
 
6789
 #include "confdefs.h"
 
6790
 
 
6791
 #if HAVE_DLFCN_H
 
6792
@@ -17934,7 +17933,7 @@
 
6793
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
 
6794
   lt_status=$lt_dlunknown
 
6795
   cat > conftest.$ac_ext <<_LT_EOF
 
6796
-#line 17937 "configure"
 
6797
+#line 17936 "configure"
 
6798
 #include "confdefs.h"
 
6799
 
 
6800
 #if HAVE_DLFCN_H
 
6801
@@ -24263,6 +24262,43 @@
 
6802
 $as_echo "#define HAVE_AS_SPARC4 1" >>confdefs.h
 
6803
 
 
6804
 fi
 
6805
+
 
6806
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for LEON instructions" >&5
 
6807
+$as_echo_n "checking assembler for LEON instructions... " >&6; }
 
6808
+if test "${gcc_cv_as_sparc_leon+set}" = set; then :
 
6809
+  $as_echo_n "(cached) " >&6
 
6810
+else
 
6811
+  gcc_cv_as_sparc_leon=no
 
6812
+  if test x$gcc_cv_as != x; then
 
6813
+    $as_echo '.text
 
6814
+       .register %g2, #scratch
 
6815
+       .register %g3, #scratch
 
6816
+       .align 4
 
6817
+       smac %g2, %g3, %g1
 
6818
+       umac %g2, %g3, %g1
 
6819
+       cas [%g2], %g3, %g1' > conftest.s
 
6820
+    if { ac_try='$gcc_cv_as $gcc_cv_as_flags -Aleon -o conftest.o conftest.s >&5'
 
6821
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
 
6822
+  (eval $ac_try) 2>&5
 
6823
+  ac_status=$?
 
6824
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
 
6825
+  test $ac_status = 0; }; }
 
6826
+    then
 
6827
+       gcc_cv_as_sparc_leon=yes
 
6828
+    else
 
6829
+      echo "configure: failed program was" >&5
 
6830
+      cat conftest.s >&5
 
6831
+    fi
 
6832
+    rm -f conftest.o conftest.s
 
6833
+  fi
 
6834
+fi
 
6835
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_sparc_leon" >&5
 
6836
+$as_echo "$gcc_cv_as_sparc_leon" >&6; }
 
6837
+if test $gcc_cv_as_sparc_leon = yes; then
 
6838
+
 
6839
+$as_echo "#define HAVE_AS_LEON 1" >>confdefs.h
 
6840
+
 
6841
+fi
 
6842
     ;;
 
6843
 
 
6844
   i[34567]86-*-* | x86_64-*-*)
 
6845
@@ -24745,6 +24781,10 @@
 
6846
 
 
6847
     # These two are used unconditionally by i386.[ch]; it is to be defined
 
6848
     # to 1 if the feature is present, 0 otherwise.
 
6849
+    as_ix86_gotoff_in_data_opt=
 
6850
+    if test x$gas = xyes; then
 
6851
+      as_ix86_gotoff_in_data_opt="--32"
 
6852
+    fi
 
6853
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for GOTOFF in data" >&5
 
6854
 $as_echo_n "checking assembler for GOTOFF in data... " >&6; }
 
6855
 if test "${gcc_cv_as_ix86_gotoff_in_data+set}" = set; then :
 
6856
@@ -24761,7 +24801,7 @@
 
6857
        nop
 
6858
        .data
 
6859
        .long .L0@GOTOFF' > conftest.s
 
6860
-    if { ac_try='$gcc_cv_as $gcc_cv_as_flags  -o conftest.o conftest.s >&5'
 
6861
+    if { ac_try='$gcc_cv_as $gcc_cv_as_flags $as_ix86_gotoff_in_data_opt -o conftest.o conftest.s >&5'
 
6862
   { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
 
6863
   (eval $ac_try) 2>&5
 
6864
   ac_status=$?
 
6865
@@ -24822,6 +24862,37 @@
 
6866
 
 
6867
 fi
 
6868
 
 
6869
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for ud2 mnemonic" >&5
 
6870
+$as_echo_n "checking assembler for ud2 mnemonic... " >&6; }
 
6871
+if test "${gcc_cv_as_ix86_ud2+set}" = set; then :
 
6872
+  $as_echo_n "(cached) " >&6
 
6873
+else
 
6874
+  gcc_cv_as_ix86_ud2=no
 
6875
+  if test x$gcc_cv_as != x; then
 
6876
+    $as_echo 'ud2' > conftest.s
 
6877
+    if { ac_try='$gcc_cv_as $gcc_cv_as_flags  -o conftest.o conftest.s >&5'
 
6878
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
 
6879
+  (eval $ac_try) 2>&5
 
6880
+  ac_status=$?
 
6881
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
 
6882
+  test $ac_status = 0; }; }
 
6883
+    then
 
6884
+       gcc_cv_as_ix86_ud2=yes
 
6885
+    else
 
6886
+      echo "configure: failed program was" >&5
 
6887
+      cat conftest.s >&5
 
6888
+    fi
 
6889
+    rm -f conftest.o conftest.s
 
6890
+  fi
 
6891
+fi
 
6892
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_ix86_ud2" >&5
 
6893
+$as_echo "$gcc_cv_as_ix86_ud2" >&6; }
 
6894
+if test $gcc_cv_as_ix86_ud2 = yes; then
 
6895
+
 
6896
+$as_echo "#define HAVE_AS_IX86_UD2 1" >>confdefs.h
 
6897
+
 
6898
+fi
 
6899
+
 
6900
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for R_386_TLS_GD_PLT reloc" >&5
 
6901
 $as_echo_n "checking assembler for R_386_TLS_GD_PLT reloc... " >&6; }
 
6902
 if test "${gcc_cv_as_ix86_tlsgdplt+set}" = set; then :
 
6903
@@ -27239,8 +27310,8 @@
 
6904
 $as_echo_n "checking for exported symbols... " >&6; }
 
6905
   if test "x$export_sym_check" != x; then
 
6906
     echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
 
6907
-    ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest > /dev/null 2>&1
 
6908
-    if $export_sym_check conftest | grep foobar > /dev/null; then
 
6909
+    ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > /dev/null 2>&1
 
6910
+    if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
 
6911
       : # No need to use a flag
 
6912
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 
6913
 $as_echo "yes" >&6; }
 
6914
@@ -27249,8 +27320,8 @@
 
6915
 $as_echo "yes" >&6; }
 
6916
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -rdynamic" >&5
 
6917
 $as_echo_n "checking for -rdynamic... " >&6; }
 
6918
-      ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest > /dev/null 2>&1
 
6919
-      if $export_sym_check conftest | grep foobar > /dev/null; then
 
6920
+      ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest$ac_exeext > /dev/null 2>&1
 
6921
+      if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
 
6922
         plugin_rdynamic=yes
 
6923
         pluginlibs="-rdynamic"
 
6924
       else
 
6925
Index: gcc/builtins.c
 
6926
===================================================================
 
6927
--- a/src/gcc/builtins.c        (.../tags/gcc_4_8_2_release)
 
6928
+++ b/src/gcc/builtins.c        (.../branches/gcc-4_8-branch)
 
6929
@@ -180,7 +180,6 @@
 
6930
 static tree fold_builtin_strpbrk (location_t, tree, tree, tree);
 
6931
 static tree fold_builtin_strstr (location_t, tree, tree, tree);
 
6932
 static tree fold_builtin_strrchr (location_t, tree, tree, tree);
 
6933
-static tree fold_builtin_strcat (location_t, tree, tree);
 
6934
 static tree fold_builtin_strncat (location_t, tree, tree, tree);
 
6935
 static tree fold_builtin_strspn (location_t, tree, tree);
 
6936
 static tree fold_builtin_strcspn (location_t, tree, tree);
 
6937
@@ -1958,6 +1957,7 @@
 
6938
   tree fndecl = get_callee_fndecl (exp);
 
6939
   enum machine_mode mode;
 
6940
   bool errno_set = false;
 
6941
+  bool try_widening = false;
 
6942
   tree arg;
 
6943
 
 
6944
   if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
 
6945
@@ -1969,6 +1969,7 @@
 
6946
     {
 
6947
     CASE_FLT_FN (BUILT_IN_SQRT):
 
6948
       errno_set = ! tree_expr_nonnegative_p (arg);
 
6949
+      try_widening = true;
 
6950
       builtin_optab = sqrt_optab;
 
6951
       break;
 
6952
     CASE_FLT_FN (BUILT_IN_EXP):
 
6953
@@ -2025,8 +2026,10 @@
 
6954
   if (! flag_errno_math || ! HONOR_NANS (mode))
 
6955
     errno_set = false;
 
6956
 
 
6957
-  /* Before working hard, check whether the instruction is available.  */
 
6958
-  if (optab_handler (builtin_optab, mode) != CODE_FOR_nothing
 
6959
+  /* Before working hard, check whether the instruction is available, but try
 
6960
+     to widen the mode for specific operations.  */
 
6961
+  if ((optab_handler (builtin_optab, mode) != CODE_FOR_nothing
 
6962
+       || (try_widening && !excess_precision_type (TREE_TYPE (exp))))
 
6963
       && (!errno_set || !optimize_insn_for_size_p ()))
 
6964
     {
 
6965
       rtx result = gen_reg_rtx (mode);
 
6966
@@ -5347,7 +5350,7 @@
 
6967
 expand_builtin_atomic_compare_exchange (enum machine_mode mode, tree exp, 
 
6968
                                        rtx target)
 
6969
 {
 
6970
-  rtx expect, desired, mem, oldval;
 
6971
+  rtx expect, desired, mem, oldval, label;
 
6972
   enum memmodel success, failure;
 
6973
   tree weak;
 
6974
   bool is_weak;
 
6975
@@ -5385,14 +5388,26 @@
 
6976
   if (host_integerp (weak, 0) && tree_low_cst (weak, 0) != 0)
 
6977
     is_weak = true;
 
6978
 
 
6979
-  oldval = expect;
 
6980
-  if (!expand_atomic_compare_and_swap ((target == const0_rtx ? NULL : &target),
 
6981
-                                      &oldval, mem, oldval, desired,
 
6982
+  if (target == const0_rtx)
 
6983
+    target = NULL;
 
6984
+
 
6985
+  /* Lest the rtl backend create a race condition with an imporoper store
 
6986
+     to memory, always create a new pseudo for OLDVAL.  */
 
6987
+  oldval = NULL;
 
6988
+
 
6989
+  if (!expand_atomic_compare_and_swap (&target, &oldval, mem, expect, desired,
 
6990
                                       is_weak, success, failure))
 
6991
     return NULL_RTX;
 
6992
 
 
6993
-  if (oldval != expect)
 
6994
-    emit_move_insn (expect, oldval);
 
6995
+  /* Conditionally store back to EXPECT, lest we create a race condition
 
6996
+     with an improper store to memory.  */
 
6997
+  /* ??? With a rearrangement of atomics at the gimple level, we can handle
 
6998
+     the normal case where EXPECT is totally private, i.e. a register.  At
 
6999
+     which point the store can be unconditional.  */
 
7000
+  label = gen_label_rtx ();
 
7001
+  emit_cmp_and_jump_insns (target, const0_rtx, NE, NULL, VOIDmode, 1, label);
 
7002
+  emit_move_insn (expect, oldval);
 
7003
+  emit_label (label);
 
7004
 
 
7005
   return target;
 
7006
 }
 
7007
@@ -10766,7 +10781,7 @@
 
7008
       return fold_builtin_strstr (loc, arg0, arg1, type);
 
7009
 
 
7010
     case BUILT_IN_STRCAT:
 
7011
-      return fold_builtin_strcat (loc, arg0, arg1);
 
7012
+      return fold_builtin_strcat (loc, arg0, arg1, NULL_TREE);
 
7013
 
 
7014
     case BUILT_IN_STRSPN:
 
7015
       return fold_builtin_strspn (loc, arg0, arg1);
 
7016
@@ -11809,8 +11824,9 @@
 
7017
    COMPOUND_EXPR in the chain will contain the tree for the simplified
 
7018
    form of the builtin function call.  */
 
7019
 
 
7020
-static tree
 
7021
-fold_builtin_strcat (location_t loc ATTRIBUTE_UNUSED, tree dst, tree src)
 
7022
+tree
 
7023
+fold_builtin_strcat (location_t loc ATTRIBUTE_UNUSED, tree dst, tree src,
 
7024
+                    tree len)
 
7025
 {
 
7026
   if (!validate_arg (dst, POINTER_TYPE)
 
7027
       || !validate_arg (src, POINTER_TYPE))
 
7028
@@ -11828,22 +11844,17 @@
 
7029
          /* See if we can store by pieces into (dst + strlen(dst)).  */
 
7030
          tree newdst, call;
 
7031
          tree strlen_fn = builtin_decl_implicit (BUILT_IN_STRLEN);
 
7032
-         tree strcpy_fn = builtin_decl_implicit (BUILT_IN_STRCPY);
 
7033
+         tree memcpy_fn = builtin_decl_implicit (BUILT_IN_MEMCPY);
 
7034
 
 
7035
-         if (!strlen_fn || !strcpy_fn)
 
7036
+         if (!strlen_fn || !memcpy_fn)
 
7037
            return NULL_TREE;
 
7038
 
 
7039
-         /* If we don't have a movstr we don't want to emit an strcpy
 
7040
-            call.  We have to do that if the length of the source string
 
7041
-            isn't computable (in that case we can use memcpy probably
 
7042
-            later expanding to a sequence of mov instructions).  If we
 
7043
-            have movstr instructions we can emit strcpy calls.  */
 
7044
-         if (!HAVE_movstr)
 
7045
-           {
 
7046
-             tree len = c_strlen (src, 1);
 
7047
-             if (! len || TREE_SIDE_EFFECTS (len))
 
7048
-               return NULL_TREE;
 
7049
-           }
 
7050
+         /* If the length of the source string isn't computable don't
 
7051
+            split strcat into strlen and memcpy.  */
 
7052
+         if (! len)
 
7053
+           len = c_strlen (src, 1);
 
7054
+         if (! len || TREE_SIDE_EFFECTS (len))
 
7055
+           return NULL_TREE;
 
7056
 
 
7057
          /* Stabilize the argument list.  */
 
7058
          dst = builtin_save_expr (dst);
 
7059
@@ -11855,7 +11866,11 @@
 
7060
          newdst = fold_build_pointer_plus_loc (loc, dst, newdst);
 
7061
          newdst = builtin_save_expr (newdst);
 
7062
 
 
7063
-         call = build_call_expr_loc (loc, strcpy_fn, 2, newdst, src);
 
7064
+         len = fold_convert_loc (loc, size_type_node, len);
 
7065
+         len = size_binop_loc (loc, PLUS_EXPR, len,
 
7066
+                               build_int_cst (size_type_node, 1));
 
7067
+
 
7068
+         call = build_call_expr_loc (loc, memcpy_fn, 3, newdst, src, len);
 
7069
          return build2 (COMPOUND_EXPR, TREE_TYPE (dst), call, dst);
 
7070
        }
 
7071
       return NULL_TREE;
 
7072
Index: gcc/gcc.c
 
7073
===================================================================
 
7074
--- a/src/gcc/gcc.c     (.../tags/gcc_4_8_2_release)
 
7075
+++ b/src/gcc/gcc.c     (.../branches/gcc-4_8-branch)
 
7076
@@ -5441,7 +5441,7 @@
 
7077
   const char *save_suffix_subst;
 
7078
 
 
7079
   int save_growing_size;
 
7080
-  void *save_growing_value;
 
7081
+  void *save_growing_value = NULL;
 
7082
 
 
7083
   sf = lookup_spec_function (func);
 
7084
   if (sf == NULL)
 
7085
Index: gcc/fold-const.c
 
7086
===================================================================
 
7087
--- a/src/gcc/fold-const.c      (.../tags/gcc_4_8_2_release)
 
7088
+++ b/src/gcc/fold-const.c      (.../branches/gcc-4_8-branch)
 
7089
@@ -2664,10 +2664,11 @@
 
7090
        case COMPONENT_REF:
 
7091
          /* Handle operand 2 the same as for ARRAY_REF.  Operand 0
 
7092
             may be NULL when we're called to compare MEM_EXPRs.  */
 
7093
-         if (!OP_SAME_WITH_NULL (0))
 
7094
+         if (!OP_SAME_WITH_NULL (0)
 
7095
+             || !OP_SAME (1))
 
7096
            return 0;
 
7097
          flags &= ~OEP_CONSTANT_ADDRESS_OF;
 
7098
-         return OP_SAME (1) && OP_SAME_WITH_NULL (2);
 
7099
+         return OP_SAME_WITH_NULL (2);
 
7100
 
 
7101
        case BIT_FIELD_REF:
 
7102
          if (!OP_SAME (0))
 
7103
@@ -4920,12 +4921,16 @@
 
7104
   int in0_p, in1_p, in_p;
 
7105
   tree low0, low1, low, high0, high1, high;
 
7106
   bool strict_overflow_p = false;
 
7107
-  tree lhs = make_range (op0, &in0_p, &low0, &high0, &strict_overflow_p);
 
7108
-  tree rhs = make_range (op1, &in1_p, &low1, &high1, &strict_overflow_p);
 
7109
-  tree tem;
 
7110
+  tree tem, lhs, rhs;
 
7111
   const char * const warnmsg = G_("assuming signed overflow does not occur "
 
7112
                                  "when simplifying range test");
 
7113
 
 
7114
+  if (!INTEGRAL_TYPE_P (type))
 
7115
+    return 0;
 
7116
+
 
7117
+  lhs = make_range (op0, &in0_p, &low0, &high0, &strict_overflow_p);
 
7118
+  rhs = make_range (op1, &in1_p, &low1, &high1, &strict_overflow_p);
 
7119
+
 
7120
   /* If this is an OR operation, invert both sides; we will invert
 
7121
      again at the end.  */
 
7122
   if (or_op)
 
7123
@@ -10927,6 +10932,13 @@
 
7124
                                fold_build2_loc (loc, MULT_EXPR, type,
 
7125
                                             build_int_cst (type, 2) , arg1));
 
7126
 
 
7127
+         /* ((T) (X /[ex] C)) * C cancels out if the conversion is
 
7128
+            sign-changing only.  */
 
7129
+         if (TREE_CODE (arg1) == INTEGER_CST
 
7130
+             && TREE_CODE (arg0) == EXACT_DIV_EXPR
 
7131
+             && operand_equal_p (arg1, TREE_OPERAND (arg0, 1), 0))
 
7132
+           return fold_convert_loc (loc, type, TREE_OPERAND (arg0, 0));
 
7133
+
 
7134
          strict_overflow_p = false;
 
7135
          if (TREE_CODE (arg1) == INTEGER_CST
 
7136
              && 0 != (tem = extract_muldiv (op0, arg1, code, NULL_TREE,
 
7137
@@ -16587,7 +16599,7 @@
 
7138
              unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
 
7139
              tree index = bitsize_int (indexi);
 
7140
 
 
7141
-             if (offset/part_widthi <= TYPE_VECTOR_SUBPARTS (op00type))
 
7142
+             if (offset / part_widthi < TYPE_VECTOR_SUBPARTS (op00type))
 
7143
                return fold_build3_loc (loc,
 
7144
                                        BIT_FIELD_REF, type, op00,
 
7145
                                        part_width, index);
 
7146
Index: gcc/reorg.c
 
7147
===================================================================
 
7148
--- a/src/gcc/reorg.c   (.../tags/gcc_4_8_2_release)
 
7149
+++ b/src/gcc/reorg.c   (.../branches/gcc-4_8-branch)
 
7150
@@ -1105,6 +1105,7 @@
 
7151
   int used_annul = 0;
 
7152
   int i;
 
7153
   struct resources cc_set;
 
7154
+  bool *redundant;
 
7155
 
 
7156
   /* We can't do anything if there are more delay slots in SEQ than we
 
7157
      can handle, or if we don't know that it will be a taken branch.
 
7158
@@ -1145,6 +1146,7 @@
 
7159
     return delay_list;
 
7160
 #endif
 
7161
 
 
7162
+  redundant = XALLOCAVEC (bool, XVECLEN (seq, 0));
 
7163
   for (i = 1; i < XVECLEN (seq, 0); i++)
 
7164
     {
 
7165
       rtx trial = XVECEXP (seq, 0, i);
 
7166
@@ -1166,7 +1168,8 @@
 
7167
 
 
7168
       /* If this insn was already done (usually in a previous delay slot),
 
7169
         pretend we put it in our delay slot.  */
 
7170
-      if (redundant_insn (trial, insn, new_delay_list))
 
7171
+      redundant[i] = redundant_insn (trial, insn, new_delay_list);
 
7172
+      if (redundant[i])
 
7173
        continue;
 
7174
 
 
7175
       /* We will end up re-vectoring this branch, so compute flags
 
7176
@@ -1199,6 +1202,12 @@
 
7177
        return delay_list;
 
7178
     }
 
7179
 
 
7180
+  /* Record the effect of the instructions that were redundant and which
 
7181
+     we therefore decided not to copy.  */
 
7182
+  for (i = 1; i < XVECLEN (seq, 0); i++)
 
7183
+    if (redundant[i])
 
7184
+      update_block (XVECEXP (seq, 0, i), insn);
 
7185
+
 
7186
   /* Show the place to which we will be branching.  */
 
7187
   *pnew_thread = first_active_target_insn (JUMP_LABEL (XVECEXP (seq, 0, 0)));
 
7188
 
 
7189
@@ -1262,6 +1271,7 @@
 
7190
       /* If this insn was already done, we don't need it.  */
 
7191
       if (redundant_insn (trial, insn, delay_list))
 
7192
        {
 
7193
+         update_block (trial, insn);
 
7194
          delete_from_delay_slot (trial);
 
7195
          continue;
 
7196
        }
 
7197
@@ -3266,6 +3276,7 @@
 
7198
         to reprocess this insn.  */
 
7199
       if (redundant_insn (XVECEXP (pat, 0, 1), delay_insn, 0))
 
7200
        {
 
7201
+         update_block (XVECEXP (pat, 0, 1), insn);
 
7202
          delete_from_delay_slot (XVECEXP (pat, 0, 1));
 
7203
          next = prev_active_insn (next);
 
7204
          continue;
 
7205
@@ -3385,6 +3396,7 @@
 
7206
              && redirect_with_delay_slots_safe_p (delay_insn, target_label,
 
7207
                                                   insn))
 
7208
            {
 
7209
+             update_block (XVECEXP (PATTERN (trial), 0, 1), insn);
 
7210
              reorg_redirect_jump (delay_insn, target_label);
 
7211
              next = insn;
 
7212
              continue;
 
7213
Index: gcc/tree-ssa-sccvn.c
 
7214
===================================================================
 
7215
--- a/src/gcc/tree-ssa-sccvn.c  (.../tags/gcc_4_8_2_release)
 
7216
+++ b/src/gcc/tree-ssa-sccvn.c  (.../branches/gcc-4_8-branch)
 
7217
@@ -660,7 +660,7 @@
 
7218
     }
 
7219
 
 
7220
   /* For non-calls, store the information that makes up the address.  */
 
7221
-
 
7222
+  tree orig = ref;
 
7223
   while (ref)
 
7224
     {
 
7225
       vn_reference_op_s temp;
 
7226
@@ -711,7 +711,15 @@
 
7227
                          .arshift (BITS_PER_UNIT == 8
 
7228
                                    ? 3 : exact_log2 (BITS_PER_UNIT),
 
7229
                                    HOST_BITS_PER_DOUBLE_INT);
 
7230
-                   if (off.fits_shwi ())
 
7231
+                   if (off.fits_shwi ()
 
7232
+                       /* Probibit value-numbering zero offset components
 
7233
+                          of addresses the same before the pass folding
 
7234
+                          __builtin_object_size had a chance to run
 
7235
+                          (checking cfun->after_inlining does the
 
7236
+                          trick here).  */
 
7237
+                       && (TREE_CODE (orig) != ADDR_EXPR
 
7238
+                           || !off.is_zero ()
 
7239
+                           || cfun->after_inlining))
 
7240
                      temp.off = off.low;
 
7241
                  }
 
7242
              }
 
7243
Index: gcc/ChangeLog
 
7244
===================================================================
 
7245
--- a/src/gcc/ChangeLog (.../tags/gcc_4_8_2_release)
 
7246
+++ b/src/gcc/ChangeLog (.../branches/gcc-4_8-branch)
 
7247
@@ -1,3 +1,1808 @@
 
7248
+2014-04-02  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
7249
+
 
7250
+       * config/s390/s390.c (s390_expand_insv): Use GET_MODE_BITSIZE.
 
7251
+
 
7252
+2014-04-01  Richard Biener  <rguenther@suse.de>
 
7253
+
 
7254
+       * gimple.h (struct gimple_statement_base): Align subcode to
 
7255
+       16 bits.
 
7256
+
 
7257
+2014-04-01  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
7258
+
 
7259
+       * doc/invoke.texi (mapp-regs): Clarify.
 
7260
+
 
7261
+2014-03-31  H.J. Lu  <hongjiu.lu@intel.com>
 
7262
+
 
7263
+       PR rtl-optimization/60700
 
7264
+       Backport from mainline
 
7265
+       2013-07-30  Zhenqiang Chen  <zhenqiang.chen@linaro.org>
 
7266
+
 
7267
+       PR rtl-optimization/57637
 
7268
+       * function.c (move_insn_for_shrink_wrap): Also check the
 
7269
+       GEN set of the LIVE problem for the liveness analysis
 
7270
+       if it exists, otherwise give up.
 
7271
+
 
7272
+2014-03-30  Kaz Kojima  <kkojima@gcc.gnu.org>
 
7273
+
 
7274
+       Backport from mainline
 
7275
+       2014-03-19  Kaz Kojima  <kkojima@gcc.gnu.org>
 
7276
+
 
7277
+       PR target/60039
 
7278
+       * config/sh/sh.md (udivsi3_i1): Clobber R1 register.
 
7279
+
 
7280
+2014-03-26  Martin Jambor  <mjambor@suse.cz>
 
7281
+
 
7282
+      PR ipa/60419
 
7283
+      * ipa.c (symtab_remove_unreachable_nodes): Clear thunk and
 
7284
+      alias flags of nodes in the border.
 
7285
+
 
7286
+2014-03-26  Eric Botcazou  <ebotcazou@adacore.com>
 
7287
+
 
7288
+       PR rtl-optimization/60452
 
7289
+       * rtlanal.c (rtx_addr_can_trap_p_1): Fix head comment.
 
7290
+       <case REG>: Return 1 for invalid offsets from the frame pointer.
 
7291
+
 
7292
+2014-03-24  Richard Biener  <rguenther@suse.de>
 
7293
+
 
7294
+       PR tree-optimization/60429
 
7295
+       * tree-ssa-structalias.c (get_constraint_for_ptr_offset): Remove
 
7296
+       duplicated line.
 
7297
+
 
7298
+2014-03-23  Eric Botcazou  <ebotcazou@adacore.com>
 
7299
+
 
7300
+       PR rtl-optimization/60601
 
7301
+       * bb-reorder.c (fix_up_fall_thru_edges): Test EDGE_FALLTHRU everywhere.
 
7302
+
 
7303
+       * gcc.c (eval_spec_function): Initialize save_growing_value.
 
7304
+
 
7305
+2014-03-20  Jakub Jelinek  <jakub@redhat.com>
 
7306
+
 
7307
+       PR target/60568
 
7308
+       * config/i386/i386.c (x86_output_mi_thunk): Surround UNSPEC_GOT
 
7309
+       into CONST, put pic register as first operand of PLUS.  Use
 
7310
+       gen_const_mem for both 32-bit and 64-bit PIC got loads.
 
7311
+
 
7312
+2014-03-20  Eric Botcazou  <ebotcazou@adacore.com>
 
7313
+
 
7314
+       * config/sparc/sparc.c (sparc_do_work_around_errata): Implement work
 
7315
+       around for store forwarding issue in the FPU on the UT699.
 
7316
+       * config/sparc/sparc.md (in_branch_delay): Return false for single FP
 
7317
+       loads and operations if -mfix-ut699 is specified.
 
7318
+       (divtf3_hq): Tweak attribute.
 
7319
+       (sqrttf2_hq): Likewise.
 
7320
+
 
7321
+2014-03-18  Kai Tietz  <ktietz@redhat.com>
 
7322
+
 
7323
+       PR rtl-optimization/56356
 
7324
+       * sdbout.c (sdbout_parms): Verify that parms'
 
7325
+       incoming argument is valid.
 
7326
+       (sdbout_reg_parms): Likewise.
 
7327
+
 
7328
+2014-03-18  Eric Botcazou  <ebotcazou@adacore.com>
 
7329
+
 
7330
+       * config/sparc/sparc.c (sparc_do_work_around_errata): Speed up and use
 
7331
+       proper constant for the store mode.
 
7332
+
 
7333
+2014-03-17  Mikael Pettersson  <mikpelinux@gmail.com>
 
7334
+           Committed by Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
 
7335
+
 
7336
+       Backport from mainline:
 
7337
+
 
7338
+       2013-06-20  Joern Rennecke <joern.rennecke@embecosm.com>
 
7339
+
 
7340
+       PR rtl-optimization/57425
 
7341
+       PR rtl-optimization/57569
 
7342
+       * alias.c (write_dependence_p): Remove parameters mem_mode and
 
7343
+       canon_mem_addr.  Add parameters x_mode, x_addr and x_canonicalized.
 
7344
+       Changed all callers.
 
7345
+       (canon_anti_dependence): Get comments and semantics in sync.
 
7346
+       Add parameter mem_canonicalized.  Changed all callers.
 
7347
+       * rtl.h (canon_anti_dependence): Update prototype.
 
7348
+
 
7349
+       2013-06-16  Joern Rennecke <joern.rennecke@embecosm.com>
 
7350
+
 
7351
+       PR rtl-optimization/57425
 
7352
+       PR rtl-optimization/57569
 
7353
+       * alias.c (write_dependence_p): Add new parameters mem_mode,
 
7354
+       canon_mem_addr and mem_canonicalized.  Change type of writep to bool.
 
7355
+       Changed all callers.
 
7356
+       (canon_anti_dependence): New function.
 
7357
+       * cse.c (check_dependence): Use canon_anti_dependence.
 
7358
+       * cselib.c (cselib_invalidate_mem): Likewise.
 
7359
+       * rtl.h (canon_anti_dependence): Declare.
 
7360
+
 
7361
+2014-03-17  Richard Biener  <rguenther@suse.de>
 
7362
+
 
7363
+       Backport from mainline
 
7364
+       2014-03-11  Richard Biener  <rguenther@suse.de>
 
7365
+
 
7366
+       PR tree-optimization/60429
 
7367
+       PR tree-optimization/60485
 
7368
+       * tree-ssa-structalias.c (set_union_with_increment): Properly
 
7369
+       take into account all fields that overlap the shifted vars.
 
7370
+       (do_sd_constraint): Likewise.
 
7371
+       (do_ds_constraint): Likewise.
 
7372
+       (get_constraint_for_ptr_offset): Likewise.
 
7373
+
 
7374
+2014-03-15  Eric Botcazou  <ebotcazou@adacore.com>
 
7375
+
 
7376
+       * config/sparc/sparc-protos.h (tls_call_delay): Delete.
 
7377
+       (eligible_for_call_delay): New prototype.
 
7378
+       * config/sparc/sparc.c (tls_call_delay): Rename into...
 
7379
+       (eligible_for_call_delay): ...this.  Return false if the instruction
 
7380
+       cannot be put in the delay slot of a branch.
 
7381
+       (eligible_for_restore_insn): Simplify.
 
7382
+       (eligible_for_return_delay): Return false if the instruction cannot be
 
7383
+       put in the delay slot of a branch and simplify.
 
7384
+       (eligible_for_sibcall_delay): Return false if the instruction cannot be
 
7385
+       put in the delay slot of a branch.
 
7386
+       * config/sparc/sparc.md (fix_ut699): New attribute.
 
7387
+       (tls_call_delay): Delete.
 
7388
+       (in_call_delay): Reimplement.
 
7389
+       (eligible_for_sibcall_delay): Rename into...
 
7390
+       (in_sibcall_delay): ...this.
 
7391
+       (eligible_for_return_delay): Rename into...
 
7392
+       (in_return_delay): ...this.
 
7393
+       (in_branch_delay): Reimplement.
 
7394
+       (in_uncond_branch_delay): Delete.
 
7395
+       (in_annul_branch_delay): Delete.
 
7396
+
 
7397
+2014-03-14  Georg-Johann Lay  <avr@gjlay.de>
 
7398
+
 
7399
+       Backport from 2014-03-14 trunk r208562.
 
7400
+
 
7401
+       PR target/59396
 
7402
+       * config/avr/avr.c (avr_set_current_function): Pass function name
 
7403
+       through default_strip_name_encoding before sanity checking instead
 
7404
+       of skipping the first char of the assembler name.
 
7405
+
 
7406
+2014-03-13  Georg-Johann Lay  <avr@gjlay.de>
 
7407
+
 
7408
+       Backport from 2014-03-13 trunk r208532.
 
7409
+       
 
7410
+       PR target/60486
 
7411
+       * config/avr/avr.c (avr_out_plus): Swap cc_plus and cc_minus in
 
7412
+       calls of avr_out_plus_1.
 
7413
+
 
7414
+2014-03-13  Joey Ye  <joey.ye@arm.com>
 
7415
+
 
7416
+       Backport from mainline
 
7417
+       2014-03-12  Thomas Preud'homme  <thomas.preudhomme@arm.com>
 
7418
+
 
7419
+       PR tree-optimization/60454
 
7420
+       * tree-ssa-math-opts.c (find_bswap_1): Fix bswap detection.
 
7421
+
 
7422
+2014-03-06  Matthias Klose  <doko@ubuntu.com>
 
7423
+
 
7424
+       * Makefile.in (s-mlib): Only pass MULTIARCH_DIRNAME if
 
7425
+       MULTILIB_OSDIRNAMES is not defined.
 
7426
+
 
7427
+2014-03-06  Jakub Jelinek  <jakub@redhat.com>
 
7428
+
 
7429
+       PR tree-optimization/60276
 
7430
+       * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Avoid
 
7431
+       a -Wsign-compare warning.
 
7432
+
 
7433
+       * Makefile.in (tree-ssa-uninit.o): Depend on $(PARAMS_H).
 
7434
+
 
7435
+       Backport from mainline
 
7436
+       2014-02-21  Jakub Jelinek  <jakub@redhat.com>
 
7437
+
 
7438
+       PR tree-optimization/56490
 
7439
+       * params.def (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS): New param.
 
7440
+       * tree-ssa-uninit.c: Include params.h.
 
7441
+       (compute_control_dep_chain): Add num_calls argument, return false
 
7442
+       if it exceed PARAM_UNINIT_CONTROL_DEP_ATTEMPTS param, pass
 
7443
+       num_calls to recursive call.
 
7444
+       (find_predicates): Change dep_chain into normal array, add num_calls
 
7445
+       variable and adjust compute_control_dep_chain caller.
 
7446
+       (find_def_preds): Likewise.
 
7447
+
 
7448
+       2014-02-13  Jakub Jelinek  <jakub@redhat.com>
 
7449
+
 
7450
+       PR target/43546
 
7451
+       * expr.c (compress_float_constant): If x is a hard register,
 
7452
+       extend into a pseudo and then move to x.
 
7453
+
 
7454
+       2014-02-11  Richard Henderson  <rth@redhat.com>
 
7455
+                   Jakub Jelinek  <jakub@redhat.com>
 
7456
+
 
7457
+       PR debug/59776
 
7458
+       * tree-sra.c (load_assign_lhs_subreplacements): Add VIEW_CONVERT_EXPR
 
7459
+       around drhs if type conversion to lacc->type is not useless.
 
7460
+
 
7461
+       2014-02-08  Jakub Jelinek  <jakub@redhat.com>
 
7462
+
 
7463
+       PR ipa/60026
 
7464
+       * ipa-cp.c (determine_versionability): Fail at -O0
 
7465
+       or __attribute__((optimize (0))) or -fno-ipa-cp functions.
 
7466
+       * tree-sra.c (ipa_sra_preliminary_function_checks): Similarly.
 
7467
+
 
7468
+       2014-02-06  Jakub Jelinek  <jakub@redhat.com>
 
7469
+
 
7470
+       PR target/60062
 
7471
+       * tree.h (opts_for_fn): New inline function.
 
7472
+       (opt_for_fn): Define.
 
7473
+       * config/i386/i386.c (ix86_function_regparm): Use
 
7474
+       opt_for_fn (decl, optimize) instead of optimize.
 
7475
+
 
7476
+       2014-02-05  Jakub Jelinek  <jakub@redhat.com>
 
7477
+
 
7478
+       PR middle-end/57499
 
7479
+       * tree-eh.c (cleanup_empty_eh): Bail out on totally empty
 
7480
+       bb with no successors.
 
7481
+
 
7482
+2014-03-04  Richard Biener  <rguenther@suse.de>
 
7483
+
 
7484
+       PR tree-optimization/60382
 
7485
+       * tree-vect-loop.c (vect_is_simple_reduction_1): Do not consider
 
7486
+       dead PHIs a reduction.
 
7487
+
 
7488
+2014-02-25  Richard Biener  <rguenther@suse.de>
 
7489
+
 
7490
+       Backport from mainline
 
7491
+       2014-02-21  Richard Biener  <rguenther@suse.de>
 
7492
+
 
7493
+        PR tree-optimization/60276
 
7494
+        * tree-vectorizer.h (struct _stmt_vec_info): Add min_neg_dist field.
 
7495
+        (STMT_VINFO_MIN_NEG_DIST): New macro.
 
7496
+        * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Record
 
7497
+        STMT_VINFO_MIN_NEG_DIST.
 
7498
+        * tree-vect-stmts.c (vectorizable_load): Verify if assumptions
 
7499
+        made for negative dependence distances still hold.
 
7500
+
 
7501
+2014-02-25  Richard Biener  <rguenther@suse.de>
 
7502
+
 
7503
+       Backport from mainline
 
7504
+       2014-02-21  Richard Biener  <rguenther@suse.de>
 
7505
+
 
7506
+       PR middle-end/60291
 
7507
+       * tree-ssa-live.c (mark_all_vars_used_1): Do not walk
 
7508
+       DECL_INITIAL for globals not in the current function context.
 
7509
+
 
7510
+       2014-02-20  Richard Biener  <rguenther@suse.de>
 
7511
+
 
7512
+       PR middle-end/60221
 
7513
+       * tree-eh.c (execute_cleanup_eh_1): Also cleanup empty EH
 
7514
+       regions at -O0.
 
7515
+
 
7516
+       2014-02-14  Richard Biener  <rguenther@suse.de>
 
7517
+
 
7518
+       PR tree-optimization/60183
 
7519
+       * tree-ssa-phiprop.c (propagate_with_phi): Avoid speculating
 
7520
+       loads.
 
7521
+       (tree_ssa_phiprop): Calculate and free post-dominators.
 
7522
+
 
7523
+2014-02-25  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
7524
+
 
7525
+       PR target/55426
 
7526
+       * config/arm/arm.h (CANNOT_CHANGE_MODE_CLASS): Allow 128 to 64-bit
 
7527
+       conversions.
 
7528
+
 
7529
+2014-02-24  John David Anglin  <danglin@gcc.gnu.org>
 
7530
+
 
7531
+       * config/pa/pa.c (pa_output_move_double): Don't valididate when
 
7532
+       adjusting offsetable addresses.
 
7533
+
 
7534
+2014-02-23  David Holsgrove <david.holsgrove@xilinx.com>
 
7535
+
 
7536
+       * config/microblaze/microblaze.md: Correct ashrsi_reg / lshrsi_reg names
 
7537
+
 
7538
+2014-02-23  Edgar E. Iglesias <edgar.iglesias@xilinx.com>
 
7539
+
 
7540
+       * config/microblaze/microblaze.h: Remove SECONDARY_MEMORY_NEEDED
 
7541
+       definition.
 
7542
+
 
7543
+2014-02-23  David Holsgrove <david.holsgrove@xilinx.com>
 
7544
+
 
7545
+       * /config/microblaze/microblaze.c: Add microblaze_asm_output_mi_thunk
 
7546
+       and define TARGET_ASM_OUTPUT_MI_THUNK and
 
7547
+       TARGET_ASM_CAN_OUTPUT_MI_THUNK.
 
7548
+
 
7549
+2014-02-23  David Holsgrove <david.holsgrove@xilinx.com>
 
7550
+
 
7551
+       * config/microblaze/predicates.md: Add cmp_op predicate.
 
7552
+       * config/microblaze/microblaze.md: Add branch_compare instruction 
 
7553
+       which uses cmp_op predicate and emits cmp insn before branch.
 
7554
+       * config/microblaze/microblaze.c (microblaze_emit_compare): Rename 
 
7555
+       to microblaze_expand_conditional_branch and consolidate logic.
 
7556
+       (microblaze_expand_conditional_branch): emit branch_compare
 
7557
+       insn instead of handling cmp op separate from branch insn.
 
7558
+
 
7559
+2014-02-21  Martin Jambor  <mjambor@suse.cz>
 
7560
+
 
7561
+       PR ipa/55260
 
7562
+       * ipa-cp.c (cgraph_edge_brings_all_agg_vals_for_node): Uce correct
 
7563
+       info when checking whether lattices are bottom.
 
7564
+
 
7565
+2014-02-21  Jakub Jelinek  <jakub@redhat.com>
 
7566
+
 
7567
+       * config/i386/i386.c (ix86_expand_vec_perm): Use V8SImode
 
7568
+       mode for mask of V8SFmode permutation.
 
7569
+
 
7570
+2014-02-20  Richard Henderson  <rth@redhat.com>
 
7571
+
 
7572
+       PR c++/60272
 
7573
+       * builtins.c (expand_builtin_atomic_compare_exchange): Conditionalize
 
7574
+       on failure the store back into EXPECT.  Always make a new pseudo for
 
7575
+       OLDVAL.
 
7576
+
 
7577
+2014-02-20  Jakub Jelinek  <jakub@redhat.com>
 
7578
+
 
7579
+       PR target/57896
 
7580
+       * config/i386/i386.c (expand_vec_perm_interleave2): Don't call
 
7581
+       gen_reg_rtx if d->testing_p.
 
7582
+       (expand_vec_perm_pshufb2, expand_vec_perm_even_odd_1,
 
7583
+       expand_vec_perm_broadcast_1): Return early if d->testing_p and
 
7584
+       we will certainly return true.
 
7585
+
 
7586
+2014-02-20  Richard Biener  <rguenther@suse.de>
 
7587
+
 
7588
+       * tree-cfg.c (replace_uses_by): Mark altered BBs before
 
7589
+       doing the substitution.
 
7590
+
 
7591
+2014-02-19  H.J. Lu  <hongjiu.lu@intel.com>
 
7592
+
 
7593
+       Backport from mainline
 
7594
+       2014-02-19  H.J. Lu  <hongjiu.lu@intel.com>
 
7595
+
 
7596
+       PR target/60207
 
7597
+       * config/i386/i386.c (construct_container): Remove TFmode check
 
7598
+       for X86_64_INTEGER_CLASS.
 
7599
+
 
7600
+2014-02-19  Uros Bizjak  <ubizjak@gmail.com>
 
7601
+
 
7602
+       Backport from mainline
 
7603
+       2014-02-19  Uros Bizjak  <ubizjak@gmail.com>
 
7604
+
 
7605
+       PR target/59794
 
7606
+       * config/i386/i386.c (type_natural_mode): Warn for ABI changes
 
7607
+       only when -Wpsabi is enabled.
 
7608
+
 
7609
+2014-02-19  Terry Guo  <terry.guo@arm.com>
 
7610
+
 
7611
+       Backport from mainline
 
7612
+       2014-02-08  Terry Guo  <terry.guo@arm.com>
 
7613
+
 
7614
+       * doc/invoke.texi: Document ARM -march=armv7e-m.
 
7615
+
 
7616
+2014-02-18  Kai Tietz  <ktietz@redhat.com>
 
7617
+
 
7618
+       Backport from mainline
 
7619
+       2014-02-18  Kai Tietz  <ktietz@redhat.com>
 
7620
+
 
7621
+       PR target/60193
 
7622
+       * config/i386/i386.c (ix86_expand_prologue): Use
 
7623
+       rax register as displacement for restoring %r10, %rax.
 
7624
+       Additional fix wrong offset for restoring both-registers.
 
7625
+
 
7626
+2014-02-18  Eric Botcazou  <ebotcazou@adacore.com>
 
7627
+
 
7628
+       * ipa-prop.c (compute_complex_ancestor_jump_func): Replace overzealous
 
7629
+       assertion with conditional return.
 
7630
+
 
7631
+2014-02-18  Jakub Jelinek  <jakub@redhat.com>
 
7632
+           Uros Bizjak  <ubizjak@gmail.com>
 
7633
+
 
7634
+       PR driver/60233
 
7635
+       * config/i386/driver-i386.c (host_detect_local_cpu): If
 
7636
+       YMM state is not saved by the OS, also clear has_f16c.  Move
 
7637
+       CPUID 0x80000001 handling before YMM state saving checking.
 
7638
+
 
7639
+2014-02-14  Roland McGrath  <mcgrathr@google.com>
 
7640
+
 
7641
+       * configure.ac (HAVE_AS_IX86_UD2): New test for 'ud2' mnemonic.
 
7642
+       * configure: Regenerated.
 
7643
+       * config.in: Regenerated.
 
7644
+       * config/i386/i386.md (trap) [HAVE_AS_IX86_UD2]: Use the mnemonic
 
7645
+       instead of ASM_SHORT.
 
7646
+
 
7647
+2014-02-13  Uros Bizjak  <ubizjak@gmail.com>
 
7648
+
 
7649
+       Backport from mainline
 
7650
+       2014-02-13  Uros Bizjak  <ubizjak@gmail.com>
 
7651
+
 
7652
+       * config/i386/sse.md (xop_vmfrcz<mode>2): Generate const0 in
 
7653
+       operands[2], not operands[3].
 
7654
+
 
7655
+2014-02-13  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
7656
+
 
7657
+       * config/s390/s390.c (s390_asm_output_function_label): Fix crash
 
7658
+       caused by bad second argument to warning_at() with -mhotpatch and
 
7659
+       nested functions (e.g. with gfortran).
 
7660
+
 
7661
+2014-02-12  H.J. Lu  <hongjiu.lu@intel.com>
 
7662
+
 
7663
+       Backport from mainline
 
7664
+       2014-02-12  H.J. Lu  <hongjiu.lu@intel.com>
 
7665
+                   Uros Bizjak  <ubizjak@gmail.com>
 
7666
+
 
7667
+       PR target/60151
 
7668
+       * configure.ac (HAVE_AS_GOTOFF_IN_DATA): Pass --32 to GNU assembler.
 
7669
+
 
7670
+2014-02-12  Eric Botcazou  <ebotcazou@adacore.com>
 
7671
+
 
7672
+       PR rtl-optimization/60116
 
7673
+       * combine.c (try_combine): Also remove dangling REG_DEAD notes on the
 
7674
+       other_insn once the combination has been validated.
 
7675
+
 
7676
+2014-02-10  Nagaraju Mekala <nagaraju.mekala@xilinx.com>
 
7677
+
 
7678
+       * config/microblaze/microblaze.md: Add movsi4_rev insn pattern.
 
7679
+       * config/microblaze/predicates.md: Add reg_or_mem_operand predicate.
 
7680
+
 
7681
+2014-02-10  Nagaraju Mekala <nagaraju.mekala@xilinx.com>
 
7682
+
 
7683
+       * config/microblaze/microblaze.c: Extend mcpu version format
 
7684
+
 
7685
+2014-02-10  David Holsgrove <david.holsgrove@xilinx.com>
 
7686
+
 
7687
+       * config/microblaze/microblaze.h: Define SIZE_TYPE and PTRDIFF_TYPE.
 
7688
+
 
7689
+2014-02-10  Richard Biener  <rguenther@suse.de>
 
7690
+
 
7691
+       Backport from mainline
 
7692
+       2014-01-30  Richard Biener  <rguenther@suse.de>
 
7693
+
 
7694
+       PR tree-optimization/59903
 
7695
+       * tree-vect-loop.c (vect_transform_loop): Guard multiple-types
 
7696
+       check properly.
 
7697
+
 
7698
+       2014-02-10  Richard Biener  <rguenther@suse.de>
 
7699
+
 
7700
+       PR tree-optimization/60115
 
7701
+       * tree-eh.c (tree_could_trap_p): Unify TARGET_MEM_REF and
 
7702
+       MEM_REF handling.  Properly verify that the accesses are not
 
7703
+       out of the objects bound.
 
7704
+
 
7705
+2014-02-05  James Greenhalgh  <james.greenhalgh@arm.com>
 
7706
+
 
7707
+       Backport from mainline.
 
7708
+       2014-02-05  James Greenhalgh  <james.greenhalgh@arm.com>
 
7709
+
 
7710
+       PR target/59718
 
7711
+       * doc/invoke.texi (-march): Clarify documentation for ARM.
 
7712
+       (-mtune): Likewise.
 
7713
+       (-mcpu): Likewise.
 
7714
+
 
7715
+2014-02-04  John David Anglin  <danglin@gcc.gnu.org>
 
7716
+
 
7717
+       PR target/59777
 
7718
+       * config/pa/pa.c (legitimize_tls_address): Return original address
 
7719
+       if not passed a SYMBOL_REF rtx.
 
7720
+       (hppa_legitimize_address): Call legitimize_tls_address for all TLS
 
7721
+       addresses.
 
7722
+       (pa_emit_move_sequence): Simplify TLS source operands.
 
7723
+       (pa_legitimate_constant_p): Reject all TLS constants.
 
7724
+       * config/pa/pa.h (PA_SYMBOL_REF_TLS_P): Correct comment.
 
7725
+       (CONSTANT_ADDRESS_P): Reject TLS CONST addresses.
 
7726
+
 
7727
+2014-02-04  Uros Bizjak  <ubizjak@gmail.com>
 
7728
+
 
7729
+       Backport from mainline
 
7730
+       2014-02-02  Uros Bizjak  <ubizjak@gmail.com>
 
7731
+
 
7732
+       PR target/60017
 
7733
+       * config/i386/i386.c (classify_argument): Fix handling of bit_offset
 
7734
+       when calculating size of integer atomic types.
 
7735
+
 
7736
+2014-02-02  Uros Bizjak  <ubizjak@gmail.com>
 
7737
+
 
7738
+       Backport from mainline
 
7739
+       2014-01-30  Jakub Jelinek  <jakub@redhat.com>
 
7740
+
 
7741
+       * config/i386/f16cintrin.h (_cvtsh_ss): Avoid -Wnarrowing warning.
 
7742
+
 
7743
+2014-01-31  Richard Henderson  <rth@redhat.com>
 
7744
+
 
7745
+       PR middle-end/60004
 
7746
+       * tree-eh.c (lower_try_finally_switch): Delay lowering finally block
 
7747
+       until after else_eh is processed.
 
7748
+
 
7749
+2014-01-30  David Holsgrove <david.holsgrove@xilinx.com>
 
7750
+
 
7751
+       Backport from mainline
 
7752
+       * config/microblaze/microblaze.md(cstoresf4, cbranchsf4): Replace
 
7753
+       comparison_operator with ordered_comparison_operator.
 
7754
+
 
7755
+2014-01-25  Walter Lee  <walt@tilera.com>
 
7756
+
 
7757
+       Backport from mainline
 
7758
+       2014-01-25  Walter Lee  <walt@tilera.com>
 
7759
+
 
7760
+       * config/tilegx/sync.md (atomic_fetch_sub): Fix negation and
 
7761
+       avoid clobbering a live register.
 
7762
+
 
7763
+2014-01-25  Walter Lee  <walt@tilera.com>
 
7764
+
 
7765
+       Backport from mainline
 
7766
+       2014-01-25  Walter Lee  <walt@tilera.com>
 
7767
+
 
7768
+       * config/tilegx/tilegx-c.c (tilegx_cpu_cpp_builtins):
 
7769
+       Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1,2}.
 
7770
+       * config/tilegx/tilepro-c.c (tilepro_cpu_cpp_builtins):
 
7771
+       Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1,2,4,8}.
 
7772
+
 
7773
+2014-01-25  Walter Lee  <walt@tilera.com>
 
7774
+
 
7775
+       Backport from mainline
 
7776
+       2014-01-25  Walter Lee  <walt@tilera.com>
 
7777
+
 
7778
+       * config/tilegx/tilegx.c (tilegx_gen_bundles): Delete barrier
 
7779
+       insns before bundling.
 
7780
+       * config/tilegx/tilegx.md (tile_network_barrier): Update comment.
 
7781
+
 
7782
+2014-01-25  Walter Lee  <walt@tilera.com>
 
7783
+
 
7784
+       Backport from mainline
 
7785
+       2014-01-25  Walter Lee  <walt@tilera.com>
 
7786
+
 
7787
+       * config/tilegx/tilegx.c (tilegx_expand_builtin): Set
 
7788
+       PREFETCH_SCHEDULE_BARRIER_P to true for prefetches.
 
7789
+       * config/tilepro/tilepro.c (tilepro_expand_builtin): Ditto.
 
7790
+
 
7791
+2014-01-25  Walter Lee  <walt@tilera.com>
 
7792
+
 
7793
+       Backport from mainline
 
7794
+       2014-01-25  Walter Lee  <walt@tilera.com>
 
7795
+
 
7796
+       * config/tilepro/tilepro.md (ctzdi2): Use register_operand
 
7797
+       predicate.
 
7798
+       (clzdi2): Ditto.
 
7799
+       (ffsdi2): Ditto.
 
7800
+
 
7801
+2014-01-25  Walter Lee  <walt@tilera.com>
 
7802
+
 
7803
+       Backport from mainline
 
7804
+       2014-01-25  Walter Lee  <walt@tilera.com>
 
7805
+
 
7806
+       * config/tilegx/tilegx.c (tilegx_expand_to_rtl_hook): New.
 
7807
+       (TARGET_EXPAND_TO_RTL_HOOK): Define.
 
7808
+
 
7809
+2014-01-24  H.J. Lu  <hongjiu.lu@intel.com>
 
7810
+
 
7811
+       Backport from mainline
 
7812
+       2014-01-23  H.J. Lu  <hongjiu.lu@intel.com>
 
7813
+
 
7814
+       PR target/59929
 
7815
+       * config/i386/i386.md (pushsf splitter): Get stack adjustment
 
7816
+       from push operand if code of push isn't PRE_DEC.
 
7817
+
 
7818
+2014-01-23  David Holsgrove <david.holsgrove@xilinx.com>
 
7819
+
 
7820
+       Backport from mainline.
 
7821
+       * config/microblaze/microblaze.md: Add trap insn and attribute
 
7822
+
 
7823
+2014-01-23  Marek Polacek  <polacek@redhat.com>
 
7824
+
 
7825
+       Backport from mainline
 
7826
+       2013-10-21  Marek Polacek  <polacek@redhat.com>
 
7827
+
 
7828
+       PR middle-end/58809
 
7829
+       * fold-const.c (fold_range_test): Return 0 if the type is not
 
7830
+       an integral type.
 
7831
+
 
7832
+2014-01-22  David Holsgrove <david.holsgrove@xilinx.com>
 
7833
+
 
7834
+       * config/microblaze/microblaze.md: Correct bswaphi2 insn.
 
7835
+
 
7836
+2014-01-22  Uros Bizjak  <ubizjak@gmail.com>
 
7837
+
 
7838
+       Backport from mainline
 
7839
+       2014-01-20  Uros Bizjak  <ubizjak@gmail.com>
 
7840
+
 
7841
+       * config/i386/i386.c (ix86_avoid_lea_for_addr): Return false
 
7842
+       for SImode_address_operand operands, having only a REG argument.
 
7843
+
 
7844
+       2014-01-20  Jakub Jelinek  <jakub@redhat.com>
 
7845
+
 
7846
+       PR target/59880
 
7847
+       * config/i386/i386.c (ix86_avoid_lea_for_addr): Return false
 
7848
+       if operands[1] is a REG or ZERO_EXTEND of a REG.
 
7849
+
 
7850
+       2014-01-18  Uros Bizjak  <ubizjak@gmail.com>
 
7851
+                   H.J. Lu  <hongjiu.lu@intel.com>
 
7852
+
 
7853
+       PR target/59379
 
7854
+       * config/i386/i386.md (*lea<mode>): Zero-extend return register
 
7855
+       to DImode for zero-extended addresses.
 
7856
+
 
7857
+2014-01-21  Andrew Pinski <apinski@cavium.com>
 
7858
+           Steve Ellcey  <sellcey@mips.com>
 
7859
+
 
7860
+       PR target/59462
 
7861
+       * config/mips/mips.c (mips_print_operand): Check operand mode instead
 
7862
+       of operator mode.
 
7863
+
 
7864
+2014-01-21  Andrey Belevantsev  <abel@ispras.ru>
 
7865
+
 
7866
+       Backport from mainline
 
7867
+       2013-12-23  Andrey Belevantsev  <abel@ispras.ru>
 
7868
+
 
7869
+       PR rtl-optimization/57422
 
7870
+       * sel-sched.c (mark_unavailable_hard_regs): Fix typo when calling
 
7871
+       add_to_hard_reg_set.
 
7872
+
 
7873
+2014-01-20  Jakub Jelinek  <jakub@redhat.com>
 
7874
+
 
7875
+       PR middle-end/59860
 
7876
+       * tree.h (fold_builtin_strcat): New prototype.
 
7877
+       * builtins.c (fold_builtin_strcat): No longer static.  Add len
 
7878
+       argument, if non-NULL, don't call c_strlen.  Optimize
 
7879
+       directly into __builtin_memcpy instead of __builtin_strcpy.
 
7880
+       (fold_builtin_2): Adjust fold_builtin_strcat caller.
 
7881
+       * gimple-fold.c (gimple_fold_builtin): Handle BUILT_IN_STRCAT.
 
7882
+
 
7883
+2014-01-20  Richard Biener  <rguenther@suse.de>
 
7884
+
 
7885
+       PR middle-end/59860
 
7886
+       * builtins.c (fold_builtin_strcat): Remove case better handled
 
7887
+       by tree-ssa-strlen.c.
 
7888
+
 
7889
+2014-01-19  John David Anglin  <danglin@gcc.gnu.org>
 
7890
+
 
7891
+       * config/pa/pa.c (pa_attr_length_millicode_call): Correct length of
 
7892
+       long non-pic millicode calls.
 
7893
+
 
7894
+2014-01-17  John David Anglin  <danglin@gcc.gnu.org>
 
7895
+
 
7896
+       * config/pa/pa.c (pa_attr_length_indirect_call): Don't output a short
 
7897
+       call to $$dyncall when TARGET_LONG_CALLS is true.
 
7898
+
 
7899
+2014-01-17  H.J. Lu  <hongjiu.lu@intel.com>
 
7900
+
 
7901
+       Backport from mainline
 
7902
+       2014-01-14  H.J. Lu  <hongjiu.lu@intel.com>
 
7903
+
 
7904
+       PR target/59794
 
7905
+       * config/i386/i386.c (type_natural_mode): Add a bool parameter
 
7906
+       to indicate if type is used for function return value.  Warn
 
7907
+       ABI change if the vector mode isn't available for function
 
7908
+       return value.
 
7909
+       (ix86_function_arg_advance): Pass false to type_natural_mode.
 
7910
+       (ix86_function_arg): Likewise.
 
7911
+       (ix86_gimplify_va_arg): Likewise.
 
7912
+       (function_arg_32): Don't warn ABI change.
 
7913
+       (ix86_function_value): Pass true to type_natural_mode.
 
7914
+       (ix86_return_in_memory): Likewise.
 
7915
+       (ix86_struct_value_rtx): Removed.
 
7916
+       (TARGET_STRUCT_VALUE_RTX): Likewise.
 
7917
+
 
7918
+2014-01-17  Charles Baylis  <charles.baylis@linaro.org>
 
7919
+
 
7920
+       Backport from mainline
 
7921
+       2013-12-19  Charles Baylis  <charles.baylis@linaro.org>
 
7922
+
 
7923
+       PR target/59142
 
7924
+       * config/arm/arm-ldmstm.ml: Use low_register_operand for Thumb
 
7925
+       patterns.
 
7926
+       * config/arm/ldmstm.md: Regenerate.
 
7927
+
 
7928
+       2013-12-19  Charles Baylis  <charles.baylis@linaro.org>
 
7929
+
 
7930
+       PR target/59142
 
7931
+       * config/arm/predicates.md (arm_hard_general_register_operand):
 
7932
+       New predicate.
 
7933
+       (arm_hard_register_operand): Remove.
 
7934
+       * config/arm/arm-ldmstm.ml: Use arm_hard_general_register_operand
 
7935
+       for all patterns.
 
7936
+       * config/arm/ldmstm.md: Regenerate.
 
7937
+
 
7938
+       2013-12-19  Charles Baylis  <charles.baylis@linaro.org>
 
7939
+
 
7940
+       PR target/59142
 
7941
+       * config/arm/predicates.md (vfp_hard_register_operand): New predicate.
 
7942
+       * config/arm/arm.md (vfp_pop_multiple_with_writeback): Use
 
7943
+       vfp_hard_register_operand.
 
7944
+
 
7945
+2014-01-17  Kugan Vivekanandarajah  <kuganv@linaro.org>
 
7946
+
 
7947
+       Backport from mainline
 
7948
+       2014-01-15  Matthew Gretton-Dann  <matthew.gretton-dann@linaro.org>
 
7949
+           Kugan Vivekanandarajah  <kuganv@linaro.org>
 
7950
+
 
7951
+       PR target/59695
 
7952
+       * config/aarch64/aarch64.c (aarch64_build_constant): Fix incorrect
 
7953
+       truncation.
 
7954
+
 
7955
+2014-01-17  Terry Guo  <terry.guo@arm.com>
 
7956
+
 
7957
+       PR target/59826
 
7958
+       * config/arm/arm.md (prefetch): Set insn type attribute to load1.
 
7959
+
 
7960
+2014-01-16  Jakub Jelinek  <jakub@redhat.com>
 
7961
+
 
7962
+       PR target/59839
 
7963
+       * config/i386/i386.c (ix86_expand_builtin): If target doesn't
 
7964
+       satisfy operand 0 predicate for gathers, use a new pseudo as
 
7965
+       subtarget.
 
7966
+
 
7967
+2014-01-16  Richard Henderson <rth@redhat.com>
 
7968
+
 
7969
+       PR debug/54694
 
7970
+       * reginfo.c (global_regs_decl): Globalize.
 
7971
+       * rtl.h (global_regs_decl): Declare.
 
7972
+       * ira.c (do_reload): Diagnose frame_pointer_needed and it
 
7973
+       reserved via global_regs.
 
7974
+
 
7975
+2014-01-16  Peter Bergner  <bergner@vnet.ibm.com>
 
7976
+
 
7977
+       Backport from mainline
 
7978
+       2014-01-15  Uros Bizjak  <ubizjak@gmail.com>
 
7979
+
 
7980
+       * config/i386/i386.c (ix86_hard_regno_mode_ok): Use
 
7981
+       VALID_AVX256_REG_OR_OI_MODE.
 
7982
+
 
7983
+       2013-09-05  Peter Bergner  <bergner@vnet.ibm.com>
 
7984
+
 
7985
+       PR target/58139
 
7986
+       * reginfo.c (choose_hard_reg_mode): Scan through all mode classes
 
7987
+       looking for widest mode.
 
7988
+
 
7989
+2014-01-16  Marek Polacek  <polacek@redhat.com>
 
7990
+
 
7991
+       Backported from mainline
 
7992
+       2014-01-16  Marek Polacek  <polacek@redhat.com>
 
7993
+
 
7994
+       PR middle-end/59827
 
7995
+       * gimple-low.c (gimple_check_call_args): Don't use DECL_ARG_TYPE if
 
7996
+       it is error_mark_node.
 
7997
+
 
7998
+2014-01-15  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
7999
+
 
8000
+       PR target/59803
 
8001
+       * config/s390/s390.c (s390_preferred_reload_class): Don't return
 
8002
+       ADDR_REGS for invalid symrefs in non-PIC code.
 
8003
+
 
8004
+2014-01-14  Uros Bizjak  <ubizjak@gmail.com>
 
8005
+
 
8006
+       Revert:
 
8007
+       2014-01-08  Uros Bizjak  <ubizjak@gmail.com>
 
8008
+
 
8009
+       * config/i386/i386.c (ix86_data_alignment): Calculate max_align
 
8010
+       from prefetch_block tune setting.
 
8011
+
 
8012
+2014-01-13  Jakub Jelinek  <jakub@redhat.com>
 
8013
+
 
8014
+       Backported from mainline
 
8015
+       2014-01-10  Jakub Jelinek  <jakub@redhat.com>
 
8016
+
 
8017
+       PR tree-optimization/59745
 
8018
+       * tree-predcom.c (tree_predictive_commoning_loop): Call
 
8019
+       free_affine_expand_cache if giving up because components is NULL.
 
8020
+
 
8021
+2014-01-10  Yufeng Zhang  <yufeng.zhang@arm.com>
 
8022
+
 
8023
+       * config/arm/arm.c (arm_expand_neon_args): Call expand_expr
 
8024
+       with EXPAND_MEMORY for NEON_ARG_MEMORY; check if the returned
 
8025
+       rtx is const0_rtx or not.
 
8026
+
 
8027
+2014-01-10  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
8028
+
 
8029
+       * config/s390/s390.c (s390_expand_tbegin): Remove jump over CC
 
8030
+       extraction in good case.
 
8031
+
 
8032
+2014-01-10  Huacai Chen  <chenhc@lemote.com>
 
8033
+
 
8034
+       * config/mips/driver-native.c (host_detect_local_cpu): Handle new
 
8035
+       kernel strings for Loongson-2E/2F/3A.
 
8036
+
 
8037
+2014-01-10  Richard Biener  <rguenther@suse.de>
 
8038
+
 
8039
+       PR tree-optimization/59715
 
8040
+       * tree-flow.h (split_critical_edges): Declare.
 
8041
+       * tree-cfg.c (split_critical_edges): Export.
 
8042
+       * tree-ssa-sink.c (execute_sink_code): Split critical edges.
 
8043
+
 
8044
+2014-01-09  Richard Sandiford  <rdsandiford@googlemail.com>
 
8045
+
 
8046
+       * config/mips/mips.h (ISA_HAS_WSBH): Define.
 
8047
+       * config/mips/mips.md (UNSPEC_WSBH, UNSPEC_DSBH, UNSPEC_DSHD): New
 
8048
+       constants.
 
8049
+       (bswaphi2, bswapsi2, bswapdi2, wsbh, dsbh, dshd): New patterns.
 
8050
+
 
8051
+2014-01-09  Richard Sandiford  <rdsandiford@googlemail.com>
 
8052
+
 
8053
+       PR rtl-optimization/59137
 
8054
+       * reorg.c (steal_delay_list_from_target): Call update_block for
 
8055
+       elided insns.
 
8056
+       (steal_delay_list_from_fallthrough, relax_delay_slots): Likewise.
 
8057
+
 
8058
+2014-01-09  Richard Sandiford  <rdsandiford@googlemail.com>
 
8059
+
 
8060
+       Revert:
 
8061
+       2012-10-07  Richard Sandiford  <rdsandiford@googlemail.com>
 
8062
+
 
8063
+       * config/mips/mips.c (mips_truncated_op_cost): New function.
 
8064
+       (mips_rtx_costs): Adjust test for BADDU.
 
8065
+       * config/mips/mips.md (*baddu_di<mode>): Push truncates to operands.
 
8066
+
 
8067
+       2012-10-02  Richard Sandiford  <rdsandiford@googlemail.com>
 
8068
+
 
8069
+       * config/mips/mips.md (*baddu_si_eb, *baddu_si_el): Merge into...
 
8070
+       (*baddu_si): ...this new pattern.
 
8071
+
 
8072
+2014-01-09  Richard Biener  <rguenther@suse.de>
 
8073
+
 
8074
+       Backport from mainline
 
8075
+       2013-11-18  Richard Biener  <rguenther@suse.de>
 
8076
+
 
8077
+       PR tree-optimization/59125
 
8078
+       PR tree-optimization/54570
 
8079
+       * tree-ssa-sccvn.c (copy_reference_ops_from_ref): When inlining
 
8080
+       is not complete do not treat component-references with offset zero
 
8081
+       but different fields as equal.
 
8082
+       * tree-object-size.c: Include tree-phinodes.h and ssa-iterators.h.
 
8083
+       (compute_object_sizes): Apply TLC.  Propagate the constant
 
8084
+       results into all uses and fold their stmts.
 
8085
+       * passes.def (pass_all_optimizations): Move pass_object_sizes
 
8086
+       after the first pass_forwprop and before pass_fre.
 
8087
+
 
8088
+       2013-12-03  Jakub Jelinek  <jakub@redhat.com>
 
8089
+
 
8090
+       PR tree-optimization/59362
 
8091
+       * tree-object-size.c (object_sizes): Change into array of
 
8092
+       vec<unsigned HOST_WIDE_INT>.
 
8093
+       (compute_builtin_object_size): Check computed bitmap for
 
8094
+       non-NULL instead of object_sizes.  Call safe_grow on object_sizes
 
8095
+       vector if new SSA_NAMEs appeared.
 
8096
+       (init_object_sizes): Check computed bitmap for non-NULL.
 
8097
+       Call safe_grow on object_sizes elements instead of initializing
 
8098
+       it with XNEWVEC.
 
8099
+       (fini_object_sizes): Call release on object_sizes elements, don't
 
8100
+       set it to NULL.
 
8101
+
 
8102
+2014-01-09  Richard Earnshaw  <rearnsha@arm.com>
 
8103
+
 
8104
+       PR rtl-optimization/54300
 
8105
+       * regcprop.c (copyprop_hardreg_forward_1): Ensure any unused
 
8106
+       outputs in a single-set are killed from the value chains.
 
8107
+
 
8108
+2014-01-09  Jakub Jelinek  <jakub@redhat.com>
 
8109
+
 
8110
+       PR rtl-optimization/59724
 
8111
+       * ifcvt.c (cond_exec_process_if_block): Don't call
 
8112
+       flow_find_head_matching_sequence with 0 longest_match.
 
8113
+       * cfgcleanup.c (flow_find_head_matching_sequence): Count even
 
8114
+       non-active insns if !stop_after.
 
8115
+       (try_head_merge_bb): Revert 2014-01-07 changes.
 
8116
+
 
8117
+2014-01-09  Hans-Peter Nilsson  <hp@axis.com>
 
8118
+
 
8119
+       Backport from mainline
 
8120
+       2013-12-23  Hans-Peter Nilsson  <hp@axis.com>
 
8121
+
 
8122
+       PR middle-end/59584
 
8123
+       * config/cris/predicates.md (cris_nonsp_register_operand):
 
8124
+       New define_predicate.
 
8125
+       * config/cris/cris.md: Replace register_operand with
 
8126
+       cris_nonsp_register_operand for destinations in all
 
8127
+       define_splits where a register is set more than once.
 
8128
+
 
8129
+2014-01-08   H.J. Lu  <hongjiu.lu@intel.com>
 
8130
+
 
8131
+       Backport from mainline
 
8132
+       2013-12-25   H.J. Lu  <hongjiu.lu@intel.com>
 
8133
+
 
8134
+       PR target/59587
 
8135
+       * config/i386/i386.c (struct ptt): Add a field for processor name.
 
8136
+       (processor_target_table): Sync with processor_type.  Add
 
8137
+       processor names.
 
8138
+       (cpu_names): Removed.
 
8139
+       (ix86_option_override_internal): Default x_ix86_tune_string
 
8140
+       to processor_target_table[TARGET_CPU_DEFAULT].name.
 
8141
+       (ix86_function_specific_print): Assert arch and tune <
 
8142
+       PROCESSOR_max.  Use processor_target_table to print arch and
 
8143
+       tune names.
 
8144
+       * config/i386/i386.h (TARGET_CPU_DEFAULT): Default to
 
8145
+       PROCESSOR_GENERIC32.
 
8146
+       (target_cpu_default): Removed.
 
8147
+       (processor_type): Reordered.
 
8148
+
 
8149
+2014-01-08  Uros Bizjak  <ubizjak@gmail.com>
 
8150
+
 
8151
+       Backport from mainline
 
8152
+       2014-01-05  Uros Bizjak  <ubizjak@gmail.com>
 
8153
+
 
8154
+       * config/i386/i386.c (ix86_data_alignment): Calculate max_align
 
8155
+       from prefetch_block tune setting.
 
8156
+       (nocona_cost): Correct size of prefetch block to 64.
 
8157
+
 
8158
+2014-01-08  Martin Jambor  <mjambor@suse.cz>
 
8159
+
 
8160
+       PR ipa/59610
 
8161
+       * ipa-prop.c (ipa_compute_jump_functions): Bail out if not optimizing.
 
8162
+       (parm_preserved_before_stmt_p): Assume modification present when not
 
8163
+       optimizing.
 
8164
+
 
8165
+2014-01-07  John David Anglin  <danglin@gcc.gnu.org>
 
8166
+
 
8167
+       PR target/59652
 
8168
+       * config/pa/pa.c (pa_legitimate_address_p): Return false before reload
 
8169
+       for 14-bit register offsets when INT14_OK_STRICT is false.
 
8170
+
 
8171
+2014-01-07  Roland Stigge  <stigge@antcom.de>
 
8172
+           Michael Meissner  <meissner@linux.vnet.ibm.com>
 
8173
+
 
8174
+       PR 57386/target
 
8175
+       * config/rs6000/rs6000.c (rs6000_legitimate_offset_address_p):
 
8176
+       Only check TFmode for SPE constants.  Don't check TImode or TDmode.
 
8177
+
 
8178
+2014-01-07  Jakub Jelinek  <jakub@redhat.com>
 
8179
+
 
8180
+       PR rtl-optimization/58668
 
8181
+       * cfgcleanup.c (flow_find_cross_jump): Don't count
 
8182
+       any jumps if dir_p is NULL.  Remove p1 variable and make USE/CLOBBER
 
8183
+       check consistent with other places.
 
8184
+       (flow_find_head_matching_sequence): Don't count USE or CLOBBER insns.
 
8185
+       (try_head_merge_bb): Adjust for the flow_find_head_matching_sequence
 
8186
+       counting change.
 
8187
+       * ifcvt.c (count_bb_insns): Don't count USE or CLOBBER insns.
 
8188
+
 
8189
+2014-01-07  Mike Stump  <mikestump@comcast.net>
 
8190
+           Jakub Jelinek  <jakub@redhat.com>
 
8191
+
 
8192
+       PR pch/59436
 
8193
+       * tree.h (struct tree_optimization_option): Change optabs
 
8194
+       type from unsigned char * to void *.
 
8195
+       * optabs.c (init_tree_optimization_optabs): Adjust
 
8196
+       TREE_OPTIMIZATION_OPTABS initialization.
 
8197
+
 
8198
+2014-01-07  Jakub Jelinek  <jakub@redhat.com>
 
8199
+
 
8200
+       Backported from mainline
 
8201
+       2013-12-16  Jakub Jelinek  <jakub@redhat.com>
 
8202
+
 
8203
+       PR middle-end/58956
 
8204
+       PR middle-end/59470
 
8205
+       * gimple.h (walk_stmt_load_store_addr_fn): New typedef.
 
8206
+       (walk_stmt_load_store_addr_ops, walk_stmt_load_store_ops): Use it
 
8207
+       for callback params.
 
8208
+       * gimple.c (walk_stmt_load_store_ops): Likewise.
 
8209
+       (walk_stmt_load_store_addr_ops): Likewise.  Adjust all callback
 
8210
+       calls to supply the gimple operand containing the base tree
 
8211
+       as an extra argument.
 
8212
+       * tree-ssa-ter.c (find_ssaname, find_ssaname_in_store): New helper
 
8213
+       functions.
 
8214
+       (find_replaceable_in_bb): For calls or GIMPLE_ASM, only set
 
8215
+       same_root_var if USE is used somewhere in the stores of the stmt.
 
8216
+       * ipa-prop.c (visit_ref_for_mod_analysis): Remove name of the stmt
 
8217
+       argument and ATTRIBUTE_UNUSED, add another unnamed tree argument.
 
8218
+       * ipa-pure-const.c (check_load, check_store, check_ipa_load,
 
8219
+       check_ipa_store): Likewise.
 
8220
+       * gimple.c (gimple_ior_addresses_taken_1): Likewise.
 
8221
+       * ipa-split.c (test_nonssa_use, mark_nonssa_use): Likewise.
 
8222
+       (verify_non_ssa_vars, visit_bb): Adjust their callers.
 
8223
+       * cfgexpand.c (add_scope_conflicts_1): Use
 
8224
+       walk_stmt_load_store_addr_fn type for visit variable.
 
8225
+       (visit_op, visit_conflict): Remove name of the stmt
 
8226
+       argument and ATTRIBUTE_UNUSED, add another unnamed tree argument.
 
8227
+       * tree-sra.c (asm_visit_addr): Likewise.  Remove name of the data
 
8228
+       argument and ATTRIBUTE_UNUSED.
 
8229
+       * cgraphbuild.c (mark_address, mark_load, mark_store): Add another
 
8230
+       unnamed tree argument.
 
8231
+
 
8232
+2014-01-03  Andreas Schwab  <schwab@linux-m68k.org>
 
8233
+
 
8234
+       * config/m68k/m68k.c (handle_move_double): Handle pushes with
 
8235
+       overlapping registers also for registers other than the stack
 
8236
+       pointer.
 
8237
+
 
8238
+2014-01-03  Jakub Jelinek  <jakub@redhat.com>
 
8239
+
 
8240
+       PR target/59625
 
8241
+       * config/i386/i386.c (ix86_avoid_jump_mispredicts): Don't consider
 
8242
+       asm goto as jump.
 
8243
+
 
8244
+2014-01-01  Jakub Jelinek  <jakub@redhat.com>
 
8245
+
 
8246
+       PR rtl-optimization/59647
 
8247
+       * cse.c (cse_process_notes_1): Don't substitute negative VOIDmode
 
8248
+       new_rtx into UNSIGNED_FLOAT rtxes.
 
8249
+
 
8250
+2013-12-28  Eric Botcazou  <ebotcazou@adacore.com>
 
8251
+
 
8252
+       * doc/invoke.texi (output file options): Document -fada-spec-parent.
 
8253
+
 
8254
+2013-12-26  Uros Bizjak  <ubizjak@gmail.com>
 
8255
+
 
8256
+       * config/i386/driver-i386.c (decode_caches_intel): Add missing entries.
 
8257
+
 
8258
+2013-12-20  Jakub Jelinek  <jakub@redhat.com>
 
8259
+
 
8260
+       PR c++/59255
 
8261
+       Backported from mainline
 
8262
+       2013-08-19  Dehao Chen  <dehao@google.com>
 
8263
+
 
8264
+       * value-prof.c (gimple_ic): Fix the bug of adding EH edge.
 
8265
+
 
8266
+2013-12-19  James Greenhalgh  <james.greenhalgh@arm.com>
 
8267
+
 
8268
+       Backport from Mainline.
 
8269
+       2013-05-01  James Greenhalgh  <james.greenhalgh@arm.com>
 
8270
+
 
8271
+       * config/aarch64/aarch64-simd-builtins.def (cmhs): Rename to...
 
8272
+       (cmgeu): ...This.
 
8273
+       (cmhi): Rename to...
 
8274
+       (cmgtu): ...This.
 
8275
+       * config/aarch64/aarch64-simd.md
 
8276
+       (simd_mode): Add SF.
 
8277
+       (aarch64_vcond_internal): Use new names for unsigned comparison insns.
 
8278
+       (aarch64_cm<optab><mode>): Rewrite to not use UNSPECs.
 
8279
+       * config/aarch64/aarch64.md (*cstore<mode>_neg): Rename to...
 
8280
+       (cstore<mode>_neg): ...This.
 
8281
+       * config/aarch64/iterators.md
 
8282
+       (VALLF): new.
 
8283
+       (unspec): Remove UNSPEC_CM<EQ, LE, LT, GE, GT, HS, HI, TST>.
 
8284
+       (COMPARISONS): New.
 
8285
+       (UCOMPARISONS): Likewise.
 
8286
+       (optab): Add missing comparisons.
 
8287
+       (n_optab): New.
 
8288
+       (cmp_1): Likewise.
 
8289
+       (cmp_2): Likewise.
 
8290
+       (CMP): Likewise.
 
8291
+       (cmp): Remove.
 
8292
+       (VCMP_S): Likewise.
 
8293
+       (VCMP_U): Likewise.
 
8294
+       (V_cmp_result): Add DF, SF modes.
 
8295
+       (v_cmp_result): Likewise.
 
8296
+       (v): Likewise.
 
8297
+       (vmtype): Likewise.
 
8298
+       * config/aarch64/predicates.md (aarch64_reg_or_fp_zero): New.
 
8299
+
 
8300
+       Partial Backport from mainline.
 
8301
+       2013-05-01  James Greenhalgh  <james.greenhalgh@arm.com>
 
8302
+
 
8303
+       * config/aarch64/arm_neon.h
 
8304
+       (vc<eq, lt, le, gt, ge, tst><qsd>_<u><8,16,32,64>): Remap
 
8305
+       to builtins or C as appropriate.
 
8306
+
 
8307
+2013-12-19  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
8308
+           Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
8309
+
 
8310
+       Backport from mainline
 
8311
+       2013-12-19  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
8312
+       * config/s390/s390.c (s390_hotpatch_trampoline_halfwords_default): New
 
8313
+       constant
 
8314
+       (s390_hotpatch_trampoline_halfwords_max): New constant
 
8315
+       (s390_hotpatch_trampoline_halfwords): New static variable
 
8316
+       (get_hotpatch_attribute): New function
 
8317
+       (s390_handle_hotpatch_attribute): New function
 
8318
+       (s390_attribute_table): New target specific attribute table to implement
 
8319
+       the hotpatch attribute
 
8320
+       (s390_option_override): Parse hotpatch options
 
8321
+       (s390_function_num_hotpatch_trampoline_halfwords): New function
 
8322
+       (s390_can_inline_p): Implement target hook to
 
8323
+       suppress hotpatching for explicitly inlined functions
 
8324
+       (s390_asm_output_function_label): Generate hotpatch prologue
 
8325
+       (TARGET_ATTRIBUTE_TABLE): Define to implement target attribute table
 
8326
+       (TARGET_CAN_INLINE_P): Define to implement target hook
 
8327
+       * config/s390/s390.opt (mhotpatch): New options -mhotpatch, -mhotpatch=
 
8328
+       * config/s390/s390-protos.h (s390_asm_output_function_label): Add
 
8329
+       prototype
 
8330
+       * config/s390/s390.h (ASM_OUTPUT_FUNCTION_LABEL): Target specific
 
8331
+       function label generation for hotpatching
 
8332
+       (FUNCTION_BOUNDARY): Align functions to eight bytes
 
8333
+       * doc/extend.texi: Document hotpatch attribute
 
8334
+       * doc/invoke.texi: Document -mhotpatch option
 
8335
+
 
8336
+2013-12-18  Eric Botcazou  <ebotcazou@adacore.com>
 
8337
+
 
8338
+       * config/arm/arm.c (arm_expand_epilogue_apcs_frame): Fix thinko.
 
8339
+
 
8340
+2013-12-12  Vladimir Makarov  <vmakarov@redhat.com>
 
8341
+
 
8342
+       PR middle-end/59470
 
8343
+       * lra-coalesce.c (lra_coalesce): Invalidate inheritance pseudo
 
8344
+       values if necessary.
 
8345
+
 
8346
+2013-12-12  Jakub Jelinek  <jakub@redhat.com>
 
8347
+
 
8348
+       PR libgomp/59467
 
8349
+       * gimplify.c (omp_check_private): Add copyprivate argument, if it
 
8350
+       is true, don't check omp_privatize_by_reference.
 
8351
+       (gimplify_scan_omp_clauses): For OMP_CLAUSE_COPYPRIVATE verify
 
8352
+       decl is private in outer context.  Adjust omp_check_private caller.
 
8353
+
 
8354
+2013-12-10  Eric Botcazou  <ebotcazou@adacore.com>
 
8355
+
 
8356
+       PR rtl-optimization/58295
 
8357
+       * simplify-rtx.c (simplify_truncation): Restrict the distribution for
 
8358
+       WORD_REGISTER_OPERATIONS targets.
 
8359
+
 
8360
+2013-12-10  Kai Tietz  <ktietz@redhat.com>
 
8361
+
 
8362
+       PR target/56807
 
8363
+       * config/i386/i386.c (ix86_expand_prologue): Address saved
 
8364
+       registers stack-relative, not via frame-pointer.
 
8365
+
 
8366
+2013-12-09  Alan Modra  <amodra@gmail.com>
 
8367
+
 
8368
+       Apply from mainline
 
8369
+       2013-12-05  Alan Modra  <amodra@gmail.com>
 
8370
+       * configure.ac (BUILD_CXXFLAGS) Don't use ALL_CXXFLAGS for
 
8371
+       build != host.
 
8372
+       <recursive call for build != host>: Clear GMPINC.  Don't bother
 
8373
+       saving CFLAGS.
 
8374
+       * configure: Regenerate.
 
8375
+
 
8376
+2013-12-08  Uros Bizjak  <ubizjak@gmail.com>
 
8377
+
 
8378
+       Backport from mainline
 
8379
+       2013-12-06  Uros Bizjak  <ubizjak@gmail.com>
 
8380
+
 
8381
+       PR target/59405
 
8382
+       * config/i386/i386.c (type_natural_mode): Properly handle
 
8383
+       size 8 for !TARGET_64BIT.
 
8384
+
 
8385
+2013-12-07  Ralf Corsépius  <ralf.corsepius@rtems.org>
 
8386
+
 
8387
+       * config.gcc (microblaze*-*-rtems*): Add TARGET_BIG_ENDIAN_DEFAULT.
 
8388
+
 
8389
+2013-12-06  Jakub Jelinek  <jakub@redhat.com>
 
8390
+
 
8391
+       PR tree-optimization/59388
 
8392
+       * tree-ssa-reassoc.c (update_range_test): If op == range->exp,
 
8393
+       gimplify tem after stmt rather than before it.
 
8394
+
 
8395
+2013-12-06  Oleg Endo  <olegendo@gcc.gnu.org>
 
8396
+
 
8397
+       Backport from mainline
 
8398
+       2013-11-26  Oleg Endo  <olegendo@gcc.gnu.org>
 
8399
+
 
8400
+       PR target/58314
 
8401
+       PR target/50751
 
8402
+       * config/sh/sh.c (max_mov_insn_displacement, disp_addr_displacement):
 
8403
+       Prefix function names with 'sh_'.  Make them non-static.
 
8404
+       * config/sh/sh-protos.h (sh_disp_addr_displacement,
 
8405
+       sh_max_mov_insn_displacement): Add declarations.
 
8406
+       * config/sh/constraints.md (Q): Reject QImode.
 
8407
+       (Sdd): Use match_code "mem".
 
8408
+       (Snd): Fix erroneous matching of non-memory operands.
 
8409
+       * config/sh/predicates.md (short_displacement_mem_operand): New
 
8410
+       predicate.
 
8411
+       (general_movsrc_operand): Disallow PC relative QImode loads.
 
8412
+       * config/sh/sh.md (*mov<mode>_reg_reg): Remove it.
 
8413
+       (*movqi, *movhi): Merge both insns into...
 
8414
+       (*mov<mode>): ... this new insn.  Replace generic 'm' constraints with
 
8415
+       'Snd' and 'Sdd' constraints.  Calculate insn length dynamically based
 
8416
+       on the operand types.
 
8417
+
 
8418
+2013-12-06  Richard Biener  <rguenther@suse.de>
 
8419
+
 
8420
+       Backport from mainline
 
8421
+       2013-11-29  Richard Biener  <rguenther@suse.de>
 
8422
+
 
8423
+       PR tree-optimization/59334
 
8424
+       * tree-ssa-dce.c (eliminate_unnecessary_stmts): Fix bug
 
8425
+       in previous commit.
 
8426
+
 
8427
+       2013-11-28  Richard Biener  <rguenther@suse.de>
 
8428
+
 
8429
+       PR tree-optimization/59330
 
8430
+       * tree-ssa-dce.c (eliminate_unnecessary_stmts): Simplify
 
8431
+       and fix delayed marking of free calls not necessary.
 
8432
+
 
8433
+2013-12-06  Richard Biener  <rguenther@suse.de>
 
8434
+
 
8435
+       Backport from mainline
 
8436
+       2013-11-27  Richard Biener  <rguenther@suse.de>
 
8437
+
 
8438
+       PR tree-optimization/59288
 
8439
+       * tree-vect-loop.c (get_initial_def_for_induction): Do not
 
8440
+       re-analyze the PHI but use STMT_VINFO_LOOP_PHI_EVOLUTION_PART.
 
8441
+
 
8442
+       2013-11-19  Richard Biener  <rguenther@suse.de>
 
8443
+
 
8444
+       PR tree-optimization/59164
 
8445
+       * tree-vect-loop.c (vect_analyze_loop_operations): Adjust
 
8446
+       check whether we can create an epilogue loop to reflect the
 
8447
+       cases where we create one.
 
8448
+
 
8449
+       2013-09-05  Richard Biener  <rguenther@suse.de>
 
8450
+
 
8451
+       PR tree-optimization/58137
 
8452
+       * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size):
 
8453
+       Do not create vectors of pointers.
 
8454
+       * tree-vect-loop.c (get_initial_def_for_induction): Use proper
 
8455
+       types for the components of the vector initializer.
 
8456
+       * tree-cfg.c (verify_gimple_assign_binary): Remove special-casing
 
8457
+       allowing pointer vectors with PLUS_EXPR/MINUS_EXPR.
 
8458
+
 
8459
+2013-12-06  Oleg Endo  <olegendo@gcc.gnu.org>
 
8460
+
 
8461
+       PR target/51244
 
8462
+       PR target/59343
 
8463
+       * config/sh/sh.md (*cbranch_t): Check that there are no labels between
 
8464
+       the s1 insn and the testing insn.  Remove REG_DEAD note from s1 insn.
 
8465
+
 
8466
+2013-12-05  Richard Biener  <rguenther@suse.de>
 
8467
+
 
8468
+       Backport from mainline
 
8469
+       2013-11-19  Richard Biener  <rguenther@suse.de>
 
8470
+
 
8471
+       PR middle-end/58956
 
8472
+       * tree-ssa-ter.c (find_replaceable_in_bb): Avoid forwarding
 
8473
+       loads into stmts that may clobber it.
 
8474
+
 
8475
+2013-12-04  Jakub Jelinek  <jakub@redhat.com>
 
8476
+
 
8477
+       PR rtl-optimization/58726
 
8478
+       * combine.c (force_to_mode): Fix comment typo.  Don't destructively
 
8479
+       modify x for ROTATE, ROTATERT and IF_THEN_ELSE.
 
8480
+
 
8481
+2013-12-04  Jakub Jelinek  <jakub@redhat.com>
 
8482
+           Uros Bizjak  <ubizjak@gmail.com>
 
8483
+
 
8484
+       PR target/59163
 
8485
+       * config/i386/i386.c (ix86_legitimate_combined_insn): If for
 
8486
+       !TARGET_AVX there is misaligned MEM operand with vector mode
 
8487
+       and get_attr_ssememalign is 0, return false.
 
8488
+       (ix86_expand_special_args_builtin): Add get_pointer_alignment
 
8489
+       computed alignment and for non-temporal loads/stores also
 
8490
+       at least GET_MODE_ALIGNMENT as MEM_ALIGN.
 
8491
+       * config/i386/sse.md
 
8492
+       (<sse>_loadu<ssemodesuffix><avxsizesuffix>,
 
8493
+       <sse>_storeu<ssemodesuffix><avxsizesuffix>,
 
8494
+       <sse2>_loaddqu<avxsizesuffix>,
 
8495
+       <sse2>_storedqu<avxsizesuffix>, <sse3>_lddqu<avxsizesuffix>,
 
8496
+       sse_vmrcpv4sf2, sse_vmrsqrtv4sf2, sse2_cvtdq2pd, sse_movhlps,
 
8497
+       sse_movlhps, sse_storehps, sse_loadhps, sse_loadlps,
 
8498
+       *vec_interleave_highv2df, *vec_interleave_lowv2df,
 
8499
+       *vec_extractv2df_1_sse, sse2_loadhpd, sse2_loadlpd, sse2_movsd,
 
8500
+       sse4_1_<code>v8qiv8hi2, sse4_1_<code>v4qiv4si2,
 
8501
+       sse4_1_<code>v4hiv4si2, sse4_1_<code>v2qiv2di2,
 
8502
+       sse4_1_<code>v2hiv2di2, sse4_1_<code>v2siv2di2, sse4_2_pcmpestr,
 
8503
+       *sse4_2_pcmpestr_unaligned, sse4_2_pcmpestri, sse4_2_pcmpestrm,
 
8504
+       sse4_2_pcmpestr_cconly, sse4_2_pcmpistr, *sse4_2_pcmpistr_unaligned,
 
8505
+       sse4_2_pcmpistri, sse4_2_pcmpistrm, sse4_2_pcmpistr_cconly): Add
 
8506
+       ssememalign attribute.
 
8507
+       * config/i386/i386.md (ssememalign): New define_attr.
 
8508
+
 
8509
+2013-12-03  Jakub Jelinek  <jakub@redhat.com>
 
8510
+
 
8511
+       PR middle-end/59011
 
8512
+       * gimplify.c (nonlocal_vla_vars): New variable.
 
8513
+       (gimplify_var_or_parm_decl): Put VAR_DECLs for VLAs into
 
8514
+       nonlocal_vla_vars chain.
 
8515
+       (gimplify_body): Call declare_vars on nonlocal_vla_vars chain
 
8516
+       if outer_bind has DECL_INITIAL (current_function_decl) block.
 
8517
+
 
8518
+       PR target/58864
 
8519
+       * optabs.c (emit_conditional_move): Save and restore
 
8520
+       pending_stack_adjust and stack_pointer_delta if cmove can't be used.
 
8521
+
 
8522
+2013-12-02  Jakub Jelinek  <jakub@redhat.com>
 
8523
+
 
8524
+       PR tree-optimization/59358
 
8525
+       * tree-vrp.c (union_ranges): To check for the partially
 
8526
+       overlapping ranges or adjacent ranges, also compare *vr0max
 
8527
+       with vr1max.
 
8528
+
 
8529
+2013-12-02  Richard Biener  <rguenther@suse.de>
 
8530
+
 
8531
+       PR tree-optimization/59139
 
8532
+       * tree-ssa-loop-niter.c (chain_of_csts_start): Properly match
 
8533
+       code in get_val_for.
 
8534
+       (get_val_for): Use gcc_checking_asserts.
 
8535
+
 
8536
+2013-11-27  Tom de Vries  <tom@codesourcery.com>
 
8537
+           Marc Glisse  <marc.glisse@inria.fr>
 
8538
+
 
8539
+       PR middle-end/59037
 
8540
+       * fold-const.c (fold_indirect_ref_1): Don't create out-of-bounds
 
8541
+       BIT_FIELD_REF.
 
8542
+       * gimplify.c (gimple_fold_indirect_ref): Same.
 
8543
+
 
8544
+2013-12-01  Eric Botcazou  <ebotcazou@adacore.com>
 
8545
+
 
8546
+       * config/i386/winnt.c (i386_pe_asm_named_section): Be prepared for an
 
8547
+       identifier node.
 
8548
+
 
8549
+2013-12-01  Bernd Edlinger  <bernd.edlinger@hotmail.de>
 
8550
+
 
8551
+       * expr.c (emit_group_store): Fix off-by-one BITFIELD_END argument.
 
8552
+
 
8553
+2013-11-28  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
8554
+
 
8555
+       Backport from mainline
 
8556
+       2013-11-28  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
8557
+
 
8558
+       * config/arm/iterators.md (vrint_conds): New int attribute.
 
8559
+       * config/arm/vfp.md (<vrint_pattern><SDF:mode>2): Set conds attribute.
 
8560
+       (smax<mode>3): Likewise.
 
8561
+       (smin<mode>3): Likewise.
 
8562
+
 
8563
+2013-11-28  Uros Bizjak  <ubizjak@gmail.com>
 
8564
+
 
8565
+       Backport from mainline
 
8566
+       2013-11-27  Uros Bizjak  <ubizjak@gmail.com>
 
8567
+                   Ganesh Gopalasubramanian  <Ganesh.Gopalasubramanian@amd.com>
 
8568
+
 
8569
+       PR target/56788
 
8570
+       * gcc.target/i386/xop-frczX.c: New test.
 
8571
+
 
8572
+2013-11-28  Terry Guo  <terry.guo@arm.com>
 
8573
+
 
8574
+       Backport mainline r205391
 
8575
+       2013-11-26  Terry Guo  <terry.guo@arm.com>
 
8576
+
 
8577
+       * config/arm/arm.c (require_pic_register): Handle high pic base
 
8578
+       register for thumb-1.
 
8579
+       (arm_load_pic_register): Also initialize high pic base register.
 
8580
+       * doc/invoke.texi: Update documentation for option -mpic-register.
 
8581
+
 
8582
+2013-11-27  Jakub Jelinek  <jakub@redhat.com>
 
8583
+
 
8584
+       Backported from mainline
 
8585
+       2013-11-26  Jakub Jelinek  <jakub@redhat.com>
 
8586
+
 
8587
+       PR tree-optimization/59014
 
8588
+       * tree-vrp.c (register_edge_assert_for_1): Don't look
 
8589
+       through conversions from non-integral types or through
 
8590
+       narrowing conversions.
 
8591
+
 
8592
+2013-11-27  Eric Botcazou  <ebotcazou@adacore.com>
 
8593
+
 
8594
+       PR middle-end/59138
 
8595
+       * expr.c (emit_group_store): Don't write past the end of the structure.
 
8596
+       (store_bit_field): Fix formatting.
 
8597
+
 
8598
+2013-11-24  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
8599
+
 
8600
+       Backport from mainline
 
8601
+       2013-09-17  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
8602
+
 
8603
+       * config/sparc/t-rtems: Add leon3 multilibs.
 
8604
+
 
8605
+2013-11-24  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
8606
+
 
8607
+       Backport from mainline
 
8608
+       2013-08-09  Eric Botcazou  <ebotcazou@adacore.com>
 
8609
+
 
8610
+       * configure.ac: Add GAS check for LEON instructions on SPARC.
 
8611
+       * configure: Regenerate.
 
8612
+       * config.in: Likewise.
 
8613
+       * config.gcc (with_cpu): Remove sparc-leon*-* and deal with LEON in the
 
8614
+       sparc*-*-* block.
 
8615
+       * config/sparc/sparc.opt (LEON, LEON3): New masks.
 
8616
+       * config/sparc/sparc.h (ASM_CPU32_DEFAULT_SPEC): Set to AS_LEON_FLAG
 
8617
+       for LEON or LEON3.
 
8618
+       (ASM_CPU_SPEC): Pass AS_LEON_FLAG if -mcpu=leon or -mcpu=leon3.
 
8619
+       (AS_LEON_FLAG): New macro.
 
8620
+       * config/sparc/sparc.c (sparc_option_override): Set MASK_LEON for leon
 
8621
+       and MASK_LEON3 for leon3 and unset them if HAVE_AS_LEON is not defined.
 
8622
+       Deal with LEON and LEON3 for the memory model.
 
8623
+       * config/sparc/sync.md (atomic_compare_and_swap<mode>): Enable if LEON3
 
8624
+       (atomic_compare_and_swap<mode>_1): Likewise.
 
8625
+       (*atomic_compare_and_swap<mode>_1): Likewise.
 
8626
+
 
8627
+2013-11-24  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
8628
+
 
8629
+       Backport from mainline
 
8630
+       2013-07-23  Eric Botcazou  <ebotcazou@adacore.com>
 
8631
+
 
8632
+       * doc/invoke.texi (SPARC Options): Document new leon3 processor value.
 
8633
+
 
8634
+2013-11-24  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
8635
+
 
8636
+       Backport from mainline
 
8637
+       2013-07-22  Eric Botcazou  <ebotcazou@adacore.com>
 
8638
+
 
8639
+       * config.gcc (sparc*-*-*): Accept leon3 processor.
 
8640
+       (sparc-leon*-*): Merge with sparc*-*-* and add leon3 support.
 
8641
+       * doc/invoke.texi (SPARC Options): Adjust -mfix-ut699 entry.
 
8642
+       * config/sparc/sparc-opts.h (enum processor_type): Add PROCESSOR_LEON3.
 
8643
+       * config/sparc/sparc.opt (enum processor_type): Add leon3.
 
8644
+       (mfix-ut699): Adjust comment.
 
8645
+       * config/sparc/sparc.h (TARGET_CPU_leon3): New define.
 
8646
+       (CPP_CPU32_DEFAULT_SPEC): Add leon3 support.
 
8647
+       (CPP_CPU_SPEC): Likewise.
 
8648
+       (ASM_CPU_SPEC): Likewise.
 
8649
+       * config/sparc/sparc.c (leon3_cost): New constant.
 
8650
+       (sparc_option_override): Add leon3 support.
 
8651
+       (mem_ref): New function.
 
8652
+       (sparc_gate_work_around_errata): Return true if -mfix-ut699 is enabled.
 
8653
+       (sparc_do_work_around_errata): Look into the instruction in the delay
 
8654
+       slot and adjust accordingly.  Add fix for the data cache nullify issues
 
8655
+       of the UT699.  Change insertion position for the NOP.
 
8656
+       * config/sparc/leon.md (leon_fpalu, leon_fpmds, write_buf): Delete.
 
8657
+       (leon3_load): New reservation.
 
8658
+       (leon_store): Bump latency to 2.
 
8659
+       (grfpu): New automaton.
 
8660
+       (grfpu_alu): New unit.
 
8661
+       (grfpu_ds): Likewise.
 
8662
+       (leon_fp_alu): Adjust.
 
8663
+       (leon_fp_mult): Delete.
 
8664
+       (leon_fp_div): Split into leon_fp_divs and leon_fp_divd.
 
8665
+       (leon_fp_sqrt): Split into leon_fp_sqrts and leon_fp_sqrtd.
 
8666
+       * config/sparc/sparc.md (cpu): Add leon3.
 
8667
+       * config/sparc/sync.md (atomic_exchangesi): Disable if -mfix-ut699.
 
8668
+       (swapsi): Likewise.
 
8669
+       (atomic_test_and_set): Likewise.
 
8670
+       (ldstub): Likewise.
 
8671
+
 
8672
+2013-11-24  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
8673
+
 
8674
+       Backport from mainline
 
8675
+       2013-04-10  Steven Bosscher  <steven@gcc.gnu.org>
 
8676
+
 
8677
+       * config/sparc/sparc.c: Include tree-pass.h.
 
8678
+       (TARGET_MACHINE_DEPENDENT_REORG): Do not redefine.
 
8679
+       (sparc_reorg): Rename to sparc_do_work_around_errata.  Move to
 
8680
+       head of file.  Change return type.  Split off gate function.
 
8681
+       (sparc_gate_work_around_errata): New function.
 
8682
+       (pass_work_around_errata): New pass definition.
 
8683
+       (insert_pass_work_around_errata) New pass insert definition to
 
8684
+       insert pass_work_around_errata just after delayed-branch scheduling.
 
8685
+       (sparc_option_override): Insert the pass.
 
8686
+       * config/sparc/t-sparc (sparc.o): Add TREE_PASS_H dependence.
 
8687
+
 
8688
+2013-11-24  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
8689
+
 
8690
+       Backport from mainline
 
8691
+       2013-05-28  Eric Botcazou  <ebotcazou@adacore.com>
 
8692
+
 
8693
+       * doc/invoke.texi (SPARC Options): Document -mfix-ut699.
 
8694
+       * builtins.c (expand_builtin_mathfn) <BUILT_IN_SQRT>: Try to widen the
 
8695
+       mode if the instruction isn't available in the original mode.
 
8696
+       * config/sparc/sparc.opt (mfix-ut699): New option.
 
8697
+       * config/sparc/sparc.md (muldf3_extend): Disable if -mfix-ut699.
 
8698
+       (divdf3): Turn into expander.
 
8699
+       (divdf3_nofix): New insn.
 
8700
+       (divdf3_fix): Likewise.
 
8701
+       (divsf3): Disable if -mfix-ut699.
 
8702
+       (sqrtdf2): Turn into expander.
 
8703
+       (sqrtdf2_nofix): New insn.
 
8704
+       (sqrtdf2_fix): Likewise.
 
8705
+       (sqrtsf2): Disable if -mfix-ut699.
 
8706
+
 
8707
+2013-11-22  Eric Botcazou  <ebotcazou@adacore.com>
 
8708
+
 
8709
+       * print-rtl.c (print_rtx) <case MEM>: Output a space if no MEM_EXPR.
 
8710
+
 
8711
+2013-11-21  Zhenqiang Chen  <zhenqiang.chen@linaro.org>
 
8712
+
 
8713
+       PR bootstrap/57683
 
8714
+       Backport from mainline: r197467 and r198999.
 
8715
+       2013-04-03  Jeff Law  <law@redhat.com>
 
8716
+
 
8717
+       * Makefile.in (lra-constraints.o): Depend on $(OPTABS_H).
 
8718
+       (lra-eliminations.o): Likewise.
 
8719
+
 
8720
+       2013-05-16  Jeff Law  <law@redhat.com>
 
8721
+
 
8722
+       * Makefile.in (tree-switch-conversion.o): Depend on $(OPTABS_H).
 
8723
+
 
8724
+2013-11-20  Eric Botcazou  <ebotcazou@adacore.com>
 
8725
+
 
8726
+       PR target/59207
 
8727
+       * config/sparc/sparc.c (sparc_fold_builtin) <case CODE_FOR_pdist_vis>:
 
8728
+       Make sure neg2_ovf is set before being used.
 
8729
+
 
8730
+2013-11-20  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
8731
+           Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
8732
+
 
8733
+       Backport from mainline
 
8734
+       * config/s390/s390.c (s390_canonicalize_comparison): Don't fold
 
8735
+       int comparisons with an out of range condition code.
 
8736
+       (s390_optimize_nonescaping_tx): Skip empty BBs.
 
8737
+       Generate the new tbegin RTX when removing the FPR clobbers (with
 
8738
+       two SETs).
 
8739
+       (s390_expand_tbegin): Fix the retry loop counter.  Copy CC to the
 
8740
+       result before doing the retry calculations.
 
8741
+       (s390_init_builtins): Make tbegin "returns_twice" and tabort
 
8742
+       "noreturn".
 
8743
+       * config/s390/s390.md (UNSPECV_TBEGIN_TDB): New constant used for
 
8744
+       the TDB setting part of an tbegin.
 
8745
+       ("tbegin_1", "tbegin_nofloat_1"): Add a set for the TDB.
 
8746
+       ("tx_assist"): Set unused argument to an immediate zero instead of
 
8747
+       loading zero into a GPR and pass it as argument.
 
8748
+       * config/s390/htmxlintrin.h (__TM_simple_begin, __TM_begin):
 
8749
+       Remove inline and related attributes.
 
8750
+       (__TM_nesting_depth, __TM_is_user_abort, __TM_is_named_user_abort)
 
8751
+       (__TM_is_illegal, __TM_is_footprint_exceeded)
 
8752
+       (__TM_is_nested_too_deep, __TM_is_conflict): Fix format value
 
8753
+       check.
 
8754
+
 
8755
+2013-11-19  Uros Bizjak  <ubizjak@gmail.com>
 
8756
+
 
8757
+       Backport from mainline
 
8758
+       2013-11-18  Uros Bizjak  <ubizjak@gmail.com>
 
8759
+
 
8760
+       * config/i386/i386.c (ix86_decompose_address): Use REG_P instead of
 
8761
+       ix86_address_subreg_operand.  Move subreg checks to
 
8762
+       ix86_validate_address_register.  Move address override check to
 
8763
+       ix86_legitimate_address_p.
 
8764
+       (ix86_validate_address_register): New function.
 
8765
+       (ix86_legitimate_address_p): Call ix86_validate_address_register
 
8766
+       to validate base and index registers.  Add address override check
 
8767
+       from ix86_decompose_address.
 
8768
+       (ix86_decompose_address): Remove.
 
8769
+
 
8770
+       Backport from mainline
 
8771
+       2013-11-17  Uros Bizjak  <ubizjak@gmail.com>
 
8772
+
 
8773
+       PR target/59153
 
8774
+       * config/i386/i386.c (ix86_address_subreg_operand): Do not
 
8775
+       reject non-integer subregs.
 
8776
+       (ix86_decompose_address): Do not reject invalid CONST_INT RTXes.
 
8777
+       Move check for invalid x32 constant addresses ...
 
8778
+       (ix86_legitimate_address_p): ... here.
 
8779
+
 
8780
+2013-11-19  Richard Biener  <rguenther@suse.de>
 
8781
+
 
8782
+       Backport from mainline
 
8783
+       2013-11-07  Richard Biener  <rguenther@suse.de>
 
8784
+
 
8785
+       * tree-dfa.c (get_ref_base_and_extent): Fix casting.
 
8786
+
 
8787
+2013-11-19  Richard Biener  <rguenther@suse.de>
 
8788
+
 
8789
+       PR tree-optimization/57517
 
8790
+       * tree-predcom.c (combinable_refs_p): Verify the combination
 
8791
+       is always executed when the refs are.
 
8792
+
 
8793
+2013-11-19  Richard Biener  <rguenther@suse.de>
 
8794
+
 
8795
+       Backport from mainline
 
8796
+       2013-11-05  Richard Biener  <rguenther@suse.de>
 
8797
+
 
8798
+       PR middle-end/58941
 
8799
+       * tree-dfa.c (get_ref_base_and_extent): Merge common code
 
8800
+       in MEM_REF and TARGET_MEM_REF handling.  Make sure to
 
8801
+       process trailing array detection before diving into the
 
8802
+       view-converted object (and possibly apply some extra offset).
 
8803
+
 
8804
+2013-11-18  Richard Biener  <rguenther@suse.de>
 
8805
+
 
8806
+       Backport from mainline
 
8807
+       2013-10-21  Richard Biener  <rguenther@suse.de>
 
8808
+
 
8809
+       PR tree-optimization/58794
 
8810
+       * fold-const.c (operand_equal_p): Compare FIELD_DECL operand
 
8811
+       of COMPONENT_REFs with OEP_CONSTANT_ADDRESS_OF left in place.
 
8812
+
 
8813
+       2013-10-21  Richard Biener  <rguenther@suse.de>
 
8814
+
 
8815
+       PR middle-end/58742
 
8816
+       * fold-const.c (fold_binary_loc): Fold ((T) (X /[ex] C)) * C
 
8817
+       to (T) X for sign-changing conversions (or no conversion).
 
8818
+
 
8819
+       2013-11-06  Richard Biener  <rguenther@suse.de>
 
8820
+
 
8821
+       PR tree-optimization/58653
 
8822
+       * tree-predcom.c (ref_at_iteration): Rewrite to generate
 
8823
+       a MEM_REF.
 
8824
+       (prepare_initializers_chain): Adjust.
 
8825
+
 
8826
+       PR tree-optimization/59047
 
8827
+       * tree-predcom.c (ref_at_iteration): Handle bitfield accesses
 
8828
+       properly.
 
8829
+
 
8830
+       2013-10-15  Richard Biener  <rguenther@suse.de>
 
8831
+
 
8832
+       PR tree-optimization/58143
 
8833
+       * tree-ssa-loop-im.c (arith_code_with_undefined_signed_overflow):
 
8834
+       New function.
 
8835
+       (rewrite_to_defined_overflow): Likewise.
 
8836
+       (move_computations_dom_walker::before_dom): Rewrite stmts
 
8837
+       with undefined signed overflow that are not always executed
 
8838
+       into unsigned arithmetic.
 
8839
+
 
8840
+2013-11-14  Uros Bizjak  <ubizjak@gmail.com>
 
8841
+
 
8842
+       Backport from mainline
 
8843
+       2013-11-10  Uros Bizjak  <ubizjak@gmail.com>
 
8844
+
 
8845
+       * mode-switching.c (optimize_mode_switching): Mark block as
 
8846
+       nontransparent, if last_mode at block exit is different from no_mode.
 
8847
+
 
8848
+       Backport from mainline
 
8849
+       2013-11-06  Uros Bizjak  <ubizjak@gmail.com>
 
8850
+
 
8851
+       PR target/59021
 
8852
+       * config/i386/i386.c (ix86_avx_u128_mode_needed): Require
 
8853
+       AVX_U128_DIRTY mode for call_insn RTXes that use AVX256 registers.
 
8854
+       (ix86_avx_u128_mode_needed): Return AVX_U128_DIRTY mode for call_insn
 
8855
+       RTXes that return in AVX256 register.
 
8856
+
 
8857
+2013-11-14  Jakub Jelinek  <jakub@redhat.com>
 
8858
+           Uros Bizjak  <ubizjak@gmail.com>
 
8859
+
 
8860
+       PR target/59101
 
8861
+       * config/i386/i386.md (*anddi_2): Only allow CCZmode if
 
8862
+       operands[2] satisfies_constraint_Z that might have bit 31 set.
 
8863
+
 
8864
+2013-11-12  H.J. Lu  <hongjiu.lu@intel.com>
 
8865
+
 
8866
+       Backported from mainline
 
8867
+       2013-11-12  H.J. Lu  <hongjiu.lu@intel.com>
 
8868
+
 
8869
+       PR target/59088
 
8870
+       * config/i386/i386.c (initial_ix86_tune_features): Set
 
8871
+       X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL and
 
8872
+       X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL for m_HASWELL.
 
8873
+
 
8874
+2013-11-11  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
 
8875
+
 
8876
+       Backported from mainline
 
8877
+       2013-10-30  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
 
8878
+
 
8879
+       PR target/58854
 
8880
+       * config/arm/arm.c (arm_expand_epilogue_apcs_frame): Emit blockage
 
8881
+
 
8882
+2013-11-11  Jakub Jelinek  <jakub@redhat.com>
 
8883
+
 
8884
+       Backported from mainline
 
8885
+       2013-11-06  Jakub Jelinek  <jakub@redhat.com>
 
8886
+
 
8887
+       PR middle-end/58970
 
8888
+       * expr.c (get_bit_range): Handle *offset == NULL_TREE.
 
8889
+       (expand_assignment): If *bitpos is negative, set *offset
 
8890
+       and adjust *bitpos, so that it is not negative.
 
8891
+
 
8892
+       2013-11-05  Jakub Jelinek  <jakub@redhat.com>
 
8893
+
 
8894
+       PR rtl-optimization/58997
 
8895
+       * loop-iv.c (iv_subreg): For IV_UNKNOWN_EXTEND, expect
 
8896
+       get_iv_value to be in iv->mode rather than iv->extend_mode.
 
8897
+       (iv_extend): Likewise.  Otherwise, if iv->extend != extend,
 
8898
+       use lowpart_subreg on get_iv_value before calling simplify_gen_unary.
 
8899
+       * loop-unswitch.c (may_unswitch_on): Make sure op[i] is in the right
 
8900
+       mode.
 
8901
+
 
8902
+2013-11-10  Karlson2k  <k2k@narod.ru>
 
8903
+           Kai Tietz  <ktietz@redhat.com>
 
8904
+
 
8905
+       Merged from trunk
 
8906
+       PR plugins/52872
 
8907
+       * configure.ac: Adding for exported symbols check
 
8908
+       and for rdynamic-check executable-extension.
 
8909
+       * configure: Regenerated.
 
8910
+
 
8911
+2013-11-07  H.J. Lu  <hongjiu.lu@intel.com>
 
8912
+
 
8913
+       PR target/59034
 
8914
+       * config/i386/i386.md (push peepholer/splitter): Use Pmode
 
8915
+       with stack_pointer_rtx.
 
8916
+
 
8917
+2013-11-05  Uros Bizjak  <ubizjak@gmail.com>
 
8918
+
 
8919
+       * config/i386/t-rtems (MULTILIB_MATCHES): Fix option typos.
 
8920
+
 
8921
+2013-11-05  Jakub Jelinek  <jakub@redhat.com>
 
8922
+
 
8923
+       PR tree-optimization/58984
 
8924
+       * ipa-prop.c (ipa_load_from_parm_agg_1): Add SIZE_P argument,
 
8925
+       set *SIZE_P if non-NULL on success.
 
8926
+       (ipa_load_from_parm_agg, ipa_analyze_indirect_call_uses): Adjust
 
8927
+       callers.
 
8928
+       (ipcp_transform_function): Likewise.  Punt if size of access
 
8929
+       is different from TYPE_SIZE on v->value's type.
 
8930
+
 
8931
+2013-11-03  H.J. Lu  <hongjiu.lu@intel.com>
 
8932
+
 
8933
+       Backport from mainline
 
8934
+       2013-10-12  H.J. Lu  <hongjiu.lu@intel.com>
 
8935
+
 
8936
+       PR target/58690
 
8937
+       * config/i386/i386.c (ix86_copy_addr_to_reg): New function.
 
8938
+       (ix86_expand_movmem): Replace copy_addr_to_reg with
 
8939
+       ix86_copy_addr_to_reg.
 
8940
+       (ix86_expand_setmem): Likewise.
 
8941
+
 
8942
+2013-10-29  Uros Bizjak  <ubizjak@gmail.com>
 
8943
+
 
8944
+       Backport from mainline
 
8945
+       2013-08-08  Richard Sandiford  <rdsandiford@googlemail.com>
 
8946
+
 
8947
+       PR rtl-optimization/58079
 
8948
+       * combine.c (combine_simplify_rtx): Avoid using SUBST if
 
8949
+       simplify_comparison has widened a comparison with an integer.
 
8950
+
 
8951
+2013-10-29  Martin Jambor  <mjambor@suse.cz>
 
8952
+
 
8953
+       PR middle-end/58789
 
8954
+       Backport from mainline
 
8955
+       2013-05-09  Martin Jambor  <mjambor@suse.cz>
 
8956
+
 
8957
+       PR lto/57084
 
8958
+       * gimple-fold.c (canonicalize_constructor_val): Call
 
8959
+       cgraph_get_create_real_symbol_node instead of cgraph_get_create_node.
 
8960
+
 
8961
+       Backport from mainline
 
8962
+       2013-03-16  Jan Hubicka  <jh@suse.cz>
 
8963
+
 
8964
+       * cgraph.h (cgraph_get_create_real_symbol_node): Declare.
 
8965
+       * cgraph.c (cgraph_get_create_real_symbol_node): New function.
 
8966
+       * cgrpahbuild.c: Use cgraph_get_create_real_symbol_node instead
 
8967
+       of cgraph_get_create_node.
 
8968
+       * ipa-prop.c (ipa_make_edge_direct_to_target): Likewise.
 
8969
+
 
8970
+2013-10-28  Tom de Vries  <tom@codesourcery.com>
 
8971
+
 
8972
+       * cfgexpand.c (gimple_expand_cfg): Remove test for parm_birth_insn.
 
8973
+       Don't commit insertions after NOTE_INSN_FUNCTION_BEG.
 
8974
+
 
8975
+2013-10-26  Uros Bizjak  <ubizjak@gmail.com>
 
8976
+
 
8977
+       Backport from mainline
 
8978
+       2013-10-22  Uros Bizjak  <ubizjak@gmail.com>
 
8979
+
 
8980
+       PR target/58779
 
8981
+       * config/i386/i386.c (put_condition_code) <case GTU, case LEU>:
 
8982
+       Remove CCCmode handling.
 
8983
+       <case LTU>: Return 'c' suffix for CCCmode.
 
8984
+       <case GEU>: Return 'nc' suffix for CCCmode.
 
8985
+       (ix86_cc_mode) <case GTU, case LEU>: Do not generate overflow checks.
 
8986
+       * config/i386/i386.md (*sub<mode>3_cconly_overflow): Remove.
 
8987
+       (*sub<mode>3_cc_overflow): Ditto.
 
8988
+       (*subsi3_zext_cc_overflow): Ditto.
 
8989
+
 
8990
+2013-10-26  Uros Bizjak  <ubizjak@gmail.com>
 
8991
+
 
8992
+       Backport from mainline
 
8993
+       2013-10-19  Uros Bizjak  <ubizjak@gmail.com>
 
8994
+
 
8995
+       PR target/58792
 
8996
+       * config/i386/i386.c (ix86_function_value_regno): Add DX_REG,
 
8997
+       ST1_REG and XMM1_REG for 32bit and 64bit targets.  Also add DI_REG
 
8998
+       and SI_REG for 64bit SYSV ABI targets.
 
8999
+
 
9000
+2013-08-25  Richard Henderson  <rth@twiddle.net>
 
9001
+
 
9002
+       PR rtl/58542
 
9003
+       * optabs.c (maybe_emit_atomic_exchange): Use create_input_operand
 
9004
+       instead of create_convert_operand_to.
 
9005
+       (maybe_emit_sync_lock_test_and_set): Likewise.
 
9006
+       (expand_atomic_compare_and_swap): Likewise.
 
9007
+       (maybe_emit_compare_and_swap_exchange_loop): Don't convert_modes.
 
9008
+
 
9009
+2013-10-25  Eric Botcazou  <ebotcazou@adacore.com>
 
9010
+
 
9011
+       PR rtl-optimization/58831
 
9012
+       * alias.c (init_alias_analysis): At the beginning of each iteration, set
 
9013
+       the reg_seen[N] bit if static_reg_base_value[N] is non-null.
 
9014
+
 
9015
+2013-10-25  Eric Botcazou  <ebotcazou@adacore.com>
 
9016
+
 
9017
+       * recog.c (search_ofs): New static variable moved from...
 
9018
+       (peep2_find_free_register): ...here.
 
9019
+       (peephole2_optimize): Initialize it.
 
9020
+
 
9021
+2013-10-24  David Edelsohn  <dje.gcc@gmail.com>
 
9022
+
 
9023
+       Backport from mainline
 
9024
+       2013-10-23  David Edelsohn  <dje.gcc@gmail.com>
 
9025
+
 
9026
+       PR target/58838
 
9027
+       * config/rs6000/rs6000.md (mulsi3_internal1 and splitter): Add
 
9028
+       TARGET_32BIT final condition.
 
9029
+       (mulsi3_internal2 and splitter): Same.
 
9030
+
 
9031
+2013-10-23  Tom de Vries  <tom@codesourcery.com>
 
9032
+
 
9033
+       PR tree-optimization/58805
 
9034
+       * tree-ssa-tail-merge.c (stmt_local_def): Add gimple_vdef check.
 
9035
+
 
9036
+2013-10-23  Richard Biener  <rguenther@suse.de>
 
9037
+
 
9038
+       Backport from mainline
 
9039
+       2013-06-24  Richard Biener  <rguenther@suse.de>
 
9040
+
 
9041
+       PR tree-optimization/57488
 
9042
+       * tree-ssa-pre.c (insert): Clear NEW sets before each iteration.
 
9043
+
 
9044
+2013-10-16  Ganesh Gopalasubramanian  <Ganesh.Gopalasubramanian@amd.com>
 
9045
+
 
9046
+       Backport from mainline
 
9047
+       2013-10-16  Ganesh Gopalasubramanian
 
9048
+                   <Ganesh.Gopalasubramanian@amd.com>
 
9049
+
 
9050
+       * config/i386/i386.c (ix86_option_override_internal): Enable FMA4
 
9051
+       for AMD bdver3.
 
9052
+
 
9053
 2013-10-16  Release Manager
 
9054
 
 
9055
        * GCC 4.8.2 released.
 
9056
@@ -639,7 +2449,7 @@
 
9057
 2013-07-31  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
9058
 
 
9059
        Backport from mainline
 
9060
-        2013-03-27  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
9061
+       2013-03-27  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
9062
 
 
9063
        * config/s390/s390.h (TARGET_FLT_EVAL_METHOD): Define.
 
9064
 
 
9065
Index: gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c
 
9066
===================================================================
 
9067
--- a/src/gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c (.../tags/gcc_4_8_2_release)
 
9068
+++ b/src/gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c (.../branches/gcc-4_8-branch)
 
9069
@@ -0,0 +1,11 @@
 
9070
+/* { dg-do compile } */
 
9071
+/* { dg-require-effective-target arm_thumb1_ok } */
 
9072
+/* { dg-options "-mthumb -fpic -msingle-pic-base" } */
 
9073
+
 
9074
+int g_test;
 
9075
+
 
9076
+int
 
9077
+foo (int par)
 
9078
+{
 
9079
+    g_test = par;
 
9080
+}
 
9081
Index: gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c
 
9082
===================================================================
 
9083
--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c   (.../tags/gcc_4_8_2_release)
 
9084
+++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c   (.../branches/gcc-4_8-branch)
 
9085
@@ -0,0 +1,25 @@
 
9086
+/* Test the `vst1Q_laneu64' ARM Neon intrinsic.  */
 
9087
+
 
9088
+/* Detect ICE in the case of unaligned memory address.  */
 
9089
+
 
9090
+/* { dg-do compile } */
 
9091
+/* { dg-require-effective-target arm_neon_ok } */
 
9092
+/* { dg-add-options arm_neon } */
 
9093
+
 
9094
+#include "arm_neon.h"
 
9095
+
 
9096
+unsigned char dummy_store[1000];
 
9097
+
 
9098
+void
 
9099
+foo (char* addr)
 
9100
+{
 
9101
+  uint8x16_t vdata = vld1q_u8 (addr);
 
9102
+  vst1q_lane_u64 ((uint64_t*) &dummy_store, vreinterpretq_u64_u8 (vdata), 0);
 
9103
+}
 
9104
+
 
9105
+uint64_t
 
9106
+bar (uint64x2_t vdata)
 
9107
+{
 
9108
+  vdata = vld1q_lane_u64 ((uint64_t*) &dummy_store, vdata, 0);
 
9109
+  return vgetq_lane_u64 (vdata, 0);
 
9110
+}
 
9111
Index: gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c
 
9112
===================================================================
 
9113
--- a/src/gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c    (.../tags/gcc_4_8_2_release)
 
9114
+++ b/src/gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c    (.../branches/gcc-4_8-branch)
 
9115
@@ -0,0 +1,11 @@
 
9116
+/* { dg-do compile } */
 
9117
+/* { dg-require-effective-target arm_thumb1_ok } */
 
9118
+/* { dg-options "-mthumb -fpic -mpic-register=9" } */
 
9119
+
 
9120
+int g_test;
 
9121
+
 
9122
+int
 
9123
+foo (int par)
 
9124
+{
 
9125
+    g_test = par;
 
9126
+}
 
9127
Index: gcc/testsuite/gcc.target/arm/require-pic-register-loc.c
 
9128
===================================================================
 
9129
--- a/src/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c       (.../tags/gcc_4_8_2_release)
 
9130
+++ b/src/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c       (.../branches/gcc-4_8-branch)
 
9131
@@ -0,0 +1,29 @@
 
9132
+/* { dg-do compile } */
 
9133
+/* { dg-options "-g -fPIC" } */
 
9134
+
 
9135
+void *v;
 
9136
+void a (void *x) { }
 
9137
+void b (void) { }
 
9138
+                       /* line 7.  */
 
9139
+int                    /* line 8.  */
 
9140
+main (int argc)        /* line 9.  */
 
9141
+{                      /* line 10.  */
 
9142
+  if (argc == 12345)   /* line 11.  */
 
9143
+    {
 
9144
+      a (v);
 
9145
+      return 1;
 
9146
+    }
 
9147
+  b ();
 
9148
+
 
9149
+  return 0;
 
9150
+}
 
9151
+
 
9152
+/* { dg-final { scan-assembler-not "\.loc 1 7 0" } } */
 
9153
+/* { dg-final { scan-assembler-not "\.loc 1 8 0" } } */
 
9154
+/* { dg-final { scan-assembler-not "\.loc 1 9 0" } } */
 
9155
+
 
9156
+/* The loc at the start of the prologue.  */
 
9157
+/* { dg-final { scan-assembler-times "\.loc 1 10 0" 1 } } */
 
9158
+
 
9159
+/* The loc at the end of the prologue, with the first user line.  */
 
9160
+/* { dg-final { scan-assembler-times "\.loc 1 11 0" 1 } } */
 
9161
Index: gcc/testsuite/gcc.target/arm/vrinta-ce.c
 
9162
===================================================================
 
9163
--- a/src/gcc/testsuite/gcc.target/arm/vrinta-ce.c      (.../tags/gcc_4_8_2_release)
 
9164
+++ b/src/gcc/testsuite/gcc.target/arm/vrinta-ce.c      (.../branches/gcc-4_8-branch)
 
9165
@@ -0,0 +1,15 @@
 
9166
+/* { dg-do compile } */
 
9167
+/* { dg-require-effective-target arm_v8_vfp_ok } */
 
9168
+/* { dg-options "-O2 -marm -march=armv8-a" } */
 
9169
+/* { dg-add-options arm_v8_vfp } */
 
9170
+
 
9171
+double foo (double a)
 
9172
+{
 
9173
+  if (a > 3.0)
 
9174
+    return  __builtin_round (a);
 
9175
+
 
9176
+  return 0.0;
 
9177
+}
 
9178
+
 
9179
+/* { dg-final { scan-assembler-times "vrinta.f64\td\[0-9\]+" 1 } } */
 
9180
+
 
9181
Index: gcc/testsuite/gcc.target/arm/pr54300.C
 
9182
===================================================================
 
9183
--- a/src/gcc/testsuite/gcc.target/arm/pr54300.C        (.../tags/gcc_4_8_2_release)
 
9184
+++ b/src/gcc/testsuite/gcc.target/arm/pr54300.C        (.../branches/gcc-4_8-branch)
 
9185
@@ -0,0 +1,61 @@
 
9186
+/* { dg-do run } */
 
9187
+/* { dg-require-effective-target arm_neon } */
 
9188
+/* { dg-options "-O2" } */
 
9189
+/* { dg-add-options arm_neon } */
 
9190
+
 
9191
+#include <arm_neon.h>
 
9192
+#include <stdlib.h>
 
9193
+
 
9194
+struct __attribute__ ((aligned(8))) _v16u8_ {
 
9195
+  uint8x16_t val;
 
9196
+  _v16u8_( const int16x8_t &src) { val = vreinterpretq_u8_s16(src); }
 
9197
+  operator int16x8_t () const { return vreinterpretq_s16_u8(val); }
 
9198
+};
 
9199
+typedef struct _v16u8_ v16u8;
 
9200
+
 
9201
+struct __attribute__ ((aligned(4))) _v8u8_ {
 
9202
+  uint8x8_t val;
 
9203
+  _v8u8_( const uint8x8_t &src) { val = src; }
 
9204
+  operator int16x4_t () const { return vreinterpret_s16_u8(val); }
 
9205
+};
 
9206
+typedef struct _v8u8_ v8u8;
 
9207
+
 
9208
+typedef v16u8                v8i16;
 
9209
+typedef int32x4_t            v4i32;
 
9210
+typedef const short         cv1i16;
 
9211
+typedef const unsigned char cv1u8;
 
9212
+typedef const v8i16         cv8i16;
 
9213
+
 
9214
+static inline __attribute__((always_inline)) v8u8 zero_64(){ return vdup_n_u8( 0 ); }
 
9215
+
 
9216
+static inline __attribute__((always_inline)) v8i16 loadlo_8i16( cv8i16* p ){
 
9217
+  return vcombine_s16( vld1_s16( (cv1i16 *)p ), zero_64() );
 
9218
+}
 
9219
+static inline __attribute__((always_inline)) v8i16 _loadlo_8i16( cv8i16* p, int offset ){
 
9220
+  return loadlo_8i16( (cv8i16*)(&((cv1u8*)p)[offset]) );
 
9221
+}
 
9222
+
 
9223
+void __attribute__((noinline))
 
9224
+test(unsigned short *_Inp, int32_t *_Out,
 
9225
+     unsigned int s1v, unsigned int dv0,
 
9226
+     unsigned int smask_v)
 
9227
+{
 
9228
+  int32x4_t c = vdupq_n_s32(0);
 
9229
+
 
9230
+  for(unsigned int sv=0 ; sv!=dv0 ; sv=(sv+s1v)&smask_v )
 
9231
+    {
 
9232
+      int32x4_t s;
 
9233
+      s = vmovl_s16( vget_low_s16( _loadlo_8i16( (cv8i16*) _Inp, sv ) ) );
 
9234
+      c = vaddq_s32( c, s );
 
9235
+    }
 
9236
+  vst1q_s32( _Out, c );
 
9237
+}
 
9238
+
 
9239
+main()
 
9240
+{
 
9241
+  unsigned short a[4] = {1, 2, 3, 4};
 
9242
+  int32_t b[4] = {0, 0, 0, 0};
 
9243
+  test(a, b, 1, 1, ~0);
 
9244
+  if (b[0] != 1 || b[1] != 2 || b[2] != 3 || b[3] != 4)
 
9245
+    abort();
 
9246
+}
 
9247
Index: gcc/testsuite/gcc.target/arm/pr59826.c
 
9248
===================================================================
 
9249
--- a/src/gcc/testsuite/gcc.target/arm/pr59826.c        (.../tags/gcc_4_8_2_release)
 
9250
+++ b/src/gcc/testsuite/gcc.target/arm/pr59826.c        (.../branches/gcc-4_8-branch)
 
9251
@@ -0,0 +1,35 @@
 
9252
+/* { dg-do compile } */
 
9253
+/* { dg-options "-mthumb -mcpu=cortex-m4 -fprefetch-loop-arrays -O2" }  */
 
9254
+
 
9255
+typedef struct genxWriter_rec * genxWriter;
 
9256
+typedef unsigned char * utf8;
 
9257
+typedef const unsigned char * constUtf8;
 
9258
+
 
9259
+int genxScrubText(genxWriter w, constUtf8 in, utf8 out)
 
9260
+{
 
9261
+  int problems = 0;
 
9262
+  constUtf8 last = in;
 
9263
+
 
9264
+  while (*in)
 
9265
+  {
 
9266
+    int c = genxNextUnicodeChar(&in);
 
9267
+    if (c == -1)
 
9268
+    {
 
9269
+      problems++;
 
9270
+      last = in;
 
9271
+      continue;
 
9272
+    }
 
9273
+
 
9274
+    if (!isXMLChar(w, c))
 
9275
+    {
 
9276
+      problems++;
 
9277
+      last = in;
 
9278
+      continue;
 
9279
+    }
 
9280
+
 
9281
+    while (last < in)
 
9282
+      *out++ = *last++;
 
9283
+  }
 
9284
+  *out = 0;
 
9285
+  return problems;
 
9286
+}
 
9287
Index: gcc/testsuite/gcc.target/arm/pr57637.c
 
9288
===================================================================
 
9289
--- a/src/gcc/testsuite/gcc.target/arm/pr57637.c        (.../tags/gcc_4_8_2_release)
 
9290
+++ b/src/gcc/testsuite/gcc.target/arm/pr57637.c        (.../branches/gcc-4_8-branch)
 
9291
@@ -0,0 +1,206 @@
 
9292
+/* { dg-do run } */
 
9293
+/* { dg-options "-O2 -fno-inline" } */
 
9294
+
 
9295
+typedef struct _GtkCssStyleProperty GtkCssStyleProperty;
 
9296
+
 
9297
+struct _GtkCssStyleProperty
 
9298
+{
 
9299
+  int *initial_value;
 
9300
+  unsigned int id;
 
9301
+  unsigned int inherit :1;
 
9302
+  unsigned int animated :1;
 
9303
+  unsigned int affects_size :1;
 
9304
+  unsigned int affects_font :1;
 
9305
+
 
9306
+  int * parse_value;
 
9307
+  int * query_value;
 
9308
+  int * assign_value;
 
9309
+};
 
9310
+
 
9311
+void
 
9312
+g_assertion_message_expr (const char *domain,
 
9313
+                         const char *file,
 
9314
+                         int line,
 
9315
+                         const char *func,
 
9316
+                         const char *expr) __attribute__((__noreturn__));
 
9317
+
 
9318
+void
 
9319
+g_assertion_message_expr (const char *domain,
 
9320
+                         const char *file,
 
9321
+                         int line,
 
9322
+                         const char *func,
 
9323
+                         const char *expr)
 
9324
+{
 
9325
+  __builtin_abort ();
 
9326
+}
 
9327
+int
 
9328
+get_id (GtkCssStyleProperty *property)
 
9329
+{
 
9330
+  return 1;
 
9331
+}
 
9332
+int
 
9333
+_gtk_css_style_property_get_type ()
 
9334
+{
 
9335
+  return 1;
 
9336
+}
 
9337
+
 
9338
+GtkCssStyleProperty *
 
9339
+g_object_new (int object_type,
 
9340
+            const char *first_property_name,
 
9341
+            ...)
 
9342
+{
 
9343
+  return (GtkCssStyleProperty *) __builtin_malloc (sizeof (GtkCssStyleProperty));
 
9344
+}
 
9345
+
 
9346
+typedef enum {
 
9347
+  INHERIT = (1 << 0),
 
9348
+  ANIMATED = (1 << 1),
 
9349
+  RESIZE = (1 << 2),
 
9350
+  FONT = (1 << 3)
 
9351
+} GtkStylePropertyFlags;
 
9352
+
 
9353
+int t = 0;
 
9354
+void
 
9355
+gtk_css_style_property_register (const char * name,
 
9356
+                                int expected_id,
 
9357
+                                int value_type,
 
9358
+                                int flags,
 
9359
+                                int *parse_value,
 
9360
+                                int *query_value,
 
9361
+                                int *assign_value,
 
9362
+                                int *initial_value)
 
9363
+{
 
9364
+  GtkCssStyleProperty *node;
 
9365
+
 
9366
+  do
 
9367
+    {
 
9368
+      if (__builtin_expect (__extension__ (
 
9369
+                                          {
 
9370
+                                            int _g_boolean_var_;
 
9371
+                                            if (initial_value != ((void *)0))
 
9372
+                                              _g_boolean_var_ = 1;
 
9373
+                                            else
 
9374
+                                              _g_boolean_var_ = 0;
 
9375
+                                            _g_boolean_var_;
 
9376
+                                          }),
 
9377
+                           1))
 
9378
+       ;
 
9379
+      else
 
9380
+        g_assertion_message_expr ("Gtk",
 
9381
+                                 "gtkcssstylepropertyimpl.c",
 
9382
+                                 85,
 
9383
+                                 ((const char*) (__PRETTY_FUNCTION__)),
 
9384
+                                 "initial_value != NULL");
 
9385
+    } while (0);
 
9386
+
 
9387
+  do
 
9388
+    {
 
9389
+      if (__builtin_expect (__extension__ (
 
9390
+                                          {
 
9391
+                                            int _g_boolean_var_;
 
9392
+                                            if (parse_value != ((void *)0))
 
9393
+                                              _g_boolean_var_ = 1;
 
9394
+                                            else
 
9395
+                                              _g_boolean_var_ = 0;
 
9396
+                                            _g_boolean_var_;
 
9397
+                                          }),
 
9398
+                           1))
 
9399
+       ;
 
9400
+      else
 
9401
+       g_assertion_message_expr ("Gtk",
 
9402
+                                 "gtkcssstylepropertyimpl.c",
 
9403
+                                 86,
 
9404
+                                 ((const char*) (__PRETTY_FUNCTION__)),
 
9405
+                                 "parse_value != NULL");
 
9406
+    } while (0);
 
9407
+
 
9408
+  do
 
9409
+    {
 
9410
+      if (__builtin_expect (__extension__ (
 
9411
+                                          {
 
9412
+                                            int _g_boolean_var_;
 
9413
+                                            if (value_type == ((int) ((1) << (2)))
 
9414
+                                                || query_value != ((void *)0))
 
9415
+                                              _g_boolean_var_ = 1;
 
9416
+                                            else
 
9417
+                                              _g_boolean_var_ = 0;
 
9418
+                                            _g_boolean_var_;
 
9419
+                                          }),
 
9420
+                           1))
 
9421
+       ;
 
9422
+      else
 
9423
+       g_assertion_message_expr ("Gtk",
 
9424
+                                 "gtkcssstylepropertyimpl.c",
 
9425
+                                 87, ((const char*) (__PRETTY_FUNCTION__)),
 
9426
+                                 "value_type == NONE || query_value != NULL");
 
9427
+    } while (0);
 
9428
+
 
9429
+  /* FLAGS is changed in a cond_exec instruction with pr57637.  */
 
9430
+  if (flags  == 15)
 
9431
+    t = 15;
 
9432
+
 
9433
+  do
 
9434
+    {
 
9435
+      if (__builtin_expect (__extension__ (
 
9436
+                                          {
 
9437
+                                            int _g_boolean_var_;
 
9438
+                                            if (value_type == ((1) << (2))
 
9439
+                                                || assign_value != ((void *)0))
 
9440
+                                              _g_boolean_var_ = 1;
 
9441
+                                            else
 
9442
+                                              _g_boolean_var_ = 0;
 
9443
+                                            _g_boolean_var_;
 
9444
+                                          }),
 
9445
+                           1))
 
9446
+       ;
 
9447
+      else
 
9448
+       g_assertion_message_expr ("Gtk",
 
9449
+                                 "gtkcssstylepropertyimpl.c",
 
9450
+                                 88, ((const char*) (__PRETTY_FUNCTION__)),
 
9451
+                                 "value_type == NONE || assign_value != NULL");
 
9452
+    } while (0);
 
9453
+
 
9454
+  node = g_object_new ((_gtk_css_style_property_get_type ()),
 
9455
+                       "value-type", value_type,
 
9456
+                       "affects-size", (flags & RESIZE) ? (0) : (!(0)),
 
9457
+                       "affects-font", (flags & FONT) ? (!(0)) : (0),
 
9458
+                       "animated", (flags & ANIMATED) ? (!(0)) : (0),
 
9459
+                       "inherit", (flags & INHERIT) ? (!(0)) : (0),
 
9460
+                       "initial-value", initial_value,
 
9461
+                       "name", name,
 
9462
+                       ((void *)0));
 
9463
+
 
9464
+  node->parse_value = parse_value;
 
9465
+  node->query_value = query_value;
 
9466
+  node->assign_value = assign_value;
 
9467
+
 
9468
+  do
 
9469
+    {
 
9470
+      if (__builtin_expect (__extension__ (
 
9471
+                                          {
 
9472
+                                            int _g_boolean_var_;
 
9473
+                                            if (get_id (node) == expected_id)
 
9474
+                                              _g_boolean_var_ = 1;
 
9475
+                                            else
 
9476
+                                              _g_boolean_var_ = 0;
 
9477
+                                            _g_boolean_var_;
 
9478
+                                          }),
 
9479
+                           1))
 
9480
+       ;
 
9481
+      else
 
9482
+       g_assertion_message_expr ("Gtk",
 
9483
+                                 "gtkcssstylepropertyimpl.c",
 
9484
+                                 106,
 
9485
+                                 ((const char*) (__PRETTY_FUNCTION__)),
 
9486
+                                 "get_id (node) == expected_id");
 
9487
+    } while (0);
 
9488
+}
 
9489
+
 
9490
+int main ()
 
9491
+{
 
9492
+  gtk_css_style_property_register ("test", 1, 4, 15, &t, &t, &t, &t);
 
9493
+
 
9494
+  if (t != 15)
 
9495
+    __builtin_abort ();
 
9496
+  return 0;
 
9497
+}
 
9498
Index: gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c
 
9499
===================================================================
 
9500
--- a/src/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c   (.../tags/gcc_4_8_2_release)
 
9501
+++ b/src/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c   (.../branches/gcc-4_8-branch)
 
9502
@@ -0,0 +1,21 @@
 
9503
+/* Test accuracy of long double division (glibc bug 15396).  */
 
9504
+/* { dg-do run { target powerpc*-*-linux* powerpc*-*-darwin* powerpc*-*-aix* rs6000-*-* } } */
 
9505
+/* { dg-options "-mlong-double-128" } */
 
9506
+
 
9507
+extern void exit (int);
 
9508
+extern void abort (void);
 
9509
+
 
9510
+volatile long double a = 0x1p-1024L;
 
9511
+volatile long double b = 0x3p-53L;
 
9512
+volatile long double r;
 
9513
+volatile long double expected = 0x1.55555555555555555555555555p-973L;
 
9514
+
 
9515
+int
 
9516
+main (void)
 
9517
+{
 
9518
+  r = a / b;
 
9519
+  /* Allow error up to 2ulp.  */
 
9520
+  if (__builtin_fabsl (r - expected) > 0x1p-1073L)
 
9521
+    abort ();
 
9522
+  exit (0);
 
9523
+}
 
9524
Index: gcc/testsuite/gcc.target/microblaze/others/mem_reload.c
 
9525
===================================================================
 
9526
--- a/src/gcc/testsuite/gcc.target/microblaze/others/mem_reload.c       (.../tags/gcc_4_8_2_release)
 
9527
+++ b/src/gcc/testsuite/gcc.target/microblaze/others/mem_reload.c       (.../branches/gcc-4_8-branch)
 
9528
@@ -0,0 +1,74 @@
 
9529
+/* { dg-options "-O2 -fPIC" } */
 
9530
+
 
9531
+typedef struct test_struct
 
9532
+{
 
9533
+    unsigned long long h[8];
 
9534
+    unsigned long long Nl,Nh;
 
9535
+    union {
 
9536
+        unsigned long long d[16];
 
9537
+        unsigned char p[(16*8)];
 
9538
+    } u;
 
9539
+    unsigned int num,md_len;
 
9540
+} TEST_STRUCT;
 
9541
+
 
9542
+static const unsigned long long K512[12] = {
 
9543
+    0x428a2f98d728ae22,0x7137449123ef65cd,
 
9544
+    0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc,
 
9545
+    0x3956c25bf348b538,0x59f111f1b605d019,
 
9546
+    0x923f82a4af194f9b,0xab1c5ed5da6d8118,
 
9547
+    0xd807aa98a3030242,0x12835b0145706fbe,
 
9548
+    0x243185be4ee4b28c,0x550c7dc3d5ffb4e2};
 
9549
+
 
9550
+#define ROTR(x,s)   (((x)>>s) | (x)<<(64-s))
 
9551
+#define Sigma0(x)   (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
 
9552
+#define Sigma1(x)   (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41))
 
9553
+#define Ch(x,y,z)   (((x) & (y)) ^ ((~(x)) & (z)))
 
9554
+#define Maj(x,y,z)  (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
 
9555
+
 
9556
+#define ROUND_00_15(i,a,b,c,d,e,f,g,h)  do {    \
 
9557
+    T1 += h + Sigma1(e) + Ch(e,f,g) + K512[i];  \
 
9558
+    h = Sigma0(a) + Maj(a,b,c);         \
 
9559
+    d += T1;    h += T1;        } while (0)
 
9560
+
 
9561
+#define ROUND_16_80(i,a,b,c,d,e,f,g,h,X)    do {    \
 
9562
+    T1 = X[(i)&0x0f] += s0 + s1 + X[(i+9)&0x0f];    \
 
9563
+    ROUND_00_15(i,a,b,c,d,e,f,g,h);     } while (0)
 
9564
+
 
9565
+static void testfunc1 (TEST_STRUCT *ctx, const void *in, unsigned int num)
 
9566
+{
 
9567
+    const unsigned long long *W=in;
 
9568
+    unsigned long long  a,b,c,d,e,f,g,h,s0,s1,T1;
 
9569
+    unsigned long long  X[16];
 
9570
+    int i;
 
9571
+
 
9572
+    while (num--) {
 
9573
+
 
9574
+        T1 = X[0] = W[0];   ROUND_00_15(0,a,b,c,d,e,f,g,h);
 
9575
+        T1 = X[1] = W[1];   ROUND_00_15(1,h,a,b,c,d,e,f,g);
 
9576
+        T1 = X[2] = W[2];   ROUND_00_15(2,g,h,a,b,c,d,e,f);
 
9577
+        T1 = X[3] = W[3];   ROUND_00_15(3,f,g,h,a,b,c,d,e);
 
9578
+        T1 = X[4] = W[4];   ROUND_00_15(4,e,f,g,h,a,b,c,d);
 
9579
+        T1 = X[5] = W[5];   ROUND_00_15(5,d,e,f,g,h,a,b,c);
 
9580
+        T1 = X[6] = W[6];   ROUND_00_15(6,c,d,e,f,g,h,a,b);
 
9581
+        T1 = X[7] = W[7];   ROUND_00_15(7,b,c,d,e,f,g,h,a);
 
9582
+        T1 = X[8] = W[8];   ROUND_00_15(8,a,b,c,d,e,f,g,h);
 
9583
+        T1 = X[9] = W[9];   ROUND_00_15(9,h,a,b,c,d,e,f,g);
 
9584
+
 
9585
+        for (i=16;i<80;i+=8)
 
9586
+        {
 
9587
+            ROUND_16_80(i+0,a,b,c,d,e,f,g,h,X);
 
9588
+        }
 
9589
+
 
9590
+        ctx->h[4] += e; ctx->h[5] += f; ctx->h[6] += g; ctx->h[7] += h;
 
9591
+    }
 
9592
+}
 
9593
+
 
9594
+int testfunc2 (TEST_STRUCT *c, const void *_data, unsigned int len)
 
9595
+{
 
9596
+    const unsigned char *data=(const unsigned char *)_data;
 
9597
+
 
9598
+    unsigned char *p=(unsigned char *)c->u.p;
 
9599
+
 
9600
+    testfunc1 (c,p,0);
 
9601
+    testfunc1 (c,data,len/sizeof(c->u));
 
9602
+}
 
9603
Index: gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c
 
9604
===================================================================
 
9605
--- a/src/gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c     (.../tags/gcc_4_8_2_release)
 
9606
+++ b/src/gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c     (.../branches/gcc-4_8-branch)
 
9607
@@ -0,0 +1,8 @@
 
9608
+/* { dg-do compile } */
 
9609
+
 
9610
+void trap ()
 
9611
+{
 
9612
+  __builtin_trap ();
 
9613
+}
 
9614
+
 
9615
+/* { dg-final { scan-assembler "brki\tr0,-1" } } */
 
9616
\ No newline at end of file
 
9617
Index: gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c
 
9618
===================================================================
 
9619
--- a/src/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c       (.../tags/gcc_4_8_2_release)
 
9620
+++ b/src/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c       (.../branches/gcc-4_8-branch)
 
9621
@@ -0,0 +1,9 @@
 
9622
+/* { dg-options "-O3 -mcpu=v6.00.a -mhard-float" } */
 
9623
+
 
9624
+void float_func(float f1, float f2, float f3)
 
9625
+{
 
9626
+  /* { 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]" } } */
 
9627
+  /* { 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]" } } */
 
9628
+    if(f1==f2 && f1<=f3)
 
9629
+        print ("f1 eq f2 && f1 le f3");
 
9630
+}
 
9631
Index: gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c
 
9632
===================================================================
 
9633
--- a/src/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c  (.../tags/gcc_4_8_2_release)
 
9634
+++ b/src/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c  (.../branches/gcc-4_8-branch)
 
9635
@@ -1,8 +1,14 @@
 
9636
 /* { dg-do compile } */
 
9637
 /* { dg-options "-O2" } */
 
9638
 
 
9639
-#include "../../../config/aarch64/arm_neon.h"
 
9640
+#include <arm_neon.h>
 
9641
 
 
9642
+/* Used to force a variable to a SIMD register.  */
 
9643
+#define force_simd(V1)   asm volatile ("mov %d0, %1.d[0]"      \
 
9644
+          : "=w"(V1)                                           \
 
9645
+          : "w"(V1)                                            \
 
9646
+          : /* No clobbers */);
 
9647
+
 
9648
 /* { dg-final { scan-assembler-times "\\tadd\\tx\[0-9\]+" 2 } } */
 
9649
 
 
9650
 uint64x1_t
 
9651
@@ -31,7 +37,12 @@
 
9652
 uint64x1_t
 
9653
 test_vceqd_s64 (int64x1_t a, int64x1_t b)
 
9654
 {
 
9655
-  return vceqd_s64 (a, b);
 
9656
+  uint64x1_t res;
 
9657
+  force_simd (a);
 
9658
+  force_simd (b);
 
9659
+  res = vceqd_s64 (a, b);
 
9660
+  force_simd (res);
 
9661
+  return res;
 
9662
 }
 
9663
 
 
9664
 /* { dg-final { scan-assembler-times "\\tcmeq\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
 
9665
@@ -39,7 +50,11 @@
 
9666
 uint64x1_t
 
9667
 test_vceqzd_s64 (int64x1_t a)
 
9668
 {
 
9669
-  return vceqzd_s64 (a);
 
9670
+  uint64x1_t res;
 
9671
+  force_simd (a);
 
9672
+  res = vceqzd_s64 (a);
 
9673
+  force_simd (res);
 
9674
+  return res;
 
9675
 }
 
9676
 
 
9677
 /* { dg-final { scan-assembler-times "\\tcmge\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
 
9678
@@ -47,21 +62,36 @@
 
9679
 uint64x1_t
 
9680
 test_vcged_s64 (int64x1_t a, int64x1_t b)
 
9681
 {
 
9682
-  return vcged_s64 (a, b);
 
9683
+  uint64x1_t res;
 
9684
+  force_simd (a);
 
9685
+  force_simd (b);
 
9686
+  res = vcged_s64 (a, b);
 
9687
+  force_simd (res);
 
9688
+  return res;
 
9689
 }
 
9690
 
 
9691
 uint64x1_t
 
9692
 test_vcled_s64 (int64x1_t a, int64x1_t b)
 
9693
 {
 
9694
-  return vcled_s64 (a, b);
 
9695
+  uint64x1_t res;
 
9696
+  force_simd (a);
 
9697
+  force_simd (b);
 
9698
+  res = vcled_s64 (a, b);
 
9699
+  force_simd (res);
 
9700
+  return res;
 
9701
 }
 
9702
 
 
9703
-/* { dg-final { scan-assembler-times "\\tcmge\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
 
9704
+/* Idiom recognition will cause this testcase not to generate
 
9705
+   the expected cmge instruction, so do not check for it.  */
 
9706
 
 
9707
 uint64x1_t
 
9708
 test_vcgezd_s64 (int64x1_t a)
 
9709
 {
 
9710
-  return vcgezd_s64 (a);
 
9711
+  uint64x1_t res;
 
9712
+  force_simd (a);
 
9713
+  res = vcgezd_s64 (a);
 
9714
+  force_simd (res);
 
9715
+  return res;
 
9716
 }
 
9717
 
 
9718
 /* { dg-final { scan-assembler-times "\\tcmhs\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
 
9719
@@ -69,7 +99,12 @@
 
9720
 uint64x1_t
 
9721
 test_vcged_u64 (uint64x1_t a, uint64x1_t b)
 
9722
 {
 
9723
-  return vcged_u64 (a, b);
 
9724
+  uint64x1_t res;
 
9725
+  force_simd (a);
 
9726
+  force_simd (b);
 
9727
+  res = vcged_u64 (a, b);
 
9728
+  force_simd (res);
 
9729
+  return res;
 
9730
 }
 
9731
 
 
9732
 /* { dg-final { scan-assembler-times "\\tcmgt\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
 
9733
@@ -77,13 +112,23 @@
 
9734
 uint64x1_t
 
9735
 test_vcgtd_s64 (int64x1_t a, int64x1_t b)
 
9736
 {
 
9737
-  return vcgtd_s64 (a, b);
 
9738
+  uint64x1_t res;
 
9739
+  force_simd (a);
 
9740
+  force_simd (b);
 
9741
+  res = vcgtd_s64 (a, b);
 
9742
+  force_simd (res);
 
9743
+  return res;
 
9744
 }
 
9745
 
 
9746
 uint64x1_t
 
9747
 test_vcltd_s64 (int64x1_t a, int64x1_t b)
 
9748
 {
 
9749
-  return vcltd_s64 (a, b);
 
9750
+  uint64x1_t res;
 
9751
+  force_simd (a);
 
9752
+  force_simd (b);
 
9753
+  res = vcltd_s64 (a, b);
 
9754
+  force_simd (res);
 
9755
+  return res;
 
9756
 }
 
9757
 
 
9758
 /* { dg-final { scan-assembler-times "\\tcmgt\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
 
9759
@@ -91,7 +136,11 @@
 
9760
 uint64x1_t
 
9761
 test_vcgtzd_s64 (int64x1_t a)
 
9762
 {
 
9763
-  return vcgtzd_s64 (a);
 
9764
+  uint64x1_t res;
 
9765
+  force_simd (a);
 
9766
+  res = vcgtzd_s64 (a);
 
9767
+  force_simd (res);
 
9768
+  return res;
 
9769
 }
 
9770
 
 
9771
 /* { dg-final { scan-assembler-times "\\tcmhi\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
 
9772
@@ -99,7 +148,12 @@
 
9773
 uint64x1_t
 
9774
 test_vcgtd_u64 (uint64x1_t a, uint64x1_t b)
 
9775
 {
 
9776
-  return vcgtd_u64 (a, b);
 
9777
+  uint64x1_t res;
 
9778
+  force_simd (a);
 
9779
+  force_simd (b);
 
9780
+  res = vcgtd_u64 (a, b);
 
9781
+  force_simd (res);
 
9782
+  return res;
 
9783
 }
 
9784
 
 
9785
 /* { dg-final { scan-assembler-times "\\tcmle\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
 
9786
@@ -107,15 +161,24 @@
 
9787
 uint64x1_t
 
9788
 test_vclezd_s64 (int64x1_t a)
 
9789
 {
 
9790
-  return vclezd_s64 (a);
 
9791
+  uint64x1_t res;
 
9792
+  force_simd (a);
 
9793
+  res = vclezd_s64 (a);
 
9794
+  force_simd (res);
 
9795
+  return res;
 
9796
 }
 
9797
 
 
9798
-/* { dg-final { scan-assembler-times "\\tcmlt\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
 
9799
+/* Idiom recognition will cause this testcase not to generate
 
9800
+   the expected cmlt instruction, so do not check for it.  */
 
9801
 
 
9802
 uint64x1_t
 
9803
 test_vcltzd_s64 (int64x1_t a)
 
9804
 {
 
9805
-  return vcltzd_s64 (a);
 
9806
+  uint64x1_t res;
 
9807
+  force_simd (a);
 
9808
+  res = vcltzd_s64 (a);
 
9809
+  force_simd (res);
 
9810
+  return res;
 
9811
 }
 
9812
 
 
9813
 /* { dg-final { scan-assembler-times "\\tdup\\tb\[0-9\]+, v\[0-9\]+\.b" 2 } } */
 
9814
@@ -179,13 +242,23 @@
 
9815
 int64x1_t
 
9816
 test_vtst_s64 (int64x1_t a, int64x1_t b)
 
9817
 {
 
9818
-  return vtstd_s64 (a, b);
 
9819
+  uint64x1_t res;
 
9820
+  force_simd (a);
 
9821
+  force_simd (b);
 
9822
+  res = vtstd_s64 (a, b);
 
9823
+  force_simd (res);
 
9824
+  return res;
 
9825
 }
 
9826
 
 
9827
 uint64x1_t
 
9828
 test_vtst_u64 (uint64x1_t a, uint64x1_t b)
 
9829
 {
 
9830
-  return vtstd_u64 (a, b);
 
9831
+  uint64x1_t res;
 
9832
+  force_simd (a);
 
9833
+  force_simd (b);
 
9834
+  res = vtstd_s64 (a, b);
 
9835
+  force_simd (res);
 
9836
+  return res;
 
9837
 }
 
9838
 
 
9839
 /* { dg-final { scan-assembler-times "\\taddp\\td\[0-9\]+, v\[0-9\]+\.2d" 1 } } */
 
9840
@@ -722,8 +795,11 @@
 
9841
   return vrshld_u64 (a, b);
 
9842
 }
 
9843
 
 
9844
-/* { dg-final { scan-assembler-times "\\tasr\\tx\[0-9\]+" 1 } } */
 
9845
+/* Other intrinsics can generate an asr instruction (vcltzd, vcgezd),
 
9846
+   so we cannot check scan-assembler-times.  */
 
9847
 
 
9848
+/* { dg-final { scan-assembler "\\tasr\\tx\[0-9\]+" } } */
 
9849
+
 
9850
 int64x1_t
 
9851
 test_vshrd_n_s64 (int64x1_t a)
 
9852
 {
 
9853
Index: gcc/testsuite/gcc.target/i386/pr59405.c
 
9854
===================================================================
 
9855
--- a/src/gcc/testsuite/gcc.target/i386/pr59405.c       (.../tags/gcc_4_8_2_release)
 
9856
+++ b/src/gcc/testsuite/gcc.target/i386/pr59405.c       (.../branches/gcc-4_8-branch)
 
9857
@@ -0,0 +1,24 @@
 
9858
+/* { dg-do run } */
 
9859
+/* { dg-options "-mmmx -mfpmath=387" } */
 
9860
+
 
9861
+#include "mmx-check.h"
 
9862
+
 
9863
+#include <mmintrin.h>
 
9864
+
 
9865
+typedef float float32x2_t __attribute__ ((vector_size (8)));
 
9866
+
 
9867
+float
 
9868
+foo32x2_be (float32x2_t x)
 
9869
+{
 
9870
+  _mm_empty ();
 
9871
+  return x[1];
 
9872
+}
 
9873
+
 
9874
+static void
 
9875
+mmx_test (void)
 
9876
+{
 
9877
+  float32x2_t b = { 0.0f, 1.0f };
 
9878
+
 
9879
+  if (foo32x2_be (b) != 1.0f)
 
9880
+    abort ();
 
9881
+}
 
9882
Index: gcc/testsuite/gcc.target/i386/pr59794-5.c
 
9883
===================================================================
 
9884
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-5.c     (.../tags/gcc_4_8_2_release)
 
9885
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-5.c     (.../branches/gcc-4_8-branch)
 
9886
@@ -0,0 +1,14 @@
 
9887
+/* PR target/59794 */
 
9888
+/* { dg-do compile { target { ia32 } } } */
 
9889
+/* { dg-options "-O2 -mno-sse" } */
 
9890
+/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
 
9891
+
 
9892
+typedef int __v4si __attribute__ ((__vector_size__ (16)));
 
9893
+
 
9894
+extern __v4si x;
 
9895
+
 
9896
+__v4si
 
9897
+foo (void)
 
9898
+{ /* { dg-warning "SSE vector return without SSE enabled changes the ABI" } */
 
9899
+  return x;
 
9900
+}
 
9901
Index: gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c
 
9902
===================================================================
 
9903
--- a/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c     (.../tags/gcc_4_8_2_release)
 
9904
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c     (.../branches/gcc-4_8-branch)
 
9905
@@ -1,5 +1,5 @@
 
9906
 /* { dg-do compile { target lp64 } } */
 
9907
-/* { dg-options "-O2 -mavx -mabi=ms -mtune=generic -dp" } */
 
9908
+/* { dg-options "-O2 -mavx -mabi=ms -maccumulate-outgoing-args -dp" } */
 
9909
 
 
9910
 typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));
 
9911
 
 
9912
Index: gcc/testsuite/gcc.target/i386/pr54694.c
 
9913
===================================================================
 
9914
--- a/src/gcc/testsuite/gcc.target/i386/pr54694.c       (.../tags/gcc_4_8_2_release)
 
9915
+++ b/src/gcc/testsuite/gcc.target/i386/pr54694.c       (.../branches/gcc-4_8-branch)
 
9916
@@ -0,0 +1,11 @@
 
9917
+/* { dg-do compile } */
 
9918
+/* { dg-options "-O" } */
 
9919
+
 
9920
+register void *hfp __asm__("%ebp");    /* { dg-message "note: for" } */
 
9921
+
 
9922
+extern void g(void *);
 
9923
+
 
9924
+void f(int x)                  /* { dg-error "frame pointer required" } */
 
9925
+{
 
9926
+  g(__builtin_alloca(x));
 
9927
+}
 
9928
Index: gcc/testsuite/gcc.target/i386/pr59470.c
 
9929
===================================================================
 
9930
--- a/src/gcc/testsuite/gcc.target/i386/pr59470.c       (.../tags/gcc_4_8_2_release)
 
9931
+++ b/src/gcc/testsuite/gcc.target/i386/pr59470.c       (.../branches/gcc-4_8-branch)
 
9932
@@ -0,0 +1,17 @@
 
9933
+/* PR middle-end/58956 */
 
9934
+/* PR middle-end/59470 */
 
9935
+/* { dg-do run } */
 
9936
+/* { dg-options "-O2" } */
 
9937
+
 
9938
+int a, b, d[1024];
 
9939
+
 
9940
+int
 
9941
+main ()
 
9942
+{
 
9943
+  int c = a;
 
9944
+  asm ("{movl $6, (%2); movl $1, %0|mov dword ptr [%2], 6; mov %0, 1}"
 
9945
+       : "=r" (d[c]) : "rm" (b), "r" (&a) : "memory");
 
9946
+  if (d[0] != 1 || d[6] != 0)
 
9947
+    __builtin_abort ();
 
9948
+  return 0;
 
9949
+}
 
9950
Index: gcc/testsuite/gcc.target/i386/pr59034-1.c
 
9951
===================================================================
 
9952
--- a/src/gcc/testsuite/gcc.target/i386/pr59034-1.c     (.../tags/gcc_4_8_2_release)
 
9953
+++ b/src/gcc/testsuite/gcc.target/i386/pr59034-1.c     (.../branches/gcc-4_8-branch)
 
9954
@@ -0,0 +1,10 @@
 
9955
+/* { dg-do compile { target { ! { ia32 } } } } */
 
9956
+/* { dg-require-effective-target maybe_x32 } */
 
9957
+/* { dg-options "-O -mx32 -mtune=corei7 -maddress-mode=short" } */
 
9958
+
 
9959
+extern int foo(int, ...);
 
9960
+int bar(void) {
 
9961
+  long double l = 1.2345E6;
 
9962
+  foo(0, l);
 
9963
+  return 0;
 
9964
+}
 
9965
Index: gcc/testsuite/gcc.target/i386/pr58690.c
 
9966
===================================================================
 
9967
--- a/src/gcc/testsuite/gcc.target/i386/pr58690.c       (.../tags/gcc_4_8_2_release)
 
9968
+++ b/src/gcc/testsuite/gcc.target/i386/pr58690.c       (.../branches/gcc-4_8-branch)
 
9969
@@ -0,0 +1,14 @@
 
9970
+/* { dg-do compile { target { ! { ia32 } } } } */
 
9971
+/* { dg-require-effective-target maybe_x32 } */
 
9972
+/* { dg-options "-O2 -mx32 -maddress-mode=short" } */
 
9973
+
 
9974
+struct gomp_thread
 
9975
+{
 
9976
+  char foo[41];
 
9977
+};
 
9978
+extern __thread struct gomp_thread gomp_tls_data;
 
9979
+void
 
9980
+foo (void)
 
9981
+{
 
9982
+  __builtin_memset (&gomp_tls_data, '\0', sizeof (gomp_tls_data));
 
9983
+}
 
9984
Index: gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c
 
9985
===================================================================
 
9986
--- a/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c     (.../tags/gcc_4_8_2_release)
 
9987
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c     (.../branches/gcc-4_8-branch)
 
9988
@@ -15,7 +15,7 @@
 
9989
 avx_test (void)
 
9990
 {
 
9991
   union256d u;
 
9992
-  double e [4] __attribute__ ((aligned (8))) = {0.0};
 
9993
+  double e [4] __attribute__ ((aligned (32))) = {0.0};
 
9994
 
 
9995
   u.x = _mm256_set_pd (39578.467285, 7856.342941, 85632.783567, 47563.234215);
 
9996
 
 
9997
Index: gcc/testsuite/gcc.target/i386/pr9771-1.c
 
9998
===================================================================
 
9999
--- a/src/gcc/testsuite/gcc.target/i386/pr9771-1.c      (.../tags/gcc_4_8_2_release)
 
10000
+++ b/src/gcc/testsuite/gcc.target/i386/pr9771-1.c      (.../branches/gcc-4_8-branch)
 
10001
@@ -45,7 +45,17 @@
 
10002
   exit(0);
 
10003
 }
 
10004
 
 
10005
-int main()
 
10006
+/* main usually performs dynamic realignment of the stack in case
 
10007
+   _start would fail to properly align the stack, but for dynamic
 
10008
+   stack realignment we need frame pointer which is incompatible
 
10009
+   with -ffixed-ebp and the global register var.  So, cheat here
 
10010
+   and hide from the compiler that main is really main.  */
 
10011
+#define ASMNAME(cname)  ASMNAME2 (__USER_LABEL_PREFIX__, cname)
 
10012
+#define ASMNAME2(prefix, cname) STRING (prefix) cname
 
10013
+#define STRING(x)    #x
 
10014
+int real_main() __asm (ASMNAME ("main"));
 
10015
+
 
10016
+int real_main()
 
10017
 {
 
10018
   test();
 
10019
   return 0;
 
10020
Index: gcc/testsuite/gcc.target/i386/pr60700.c
 
10021
===================================================================
 
10022
--- a/src/gcc/testsuite/gcc.target/i386/pr60700.c       (.../tags/gcc_4_8_2_release)
 
10023
+++ b/src/gcc/testsuite/gcc.target/i386/pr60700.c       (.../branches/gcc-4_8-branch)
 
10024
@@ -0,0 +1,59 @@
 
10025
+/* PR rtl-optimization/60700 */
 
10026
+/* { dg-do run { target ia32 } } */
 
10027
+/* { dg-options "-O3 -march=i686" } */
 
10028
+
 
10029
+int
 
10030
+__attribute__((noinline))
 
10031
+foo (void)
 
10032
+{
 
10033
+  return 0;
 
10034
+}
 
10035
+
 
10036
+void *g = (void *)1;
 
10037
+
 
10038
+struct st {
 
10039
+  char data[36]; /* must be greater than 32.  */
 
10040
+};
 
10041
+
 
10042
+int
 
10043
+__attribute__((noinline))
 
10044
+repro(struct st **out)
 
10045
+{
 
10046
+  int status = 0;
 
10047
+
 
10048
+  *out = 0;
 
10049
+
 
10050
+  status = foo();
 
10051
+  if (status != 0) {
 
10052
+    return status;
 
10053
+  }
 
10054
+
 
10055
+  if (0 == g) {
 
10056
+    status = 999;
 
10057
+    return status;
 
10058
+  }
 
10059
+
 
10060
+  *out = (struct st *)__builtin_malloc(sizeof(struct st));
 
10061
+  if (0 == *out) {
 
10062
+    status = 42;
 
10063
+    return status;
 
10064
+  }
 
10065
+
 
10066
+  __builtin_memset(*out, 0, sizeof(struct st));
 
10067
+
 
10068
+  return status;
 
10069
+}
 
10070
+
 
10071
+int
 
10072
+main ()
 
10073
+{
 
10074
+  struct st *p;
 
10075
+  int ret = repro (&p);
 
10076
+  unsigned int i;
 
10077
+
 
10078
+  for (i = 0; i < sizeof (p->data)/sizeof (p->data[0]); i++)
 
10079
+    if (p->data[i] != 0)
 
10080
+      __builtin_abort ();
 
10081
+
 
10082
+  return ret;
 
10083
+}
 
10084
Index: gcc/testsuite/gcc.target/i386/pr59794-2.c
 
10085
===================================================================
 
10086
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-2.c     (.../tags/gcc_4_8_2_release)
 
10087
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-2.c     (.../branches/gcc-4_8-branch)
 
10088
@@ -0,0 +1,15 @@
 
10089
+/* PR target/59794 */
 
10090
+/* { dg-prune-output "ABI for passing parameters" } */
 
10091
+/* { dg-options "-O2 -mno-sse" } */
 
10092
+/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
 
10093
+
 
10094
+typedef double __v2df __attribute__ ((__vector_size__ (16)));
 
10095
+
 
10096
+extern __v2df x;
 
10097
+
 
10098
+extern void bar (__v2df);
 
10099
+void
 
10100
+foo (void)
 
10101
+{
 
10102
+  bar (x); /* { dg-message "warning: SSE vector argument without SSE enabled changes the ABI" } */
 
10103
+}
 
10104
Index: gcc/testsuite/gcc.target/i386/pr57003.c
 
10105
===================================================================
 
10106
--- a/src/gcc/testsuite/gcc.target/i386/pr57003.c       (.../tags/gcc_4_8_2_release)
 
10107
+++ b/src/gcc/testsuite/gcc.target/i386/pr57003.c       (.../branches/gcc-4_8-branch)
 
10108
@@ -1,6 +1,6 @@
 
10109
 /* PR rtl-optimization/57003 */
 
10110
 /* { dg-do run } */
 
10111
-/* { dg-options "-O2" } */
 
10112
+/* { dg-options "-O2 -maccumulate-outgoing-args" } */
 
10113
 
 
10114
 #define N 2001
 
10115
 unsigned short *b, *c, *d;
 
10116
Index: gcc/testsuite/gcc.target/i386/pr59929.c
 
10117
===================================================================
 
10118
--- a/src/gcc/testsuite/gcc.target/i386/pr59929.c       (.../tags/gcc_4_8_2_release)
 
10119
+++ b/src/gcc/testsuite/gcc.target/i386/pr59929.c       (.../branches/gcc-4_8-branch)
 
10120
@@ -0,0 +1,55 @@
 
10121
+/* { dg-do run } */
 
10122
+/* { dg-options "-O0 -mno-accumulate-outgoing-args" } */
 
10123
+/* { dg-options "-O0 -mno-accumulate-outgoing-args -mx32 -maddress-mode=short" { target x32 } } */
 
10124
+
 
10125
+void
 
10126
+__attribute__ ((noinline))
 
10127
+test (float x1, float x2, float x3, float x4, float x5, float x6,
 
10128
+      float x7, float x8, float x9, float x10, float x11, float x12,
 
10129
+      float x13, float x14, float x15, float x16)
 
10130
+{
 
10131
+  if (x1 != 91
 
10132
+      || x2 != 92
 
10133
+      || x3 != 93
 
10134
+      || x4 != 94
 
10135
+      || x5 != 95
 
10136
+      || x6 != 96
 
10137
+      || x7 != 97
 
10138
+      || x8 != 98
 
10139
+      || x9 != 99
 
10140
+      || x10 != 100
 
10141
+      || x11 != 101
 
10142
+      || x12 != 102
 
10143
+      || x13 != 103
 
10144
+      || x14 != 104
 
10145
+      || x15 != 105
 
10146
+      || x16 != 106)
 
10147
+    __builtin_abort ();
 
10148
+}
 
10149
+
 
10150
+float x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13,
 
10151
+      x14, x15, x16;
 
10152
+
 
10153
+int
 
10154
+main ()
 
10155
+{
 
10156
+  x1 = 91;
 
10157
+  x2 = 92;
 
10158
+  x3 = 93;
 
10159
+  x4 = 94;
 
10160
+  x5 = 95;
 
10161
+  x6 = 96;
 
10162
+  x7 = 97;
 
10163
+  x8 = 98;
 
10164
+  x9 = 99;
 
10165
+  x10 = 100;
 
10166
+  x11 = 101;
 
10167
+  x12 = 102;
 
10168
+  x13 = 103;
 
10169
+  x14 = 104;
 
10170
+  x15 = 105;
 
10171
+  x16 = 106;
 
10172
+  test (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13,
 
10173
+       x14, x15, x16);
 
10174
+  return 0;
 
10175
+}
 
10176
Index: gcc/testsuite/gcc.target/i386/pr59794-6.c
 
10177
===================================================================
 
10178
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-6.c     (.../tags/gcc_4_8_2_release)
 
10179
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-6.c     (.../branches/gcc-4_8-branch)
 
10180
@@ -0,0 +1,14 @@
 
10181
+/* PR target/59794 */
 
10182
+/* { dg-do compile { target { ! ia32 } } } */
 
10183
+/* { dg-options "-O2 -mno-sse" } */
 
10184
+/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
 
10185
+
 
10186
+typedef int __v4si __attribute__ ((__vector_size__ (16)));
 
10187
+
 
10188
+extern __v4si x;
 
10189
+
 
10190
+__v4si
 
10191
+foo (void)
 
10192
+{ /* { dg-error "SSE register return with SSE disabled" } */
 
10193
+  return x;
 
10194
+}
 
10195
Index: gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c
 
10196
===================================================================
 
10197
--- a/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c     (.../tags/gcc_4_8_2_release)
 
10198
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c     (.../branches/gcc-4_8-branch)
 
10199
@@ -1,5 +1,5 @@
 
10200
 /* { dg-do compile { target lp64 } } */
 
10201
-/* { dg-options "-O0 -mavx -mabi=ms -mtune=generic -dp" } */
 
10202
+/* { dg-options "-O0 -mavx -mabi=ms -maccumulate-outgoing-args -dp" } */
 
10203
 
 
10204
 typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));
 
10205
 
 
10206
Index: gcc/testsuite/gcc.target/i386/sse2-movapd-1.c
 
10207
===================================================================
 
10208
--- a/src/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c (.../tags/gcc_4_8_2_release)
 
10209
+++ b/src/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c (.../branches/gcc-4_8-branch)
 
10210
@@ -25,7 +25,7 @@
 
10211
 TEST (void)
 
10212
 {
 
10213
   union128d u;
 
10214
-  double e[2] __attribute__ ((aligned (8))) = {2134.3343,1234.635654};
 
10215
+  double e[2] __attribute__ ((aligned (16))) = {2134.3343,1234.635654};
 
10216
 
 
10217
   u.x = test (e);   
 
10218
 
 
10219
Index: gcc/testsuite/gcc.target/i386/pr59021.c
 
10220
===================================================================
 
10221
--- a/src/gcc/testsuite/gcc.target/i386/pr59021.c       (.../tags/gcc_4_8_2_release)
 
10222
+++ b/src/gcc/testsuite/gcc.target/i386/pr59021.c       (.../branches/gcc-4_8-branch)
 
10223
@@ -0,0 +1,23 @@
 
10224
+/* { dg-do compile } */
 
10225
+/* { dg-options "-O2 -mavx -mvzeroupper" } */
 
10226
+
 
10227
+extern void abort (void);
 
10228
+
 
10229
+struct S {
 
10230
+  int i1;
 
10231
+  int i2;
 
10232
+  int i3;
 
10233
+};
 
10234
+
 
10235
+typedef double v4df  __attribute__ ((vector_size (32)));
 
10236
+
 
10237
+extern int foo (v4df, int i1, int i2, int i3, int i4, int i5, struct S s);
 
10238
+
 
10239
+void bar (v4df v, struct S s)
 
10240
+{
 
10241
+  int r = foo (v, 1, 2, 3, 4, 5, s);
 
10242
+  if (r)
 
10243
+    abort ();
 
10244
+}
 
10245
+
 
10246
+/* { dg-final { scan-assembler-not "vzeroupper" } } */
 
10247
Index: gcc/testsuite/gcc.target/i386/pr59034-2.c
 
10248
===================================================================
 
10249
--- a/src/gcc/testsuite/gcc.target/i386/pr59034-2.c     (.../tags/gcc_4_8_2_release)
 
10250
+++ b/src/gcc/testsuite/gcc.target/i386/pr59034-2.c     (.../branches/gcc-4_8-branch)
 
10251
@@ -0,0 +1,10 @@
 
10252
+/* { dg-do compile { target { ! { ia32 } } } } */
 
10253
+/* { dg-require-effective-target maybe_x32 } */
 
10254
+/* { dg-options "-O -mx32 -mtune=corei7 -maddress-mode=long" } */
 
10255
+
 
10256
+extern int foo(int, ...);
 
10257
+int bar(void) {
 
10258
+  long double l = 1.2345E6;
 
10259
+  foo(0, l);
 
10260
+  return 0;
 
10261
+}
 
10262
Index: gcc/testsuite/gcc.target/i386/pr59794-3.c
 
10263
===================================================================
 
10264
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-3.c     (.../tags/gcc_4_8_2_release)
 
10265
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-3.c     (.../branches/gcc-4_8-branch)
 
10266
@@ -0,0 +1,15 @@
 
10267
+/* PR target/59794 */
 
10268
+/* { dg-prune-output "ABI for passing parameters" } */
 
10269
+/* { dg-options "-O2 -mno-avx" } */
 
10270
+/* { dg-skip-if "no AVX vector" { *-*-mingw* } } */
 
10271
+
 
10272
+typedef int __v8si __attribute__ ((__vector_size__ (32)));
 
10273
+
 
10274
+extern __v8si x;
 
10275
+
 
10276
+extern void bar (__v8si);
 
10277
+void
 
10278
+foo (void)
 
10279
+{
 
10280
+  bar (x); /* { dg-message "warning: AVX vector argument without AVX enabled changes the ABI" } */
 
10281
+}
 
10282
Index: gcc/testsuite/gcc.target/i386/pr59839.c
 
10283
===================================================================
 
10284
--- a/src/gcc/testsuite/gcc.target/i386/pr59839.c       (.../tags/gcc_4_8_2_release)
 
10285
+++ b/src/gcc/testsuite/gcc.target/i386/pr59839.c       (.../branches/gcc-4_8-branch)
 
10286
@@ -0,0 +1,12 @@
 
10287
+/* PR target/59839 */
 
10288
+/* { dg-do compile } */
 
10289
+/* { dg-options "-O0 -mavx2" } */
 
10290
+
 
10291
+#include <x86intrin.h>
 
10292
+
 
10293
+void
 
10294
+test (const float *x)
 
10295
+{
 
10296
+  __m256i i = _mm256_set1_epi32 (1);
 
10297
+  __m256 d = _mm256_i32gather_ps (x, i, 1);
 
10298
+}
 
10299
Index: gcc/testsuite/gcc.target/i386/xop-frczX.c
 
10300
===================================================================
 
10301
--- a/src/gcc/testsuite/gcc.target/i386/xop-frczX.c     (.../tags/gcc_4_8_2_release)
 
10302
+++ b/src/gcc/testsuite/gcc.target/i386/xop-frczX.c     (.../branches/gcc-4_8-branch)
 
10303
@@ -0,0 +1,60 @@
 
10304
+/* { dg-do run } */
 
10305
+/* { dg-require-effective-target xop } */
 
10306
+/* { dg-options "-O2 -mxop" } */
 
10307
+
 
10308
+#include "xop-check.h"
 
10309
+
 
10310
+#include <x86intrin.h>
 
10311
+
 
10312
+void
 
10313
+check_mm_vmfrcz_sd (__m128d __A, __m128d __B)
 
10314
+{
 
10315
+  union128d a, b, c;
 
10316
+  double d[2];
 
10317
+
 
10318
+  a.x = __A;
 
10319
+  b.x = __B;
 
10320
+  c.x = _mm_frcz_sd (__A, __B);
 
10321
+  d[0] = b.a[0] - (int)b.a[0] ;
 
10322
+  d[1] = a.a[1];
 
10323
+  if (check_union128d (c, d))
 
10324
+    abort ();
 
10325
+}
 
10326
+
 
10327
+void
 
10328
+check_mm_vmfrcz_ss (__m128 __A, __m128 __B)
 
10329
+{
 
10330
+  union128 a, b, c;
 
10331
+  float f[4];
 
10332
+
 
10333
+  a.x = __A;
 
10334
+  b.x = __B;
 
10335
+  c.x = _mm_frcz_ss (__A, __B);
 
10336
+  f[0] = b.a[0] - (int)b.a[0] ;
 
10337
+  f[1] = a.a[1];
 
10338
+  f[2] = a.a[2];
 
10339
+  f[3] = a.a[3];
 
10340
+  if (check_union128 (c, f))
 
10341
+    abort ();
 
10342
+}
 
10343
+
 
10344
+static void
 
10345
+xop_test (void)
 
10346
+{
 
10347
+  union128 a, b;
 
10348
+  union128d c,d;
 
10349
+  int i;
 
10350
+
 
10351
+  for (i = 0; i < 4; i++)
 
10352
+    {
 
10353
+       a.a[i] = i + 3.5;
 
10354
+       b.a[i] = i + 7.9;
 
10355
+    }
 
10356
+  for (i = 0; i < 2; i++)
 
10357
+    {
 
10358
+       c.a[i] = i + 3.5;
 
10359
+       d.a[i] = i + 7.987654321;
 
10360
+    }
 
10361
+  check_mm_vmfrcz_ss (a.x, b.x);
 
10362
+  check_mm_vmfrcz_sd (c.x, d.x);
 
10363
+}
 
10364
Index: gcc/testsuite/gcc.target/i386/pr59794-7.c
 
10365
===================================================================
 
10366
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-7.c     (.../tags/gcc_4_8_2_release)
 
10367
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-7.c     (.../branches/gcc-4_8-branch)
 
10368
@@ -0,0 +1,13 @@
 
10369
+/* PR target/59794 */
 
10370
+/* { dg-options "-O2 -mno-avx" } */
 
10371
+/* { dg-skip-if "no AVX vector" { *-*-mingw* } } */
 
10372
+
 
10373
+typedef int __v8si __attribute__ ((__vector_size__ (32)));
 
10374
+
 
10375
+extern __v8si x;
 
10376
+
 
10377
+__v8si
 
10378
+foo (void)
 
10379
+{ /* { dg-warning "AVX vector return without AVX enabled changes the ABI" } */
 
10380
+  return x;
 
10381
+}
 
10382
Index: gcc/testsuite/gcc.target/i386/pr59625.c
 
10383
===================================================================
 
10384
--- a/src/gcc/testsuite/gcc.target/i386/pr59625.c       (.../tags/gcc_4_8_2_release)
 
10385
+++ b/src/gcc/testsuite/gcc.target/i386/pr59625.c       (.../branches/gcc-4_8-branch)
 
10386
@@ -0,0 +1,36 @@
 
10387
+/* PR target/59625 */
 
10388
+/* { dg-do compile } */
 
10389
+/* { dg-options "-O2 -mtune=atom" } */
 
10390
+
 
10391
+int
 
10392
+foo (void)
 
10393
+{
 
10394
+  asm goto ("" : : : : lab);
 
10395
+  asm goto ("" : : : : lab);
 
10396
+  asm goto ("" : : : : lab);
 
10397
+  asm goto ("" : : : : lab);
 
10398
+  asm goto ("" : : : : lab);
 
10399
+  asm goto ("" : : : : lab);
 
10400
+  asm goto ("" : : : : lab);
 
10401
+  asm goto ("" : : : : lab);
 
10402
+  asm goto ("" : : : : lab);
 
10403
+  asm goto ("" : : : : lab);
 
10404
+  asm goto ("" : : : : lab);
 
10405
+  asm goto ("" : : : : lab);
 
10406
+  asm goto ("" : : : : lab);
 
10407
+  asm goto ("" : : : : lab);
 
10408
+  asm goto ("" : : : : lab);
 
10409
+  asm goto ("" : : : : lab);
 
10410
+  asm goto ("" : : : : lab);
 
10411
+  asm goto ("" : : : : lab);
 
10412
+  asm goto ("" : : : : lab);
 
10413
+  asm goto ("" : : : : lab);
 
10414
+  return 0;
 
10415
+lab:
 
10416
+  return 1;
 
10417
+}
 
10418
+
 
10419
+/* Verify we don't consider asm goto as a jump for four jumps limit
 
10420
+   optimization.  asm goto doesn't have to contain a jump at all,
 
10421
+   the branching to labels can happen through different means.  */
 
10422
+/* { dg-final { scan-assembler-not "(p2align\[^\n\r\]*\[\n\r]*\[^\n\r\]*){8}p2align" } } */
 
10423
Index: gcc/testsuite/gcc.target/i386/sse2-movapd-2.c
 
10424
===================================================================
 
10425
--- a/src/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c (.../tags/gcc_4_8_2_release)
 
10426
+++ b/src/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c (.../branches/gcc-4_8-branch)
 
10427
@@ -25,7 +25,7 @@
 
10428
 TEST (void)
 
10429
 {
 
10430
   union128d u;
 
10431
-  double e[2] __attribute__ ((aligned (8))) = {0.0};
 
10432
+  double e[2] __attribute__ ((aligned (16))) = {0.0};
 
10433
 
 
10434
   u.x = _mm_set_pd (2134.3343,1234.635654);
 
10435
 
 
10436
Index: gcc/testsuite/gcc.target/i386/sse-5.c
 
10437
===================================================================
 
10438
--- a/src/gcc/testsuite/gcc.target/i386/sse-5.c (.../tags/gcc_4_8_2_release)
 
10439
+++ b/src/gcc/testsuite/gcc.target/i386/sse-5.c (.../branches/gcc-4_8-branch)
 
10440
@@ -1,6 +1,7 @@
 
10441
 /* { dg-do compile } */
 
10442
 /* { dg-require-effective-target ia32 } */
 
10443
-/* { dg-options "-Winline -Wno-psabi -O2 -mno-sse" } */
 
10444
+/* { dg-prune-output "ABI for passing parameters" } */
 
10445
+/* { dg-options "-Winline -O2 -mno-sse" } */
 
10446
 
 
10447
 typedef double v2df __attribute__ ((vector_size (16)));
 
10448
 v2df p;
 
10449
Index: gcc/testsuite/gcc.target/i386/pr39162.c
 
10450
===================================================================
 
10451
--- a/src/gcc/testsuite/gcc.target/i386/pr39162.c       (.../tags/gcc_4_8_2_release)
 
10452
+++ b/src/gcc/testsuite/gcc.target/i386/pr39162.c       (.../branches/gcc-4_8-branch)
 
10453
@@ -1,11 +1,14 @@
 
10454
 /* { dg-do compile } */
 
10455
-/* { dg-options "-O2 -Wno-psabi -msse2 -mno-avx" } */
 
10456
+/* { dg-prune-output "ABI for passing parameters" } */
 
10457
+/* { dg-options "-O2 -msse2 -mno-avx" } */
 
10458
 /* { dg-additional-options "-mabi=sysv" { target x86_64-*-mingw* } } */
 
10459
 
 
10460
 typedef long long __m256i __attribute__ ((__vector_size__ (32), __may_alias__));
 
10461
 
 
10462
-__m256i
 
10463
+extern __m256i y;
 
10464
+
 
10465
+void
 
10466
 bar (__m256i x) /* { dg-warning "AVX" "" } */
 
10467
 {
 
10468
-  return x;
 
10469
+  y = x;
 
10470
 }
 
10471
Index: gcc/testsuite/gcc.target/i386/pr58137.c
 
10472
===================================================================
 
10473
--- a/src/gcc/testsuite/gcc.target/i386/pr58137.c       (.../tags/gcc_4_8_2_release)
 
10474
+++ b/src/gcc/testsuite/gcc.target/i386/pr58137.c       (.../branches/gcc-4_8-branch)
 
10475
@@ -0,0 +1,33 @@
 
10476
+/* { dg-do compile } */
 
10477
+/* { dg-options "-O3 -mavx2" } */
 
10478
+
 
10479
+typedef unsigned int U32;
 
10480
+
 
10481
+struct sv {
 
10482
+  void* sv_any;
 
10483
+  U32 sv_refcnt;
 
10484
+  U32 sv_flags;
 
10485
+};
 
10486
+typedef struct sv SV;
 
10487
+
 
10488
+struct xrv {
 
10489
+  SV * xrv_rv;
 
10490
+};
 
10491
+typedef struct xrv XRV;
 
10492
+
 
10493
+extern XRV * PL_xrv_root;
 
10494
+
 
10495
+void
 
10496
+more_xrv (void)
 
10497
+{
 
10498
+  register XRV* xrv;
 
10499
+  register XRV* xrvend;
 
10500
+  xrv = PL_xrv_root;
 
10501
+  xrvend = &xrv[200 / sizeof (XRV) - 1];
 
10502
+  while (xrv < xrvend)
 
10503
+  {
 
10504
+    xrv->xrv_rv = (SV*)(xrv + 1);
 
10505
+    xrv++;
 
10506
+  }
 
10507
+  xrv->xrv_rv = 0;
 
10508
+}
 
10509
Index: gcc/testsuite/gcc.target/i386/pr59794-4.c
 
10510
===================================================================
 
10511
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-4.c     (.../tags/gcc_4_8_2_release)
 
10512
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-4.c     (.../branches/gcc-4_8-branch)
 
10513
@@ -0,0 +1,14 @@
 
10514
+/* PR target/59794 */
 
10515
+/* { dg-do compile { target { ia32 } } } */
 
10516
+/* { dg-options "-O2 -mno-mmx" } */
 
10517
+/* { dg-skip-if "no MMX vector" { *-*-mingw* } } */
 
10518
+
 
10519
+typedef int __v2si __attribute__ ((__vector_size__ (8)));
 
10520
+
 
10521
+extern __v2si x;
 
10522
+
 
10523
+__v2si
 
10524
+foo (void)
 
10525
+{ /* { dg-warning "MMX vector return without MMX enabled changes the ABI" } */
 
10526
+  return x;
 
10527
+}
 
10528
Index: gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c
 
10529
===================================================================
 
10530
--- a/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c     (.../tags/gcc_4_8_2_release)
 
10531
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c     (.../branches/gcc-4_8-branch)
 
10532
@@ -1,5 +1,5 @@
 
10533
 /* { dg-do compile { target lp64 } } */
 
10534
-/* { dg-options "-O2 -mavx -mabi=ms -mtune=generic -dp" } */
 
10535
+/* { dg-options "-O2 -mavx -mabi=ms -maccumulate-outgoing-args -dp" } */
 
10536
 
 
10537
 typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));
 
10538
 
 
10539
Index: gcc/testsuite/gcc.target/i386/pr30315.c
 
10540
===================================================================
 
10541
--- a/src/gcc/testsuite/gcc.target/i386/pr30315.c       (.../tags/gcc_4_8_2_release)
 
10542
+++ b/src/gcc/testsuite/gcc.target/i386/pr30315.c       (.../branches/gcc-4_8-branch)
 
10543
@@ -1,6 +1,6 @@
 
10544
 /* { dg-do compile } */
 
10545
 /* { dg-options "-O2" } */
 
10546
-/* { dg-final { scan-assembler-times "cmp" 4 } } */
 
10547
+/* { dg-final { scan-assembler-not "cmp" } } */
 
10548
 
 
10549
 extern void abort (void);
 
10550
 int c;
 
10551
@@ -34,39 +34,10 @@
 
10552
 }
 
10553
 #define PLUSCCONLY(T, t) PLUSCCONLY1(T, t, a) PLUSCCONLY1(T, t, b)
 
10554
 
 
10555
-#define MINUSCC(T, t)  \
 
10556
-T minuscc##t (T a, T b)        \
 
10557
-{      \
 
10558
-  T difference = a - b;        \
 
10559
-  if (difference > a)  \
 
10560
-    abort ();          \
 
10561
-  return difference;   \
 
10562
-}
 
10563
-
 
10564
-#define DECCC(T, t)    \
 
10565
-T deccc##t (T a, T b)  \
 
10566
-{      \
 
10567
-  T difference = a - b;        \
 
10568
-  if (difference > a)  \
 
10569
-    c --;              \
 
10570
-  return difference;   \
 
10571
-}
 
10572
-
 
10573
-#define MINUSCCONLY(T, t)      \
 
10574
-void minuscconly##t (T a, T b) \
 
10575
-{      \
 
10576
-  T difference = a - b;        \
 
10577
-  if (difference > a)  \
 
10578
-    abort ();          \
 
10579
-}
 
10580
-
 
10581
 #define TEST(T, t)     \
 
10582
   PLUSCC(T, t)         \
 
10583
   PLUSCCONLY(T, t)     \
 
10584
-  INCCC(T, t)          \
 
10585
-  MINUSCC(T, t)                \
 
10586
-  MINUSCCONLY(T, t)    \
 
10587
-  DECCC(T, t)
 
10588
+  INCCC(T, t)
 
10589
 
 
10590
 TEST (unsigned long,  l)
 
10591
 TEST (unsigned int,   i)
 
10592
@@ -84,14 +55,3 @@
 
10593
 
 
10594
 PLUSCCZEXT(a)
 
10595
 PLUSCCZEXT(b)
 
10596
-
 
10597
-#define MINUSCCZEXT    \
 
10598
-unsigned long minuscczext (unsigned int a, unsigned int b)     \
 
10599
-{      \
 
10600
-  unsigned int difference = a - b;     \
 
10601
-  if (difference > a)          \
 
10602
-    abort ();                  \
 
10603
-  return difference;           \
 
10604
-}
 
10605
-
 
10606
-MINUSCCZEXT
 
10607
Index: gcc/testsuite/gcc.target/i386/pr43869.c
 
10608
===================================================================
 
10609
--- a/src/gcc/testsuite/gcc.target/i386/pr43869.c       (.../tags/gcc_4_8_2_release)
 
10610
+++ b/src/gcc/testsuite/gcc.target/i386/pr43869.c       (.../branches/gcc-4_8-branch)
 
10611
@@ -1,4 +1,5 @@
 
10612
 /* { dg-do compile { target lp64 } } */
 
10613
+/* { dg-options "-maccumulate-outgoing-args" } */
 
10614
 
 
10615
 int __attribute__((__noinline__))
 
10616
 bugged(float f1, float f2, float f3, float f4,
 
10617
Index: gcc/testsuite/gcc.target/i386/pr43546.c
 
10618
===================================================================
 
10619
--- a/src/gcc/testsuite/gcc.target/i386/pr43546.c       (.../tags/gcc_4_8_2_release)
 
10620
+++ b/src/gcc/testsuite/gcc.target/i386/pr43546.c       (.../branches/gcc-4_8-branch)
 
10621
@@ -0,0 +1,12 @@
 
10622
+/* PR target/43546 */
 
10623
+/* { dg-do compile } */
 
10624
+/* { dg-options "-O1" } */
 
10625
+/* { dg-additional-options "-mpreferred-stack-boundary=2 -msseregparm -msse" { target ia32 } } */
 
10626
+
 
10627
+extern void bar (double);
 
10628
+
 
10629
+void
 
10630
+foo (void)
 
10631
+{
 
10632
+  bar (1.0);
 
10633
+}
 
10634
Index: gcc/testsuite/gcc.target/i386/pr43662.c
 
10635
===================================================================
 
10636
--- a/src/gcc/testsuite/gcc.target/i386/pr43662.c       (.../tags/gcc_4_8_2_release)
 
10637
+++ b/src/gcc/testsuite/gcc.target/i386/pr43662.c       (.../branches/gcc-4_8-branch)
 
10638
@@ -1,5 +1,5 @@
 
10639
 /* { dg-do compile { target lp64 } } */
 
10640
-/* { dg-options "-O2" } */
 
10641
+/* { dg-options "-O2 -maccumulate-outgoing-args" } */
 
10642
 
 
10643
 void __attribute__ ((ms_abi)) foo (void)
 
10644
 {
 
10645
Index: gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c
 
10646
===================================================================
 
10647
--- a/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c     (.../tags/gcc_4_8_2_release)
 
10648
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c     (.../branches/gcc-4_8-branch)
 
10649
@@ -15,7 +15,7 @@
 
10650
 avx_test (void)
 
10651
 {
 
10652
   union256d u;
 
10653
-  double e [4] __attribute__ ((aligned (8)))  = {41124.234,2344.2354,8653.65635,856.43576};
 
10654
+  double e [4] __attribute__ ((aligned (32)))  = {41124.234,2344.2354,8653.65635,856.43576};
 
10655
 
 
10656
   u.x = test (e);
 
10657
 
 
10658
Index: gcc/testsuite/gcc.target/i386/nest-1.c
 
10659
===================================================================
 
10660
--- a/src/gcc/testsuite/gcc.target/i386/nest-1.c        (.../tags/gcc_4_8_2_release)
 
10661
+++ b/src/gcc/testsuite/gcc.target/i386/nest-1.c        (.../branches/gcc-4_8-branch)
 
10662
@@ -0,0 +1,14 @@
 
10663
+/* { dg-do compile { target llp64 } } */
 
10664
+/* { dg-options "" } */
 
10665
+
 
10666
+void foo (int i)
 
10667
+{
 
10668
+  void nested (void)
 
10669
+  {
 
10670
+    char arr[(1U << 31) + 4U];
 
10671
+    arr[i] = 0;
 
10672
+  }
 
10673
+
 
10674
+  nested ();
 
10675
+}
 
10676
+
 
10677
Index: gcc/testsuite/gcc.target/i386/pr59794-1.c
 
10678
===================================================================
 
10679
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-1.c     (.../tags/gcc_4_8_2_release)
 
10680
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-1.c     (.../branches/gcc-4_8-branch)
 
10681
@@ -0,0 +1,15 @@
 
10682
+/* PR target/59794 */
 
10683
+/* { dg-do compile { target { ia32 } } } */
 
10684
+/* { dg-options "-O2 -mno-mmx" } */
 
10685
+/* { dg-skip-if "no MMX vector" { *-*-mingw* } } */
 
10686
+
 
10687
+typedef int __v2si __attribute__ ((__vector_size__ (8)));
 
10688
+
 
10689
+extern __v2si x;
 
10690
+
 
10691
+extern void bar (__v2si);
 
10692
+void
 
10693
+foo (void)
 
10694
+{
 
10695
+  bar (x); /* { dg-message "warning: MMX vector argument without MMX enabled changes the ABI" } */
 
10696
+}
 
10697
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c
 
10698
===================================================================
 
10699
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c (.../tags/gcc_4_8_2_release)
 
10700
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c (.../branches/gcc-4_8-branch)
 
10701
@@ -1,7 +1,7 @@
 
10702
 /* Test for cross x86_64<->w64 abi standard calls.
 
10703
 */
 
10704
 /* { dg-do compile } */
 
10705
-/* { dg-options "-mno-sse" } */
 
10706
+/* { dg-options "-mno-sse -maccumulate-outgoing-args" } */
 
10707
 #include "callabi.h"
 
10708
 
 
10709
 long double
 
10710
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c
 
10711
===================================================================
 
10712
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c (.../tags/gcc_4_8_2_release)
 
10713
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c (.../branches/gcc-4_8-branch)
 
10714
@@ -2,7 +2,7 @@
 
10715
 */
 
10716
 /* Origin: Kai Tietz <kai.tietz@onevision.com> */
 
10717
 /* { dg-do run } */
 
10718
-/* { dg-options "-std=gnu99" } */
 
10719
+/* { dg-options "-std=gnu99 -maccumulate-outgoing-args" } */
 
10720
 #include "callabi.h"
 
10721
 
 
10722
 extern __SIZE_TYPE__ strlen (const char *);
 
10723
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c
 
10724
===================================================================
 
10725
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c (.../tags/gcc_4_8_2_release)
 
10726
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c (.../branches/gcc-4_8-branch)
 
10727
@@ -2,7 +2,7 @@
 
10728
 */
 
10729
 /* Origin: Kai Tietz <kai.tietz@onevision.com> */
 
10730
 /* { dg-do run } */
 
10731
-/* { dg-options "-std=gnu99" } */
 
10732
+/* { dg-options "-std=gnu99 -maccumulate-outgoing-args" } */
 
10733
 #include "callabi.h"
 
10734
 
 
10735
 extern void abort (void);
 
10736
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-3.c
 
10737
===================================================================
 
10738
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-3.c (.../tags/gcc_4_8_2_release)
 
10739
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-3.c (.../branches/gcc-4_8-branch)
 
10740
@@ -2,7 +2,7 @@
 
10741
 */
 
10742
 /* Origin: Kai Tietz <kai.tietz@onevision.com> */
 
10743
 /* { dg-do run } */
 
10744
-/* { dg-options "-std=gnu99" } */
 
10745
+/* { dg-options "-std=gnu99 -maccumulate-outgoing-args" } */
 
10746
 #include "callabi.h"
 
10747
 
 
10748
 extern void abort (void);
 
10749
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c
 
10750
===================================================================
 
10751
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c        (.../tags/gcc_4_8_2_release)
 
10752
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c        (.../branches/gcc-4_8-branch)
 
10753
@@ -1,6 +1,6 @@
 
10754
 /* Test for cross x86_64<->w64 abi va_list calls.  */
 
10755
 /* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
 
10756
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
 
10757
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
 
10758
 /* { dg-additional-sources "vaarg-4b.c" } */
 
10759
 
 
10760
 extern __SIZE_TYPE__ __attribute__ ((sysv_abi)) strlen (const char *);
 
10761
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c
 
10762
===================================================================
 
10763
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c        (.../tags/gcc_4_8_2_release)
 
10764
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c        (.../branches/gcc-4_8-branch)
 
10765
@@ -1,6 +1,6 @@
 
10766
 /* Test for cross x86_64<->w64 abi va_list calls.  */
 
10767
 /* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
 
10768
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
 
10769
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
 
10770
 /* { dg-additional-sources "vaarg-5b.c" } */
 
10771
 
 
10772
 extern void __attribute__ ((sysv_abi)) abort (void);
 
10773
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c
 
10774
===================================================================
 
10775
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c        (.../tags/gcc_4_8_2_release)
 
10776
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c        (.../branches/gcc-4_8-branch)
 
10777
@@ -1,5 +1,5 @@
 
10778
 /* Test for cross x86_64<->w64 abi va_list calls.  */
 
10779
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
 
10780
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
 
10781
 
 
10782
 #include <stdarg.h>
 
10783
 
 
10784
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c
 
10785
===================================================================
 
10786
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c        (.../tags/gcc_4_8_2_release)
 
10787
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c        (.../branches/gcc-4_8-branch)
 
10788
@@ -1,5 +1,5 @@
 
10789
 /* Test for cross x86_64<->w64 abi va_list calls.  */
 
10790
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
 
10791
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
 
10792
 
 
10793
 #include <stdarg.h>
 
10794
 
 
10795
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c
 
10796
===================================================================
 
10797
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c  (.../tags/gcc_4_8_2_release)
 
10798
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c  (.../branches/gcc-4_8-branch)
 
10799
@@ -1,5 +1,5 @@
 
10800
 /* { dg-do compile } */
 
10801
-/* { dg-options "-O2 -mabi=sysv" } */
 
10802
+/* { dg-options "-O2 -mabi=sysv -maccumulate-outgoing-args" } */
 
10803
 
 
10804
 __attribute__ ((ms_abi))
 
10805
 int foo (void)
 
10806
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c
 
10807
===================================================================
 
10808
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c  (.../tags/gcc_4_8_2_release)
 
10809
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c  (.../branches/gcc-4_8-branch)
 
10810
@@ -1,5 +1,5 @@
 
10811
 /* { dg-do compile } */
 
10812
-/* { dg-options "-O2 -mabi=sysv" } */
 
10813
+/* { dg-options "-O2 -mabi=sysv -maccumulate-outgoing-args" } */
 
10814
 
 
10815
 extern int glb1, gbl2, gbl3;
 
10816
 
 
10817
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c
 
10818
===================================================================
 
10819
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c  (.../tags/gcc_4_8_2_release)
 
10820
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c  (.../branches/gcc-4_8-branch)
 
10821
@@ -2,7 +2,7 @@
 
10822
 */
 
10823
 /* Origin: Kai Tietz <kai.tietz@onevision.com> */
 
10824
 /* { dg-do run } */
 
10825
-/* { dg-options "-std=gnu99 -ffast-math" } */
 
10826
+/* { dg-options "-std=gnu99 -ffast-math -maccumulate-outgoing-args" } */
 
10827
 #include "callabi.h"
 
10828
 
 
10829
 extern void abort (void);
 
10830
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c
 
10831
===================================================================
 
10832
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c        (.../tags/gcc_4_8_2_release)
 
10833
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c        (.../branches/gcc-4_8-branch)
 
10834
@@ -1,6 +1,6 @@
 
10835
 /* Test for cross x86_64<->w64 abi standard calls via variable.  */
 
10836
 /* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
 
10837
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
 
10838
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
 
10839
 /* { dg-additional-sources "func-indirect-2b.c" } */
 
10840
 
 
10841
 extern void __attribute__ ((sysv_abi)) abort (void);
 
10842
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c
 
10843
===================================================================
 
10844
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c   (.../tags/gcc_4_8_2_release)
 
10845
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c   (.../branches/gcc-4_8-branch)
 
10846
@@ -2,7 +2,7 @@
 
10847
 */
 
10848
 /* Origin: Kai Tietz <kai.tietz@onevision.com> */
 
10849
 /* { dg-do run } */
 
10850
-/* { dg-options "-std=gnu99 -ffast-math" } */
 
10851
+/* { dg-options "-std=gnu99 -ffast-math -maccumulate-outgoing-args" } */
 
10852
 #include "callabi.h"
 
10853
 
 
10854
 extern void abort (void);
 
10855
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c
 
10856
===================================================================
 
10857
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c (.../tags/gcc_4_8_2_release)
 
10858
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c (.../branches/gcc-4_8-branch)
 
10859
@@ -1,6 +1,6 @@
 
10860
 /* Test for cross x86_64<->w64 abi standard calls.  */
 
10861
 /* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
 
10862
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
 
10863
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
 
10864
 /* { dg-additional-sources "func-2b.c" } */
 
10865
 
 
10866
 extern void __attribute__ ((sysv_abi)) abort (void);
 
10867
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c
 
10868
===================================================================
 
10869
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c        (.../tags/gcc_4_8_2_release)
 
10870
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c        (.../branches/gcc-4_8-branch)
 
10871
@@ -1,5 +1,5 @@
 
10872
 /* Test for cross x86_64<->w64 abi standard calls via variable.  */
 
10873
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
 
10874
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
 
10875
 
 
10876
 typedef int (*func)(void *, char *, char *, short, long long);
 
10877
 
 
10878
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c
 
10879
===================================================================
 
10880
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c (.../tags/gcc_4_8_2_release)
 
10881
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c (.../branches/gcc-4_8-branch)
 
10882
@@ -1,5 +1,5 @@
 
10883
 /* Test for cross x86_64<->w64 abi standard calls.  */
 
10884
-/* { dg-options "-mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
 
10885
+/* { dg-options "-mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
 
10886
 
 
10887
 long double func_cross (long double a, double b, float c, long d, int e,
 
10888
                        char f)
 
10889
Index: gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c
 
10890
===================================================================
 
10891
--- a/src/gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c       (.../tags/gcc_4_8_2_release)
 
10892
+++ b/src/gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c       (.../branches/gcc-4_8-branch)
 
10893
@@ -1,37 +0,0 @@
 
10894
-/* This checks the availability of the XL compiler intrinsics for
 
10895
-   transactional execution with the expected prototypes.  */
 
10896
-
 
10897
-/* { dg-do compile } */
 
10898
-/* { dg-options "-O3 -march=zEC12 -mzarch" } */
 
10899
-
 
10900
-#include <htmxlintrin.h>
 
10901
-
 
10902
-int a = 0;
 
10903
-unsigned long g;
 
10904
-
 
10905
-int
 
10906
-foo ()
 
10907
-{
 
10908
-  struct __htm_tdb *tdb_struct;
 
10909
-  void * const tdb = tdb_struct;
 
10910
-  long result;
 
10911
-  unsigned char code;
 
10912
-
 
10913
-  result = __TM_simple_begin ();
 
10914
-  result = __TM_begin (tdb);
 
10915
-  result = __TM_end ();
 
10916
-  __TM_abort ();
 
10917
-  __TM_named_abort (42);
 
10918
-  __TM_non_transactional_store (&g, 42);
 
10919
-  result = __TM_nesting_depth (tdb);
 
10920
-
 
10921
-  result = __TM_is_user_abort (tdb);
 
10922
-  result = __TM_is_named_user_abort (tdb, &code);
 
10923
-  result = __TM_is_illegal (tdb);
 
10924
-  result = __TM_is_footprint_exceeded (tdb);
 
10925
-  result = __TM_is_nested_too_deep (tdb);
 
10926
-  result = __TM_is_conflict (tdb);
 
10927
-  result = __TM_is_failure_persistent (result);
 
10928
-  result = __TM_failure_address (tdb);
 
10929
-  result = __TM_failure_code (tdb);
 
10930
-}
 
10931
Index: gcc/testsuite/gcc.target/s390/htm-1.c
 
10932
===================================================================
 
10933
--- a/src/gcc/testsuite/gcc.target/s390/htm-1.c (.../tags/gcc_4_8_2_release)
 
10934
+++ b/src/gcc/testsuite/gcc.target/s390/htm-1.c (.../branches/gcc-4_8-branch)
 
10935
@@ -1,73 +0,0 @@
 
10936
-/* This checks the availability of the low-level builtins introduced
 
10937
-   for transactional execution.  */
 
10938
-
 
10939
-/* { dg-do compile } */
 
10940
-/* { dg-options "-O3 -march=zEC12 -mzarch" } */
 
10941
-
 
10942
-#include <stdint.h>
 
10943
-#include <htmintrin.h>
 
10944
-
 
10945
-int global = 0;
 
10946
-uint64_t g;
 
10947
-struct __htm_tdb global_tdb;
 
10948
-
 
10949
-int
 
10950
-foo (struct __htm_tdb* tdb, int reg, int *mem, uint64_t *mem64)
 
10951
-{
 
10952
-
 
10953
-  int cc;
 
10954
-  int n;
 
10955
-
 
10956
-  cc = __builtin_tbegin (0);
 
10957
-  cc = __builtin_tbegin (tdb);
 
10958
-  cc = __builtin_tbegin (&global_tdb);
 
10959
-
 
10960
-  cc = __builtin_tbegin_nofloat (0);
 
10961
-  cc = __builtin_tbegin_nofloat (&global_tdb);
 
10962
-
 
10963
-  cc = __builtin_tbegin_retry (0, 42);
 
10964
-  cc = __builtin_tbegin_retry (0, reg);
 
10965
-  cc = __builtin_tbegin_retry (0, *mem);
 
10966
-  cc = __builtin_tbegin_retry (0, global);
 
10967
-  cc = __builtin_tbegin_retry (tdb, 42);
 
10968
-  cc = __builtin_tbegin_retry (&global_tdb, 42);
 
10969
-
 
10970
-  cc = __builtin_tbegin_retry_nofloat (0, 42);
 
10971
-  cc = __builtin_tbegin_retry_nofloat (0, reg);
 
10972
-  cc = __builtin_tbegin_retry_nofloat (0, *mem);
 
10973
-  cc = __builtin_tbegin_retry_nofloat (0, global);
 
10974
-  cc = __builtin_tbegin_retry_nofloat (&global_tdb, 42);
 
10975
-
 
10976
-  __builtin_tbeginc ();
 
10977
-
 
10978
-  n = __builtin_tx_nesting_depth();
 
10979
-
 
10980
-  __builtin_non_tx_store(&g, 23);
 
10981
-  __builtin_non_tx_store(mem64, 23);
 
10982
-  __builtin_non_tx_store(&g, reg);
 
10983
-  __builtin_non_tx_store(&g, *mem);
 
10984
-  __builtin_non_tx_store(&g, global);
 
10985
-
 
10986
-  __builtin_tabort (42 + 255);
 
10987
-  __builtin_tabort (reg);
 
10988
-  /* { dg-final { scan-assembler-times "tabort\t255" 1 } } */
 
10989
-  __builtin_tabort (reg + 255);
 
10990
-  __builtin_tabort (*mem);
 
10991
-  __builtin_tabort (global);
 
10992
-  /* Here global + 255 gets reloaded into a reg.  Better would be to
 
10993
-     just reload global or *mem and get the +255 for free as address
 
10994
-     arithmetic.  */
 
10995
-  __builtin_tabort (*mem + 255);
 
10996
-  __builtin_tabort (global + 255);
 
10997
-
 
10998
-  __builtin_tend();
 
10999
-
 
11000
-  __builtin_tx_assist (23);
 
11001
-  __builtin_tx_assist (reg);
 
11002
-  __builtin_tx_assist (*mem);
 
11003
-  __builtin_tx_assist (global);
 
11004
-}
 
11005
-
 
11006
-/* Make sure the tdb NULL argument ends up as immediate value in the
 
11007
-   instruction.  */
 
11008
-/* { dg-final { scan-assembler-times "tbegin\t0," 10 } } */
 
11009
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c
 
11010
===================================================================
 
11011
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c    (.../tags/gcc_4_8_2_release)
 
11012
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c    (.../branches/gcc-4_8-branch)
 
11013
@@ -0,0 +1,27 @@
 
11014
+/* Functional tests for the function hotpatching feature.  */
 
11015
+
 
11016
+/* { dg-do run } */
 
11017
+/* { dg-options "-O3 -mzarch -mhotpatch" } */
 
11018
+
 
11019
+#include <stdio.h>
 
11020
+
 
11021
+void hp1(void)
 
11022
+{
 
11023
+  printf("hello, world!\n");
 
11024
+}
 
11025
+
 
11026
+inline void hp2(void)
 
11027
+{
 
11028
+  printf("hello, world!\n");
 
11029
+}
 
11030
+
 
11031
+__attribute__ ((always_inline))
 
11032
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
 
11033
+{
 
11034
+  printf("hello, world!\n");
 
11035
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
 
11036
+
 
11037
+int main (void)
 
11038
+{
 
11039
+  return 0;
 
11040
+}
 
11041
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c
 
11042
===================================================================
 
11043
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c    (.../tags/gcc_4_8_2_release)
 
11044
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c    (.../branches/gcc-4_8-branch)
 
11045
@@ -0,0 +1,27 @@
 
11046
+/* Functional tests for the function hotpatching feature.  */
 
11047
+
 
11048
+/* { dg-do run } */
 
11049
+/* { dg-options "-O3 -mzarch -mhotpatch=0" } */
 
11050
+
 
11051
+#include <stdio.h>
 
11052
+
 
11053
+void hp1(void)
 
11054
+{
 
11055
+  printf("hello, world!\n");
 
11056
+}
 
11057
+
 
11058
+inline void hp2(void)
 
11059
+{
 
11060
+  printf("hello, world!\n");
 
11061
+}
 
11062
+
 
11063
+__attribute__ ((always_inline))
 
11064
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
 
11065
+{
 
11066
+  printf("hello, world!\n");
 
11067
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
 
11068
+
 
11069
+int main (void)
 
11070
+{
 
11071
+  return 0;
 
11072
+}
 
11073
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c
 
11074
===================================================================
 
11075
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c    (.../tags/gcc_4_8_2_release)
 
11076
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c    (.../branches/gcc-4_8-branch)
 
11077
@@ -0,0 +1,27 @@
 
11078
+/* Functional tests for the function hotpatching feature.  */
 
11079
+
 
11080
+/* { dg-do run } */
 
11081
+/* { dg-options "-O3 -mzarch -mhotpatch=1" } */
 
11082
+
 
11083
+#include <stdio.h>
 
11084
+
 
11085
+void hp1(void)
 
11086
+{
 
11087
+  printf("hello, world!\n");
 
11088
+}
 
11089
+
 
11090
+inline void hp2(void)
 
11091
+{
 
11092
+  printf("hello, world!\n");
 
11093
+}
 
11094
+
 
11095
+__attribute__ ((always_inline))
 
11096
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
 
11097
+{
 
11098
+  printf("hello, world!\n");
 
11099
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
 
11100
+
 
11101
+int main (void)
 
11102
+{
 
11103
+  return 0;
 
11104
+}
 
11105
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c
 
11106
===================================================================
 
11107
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c    (.../tags/gcc_4_8_2_release)
 
11108
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c    (.../branches/gcc-4_8-branch)
 
11109
@@ -0,0 +1,11 @@
 
11110
+/* Functional tests for the function hotpatching feature.  */
 
11111
+
 
11112
+/* { dg-do compile } */
 
11113
+/* { dg-options "-O3 -mzarch -mhotpatch=-1" } */
 
11114
+
 
11115
+int main (void)
 
11116
+{
 
11117
+  return 0;
 
11118
+}
 
11119
+
 
11120
+/* { dg-excess-errors "argument to '-mhotpatch=' should be a non-negative integer" } */
 
11121
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c
 
11122
===================================================================
 
11123
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c    (.../tags/gcc_4_8_2_release)
 
11124
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c    (.../branches/gcc-4_8-branch)
 
11125
@@ -0,0 +1,28 @@
 
11126
+/* Functional tests for the function hotpatching feature.  */
 
11127
+
 
11128
+/* { dg-do compile } */
 
11129
+/* { dg-options "-O3 -mzarch -mhotpatch=1000000" } */
 
11130
+
 
11131
+#include <stdio.h>
 
11132
+
 
11133
+void hp1(void)
 
11134
+{
 
11135
+  printf("hello, world!\n");
 
11136
+}
 
11137
+
 
11138
+__attribute__ ((hotpatch(1000000)))
 
11139
+void hp2(void)
 
11140
+{
 
11141
+  printf("hello, world!\n");
 
11142
+}
 
11143
+
 
11144
+__attribute__ ((hotpatch(1000001)))
 
11145
+void hp3(void)
 
11146
+{ /* { dg-error "requested 'hotpatch' attribute is not a non-negative integer constant or too large .max. 1000000." } */
 
11147
+  printf("hello, world!\n");
 
11148
+}
 
11149
+
 
11150
+int main (void)
 
11151
+{
 
11152
+  return 0;
 
11153
+}
 
11154
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c
 
11155
===================================================================
 
11156
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c    (.../tags/gcc_4_8_2_release)
 
11157
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c    (.../branches/gcc-4_8-branch)
 
11158
@@ -0,0 +1,11 @@
 
11159
+/* Functional tests for the function hotpatching feature.  */
 
11160
+
 
11161
+/* { dg-do compile } */
 
11162
+/* { dg-options "-O3 -mzarch -mhotpatch=1000001" } */
 
11163
+
 
11164
+int main (void)
 
11165
+{
 
11166
+  return 0;
 
11167
+}
 
11168
+
 
11169
+/* { dg-excess-errors "argument to '-mhotpatch=' is too large .max. 1000000." } */
 
11170
Index: gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c
 
11171
===================================================================
 
11172
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c        (.../tags/gcc_4_8_2_release)
 
11173
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c        (.../branches/gcc-4_8-branch)
 
11174
@@ -0,0 +1,165 @@
 
11175
+/* This checks the availability of the low-level builtins introduced
 
11176
+   for transactional execution.  */
 
11177
+
 
11178
+/* { dg-do compile } */
 
11179
+/* { dg-require-effective-target htm } */
 
11180
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
 
11181
+
 
11182
+#include <stdint.h>
 
11183
+#include <htmintrin.h>
 
11184
+
 
11185
+int global = 0;
 
11186
+uint64_t g;
 
11187
+struct __htm_tdb global_tdb;
 
11188
+
 
11189
+int
 
11190
+foo (struct __htm_tdb* tdb, int reg, int *mem, uint64_t *mem64)
 
11191
+{
 
11192
+
 
11193
+  int cc;
 
11194
+  int n;
 
11195
+
 
11196
+  __builtin_tbegin ((void *)0);
 
11197
+  __builtin_tbegin ((void *)-99999);
 
11198
+  __builtin_tbegin ((void *)99999);
 
11199
+  while (__builtin_tbegin ((void *)0) != 0)
 
11200
+  {
 
11201
+  }
 
11202
+  cc = __builtin_tbegin ((void *)0x12345678);
 
11203
+  cc = __builtin_tbegin (tdb);
 
11204
+  cc = __builtin_tbegin (&global_tdb);
 
11205
+  cc = __builtin_tbegin ((void *)(long long)(reg + 0x12345678));
 
11206
+  cc = __builtin_tbegin ((void *)(long long)(reg));
 
11207
+
 
11208
+  __builtin_tbegin_nofloat ((void *)0);
 
11209
+  __builtin_tbegin_nofloat ((void *)-99999);
 
11210
+  __builtin_tbegin_nofloat ((void *)99999);
 
11211
+  cc = __builtin_tbegin_nofloat ((void *)0x12345678);
 
11212
+  cc = __builtin_tbegin_nofloat (tdb);
 
11213
+  cc = __builtin_tbegin_nofloat (&global_tdb);
 
11214
+  cc = __builtin_tbegin_nofloat ((void *)(long long)(reg + 0x12345678));
 
11215
+  cc = __builtin_tbegin_nofloat ((void *)(long long)(reg));
 
11216
+
 
11217
+  __builtin_tbegin_retry ((void *)0, 0);
 
11218
+  cc = __builtin_tbegin_retry ((void *)0, 1);
 
11219
+  cc = __builtin_tbegin_retry ((void *)0, -1);
 
11220
+  cc = __builtin_tbegin_retry ((void *)0, 42);
 
11221
+  cc = __builtin_tbegin_retry ((void *)0, reg);
 
11222
+  cc = __builtin_tbegin_retry ((void *)0, *mem);
 
11223
+  cc = __builtin_tbegin_retry ((void *)0, global);
 
11224
+  cc = __builtin_tbegin_retry (tdb, 42);
 
11225
+  cc = __builtin_tbegin_retry (&global_tdb, 42);
 
11226
+  cc = __builtin_tbegin_retry ((void *)0x12345678, global);
 
11227
+  cc = __builtin_tbegin_retry (
 
11228
+         (void *)(long long) (reg + 0x12345678), global + 1);
 
11229
+  cc = __builtin_tbegin_retry (
 
11230
+         (void *)(long long)(reg), global - 1);
 
11231
+
 
11232
+  __builtin_tbegin_retry_nofloat ((void *)0, 0);
 
11233
+  cc = __builtin_tbegin_retry_nofloat ((void *)0, 1);
 
11234
+  cc = __builtin_tbegin_retry_nofloat ((void *)0, -1);
 
11235
+  cc = __builtin_tbegin_retry_nofloat ((void *)0, 42);
 
11236
+  cc = __builtin_tbegin_retry_nofloat ((void *)0, reg);
 
11237
+  cc = __builtin_tbegin_retry_nofloat ((void *)0, *mem);
 
11238
+  cc = __builtin_tbegin_retry_nofloat ((void *)0, global);
 
11239
+  cc = __builtin_tbegin_retry_nofloat (tdb, 42);
 
11240
+  cc = __builtin_tbegin_retry_nofloat (&global_tdb, 42);
 
11241
+  cc = __builtin_tbegin_retry_nofloat ((void *)0x12345678, global);
 
11242
+  cc = __builtin_tbegin_retry_nofloat (
 
11243
+         (void *)(long long) (reg + 0x12345678), global + 1);
 
11244
+  cc = __builtin_tbegin_retry_nofloat (
 
11245
+         (void *)(long long)(reg), global - 1);
 
11246
+
 
11247
+  __builtin_tbeginc ();
 
11248
+
 
11249
+  __builtin_tx_nesting_depth ();
 
11250
+  n = __builtin_tx_nesting_depth ();
 
11251
+
 
11252
+  __builtin_non_tx_store (mem64, 0);
 
11253
+  {
 
11254
+         const uint64_t val_var = 0x1122334455667788;
 
11255
+
 
11256
+         __builtin_non_tx_store (mem64, val_var);
 
11257
+  }
 
11258
+  __builtin_non_tx_store (mem64, (uint64_t)reg);
 
11259
+  __builtin_non_tx_store (mem64, g);
 
11260
+  __builtin_non_tx_store ((uint64_t *)0, 0);
 
11261
+  __builtin_non_tx_store ((uint64_t *)0x12345678, 0);
 
11262
+  __builtin_non_tx_store (&g, 23);
 
11263
+  __builtin_non_tx_store (&g, reg);
 
11264
+  __builtin_non_tx_store (&g, *mem);
 
11265
+  __builtin_non_tx_store (&g, global);
 
11266
+
 
11267
+  __builtin_tend();
 
11268
+
 
11269
+  __builtin_tx_assist (0);
 
11270
+  __builtin_tx_assist (1);
 
11271
+  __builtin_tx_assist (reg);
 
11272
+  __builtin_tx_assist (*mem);
 
11273
+  __builtin_tx_assist (global);
 
11274
+}
 
11275
+
 
11276
+/* The taborts must go into separate function since they are
 
11277
+   "noreturn".  */
 
11278
+
 
11279
+void
 
11280
+tabort1 ()
 
11281
+{
 
11282
+  __builtin_tabort (256);
 
11283
+}
 
11284
+
 
11285
+void
 
11286
+tabort2 (int reg)
 
11287
+{
 
11288
+  __builtin_tabort (reg);
 
11289
+}
 
11290
+
 
11291
+void
 
11292
+tabort3 (int reg)
 
11293
+{
 
11294
+  /* { dg-final { scan-assembler-times "tabort\t255" 1 } } */
 
11295
+  __builtin_tabort (reg + 255);
 
11296
+}
 
11297
+
 
11298
+void
 
11299
+tabort4 (int *mem)
 
11300
+{
 
11301
+  __builtin_tabort (*mem);
 
11302
+}
 
11303
+
 
11304
+void
 
11305
+tabort5 ()
 
11306
+{
 
11307
+  __builtin_tabort (global);
 
11308
+}
 
11309
+
 
11310
+void
 
11311
+tabort6 (int *mem)
 
11312
+{
 
11313
+  /* Here global + 255 gets reloaded into a reg.  Better would be to
 
11314
+     just reload global or *mem and get the +255 for free as address
 
11315
+     arithmetic.  */
 
11316
+  __builtin_tabort (*mem + 255);
 
11317
+}
 
11318
+
 
11319
+void
 
11320
+tabort7 ()
 
11321
+{
 
11322
+  __builtin_tabort (global + 255);
 
11323
+}
 
11324
+
 
11325
+void
 
11326
+tabort8 ()
 
11327
+{
 
11328
+  __builtin_tabort (-1);
 
11329
+}
 
11330
+
 
11331
+
 
11332
+/* Make sure the tdb NULL argument ends up as immediate value in the
 
11333
+   instruction.  */
 
11334
+/* { dg-final { scan-assembler-times "tbegin\t0," 17 } } */
 
11335
+/* { dg-final { scan-assembler-times "tbegin\t" 41 } } */
 
11336
+/* Check number of occurences of certain instructions.  */
 
11337
+/* { dg-final { scan-assembler-times "tbeginc\t" 1 } } */
 
11338
+/* { dg-final { scan-assembler-times "tabort\t" 8 } } */
 
11339
+/* { dg-final { scan-assembler "ppa\t" } } */
 
11340
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c
 
11341
===================================================================
 
11342
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c    (.../tags/gcc_4_8_2_release)
 
11343
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c    (.../branches/gcc-4_8-branch)
 
11344
@@ -0,0 +1,68 @@
 
11345
+/* Functional tests for the function hotpatching feature.  */
 
11346
+
 
11347
+/* { dg-do run } */
 
11348
+/* { dg-options "-O3 -mzarch -mno-hotpatch" } */
 
11349
+
 
11350
+#include <stdio.h>
 
11351
+
 
11352
+__attribute__ ((hotpatch))
 
11353
+void hp1(void)
 
11354
+{
 
11355
+  printf("hello, world!\n");
 
11356
+}
 
11357
+
 
11358
+__attribute__ ((hotpatch))
 
11359
+inline void hp2(void)
 
11360
+{
 
11361
+  printf("hello, world!\n");
 
11362
+}
 
11363
+
 
11364
+__attribute__ ((hotpatch))
 
11365
+__attribute__ ((always_inline))
 
11366
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
 
11367
+{
 
11368
+  printf("hello, world!\n");
 
11369
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
 
11370
+
 
11371
+__attribute__ ((hotpatch(0)))
 
11372
+void hp4(void)
 
11373
+{
 
11374
+  printf("hello, world!\n");
 
11375
+}
 
11376
+
 
11377
+__attribute__ ((hotpatch(0)))
 
11378
+inline void hp5(void)
 
11379
+{
 
11380
+  printf("hello, world!\n");
 
11381
+}
 
11382
+
 
11383
+__attribute__ ((hotpatch(0)))
 
11384
+__attribute__ ((always_inline))
 
11385
+void hp6(void) /* { dg-warning "always_inline function might not be inlinable" } */
 
11386
+{
 
11387
+  printf("hello, world!\n");
 
11388
+} /* { dg-warning "function 'hp6' with the 'always_inline' attribute is not hotpatchable" } */
 
11389
+
 
11390
+__attribute__ ((hotpatch(1)))
 
11391
+void hp7(void)
 
11392
+{
 
11393
+  printf("hello, world!\n");
 
11394
+}
 
11395
+
 
11396
+__attribute__ ((hotpatch(1)))
 
11397
+inline void hp8(void)
 
11398
+{
 
11399
+  printf("hello, world!\n");
 
11400
+}
 
11401
+
 
11402
+__attribute__ ((hotpatch(1)))
 
11403
+__attribute__ ((always_inline))
 
11404
+void hp9(void) /* { dg-warning "always_inline function might not be inlinable" } */
 
11405
+{
 
11406
+  printf("hello, world!\n");
 
11407
+} /* { dg-warning "function 'hp9' with the 'always_inline' attribute is not hotpatchable" } */
 
11408
+
 
11409
+int main (void)
 
11410
+{
 
11411
+  return 0;
 
11412
+}
 
11413
Index: gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c
 
11414
===================================================================
 
11415
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c        (.../tags/gcc_4_8_2_release)
 
11416
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c        (.../branches/gcc-4_8-branch)
 
11417
@@ -0,0 +1,13 @@
 
11418
+/* { dg-do compile } */
 
11419
+/* { dg-require-effective-target htm } */
 
11420
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
 
11421
+
 
11422
+void must_not_compile1 (void)
 
11423
+{
 
11424
+  __builtin_tabort (0); /* { dg-error "Invalid transaction abort code:" } */
 
11425
+}
 
11426
+
 
11427
+void must_not_compile2 (void)
 
11428
+{
 
11429
+  __builtin_tabort (255); /* { dg-error "Invalid transaction abort code:" } */
 
11430
+}
 
11431
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c
 
11432
===================================================================
 
11433
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c    (.../tags/gcc_4_8_2_release)
 
11434
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c    (.../branches/gcc-4_8-branch)
 
11435
@@ -0,0 +1,23 @@
 
11436
+/* Functional tests for the function hotpatching feature.  */
 
11437
+
 
11438
+/* { dg-do run } */
 
11439
+/* { dg-options "-O3 -mzarch -mhotpatch" } */
 
11440
+
 
11441
+#include <stdio.h>
 
11442
+
 
11443
+int hp1(void)
 
11444
+{
 
11445
+  int nested1(void) /* { dg-warning "hotpatching is not compatible with nested functions" } */
 
11446
+  { return 1; }
 
11447
+
 
11448
+  __attribute__ ((hotpatch))
 
11449
+  int nested2(void) /* { dg-warning "hotpatching is not compatible with nested functions" } */
 
11450
+  { return 1; }
 
11451
+
 
11452
+  return nested1() - nested2();
 
11453
+}
 
11454
+
 
11455
+int main (void)
 
11456
+{
 
11457
+  return hp1();
 
11458
+}
 
11459
Index: gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c
 
11460
===================================================================
 
11461
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c        (.../tags/gcc_4_8_2_release)
 
11462
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c        (.../branches/gcc-4_8-branch)
 
11463
@@ -0,0 +1,37 @@
 
11464
+/* This checks the availability of the XL compiler intrinsics for
 
11465
+   transactional execution with the expected prototypes.  */
 
11466
+
 
11467
+/* { dg-do compile } */
 
11468
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
 
11469
+
 
11470
+#include <htmxlintrin.h>
 
11471
+
 
11472
+int a = 0;
 
11473
+unsigned long g;
 
11474
+
 
11475
+int
 
11476
+foo ()
 
11477
+{
 
11478
+  struct __htm_tdb *tdb_struct;
 
11479
+  void * const tdb = tdb_struct;
 
11480
+  long result;
 
11481
+  unsigned char code;
 
11482
+
 
11483
+  result = __TM_simple_begin ();
 
11484
+  result = __TM_begin (tdb);
 
11485
+  result = __TM_end ();
 
11486
+  __TM_abort ();
 
11487
+  __TM_named_abort (42);
 
11488
+  __TM_non_transactional_store (&g, 42);
 
11489
+  result = __TM_nesting_depth (tdb);
 
11490
+
 
11491
+  result = __TM_is_user_abort (tdb);
 
11492
+  result = __TM_is_named_user_abort (tdb, &code);
 
11493
+  result = __TM_is_illegal (tdb);
 
11494
+  result = __TM_is_footprint_exceeded (tdb);
 
11495
+  result = __TM_is_nested_too_deep (tdb);
 
11496
+  result = __TM_is_conflict (tdb);
 
11497
+  result = __TM_is_failure_persistent (result);
 
11498
+  result = __TM_failure_address (tdb);
 
11499
+  result = __TM_failure_code (tdb);
 
11500
+}
 
11501
Index: gcc/testsuite/gcc.target/s390/s390.exp
 
11502
===================================================================
 
11503
--- a/src/gcc/testsuite/gcc.target/s390/s390.exp        (.../tags/gcc_4_8_2_release)
 
11504
+++ b/src/gcc/testsuite/gcc.target/s390/s390.exp        (.../branches/gcc-4_8-branch)
 
11505
@@ -24,6 +24,19 @@
 
11506
 # Load support procs.
 
11507
 load_lib gcc-dg.exp
 
11508
 
 
11509
+# Return 1 if htm (etnd - extract nesting depth) instructions can be
 
11510
+# compiled.
 
11511
+proc check_effective_target_htm { } {
 
11512
+    if { ![check_runtime s390_check_htm [subst {
 
11513
+       int main (void)
 
11514
+       {
 
11515
+           unsigned int nd = 77;
 
11516
+           asm (".insn rre,0xb2ec0000,%0,0" : "=d" (nd));
 
11517
+           return nd;
 
11518
+       }
 
11519
+    }]] } { return 0 } else { return 1 }
 
11520
+}
 
11521
+
 
11522
 # If a testcase doesn't have special options, use these.
 
11523
 global DEFAULT_CFLAGS
 
11524
 if ![info exists DEFAULT_CFLAGS] then {
 
11525
Index: gcc/testsuite/gcc.target/s390/hotpatch-1.c
 
11526
===================================================================
 
11527
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-1.c    (.../tags/gcc_4_8_2_release)
 
11528
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-1.c    (.../branches/gcc-4_8-branch)
 
11529
@@ -0,0 +1,20 @@
 
11530
+/* Functional tests for the function hotpatching feature.  */
 
11531
+
 
11532
+/* { dg-do run } */
 
11533
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
 
11534
+
 
11535
+#include <stdio.h>
 
11536
+
 
11537
+void hp1(void)
 
11538
+{
 
11539
+  printf("hello, world!\n");
 
11540
+}
 
11541
+
 
11542
+int main (void)
 
11543
+{
 
11544
+  return 0;
 
11545
+}
 
11546
+
 
11547
+/* Check number of occurences of certain instructions.  */
 
11548
+/* { dg-final { scan-assembler-times "nopr\t%r7" 12 } } */
 
11549
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
 
11550
Index: gcc/testsuite/gcc.target/s390/hotpatch-2.c
 
11551
===================================================================
 
11552
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-2.c    (.../tags/gcc_4_8_2_release)
 
11553
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-2.c    (.../branches/gcc-4_8-branch)
 
11554
@@ -0,0 +1,20 @@
 
11555
+/* Functional tests for the function hotpatching feature.  */
 
11556
+
 
11557
+/* { dg-do run } */
 
11558
+/* { dg-options "-O3 -mzarch -mhotpatch=1 --save-temps" } */
 
11559
+
 
11560
+#include <stdio.h>
 
11561
+
 
11562
+void hp1(void)
 
11563
+{
 
11564
+  printf("hello, world!\n");
 
11565
+}
 
11566
+
 
11567
+int main (void)
 
11568
+{
 
11569
+  return 0;
 
11570
+}
 
11571
+
 
11572
+/* Check number of occurences of certain instructions.  */
 
11573
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
 
11574
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
 
11575
Index: gcc/testsuite/gcc.target/s390/hotpatch-3.c
 
11576
===================================================================
 
11577
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-3.c    (.../tags/gcc_4_8_2_release)
 
11578
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-3.c    (.../branches/gcc-4_8-branch)
 
11579
@@ -0,0 +1,20 @@
 
11580
+/* Functional tests for the function hotpatching feature.  */
 
11581
+
 
11582
+/* { dg-do run } */
 
11583
+/* { dg-options "-O3 -mzarch -mhotpatch=0 --save-temps" } */
 
11584
+
 
11585
+#include <stdio.h>
 
11586
+
 
11587
+void hp1(void)
 
11588
+{
 
11589
+  printf("hello, world!\n");
 
11590
+}
 
11591
+
 
11592
+int main (void)
 
11593
+{
 
11594
+  return 0;
 
11595
+}
 
11596
+
 
11597
+/* Check number of occurences of certain instructions.  */
 
11598
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
 
11599
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
 
11600
Index: gcc/testsuite/gcc.target/s390/hotpatch-4.c
 
11601
===================================================================
 
11602
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-4.c    (.../tags/gcc_4_8_2_release)
 
11603
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-4.c    (.../branches/gcc-4_8-branch)
 
11604
@@ -0,0 +1,26 @@
 
11605
+/* Functional tests for the function hotpatching feature.  */
 
11606
+
 
11607
+/* { dg-do run } */
 
11608
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
 
11609
+
 
11610
+#include <stdio.h>
 
11611
+
 
11612
+inline void hp1(void)
 
11613
+{
 
11614
+  printf("hello, world!\n");
 
11615
+}
 
11616
+
 
11617
+__attribute__ ((always_inline))
 
11618
+void hp2(void) /* { dg-warning "always_inline function might not be inlinable" } */
 
11619
+{
 
11620
+  printf("hello, world!\n");
 
11621
+} /* { dg-warning "function 'hp2' with the 'always_inline' attribute is not hotpatchable" } */
 
11622
+
 
11623
+int main (void)
 
11624
+{
 
11625
+  return 0;
 
11626
+}
 
11627
+
 
11628
+/* Check number of occurences of certain instructions.  */
 
11629
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
 
11630
+/* { dg-final { scan-assembler-not "nop\t0" } } */
 
11631
Index: gcc/testsuite/gcc.target/s390/hotpatch-5.c
 
11632
===================================================================
 
11633
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-5.c    (.../tags/gcc_4_8_2_release)
 
11634
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-5.c    (.../branches/gcc-4_8-branch)
 
11635
@@ -0,0 +1,21 @@
 
11636
+/* Functional tests for the function hotpatching feature.  */
 
11637
+
 
11638
+/* { dg-do run } */
 
11639
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
 
11640
+
 
11641
+#include <stdio.h>
 
11642
+
 
11643
+__attribute__ ((hotpatch))
 
11644
+void hp1(void)
 
11645
+{
 
11646
+  printf("hello, world!\n");
 
11647
+}
 
11648
+
 
11649
+int main (void)
 
11650
+{
 
11651
+  return 0;
 
11652
+}
 
11653
+
 
11654
+/* Check number of occurences of certain instructions.  */
 
11655
+/* { dg-final { scan-assembler-times "nopr\t%r7" 12 } } */
 
11656
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
 
11657
Index: gcc/testsuite/gcc.target/s390/hotpatch-6.c
 
11658
===================================================================
 
11659
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-6.c    (.../tags/gcc_4_8_2_release)
 
11660
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-6.c    (.../branches/gcc-4_8-branch)
 
11661
@@ -0,0 +1,21 @@
 
11662
+/* Functional tests for the function hotpatching feature.  */
 
11663
+
 
11664
+/* { dg-do run } */
 
11665
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
 
11666
+
 
11667
+#include <stdio.h>
 
11668
+
 
11669
+__attribute__ ((hotpatch(1)))
 
11670
+void hp1(void)
 
11671
+{
 
11672
+  printf("hello, world!\n");
 
11673
+}
 
11674
+
 
11675
+int main (void)
 
11676
+{
 
11677
+  return 0;
 
11678
+}
 
11679
+
 
11680
+/* Check number of occurences of certain instructions.  */
 
11681
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
 
11682
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
 
11683
Index: gcc/testsuite/gcc.target/s390/htm-builtins-1.c
 
11684
===================================================================
 
11685
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-1.c        (.../tags/gcc_4_8_2_release)
 
11686
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-1.c        (.../branches/gcc-4_8-branch)
 
11687
@@ -0,0 +1,1073 @@
 
11688
+/* Functional tests of the htm __builtin_... macros.  */
 
11689
+
 
11690
+/* { dg-do run } */
 
11691
+/* { dg-require-effective-target htm } */
 
11692
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
 
11693
+
 
11694
+/* ---------------------------- included header files ---------------------- */
 
11695
+
 
11696
+#include <stdio.h>
 
11697
+#include <string.h>
 
11698
+#include <stdint.h>
 
11699
+#include <htmintrin.h>
 
11700
+
 
11701
+/* ---------------------------- local definitions -------------------------- */
 
11702
+
 
11703
+#define DEFAULT_MAX_REPETITIONS 5
 
11704
+#define DEFAULT_REQUIRED_QUORUM ((DEFAULT_MAX_REPETITIONS) - 1)
 
11705
+#define NUM_WARMUP_RUNS 10
 
11706
+
 
11707
+/* ---------------------------- local macros ------------------------------- */
 
11708
+
 
11709
+#define TEST_DF_REP(name) \
 
11710
+  { #name, name, DEFAULT_MAX_REPETITIONS, DEFAULT_REQUIRED_QUORUM }
 
11711
+#define TEST_NO_REP(name) { #name, name, 1, 1 }
 
11712
+
 
11713
+/* ---------------------------- local types -------------------------------- */
 
11714
+
 
11715
+typedef int (*test_func_t)(void);
 
11716
+
 
11717
+typedef struct
 
11718
+{
 
11719
+  const char *name;
 
11720
+  test_func_t test_func;
 
11721
+  int max_repetitions;
 
11722
+  int required_quorum;
 
11723
+} test_table_entry_t;
 
11724
+
 
11725
+/* ---------------------------- local variables ---------------------------- */
 
11726
+
 
11727
+__attribute__ ((aligned(256))) static struct __htm_tdb local_tdb256;
 
11728
+static struct __htm_tdb local_tdb;
 
11729
+static int do_dump_tdb = 0;
 
11730
+
 
11731
+/* ---------------------------- exported variables (globals) --------------- */
 
11732
+
 
11733
+__attribute__ ((aligned(256))) struct
 
11734
+{
 
11735
+  float float_1;
 
11736
+  float float_2;
 
11737
+  float float_3;
 
11738
+} global = { 1.0, 2.5, 0.0 };
 
11739
+
 
11740
+__attribute__ ((aligned(256))) struct
 
11741
+{
 
11742
+  volatile uint64_t c1;
 
11743
+  volatile uint64_t c2;
 
11744
+  volatile uint64_t c3;
 
11745
+} counters = { 0, 0, 0 };
 
11746
+
 
11747
+/* ---------------------------- local helper functions --------------------- */
 
11748
+
 
11749
+static void dump_tdb (struct __htm_tdb *tdb)
 
11750
+{
 
11751
+  unsigned char *p;
 
11752
+  int i;
 
11753
+  int j;
 
11754
+
 
11755
+  if (do_dump_tdb == 0)
 
11756
+    {
 
11757
+      return;
 
11758
+    }
 
11759
+  p = (unsigned char *)tdb;
 
11760
+  for (i = 0; i < 16; i++)
 
11761
+    {
 
11762
+      fprintf (stderr, "0x%02x  ", i * 16);
 
11763
+      for (j = 0; j < 16; j++)
 
11764
+       {
 
11765
+         fprintf (stderr, "%02x", (int)p[i * 16 + j]);
 
11766
+         if (j < 15)
 
11767
+           {
 
11768
+             fprintf (stderr, " ");
 
11769
+           }
 
11770
+         if (j == 7)
 
11771
+           {
 
11772
+             fprintf (stderr, " ");
 
11773
+           }
 
11774
+       }
 
11775
+      fprintf (stderr, "\n");
 
11776
+    }
 
11777
+
 
11778
+  return;
 
11779
+}
 
11780
+
 
11781
+/* ---------------------------- local test functions ----------------------- */
 
11782
+
 
11783
+/* Check values of the constants defined in htmintrin.h.  */
 
11784
+static int test_constants (void)
 
11785
+{
 
11786
+  if (_HTM_TBEGIN_STARTED != 0)
 
11787
+    {
 
11788
+      return 100 * _HTM_TBEGIN_STARTED + 1;
 
11789
+    }
 
11790
+  if (_HTM_TBEGIN_INDETERMINATE != 1)
 
11791
+    {
 
11792
+      return 100 * _HTM_TBEGIN_INDETERMINATE + 2;
 
11793
+    }
 
11794
+  if (_HTM_TBEGIN_TRANSIENT != 2)
 
11795
+    {
 
11796
+      return 100 * _HTM_TBEGIN_TRANSIENT + 3;
 
11797
+    }
 
11798
+  if (_HTM_TBEGIN_PERSISTENT != 3)
 
11799
+    {
 
11800
+      return 100 * _HTM_TBEGIN_PERSISTENT + 4;
 
11801
+    }
 
11802
+
 
11803
+  return 0;
 
11804
+}
 
11805
+
 
11806
+static int test_tbegin_ntstg_tend (void)
 
11807
+{
 
11808
+  int rc;
 
11809
+
 
11810
+  counters.c1 = 0;
 
11811
+  counters.c2 = 0;
 
11812
+  if ((rc = __builtin_tbegin ((void *)0)) == 0)
 
11813
+    {
 
11814
+      __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
 
11815
+      counters.c2 = 2;
 
11816
+      rc = __builtin_tend ();
 
11817
+      if (rc != 0)
 
11818
+       {
 
11819
+         return 100 * rc + 5;
 
11820
+       }
 
11821
+      if (counters.c1 != 1)
 
11822
+       {
 
11823
+         return 100 * counters.c1 + 2;
 
11824
+       }
 
11825
+      if (counters.c2 != 2)
 
11826
+       {
 
11827
+         return 100 * counters.c2 + 3;
 
11828
+       }
 
11829
+    }
 
11830
+  else
 
11831
+    {
 
11832
+      return 100 * rc + 4;
 
11833
+    }
 
11834
+
 
11835
+  return 0;
 
11836
+}
 
11837
+
 
11838
+static int test_tbegin_ntstg_tabort (void)
 
11839
+{
 
11840
+  float f;
 
11841
+
 
11842
+  counters.c1 = 0;
 
11843
+  counters.c2 = 0;
 
11844
+  f = 0;
 
11845
+  if (__builtin_tbegin ((void *)0) == 0)
 
11846
+    {
 
11847
+      __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
 
11848
+      counters.c2 = 2;
 
11849
+      f = 1;
 
11850
+      __builtin_tabort (256);
 
11851
+      return 1;
 
11852
+    }
 
11853
+  if (counters.c1 != 1)
 
11854
+    {
 
11855
+      return 100 * counters.c1 + 2;
 
11856
+    }
 
11857
+  if (counters.c2 != 0)
 
11858
+    {
 
11859
+      return 100 * counters.c2 + 3;
 
11860
+    }
 
11861
+  if (f != 0)
 
11862
+    {
 
11863
+      return 100 * f + 4;
 
11864
+    }
 
11865
+
 
11866
+  return 0;
 
11867
+}
 
11868
+
 
11869
+static int test_tbegin_nofloat (void)
 
11870
+{
 
11871
+  int rc;
 
11872
+
 
11873
+  counters.c1 = 0;
 
11874
+  counters.c2 = 0;
 
11875
+  if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
 
11876
+    {
 
11877
+      __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
 
11878
+      counters.c2 = 2;
 
11879
+      rc = __builtin_tend ();
 
11880
+      if (rc != 0)
 
11881
+       {
 
11882
+         return 100 * rc + 5;
 
11883
+       }
 
11884
+      if (counters.c1 != 1)
 
11885
+       {
 
11886
+         return 100 * counters.c1 + 2;
 
11887
+       }
 
11888
+      if (counters.c2 != 2)
 
11889
+       {
 
11890
+         return 100 * counters.c2 + 3;
 
11891
+       }
 
11892
+    }
 
11893
+  else
 
11894
+    {
 
11895
+      return 100 * rc + 4;
 
11896
+    }
 
11897
+
 
11898
+  return 0;
 
11899
+}
 
11900
+
 
11901
+static int test_tbegin_retry (void)
 
11902
+{
 
11903
+  int rc;
 
11904
+
 
11905
+  counters.c1 = 0;
 
11906
+  counters.c2 = 0;
 
11907
+  counters.c3 = 0;
 
11908
+  if ((rc = __builtin_tbegin_retry ((void *)0, 5)) == 0)
 
11909
+    {
 
11910
+      int do_abort;
 
11911
+
 
11912
+      do_abort = (counters.c1 == 0) ? 1 : 0;
 
11913
+      __builtin_non_tx_store (
 
11914
+                            (uint64_t *)&counters.c1, counters.c1 + 1);
 
11915
+      if (do_abort == 1)
 
11916
+       {
 
11917
+         __builtin_tabort (256);
 
11918
+       }
 
11919
+      counters.c2 = counters.c2 + 10;
 
11920
+      __builtin_non_tx_store ((uint64_t *)&counters.c3, 3);
 
11921
+      rc = __builtin_tend ();
 
11922
+      if (rc != 0)
 
11923
+       {
 
11924
+         return 100 * rc + 5;
 
11925
+       }
 
11926
+      if (counters.c1 != 2)
 
11927
+       {
 
11928
+         return 100 * counters.c1 + 2;
 
11929
+       }
 
11930
+      if (counters.c2 != 10)
 
11931
+       {
 
11932
+         return 100 * counters.c2 + 3;
 
11933
+       }
 
11934
+      if (counters.c3 != 3)
 
11935
+       {
 
11936
+         return 100 * counters.c3 + 6;
 
11937
+       }
 
11938
+    }
 
11939
+  else
 
11940
+    {
 
11941
+      return 100 * rc + 4;
 
11942
+    }
 
11943
+
 
11944
+  return 0;
 
11945
+}
 
11946
+
 
11947
+static int test_tbegin_retry_nofloat (void)
 
11948
+{
 
11949
+  int rc;
 
11950
+
 
11951
+  counters.c1 = 0;
 
11952
+  counters.c2 = 0;
 
11953
+  counters.c3 = 0;
 
11954
+  if ((rc = __builtin_tbegin_retry_nofloat ((void *)0, 5)) == 0)
 
11955
+    {
 
11956
+      int do_abort;
 
11957
+
 
11958
+      do_abort = (counters.c1 == 0) ? 1 : 0;
 
11959
+      __builtin_non_tx_store (
 
11960
+                            (uint64_t *)&counters.c1, counters.c1 + 1);
 
11961
+      if (do_abort == 1)
 
11962
+       {
 
11963
+         __builtin_tabort (256);
 
11964
+       }
 
11965
+      counters.c2 = counters.c2 + 10;
 
11966
+      __builtin_non_tx_store ((uint64_t *)&counters.c3, 3);
 
11967
+      rc = __builtin_tend ();
 
11968
+      if (rc != 0)
 
11969
+       {
 
11970
+         return 100 * rc + 5;
 
11971
+       }
 
11972
+      if (counters.c1 != 2)
 
11973
+       {
 
11974
+         return 100 * counters.c1 + 2;
 
11975
+       }
 
11976
+      if (counters.c2 != 10)
 
11977
+       {
 
11978
+         return 100 * counters.c2 + 3;
 
11979
+       }
 
11980
+      if (counters.c3 != 3)
 
11981
+       {
 
11982
+         return 100 * counters.c3 + 6;
 
11983
+       }
 
11984
+    }
 
11985
+  else
 
11986
+    {
 
11987
+      return 100 * rc + 4;
 
11988
+    }
 
11989
+
 
11990
+  return 0;
 
11991
+}
 
11992
+
 
11993
+static int test_tbegin_aborts (void)
 
11994
+{
 
11995
+  float f;
 
11996
+  int rc;
 
11997
+
 
11998
+  f = 77;
 
11999
+  if ((rc = __builtin_tbegin ((void *)0)) == 0)
 
12000
+    {
 
12001
+      f = 88;
 
12002
+      __builtin_tabort (256);
 
12003
+      return 2;
 
12004
+    }
 
12005
+  else if (rc != 2)
 
12006
+    {
 
12007
+      return 3;
 
12008
+    }
 
12009
+  if (f != 77)
 
12010
+    {
 
12011
+      return 4;
 
12012
+    }
 
12013
+  f = 66;
 
12014
+  if ((rc = __builtin_tbegin ((void *)0)) == 0)
 
12015
+    {
 
12016
+      f = 99;
 
12017
+      __builtin_tabort (257);
 
12018
+      return 5;
 
12019
+    }
 
12020
+  else if (rc != 3)
 
12021
+    {
 
12022
+      return 100 * rc + 6;
 
12023
+    }
 
12024
+  if (f != 66)
 
12025
+    {
 
12026
+      return 100 * f + 7;
 
12027
+    }
 
12028
+  if ((rc = __builtin_tbegin ((void *)0)) == 0)
 
12029
+    {
 
12030
+      global.float_3 = global.float_1 + global.float_2;
 
12031
+      rc = __builtin_tend ();
 
12032
+      if (rc != 0)
 
12033
+       {
 
12034
+         return 100 * rc + 8;
 
12035
+       }
 
12036
+    }
 
12037
+  else
 
12038
+    {
 
12039
+      return 100 * rc + 9;
 
12040
+    }
 
12041
+  if (global.float_3 != global.float_1 + global.float_2)
 
12042
+    {
 
12043
+      return 100 * rc + 10;
 
12044
+    }
 
12045
+
 
12046
+  return 0;
 
12047
+}
 
12048
+
 
12049
+static __attribute__((noinline)) void indirect_abort(int abort_code)
 
12050
+{
 
12051
+  __builtin_tabort (abort_code);
 
12052
+
 
12053
+  return;
 
12054
+}
 
12055
+
 
12056
+static int test_tbegin_indirect_aborts (void)
 
12057
+{
 
12058
+  float f;
 
12059
+  int rc;
 
12060
+
 
12061
+  f = 77;
 
12062
+  if ((rc = __builtin_tbegin ((void *)0)) == 0)
 
12063
+    {
 
12064
+      f = 88;
 
12065
+      indirect_abort(256);
 
12066
+      return 2;
 
12067
+    }
 
12068
+  else if (rc != 2)
 
12069
+    {
 
12070
+      return 100 * rc + 3;
 
12071
+    }
 
12072
+  if (f != 77)
 
12073
+    {
 
12074
+      return 100 * rc + 4;
 
12075
+    }
 
12076
+  f = 66;
 
12077
+  if ((rc = __builtin_tbegin ((void *)0)) == 0)
 
12078
+    {
 
12079
+      f = 99;
 
12080
+      indirect_abort(257);
 
12081
+      return 5;
 
12082
+    }
 
12083
+  else if (rc != 3)
 
12084
+    {
 
12085
+      return 100 * rc + 6;
 
12086
+    }
 
12087
+  if (f != 66)
 
12088
+    {
 
12089
+      return 100 * f + 7;
 
12090
+    }
 
12091
+
 
12092
+  return 0;
 
12093
+}
 
12094
+
 
12095
+static int test_tbegin_nofloat_aborts (void)
 
12096
+{
 
12097
+  int rc;
 
12098
+
 
12099
+  if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
 
12100
+    {
 
12101
+      __builtin_tabort (256);
 
12102
+      return 2;
 
12103
+    }
 
12104
+  if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
 
12105
+    {
 
12106
+      __builtin_tabort (257);
 
12107
+      return 1005;
 
12108
+    }
 
12109
+  else if (rc != 3)
 
12110
+    {
 
12111
+      return 1000 * rc + 6;
 
12112
+    }
 
12113
+
 
12114
+  return 0;
 
12115
+}
 
12116
+
 
12117
+static int test_tbegin_nofloat_indirect_aborts (void)
 
12118
+{
 
12119
+  int rc;
 
12120
+
 
12121
+  if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
 
12122
+    {
 
12123
+      indirect_abort (256);
 
12124
+      return 2;
 
12125
+    }
 
12126
+  if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
 
12127
+    {
 
12128
+      indirect_abort (257);
 
12129
+      return 1005;
 
12130
+    }
 
12131
+  else if (rc != 3)
 
12132
+    {
 
12133
+      return 1000 * rc + 6;
 
12134
+    }
 
12135
+
 
12136
+  return 0;
 
12137
+}
 
12138
+
 
12139
+static
 
12140
+int _test_tbegin_retry_aborts (int retries, uint64_t abort_code)
 
12141
+{
 
12142
+  int rc;
 
12143
+
 
12144
+  counters.c1 = 0;
 
12145
+  if ((rc = __builtin_tbegin_retry ((void *)0, retries)) == 0)
 
12146
+    {
 
12147
+      __builtin_non_tx_store ((uint64_t *)&counters.c1, counters.c1 + 1);
 
12148
+      __builtin_tabort (abort_code);
 
12149
+      return 2;
 
12150
+    }
 
12151
+  else
 
12152
+    {
 
12153
+      if ((abort_code & 1) == 0)
 
12154
+       {
 
12155
+         if (rc != 2)
 
12156
+           {
 
12157
+             return 100 * rc + 2003;
 
12158
+           }
 
12159
+         else if (counters.c1 != (uint64_t)retries + 1)
 
12160
+           {
 
12161
+             return 1000 * counters.c1 + 100 * retries + 4;
 
12162
+           }
 
12163
+       }
 
12164
+      else
 
12165
+       {
 
12166
+         if (rc != 3)
 
12167
+           {
 
12168
+             return 100 * rc + 3005;
 
12169
+           }
 
12170
+         else if (counters.c1 != 1)
 
12171
+           {
 
12172
+             return 1000 * counters.c1 + 100 * retries + 6;
 
12173
+           }
 
12174
+       }
 
12175
+    }
 
12176
+
 
12177
+  return 0;
 
12178
+}
 
12179
+
 
12180
+static int test_tbegin_retry_aborts (void)
 
12181
+{
 
12182
+  int rc;
 
12183
+  int retries;
 
12184
+
 
12185
+  for (retries = 1; retries <= 3; retries++)
 
12186
+    {
 
12187
+      rc = _test_tbegin_retry_aborts (retries, 256);
 
12188
+      if (rc != 0)
 
12189
+       {
 
12190
+         return 10000 + rc;
 
12191
+       }
 
12192
+    }
 
12193
+  for (retries = 1; retries <= 3; retries++)
 
12194
+    {
 
12195
+      rc = _test_tbegin_retry_aborts (retries, 257);
 
12196
+      if (rc != 0)
 
12197
+       {
 
12198
+         return 20000 + rc;
 
12199
+       }
 
12200
+    }
 
12201
+  if ((rc = __builtin_tbegin_retry ((void *)0, 5)) == 0)
 
12202
+    {
 
12203
+      global.float_3 = global.float_1 + global.float_2;
 
12204
+      rc = __builtin_tend ();
 
12205
+      if (rc != 0)
 
12206
+       {
 
12207
+         return 30000 + 100 * rc + 6;
 
12208
+       }
 
12209
+    }
 
12210
+  else
 
12211
+    {
 
12212
+      return 30000 + 100 * rc + 7;
 
12213
+    }
 
12214
+
 
12215
+  return 0;
 
12216
+}
 
12217
+
 
12218
+static int _test_tbegin_retry_nofloat_aborts (int retries, uint64_t abort_code)
 
12219
+{
 
12220
+  int rc;
 
12221
+
 
12222
+  counters.c1 = 0;
 
12223
+  if ((rc = __builtin_tbegin_retry_nofloat ((void *)0, retries)) == 0)
 
12224
+    {
 
12225
+      __builtin_non_tx_store ((uint64_t *)&counters.c1, counters.c1 + 1);
 
12226
+      __builtin_tabort (abort_code);
 
12227
+      return 2;
 
12228
+    }
 
12229
+  else
 
12230
+    {
 
12231
+      if ((abort_code & 1) == 0)
 
12232
+       {
 
12233
+         if (rc != 2)
 
12234
+           {
 
12235
+             return 100 * rc + 2003;
 
12236
+           }
 
12237
+         else if (counters.c1 != (uint64_t)retries + 1)
 
12238
+           {
 
12239
+             return 1000 * counters.c1 + 100 * retries + 4;
 
12240
+           }
 
12241
+       }
 
12242
+      else
 
12243
+       {
 
12244
+         if (rc != 3)
 
12245
+           {
 
12246
+             return 100 * rc + 3005;
 
12247
+           }
 
12248
+         else if (counters.c1 != 1)
 
12249
+           {
 
12250
+             return 1000 * counters.c1 + 100 * retries + 6;
 
12251
+           }
 
12252
+       }
 
12253
+    }
 
12254
+
 
12255
+  return 0;
 
12256
+}
 
12257
+
 
12258
+static int test_tbegin_retry_nofloat_aborts (void)
 
12259
+{
 
12260
+  int rc;
 
12261
+  int retries;
 
12262
+
 
12263
+  for (retries = 1; retries <= 3; retries++)
 
12264
+    {
 
12265
+      rc = _test_tbegin_retry_nofloat_aborts (retries, 256);
 
12266
+      if (rc != 0)
 
12267
+       {
 
12268
+         return 10 * retries + rc;
 
12269
+       }
 
12270
+    }
 
12271
+  for (retries = 1; retries <= 3; retries++)
 
12272
+    {
 
12273
+      rc = _test_tbegin_retry_nofloat_aborts (retries, 257);
 
12274
+      if (rc != 0)
 
12275
+       {
 
12276
+         return 10000 + 10 * retries + rc;
 
12277
+       }
 
12278
+    }
 
12279
+
 
12280
+  return 0;
 
12281
+}
 
12282
+
 
12283
+static int test_tbegin_tdb (void)
 
12284
+{
 
12285
+  int rc;
 
12286
+
 
12287
+  local_tdb.format = 0;
 
12288
+  if ((rc = __builtin_tbegin (&local_tdb)) == 0)
 
12289
+    {
 
12290
+      rc = __builtin_tend ();
 
12291
+      if (rc != 0)
 
12292
+       {
 
12293
+         return 100 * rc + 1;
 
12294
+       }
 
12295
+      if (local_tdb.format != 0)
 
12296
+       {
 
12297
+         dump_tdb (&local_tdb);
 
12298
+         return 100 * local_tdb.format + 2;
 
12299
+       }
 
12300
+    }
 
12301
+  else
 
12302
+    {
 
12303
+      return 100 * rc + 3;
 
12304
+    }
 
12305
+  local_tdb.format = 0;
 
12306
+  if ((rc = __builtin_tbegin (&local_tdb)) == 0)
 
12307
+    {
 
12308
+      __builtin_tabort (257);
 
12309
+      return 4;
 
12310
+    }
 
12311
+  else
 
12312
+    {
 
12313
+      if (rc != 3)
 
12314
+       {
 
12315
+         return 100 * rc + 5;
 
12316
+       }
 
12317
+      if (local_tdb.format != 1)
 
12318
+       {
 
12319
+         dump_tdb (&local_tdb);
 
12320
+         return 100 * local_tdb.format + 6;
 
12321
+       }
 
12322
+    }
 
12323
+  local_tdb256.format = 0;
 
12324
+  if ((rc = __builtin_tbegin (&local_tdb256)) == 0)
 
12325
+    {
 
12326
+      rc = __builtin_tend ();
 
12327
+      if (rc != 0)
 
12328
+       {
 
12329
+         return 1100 * rc + 1;
 
12330
+       }
 
12331
+      if (local_tdb256.format != 0)
 
12332
+       {
 
12333
+         dump_tdb (&local_tdb256);
 
12334
+         return 1100 * local_tdb256.format + 2;
 
12335
+       }
 
12336
+    }
 
12337
+  else
 
12338
+    {
 
12339
+      return 1100 * rc + 3;
 
12340
+    }
 
12341
+  local_tdb256.format = 0;
 
12342
+  if ((rc = __builtin_tbegin (&local_tdb256)) == 0)
 
12343
+    {
 
12344
+      __builtin_tabort (257);
 
12345
+      return 2004;
 
12346
+    }
 
12347
+  else
 
12348
+    {
 
12349
+      if (rc != 3)
 
12350
+       {
 
12351
+         return 2100 * rc + 5;
 
12352
+       }
 
12353
+      if (local_tdb256.format != 1)
 
12354
+       {
 
12355
+         dump_tdb (&local_tdb256);
 
12356
+         return 2100 * local_tdb256.format + 6;
 
12357
+       }
 
12358
+    }
 
12359
+
 
12360
+  return 0;
 
12361
+}
 
12362
+
 
12363
+static int test_tbegin_nofloat_tdb (void)
 
12364
+{
 
12365
+  int rc;
 
12366
+
 
12367
+  local_tdb.format = 0;
 
12368
+  if ((rc = __builtin_tbegin_nofloat (&local_tdb)) == 0)
 
12369
+    {
 
12370
+      rc = __builtin_tend ();
 
12371
+      if (rc != 0)
 
12372
+       {
 
12373
+         return 100 * rc + 1;
 
12374
+       }
 
12375
+      if (local_tdb.format != 0)
 
12376
+       {
 
12377
+         dump_tdb (&local_tdb);
 
12378
+         return 100 * local_tdb.format + 2;
 
12379
+       }
 
12380
+    }
 
12381
+  else
 
12382
+    {
 
12383
+      return 3;
 
12384
+    }
 
12385
+  local_tdb.format = 0;
 
12386
+  if ((rc = __builtin_tbegin_nofloat (&local_tdb)) == 0)
 
12387
+    {
 
12388
+      __builtin_tabort (257);
 
12389
+      return 4;
 
12390
+    }
 
12391
+  else
 
12392
+    {
 
12393
+      if (rc != 3)
 
12394
+       {
 
12395
+         return 100 * rc + 5;
 
12396
+       }
 
12397
+      if (local_tdb.format != 1)
 
12398
+       {
 
12399
+         dump_tdb (&local_tdb);
 
12400
+         return 100 * local_tdb.format + 6;
 
12401
+       }
 
12402
+    }
 
12403
+  local_tdb256.format = 0;
 
12404
+  if ((rc = __builtin_tbegin_nofloat (&local_tdb256)) == 0)
 
12405
+    {
 
12406
+      rc = __builtin_tend ();
 
12407
+      if (rc != 0)
 
12408
+       {
 
12409
+         return 1100 * rc + 1;
 
12410
+       }
 
12411
+      if (local_tdb256.format != 0)
 
12412
+       {
 
12413
+         dump_tdb (&local_tdb256);
 
12414
+         return 1100 * local_tdb256.format + 2;
 
12415
+       }
 
12416
+    }
 
12417
+  else
 
12418
+    {
 
12419
+      return 1003;
 
12420
+    }
 
12421
+  local_tdb256.format = 0;
 
12422
+  if ((rc = __builtin_tbegin_nofloat (&local_tdb256)) == 0)
 
12423
+    {
 
12424
+      __builtin_tabort (257);
 
12425
+      return 2004;
 
12426
+    }
 
12427
+  else
 
12428
+    {
 
12429
+      if (rc != 3)
 
12430
+       {
 
12431
+         return 2100 * rc + 5;
 
12432
+       }
 
12433
+      if (local_tdb256.format != 1)
 
12434
+       {
 
12435
+         dump_tdb (&local_tdb256);
 
12436
+         return 2100 * local_tdb256.format + 6;
 
12437
+       }
 
12438
+    }
 
12439
+
 
12440
+  return 0;
 
12441
+}
 
12442
+
 
12443
+static int test_tbegin_retry_tdb (void)
 
12444
+{
 
12445
+  int rc;
 
12446
+
 
12447
+  local_tdb256.format = 0;
 
12448
+  if ((rc = __builtin_tbegin_retry (&local_tdb256, 2)) == 0)
 
12449
+    {
 
12450
+      rc = __builtin_tend ();
 
12451
+      if (rc != 0)
 
12452
+       {
 
12453
+         return 1100 * rc + 1;
 
12454
+       }
 
12455
+      if (local_tdb256.format != 0)
 
12456
+       {
 
12457
+         dump_tdb (&local_tdb256);
 
12458
+         return 1100 * local_tdb256.format + 2;
 
12459
+       }
 
12460
+    }
 
12461
+  else
 
12462
+    {
 
12463
+      return 1003;
 
12464
+    }
 
12465
+  local_tdb256.format = 0;
 
12466
+  if ((rc = __builtin_tbegin_retry (&local_tdb256, 2)) == 0)
 
12467
+    {
 
12468
+      __builtin_tabort (257);
 
12469
+      return 2004;
 
12470
+    }
 
12471
+  else
 
12472
+    {
 
12473
+      if (rc != 3)
 
12474
+       {
 
12475
+         return 2100 * rc + 5;
 
12476
+       }
 
12477
+      if (local_tdb256.format != 1)
 
12478
+       {
 
12479
+         dump_tdb (&local_tdb256);
 
12480
+         return 2100 * local_tdb256.format + 6;
 
12481
+       }
 
12482
+    }
 
12483
+
 
12484
+  return 0;
 
12485
+}
 
12486
+
 
12487
+static int test_tbegin_retry_nofloat_tdb (void)
 
12488
+{
 
12489
+  int rc;
 
12490
+
 
12491
+  local_tdb.format = 0;
 
12492
+  if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb, 2)) == 0)
 
12493
+    {
 
12494
+      rc = __builtin_tend ();
 
12495
+      if (rc != 0)
 
12496
+       {
 
12497
+         return 100 * rc + 1;
 
12498
+       }
 
12499
+      if (local_tdb.format != 0)
 
12500
+       {
 
12501
+         dump_tdb (&local_tdb);
 
12502
+         return 100 * local_tdb.format + 2;
 
12503
+       }
 
12504
+    }
 
12505
+  else
 
12506
+    {
 
12507
+      return 100 * rc + 3;
 
12508
+    }
 
12509
+  local_tdb.format = 0;
 
12510
+  if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb, 2)) == 0)
 
12511
+    {
 
12512
+      __builtin_tabort (257);
 
12513
+      return 4;
 
12514
+    }
 
12515
+  else
 
12516
+    {
 
12517
+      if (rc != 3)
 
12518
+       {
 
12519
+         return 100 * rc + 5;
 
12520
+       }
 
12521
+      if (local_tdb.format != 1)
 
12522
+       {
 
12523
+         dump_tdb (&local_tdb);
 
12524
+         return 100 * local_tdb.format + 6;
 
12525
+       }
 
12526
+    }
 
12527
+  local_tdb256.format = 0;
 
12528
+  if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb256, 2)) == 0)
 
12529
+    {
 
12530
+      rc = __builtin_tend ();
 
12531
+      if (rc != 0)
 
12532
+       {
 
12533
+         return 1100 * rc + 1;
 
12534
+       }
 
12535
+      if (local_tdb256.format != 0)
 
12536
+       {
 
12537
+         dump_tdb (&local_tdb256);
 
12538
+         return 1100 * local_tdb256.format + 2;
 
12539
+       }
 
12540
+    }
 
12541
+  else
 
12542
+    {
 
12543
+      return 1100 * rc + 3;
 
12544
+    }
 
12545
+  local_tdb256.format = 0;
 
12546
+  if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb256, 2)) == 0)
 
12547
+    {
 
12548
+      __builtin_tabort (257);
 
12549
+      return 2004;
 
12550
+    }
 
12551
+  else
 
12552
+    {
 
12553
+      if (rc != 3)
 
12554
+       {
 
12555
+         return 2100 * rc + 5;
 
12556
+       }
 
12557
+      if (local_tdb256.format != 1)
 
12558
+       {
 
12559
+         dump_tdb (&local_tdb256);
 
12560
+         return 2100 * local_tdb256.format + 6;
 
12561
+       }
 
12562
+    }
 
12563
+
 
12564
+  return 0;
 
12565
+}
 
12566
+
 
12567
+static int test_etnd (void)
 
12568
+{
 
12569
+  int rc;
 
12570
+
 
12571
+  counters.c1 = 0;
 
12572
+  counters.c2 = 0;
 
12573
+  counters.c3 = 0;
 
12574
+  if ((rc = __builtin_tbegin ((void *)0)) == 0)
 
12575
+    {
 
12576
+      counters.c1 = __builtin_tx_nesting_depth ();
 
12577
+      if (__builtin_tbegin ((void *)0) == 0)
 
12578
+       {
 
12579
+         counters.c2 = __builtin_tx_nesting_depth ();
 
12580
+         if (__builtin_tbegin ((void *)0) == 0)
 
12581
+           {
 
12582
+             counters.c3 = __builtin_tx_nesting_depth ();
 
12583
+             __builtin_tend ();
 
12584
+           }
 
12585
+         __builtin_tend ();
 
12586
+       }
 
12587
+      __builtin_tend ();
 
12588
+    }
 
12589
+  else
 
12590
+    {
 
12591
+      return 100 * rc + 1;
 
12592
+    }
 
12593
+  if (counters.c1 != 1)
 
12594
+    {
 
12595
+      return 100 * counters.c1 + 2;
 
12596
+    }
 
12597
+  if (counters.c2 != 2)
 
12598
+    {
 
12599
+      return 100 * counters.c2 + 3;
 
12600
+    }
 
12601
+  if (counters.c3 != 3)
 
12602
+    {
 
12603
+      return 100 * counters.c3 + 4;
 
12604
+    }
 
12605
+
 
12606
+  return 0;
 
12607
+}
 
12608
+
 
12609
+static int test_tbeginc (void)
 
12610
+{
 
12611
+  int rc;
 
12612
+
 
12613
+  counters.c1 = 0;
 
12614
+  __builtin_tbeginc ();
 
12615
+  counters.c1 = 1;
 
12616
+  rc = __builtin_tend ();
 
12617
+  if (rc != 0)
 
12618
+    {
 
12619
+      return 10000 * rc + 1;
 
12620
+    }
 
12621
+  if (counters.c1 != 1)
 
12622
+    {
 
12623
+      return 100000 * counters.c1 + 3;
 
12624
+    }
 
12625
+
 
12626
+  return 0;
 
12627
+}
 
12628
+
 
12629
+/* ---------------------------- local testing framework functions ---------- */
 
12630
+
 
12631
+static int run_one_test (const test_table_entry_t *test_entry)
 
12632
+{
 
12633
+  int do_print_passes;
 
12634
+  int succeeded;
 
12635
+  int rc;
 
12636
+  int i;
 
12637
+
 
12638
+  /* Warmup run to get all necessary data and instruction pages into the page
 
12639
+   * tables.  */
 
12640
+  {
 
12641
+    int run;
 
12642
+
 
12643
+    do_dump_tdb = 0;
 
12644
+    for (run = 0; run < NUM_WARMUP_RUNS; run++)
 
12645
+      {
 
12646
+       test_entry->test_func ();
 
12647
+      }
 
12648
+    do_dump_tdb = 1;
 
12649
+  }
 
12650
+  do_print_passes = (
 
12651
+                    test_entry->required_quorum != 1 ||
 
12652
+                    test_entry->max_repetitions != 1);
 
12653
+  printf ("RRR RUN  %s\n", test_entry->name);
 
12654
+  if (do_print_passes == 1)
 
12655
+    {
 
12656
+      printf (
 
12657
+            "         (requires %d successful out of %d runs)\n",
 
12658
+            test_entry->required_quorum,
 
12659
+            test_entry->max_repetitions);
 
12660
+    }
 
12661
+  succeeded = 0;
 
12662
+  rc = 0;
 
12663
+  for (rc = 0, i = 0; i < test_entry->max_repetitions; i++)
 
12664
+    {
 
12665
+      if (do_print_passes == 1)
 
12666
+       {
 
12667
+         if (i == 0)
 
12668
+           {
 
12669
+             printf ("        ");
 
12670
+           }
 
12671
+         else
 
12672
+           {
 
12673
+             printf (",");
 
12674
+           }
 
12675
+       }
 
12676
+      rc = test_entry->test_func ();
 
12677
+      if (rc == 0)
 
12678
+       {
 
12679
+         if (do_print_passes == 1)
 
12680
+           {
 
12681
+             printf (" success");
 
12682
+           }
 
12683
+         succeeded++;
 
12684
+         if (succeeded >= test_entry->required_quorum)
 
12685
+           {
 
12686
+             break;
 
12687
+           }
 
12688
+       }
 
12689
+      else
 
12690
+       {
 
12691
+         printf (" failed (rc = %d)", rc);
 
12692
+       }
 
12693
+    }
 
12694
+  if (do_print_passes == 1 || rc != 0)
 
12695
+    {
 
12696
+      printf ("\n");
 
12697
+    }
 
12698
+  if (succeeded >= test_entry->required_quorum)
 
12699
+    {
 
12700
+      printf ("+++ OK   %s\n", test_entry->name);
 
12701
+
 
12702
+      return 0;
 
12703
+    }
 
12704
+  else
 
12705
+    {
 
12706
+      printf ("--- FAIL %s\n", test_entry->name);
 
12707
+
 
12708
+      return (rc != 0) ? rc : -1;
 
12709
+    }
 
12710
+}
 
12711
+
 
12712
+static int run_all_tests (const test_table_entry_t *test_table)
 
12713
+{
 
12714
+  const test_table_entry_t *test;
 
12715
+  int rc;
 
12716
+
 
12717
+  for (
 
12718
+       rc = 0, test = &test_table[0];
 
12719
+       test->test_func != NULL && rc == 0; test++)
 
12720
+    {
 
12721
+      rc = run_one_test (test);
 
12722
+    }
 
12723
+
 
12724
+  return rc;
 
12725
+}
 
12726
+
 
12727
+/* ---------------------------- interface functions ------------------------ */
 
12728
+
 
12729
+int main (void)
 
12730
+{
 
12731
+  const test_table_entry_t test_table[] = {
 
12732
+    TEST_NO_REP (test_constants),
 
12733
+    TEST_DF_REP (test_tbegin_ntstg_tend),
 
12734
+    TEST_DF_REP (test_tbegin_ntstg_tabort),
 
12735
+    TEST_DF_REP (test_tbegin_nofloat),
 
12736
+    TEST_NO_REP (test_tbegin_retry),
 
12737
+    TEST_NO_REP (test_tbegin_retry_nofloat),
 
12738
+    TEST_DF_REP (test_tbegin_aborts),
 
12739
+    TEST_DF_REP (test_tbegin_indirect_aborts),
 
12740
+    TEST_DF_REP (test_tbegin_nofloat_aborts),
 
12741
+    TEST_DF_REP (test_tbegin_nofloat_indirect_aborts),
 
12742
+    TEST_NO_REP (test_tbegin_retry_aborts),
 
12743
+    TEST_NO_REP (test_tbegin_retry_nofloat_aborts),
 
12744
+    TEST_DF_REP (test_tbegin_tdb),
 
12745
+    TEST_DF_REP (test_tbegin_nofloat_tdb),
 
12746
+    TEST_NO_REP (test_tbegin_retry_tdb),
 
12747
+    TEST_NO_REP (test_tbegin_retry_nofloat_tdb),
 
12748
+    TEST_DF_REP (test_etnd),
 
12749
+    TEST_DF_REP (test_tbeginc),
 
12750
+    { (void *)0, 0, 0 }
 
12751
+  };
 
12752
+
 
12753
+  {
 
12754
+    int rc;
 
12755
+
 
12756
+    rc = run_all_tests (test_table);
 
12757
+
 
12758
+    return rc;
 
12759
+  }
 
12760
+}
 
12761
Index: gcc/testsuite/gcc.target/s390/hotpatch-7.c
 
12762
===================================================================
 
12763
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-7.c    (.../tags/gcc_4_8_2_release)
 
12764
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-7.c    (.../branches/gcc-4_8-branch)
 
12765
@@ -0,0 +1,21 @@
 
12766
+/* Functional tests for the function hotpatching feature.  */
 
12767
+
 
12768
+/* { dg-do run } */
 
12769
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
 
12770
+
 
12771
+#include <stdio.h>
 
12772
+
 
12773
+__attribute__ ((hotpatch(0)))
 
12774
+void hp1(void)
 
12775
+{
 
12776
+  printf("hello, world!\n");
 
12777
+}
 
12778
+
 
12779
+int main (void)
 
12780
+{
 
12781
+  return 0;
 
12782
+}
 
12783
+
 
12784
+/* Check number of occurences of certain instructions.  */
 
12785
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
 
12786
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
 
12787
Index: gcc/testsuite/gcc.target/s390/htm-builtins-2.c
 
12788
===================================================================
 
12789
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-2.c        (.../tags/gcc_4_8_2_release)
 
12790
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-2.c        (.../branches/gcc-4_8-branch)
 
12791
@@ -0,0 +1,682 @@
 
12792
+/* Functional tests of the htm __TM_... macros.  */
 
12793
+
 
12794
+/* { dg-do run } */
 
12795
+/* { dg-require-effective-target htm } */
 
12796
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
 
12797
+
 
12798
+/* ---------------------------- included header files ---------------------- */
 
12799
+
 
12800
+#include <stdio.h>
 
12801
+#include <string.h>
 
12802
+#include <inttypes.h>
 
12803
+#include <htmxlintrin.h>
 
12804
+
 
12805
+/* ---------------------------- local definitions -------------------------- */
 
12806
+
 
12807
+#define DEFAULT_MAX_REPETITIONS 5
 
12808
+#define DEFAULT_REQUIRED_QUORUM ((DEFAULT_MAX_REPETITIONS) - 1)
 
12809
+#define DEFAULT_ABORT_ADDRESS (0x12345678u)
 
12810
+
 
12811
+/* ---------------------------- local macros ------------------------------- */
 
12812
+
 
12813
+#define TEST_DF_REP(name) \
 
12814
+  { #name, name, DEFAULT_MAX_REPETITIONS, DEFAULT_REQUIRED_QUORUM }
 
12815
+#define TEST_NO_REP(name) { #name, name, 1, 1 }
 
12816
+
 
12817
+/* ---------------------------- local types -------------------------------- */
 
12818
+
 
12819
+typedef int (*test_func_t)(void);
 
12820
+
 
12821
+typedef struct
 
12822
+{
 
12823
+  const char *name;
 
12824
+  test_func_t test_func;
 
12825
+  int max_repetitions;
 
12826
+  int required_quorum;
 
12827
+} test_table_entry_t;
 
12828
+
 
12829
+typedef enum
 
12830
+{
 
12831
+  ABORT_T_SYSTEM = 0,
 
12832
+  ABORT_T_USER = 1,
 
12833
+} abort_user_t;
 
12834
+
 
12835
+typedef enum
 
12836
+{
 
12837
+  ABORT_T_NONE = 0,
 
12838
+  ABORT_T_ILLEGAL,
 
12839
+  ABORT_T_FOOTPRINT_EXCEEDED,
 
12840
+  ABORT_T_NESTED_TOO_DEEP,
 
12841
+  ABORT_T_CONFLICT,
 
12842
+
 
12843
+  ABORT_T_INVALID_ABORT_CODE
 
12844
+} abort_t;
 
12845
+
 
12846
+/* ---------------------------- local variables ---------------------------- */
 
12847
+
 
12848
+__attribute__ ((aligned(256))) static struct __htm_tdb local_tdb256;
 
12849
+static struct __htm_tdb local_tdb;
 
12850
+
 
12851
+static abort_t const abort_classes[] =
 
12852
+{
 
12853
+  ABORT_T_INVALID_ABORT_CODE,
 
12854
+  ABORT_T_NONE,
 
12855
+  ABORT_T_NONE,
 
12856
+  ABORT_T_NONE,
 
12857
+
 
12858
+  ABORT_T_ILLEGAL,
 
12859
+  ABORT_T_NONE,
 
12860
+  ABORT_T_NONE,
 
12861
+  ABORT_T_FOOTPRINT_EXCEEDED,
 
12862
+
 
12863
+  ABORT_T_FOOTPRINT_EXCEEDED,
 
12864
+  ABORT_T_CONFLICT,
 
12865
+  ABORT_T_CONFLICT,
 
12866
+  ABORT_T_ILLEGAL,
 
12867
+
 
12868
+  ABORT_T_NONE,
 
12869
+  ABORT_T_NESTED_TOO_DEEP,
 
12870
+  ABORT_T_NONE,
 
12871
+  ABORT_T_NONE,
 
12872
+
 
12873
+  ABORT_T_NONE
 
12874
+};
 
12875
+
 
12876
+static size_t num_abort_classes = sizeof(abort_classes) / sizeof(abort_t);
 
12877
+
 
12878
+/* ---------------------------- exported variables (globals) --------------- */
 
12879
+
 
12880
+int global_int = 0;
 
12881
+uint64_t global_u64 = 0;
 
12882
+float global_float_1 = 1.0;
 
12883
+float global_float_2 = 2.5;
 
12884
+float global_float_3 = 0.0;
 
12885
+__attribute__ ((aligned(256))) struct
 
12886
+{
 
12887
+  volatile uint64_t c1;
 
12888
+  volatile uint64_t c2;
 
12889
+  volatile uint64_t c3;
 
12890
+} counters = { 0, 0, 0 };
 
12891
+
 
12892
+/* ---------------------------- local helper functions --------------------- */
 
12893
+
 
12894
+static void dump_tdb(struct __htm_tdb *tdb)
 
12895
+{
 
12896
+  unsigned char *p;
 
12897
+  int i;
 
12898
+  int j;
 
12899
+
 
12900
+  p = (unsigned char *)tdb;
 
12901
+  for (i = 0; i < 16; i++)
 
12902
+    {
 
12903
+      fprintf(stderr, "0x%02x  ", i * 16);
 
12904
+      for (j = 0; j < 16; j++)
 
12905
+       {
 
12906
+         fprintf(stderr, "%02x", (int)p[i * 16 + j]);
 
12907
+         if (j < 15)
 
12908
+           {
 
12909
+             fprintf(stderr, " ");
 
12910
+           }
 
12911
+         if (j == 7)
 
12912
+           {
 
12913
+             fprintf(stderr, " ");
 
12914
+           }
 
12915
+       }
 
12916
+      fprintf(stderr, "\n");
 
12917
+    }
 
12918
+
 
12919
+  return;
 
12920
+}
 
12921
+
 
12922
+static void make_fake_tdb(struct __htm_tdb *tdb)
 
12923
+{
 
12924
+  memset(tdb, 0, sizeof(*tdb));
 
12925
+  tdb->format = 1;
 
12926
+  tdb->nesting_depth = 1;
 
12927
+  tdb->atia = DEFAULT_ABORT_ADDRESS;
 
12928
+  tdb->abort_code = 11;
 
12929
+
 
12930
+  return;
 
12931
+}
 
12932
+
 
12933
+static int check_abort_code_in_tdb(struct __htm_tdb *tdb, uint64_t abort_code)
 
12934
+{
 
12935
+  long expect_rc;
 
12936
+  long rc;
 
12937
+
 
12938
+  if (abort_code != 0)
 
12939
+    {
 
12940
+      long addr;
 
12941
+
 
12942
+      addr = __TM_failure_address(&local_tdb);
 
12943
+      if (addr != DEFAULT_ABORT_ADDRESS)
 
12944
+       {
 
12945
+         return 11;
 
12946
+       }
 
12947
+    }
 
12948
+  {
 
12949
+    long long tdb_abort_code;
 
12950
+
 
12951
+    tdb_abort_code = __TM_failure_code(tdb);
 
12952
+    if ((uint64_t)tdb_abort_code != abort_code)
 
12953
+      {
 
12954
+       fprintf(
 
12955
+               stderr, "tm_ac %" PRIu64 ", ac %" PRIu64
 
12956
+               ", tdb_ac %" PRIu64 "\n",
 
12957
+               (uint64_t)tdb_abort_code, abort_code,
 
12958
+               (uint64_t)tdb->abort_code);
 
12959
+       return 10;
 
12960
+      }
 
12961
+  }
 
12962
+  expect_rc = (abort_code >= 256) ? 1 : 0;
 
12963
+  rc = __TM_is_user_abort(tdb);
 
12964
+  if (rc != expect_rc)
 
12965
+    {
 
12966
+      fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
 
12967
+      return 1;
 
12968
+    }
 
12969
+  {
 
12970
+    unsigned char code;
 
12971
+
 
12972
+    code = 0xffu;
 
12973
+    rc = __TM_is_named_user_abort(tdb, &code);
 
12974
+    if (rc != expect_rc)
 
12975
+      {
 
12976
+       fprintf(
 
12977
+               stderr, "rc %ld, expect_rc %ld\n", rc,
 
12978
+               expect_rc);
 
12979
+       return 2;
 
12980
+      }
 
12981
+    if (expect_rc == 1 && code != abort_code - 256)
 
12982
+      {
 
12983
+       return 3;
 
12984
+      }
 
12985
+  }
 
12986
+  if (abort_code > (uint64_t)num_abort_classes)
 
12987
+    {
 
12988
+      abort_code = (uint64_t)num_abort_classes;
 
12989
+    }
 
12990
+  expect_rc = (abort_classes[abort_code] == ABORT_T_ILLEGAL) ? 1 : 0;
 
12991
+  rc = __TM_is_illegal(tdb);
 
12992
+  if (rc != expect_rc)
 
12993
+    {
 
12994
+      dump_tdb(tdb);
 
12995
+      fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
 
12996
+      return 4;
 
12997
+    }
 
12998
+  expect_rc =
 
12999
+    (abort_classes[abort_code] == ABORT_T_FOOTPRINT_EXCEEDED) ?
 
13000
+    1 : 0;
 
13001
+  rc = __TM_is_footprint_exceeded(tdb);
 
13002
+  if (rc != expect_rc)
 
13003
+    {
 
13004
+      dump_tdb(tdb);
 
13005
+      fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
 
13006
+      return 5;
 
13007
+    }
 
13008
+  expect_rc =
 
13009
+    (abort_classes[abort_code] == ABORT_T_NESTED_TOO_DEEP) ? 1 : 0;
 
13010
+  rc = __TM_is_nested_too_deep(tdb);
 
13011
+  if (rc != expect_rc)
 
13012
+    {
 
13013
+      dump_tdb(tdb);
 
13014
+      fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
 
13015
+      return 6;
 
13016
+    }
 
13017
+  expect_rc = (abort_classes[abort_code] == ABORT_T_CONFLICT) ? 1 : 0;
 
13018
+  rc = __TM_is_conflict(tdb);
 
13019
+  if (rc != expect_rc)
 
13020
+    {
 
13021
+      dump_tdb(tdb);
 
13022
+      fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
 
13023
+      return 7;
 
13024
+    }
 
13025
+
 
13026
+  return 0;
 
13027
+}
 
13028
+
 
13029
+/* ---------------------------- local test functions ----------------------- */
 
13030
+
 
13031
+/* Not a test; make sure that the involved global cachelines are reserved for
 
13032
+ * writing.  */
 
13033
+static int init_cache(void)
 
13034
+{
 
13035
+  make_fake_tdb(&local_tdb);
 
13036
+  make_fake_tdb(&local_tdb256);
 
13037
+  global_int = 0;
 
13038
+  global_u64 = 0;
 
13039
+  global_float_1 = 1.0;
 
13040
+  global_float_2 = 2.5;
 
13041
+  global_float_3 = 0.0;
 
13042
+  counters.c1 = 0;
 
13043
+  counters.c2 = 0;
 
13044
+  counters.c3 = 0;
 
13045
+
 
13046
+  return 0;
 
13047
+}
 
13048
+
 
13049
+static int test_abort_classification(void)
 
13050
+{
 
13051
+  int i;
 
13052
+
 
13053
+  make_fake_tdb(&local_tdb);
 
13054
+  for (i = 0; i <= 256; i++)
 
13055
+    {
 
13056
+      int rc;
 
13057
+
 
13058
+      local_tdb.abort_code = (uint64_t)i;
 
13059
+      rc = check_abort_code_in_tdb(&local_tdb, (uint64_t)i);
 
13060
+      if (rc != 0)
 
13061
+       {
 
13062
+         return 100 * i + rc;
 
13063
+       }
 
13064
+    }
 
13065
+
 
13066
+  return 0;
 
13067
+}
 
13068
+
 
13069
+static int test_cc_classification(void)
 
13070
+{
 
13071
+  long rc;
 
13072
+
 
13073
+  rc = __TM_is_failure_persistent(0);
 
13074
+  if (rc != 0)
 
13075
+    {
 
13076
+      return 1;
 
13077
+    }
 
13078
+  rc = __TM_is_failure_persistent(1);
 
13079
+  if (rc != 0)
 
13080
+    {
 
13081
+      return 2;
 
13082
+    }
 
13083
+  rc = __TM_is_failure_persistent(2);
 
13084
+  if (rc != 0)
 
13085
+    {
 
13086
+      return 3;
 
13087
+    }
 
13088
+  rc = __TM_is_failure_persistent(3);
 
13089
+  if (rc != 1)
 
13090
+    {
 
13091
+      return 4;
 
13092
+    }
 
13093
+
 
13094
+  return 0;
 
13095
+}
 
13096
+
 
13097
+static int test_tbegin_ntstg_tend(void)
 
13098
+{
 
13099
+  long rc;
 
13100
+
 
13101
+  counters.c1 = 0;
 
13102
+  counters.c2 = 0;
 
13103
+  if ((rc = __TM_simple_begin()) == 0)
 
13104
+    {
 
13105
+      __TM_non_transactional_store((uint64_t *)&counters.c1, 1);
 
13106
+      counters.c2 = 2;
 
13107
+      rc = __TM_end();
 
13108
+      if (rc != 0)
 
13109
+       {
 
13110
+         return 100 * rc + 5;
 
13111
+       }
 
13112
+      if (counters.c1 != 1)
 
13113
+       {
 
13114
+         return 100 * counters.c1 + 2;
 
13115
+       }
 
13116
+      if (counters.c2 != 2)
 
13117
+       {
 
13118
+         return 100 * counters.c2 + 3;
 
13119
+       }
 
13120
+    }
 
13121
+  else
 
13122
+    {
 
13123
+      return 100 * rc + 4;
 
13124
+    }
 
13125
+
 
13126
+  return 0;
 
13127
+}
 
13128
+
 
13129
+static int test_tbegin_ntstg_tabort(void)
 
13130
+{
 
13131
+  register float f;
 
13132
+
 
13133
+  counters.c1 = 0;
 
13134
+  counters.c2 = 0;
 
13135
+  f = 0;
 
13136
+  if (__TM_simple_begin() == 0)
 
13137
+    {
 
13138
+      __TM_non_transactional_store((uint64_t *)&counters.c1, 1);
 
13139
+      counters.c2 = 2;
 
13140
+      f = 1;
 
13141
+      __TM_named_abort(0);
 
13142
+      return 1;
 
13143
+    }
 
13144
+  if (counters.c1 != 1)
 
13145
+    {
 
13146
+      return 100 * counters.c1 + 2;
 
13147
+    }
 
13148
+  if (counters.c2 != 0)
 
13149
+    {
 
13150
+      return 100 * counters.c2 + 3;
 
13151
+    }
 
13152
+  if (f != 0)
 
13153
+    {
 
13154
+      return 100 * f + 4;
 
13155
+    }
 
13156
+
 
13157
+  return 0;
 
13158
+}
 
13159
+
 
13160
+static int test_tbegin_aborts(void)
 
13161
+{
 
13162
+  float f;
 
13163
+  long rc;
 
13164
+
 
13165
+  f = 77;
 
13166
+  if ((rc = __TM_simple_begin()) == 0)
 
13167
+    {
 
13168
+      f = 88;
 
13169
+      __TM_abort();
 
13170
+      return 2;
 
13171
+    }
 
13172
+  else if (rc != 2)
 
13173
+    {
 
13174
+      return 3;
 
13175
+    }
 
13176
+  if (f != 77)
 
13177
+    {
 
13178
+      return 4;
 
13179
+    }
 
13180
+  f = 66;
 
13181
+  if ((rc = __TM_simple_begin()) == 0)
 
13182
+    {
 
13183
+      f = 99;
 
13184
+      __TM_named_abort(3);
 
13185
+      return 5;
 
13186
+    }
 
13187
+  else if (rc != 3)
 
13188
+    {
 
13189
+      return 100 * rc + 6;
 
13190
+    }
 
13191
+  if (f != 66)
 
13192
+    {
 
13193
+      return 100 * f + 7;
 
13194
+    }
 
13195
+  if ((rc = __TM_simple_begin()) == 0)
 
13196
+    {
 
13197
+      global_float_3 = global_float_1 + global_float_2;
 
13198
+      rc = __TM_end();
 
13199
+      if (rc != 0)
 
13200
+       {
 
13201
+         return 100 * rc + 8;
 
13202
+       }
 
13203
+    }
 
13204
+  else
 
13205
+    {
 
13206
+      return 100 * rc + 9;
 
13207
+    }
 
13208
+  if (global_float_3 != global_float_1 + global_float_2)
 
13209
+    {
 
13210
+      return 100 * rc + 10;
 
13211
+    }
 
13212
+
 
13213
+  return 0;
 
13214
+}
 
13215
+
 
13216
+static int test_tbegin_tdb(void)
 
13217
+{
 
13218
+  long rc;
 
13219
+
 
13220
+  local_tdb.format = 0;
 
13221
+  if ((rc = __TM_begin(&local_tdb)) == 0)
 
13222
+    {
 
13223
+      rc = __TM_end();
 
13224
+      if (rc != 0)
 
13225
+       {
 
13226
+         return 100 * rc + 1;
 
13227
+       }
 
13228
+      if (local_tdb.format != 0)
 
13229
+       {
 
13230
+         dump_tdb(&local_tdb);
 
13231
+         return 100 * local_tdb.format + 2;
 
13232
+       }
 
13233
+    }
 
13234
+  else
 
13235
+    {
 
13236
+      return 100 * rc + 3;
 
13237
+    }
 
13238
+  local_tdb.format = 0;
 
13239
+  if ((rc = __TM_begin(&local_tdb)) == 0)
 
13240
+    {
 
13241
+      __TM_named_abort(1);
 
13242
+      return 4;
 
13243
+    }
 
13244
+  else
 
13245
+    {
 
13246
+      if (rc != 3)
 
13247
+       {
 
13248
+         return 100 * rc + 5;
 
13249
+       }
 
13250
+      if (local_tdb.format != 1)
 
13251
+       {
 
13252
+         dump_tdb(&local_tdb);
 
13253
+         return 100 * local_tdb.format + 6;
 
13254
+       }
 
13255
+    }
 
13256
+  local_tdb256.format = 0;
 
13257
+  if ((rc = __TM_begin(&local_tdb256)) == 0)
 
13258
+    {
 
13259
+      rc = __TM_end();
 
13260
+      if (rc != 0)
 
13261
+       {
 
13262
+         return 1100 * rc + 1;
 
13263
+       }
 
13264
+      if (local_tdb256.format != 0)
 
13265
+       {
 
13266
+         dump_tdb(&local_tdb256);
 
13267
+         return 1100 * local_tdb256.format + 2;
 
13268
+       }
 
13269
+    }
 
13270
+  else
 
13271
+    {
 
13272
+      return 1100 * rc + 3;
 
13273
+    }
 
13274
+#if 1 /*!!!does not work*/
 
13275
+  local_tdb256.format = 0;
 
13276
+  if ((rc = __TM_begin(&local_tdb256)) == 0)
 
13277
+    {
 
13278
+      __TM_named_abort(1);
 
13279
+      return 2004;
 
13280
+    }
 
13281
+  else
 
13282
+    {
 
13283
+      if (rc != 3)
 
13284
+       {
 
13285
+         return 2100 * rc + 5;
 
13286
+       }
 
13287
+      if (local_tdb256.format != 1)
 
13288
+       {
 
13289
+         dump_tdb(&local_tdb256);
 
13290
+         return 2100 * local_tdb256.format + 6;
 
13291
+       }
 
13292
+    }
 
13293
+#endif
 
13294
+
 
13295
+  return 0;
 
13296
+}
 
13297
+
 
13298
+static int test_etnd(void)
 
13299
+{
 
13300
+  long rc;
 
13301
+
 
13302
+  {
 
13303
+    long nd;
 
13304
+
 
13305
+    make_fake_tdb(&local_tdb);
 
13306
+    local_tdb.nesting_depth = 0;
 
13307
+    nd = __TM_nesting_depth(&local_tdb);
 
13308
+    if (nd != 0)
 
13309
+      {
 
13310
+       return 1;
 
13311
+      }
 
13312
+    local_tdb.nesting_depth = 7;
 
13313
+    nd = __TM_nesting_depth(&local_tdb);
 
13314
+    if (nd != 7)
 
13315
+      {
 
13316
+       return 7;
 
13317
+      }
 
13318
+    local_tdb.format = 0;
 
13319
+    nd = __TM_nesting_depth(&local_tdb);
 
13320
+    if (nd != 0)
 
13321
+      {
 
13322
+       return 2;
 
13323
+      }
 
13324
+  }
 
13325
+  counters.c1 = 0;
 
13326
+  counters.c1 = 0;
 
13327
+  counters.c2 = 0;
 
13328
+  counters.c3 = 0;
 
13329
+  if ((rc = __TM_simple_begin()) == 0)
 
13330
+    {
 
13331
+      counters.c1 = __TM_nesting_depth(0);
 
13332
+      if (__TM_simple_begin() == 0)
 
13333
+       {
 
13334
+         counters.c2 = __TM_nesting_depth(0);
 
13335
+         if (__TM_simple_begin() == 0)
 
13336
+           {
 
13337
+             counters.c3 = __TM_nesting_depth(0);
 
13338
+             __TM_end();
 
13339
+           }
 
13340
+         __TM_end();
 
13341
+       }
 
13342
+      __TM_end();
 
13343
+    }
 
13344
+  else
 
13345
+    {
 
13346
+      return 100 * rc + 1;
 
13347
+    }
 
13348
+  if (counters.c1 != 1)
 
13349
+    {
 
13350
+      return 100 * counters.c1 + 2;
 
13351
+    }
 
13352
+  if (counters.c2 != 2)
 
13353
+    {
 
13354
+      return 100 * counters.c2 + 3;
 
13355
+    }
 
13356
+  if (counters.c3 != 3)
 
13357
+    {
 
13358
+      return 100 * counters.c3 + 4;
 
13359
+    }
 
13360
+
 
13361
+  return 0;
 
13362
+}
 
13363
+
 
13364
+/* ---------------------------- local testing framework functions ---------- */
 
13365
+
 
13366
+static int run_one_test(const test_table_entry_t *test_entry)
 
13367
+{
 
13368
+  int do_print_passes;
 
13369
+  int succeeded;
 
13370
+  int rc;
 
13371
+  int i;
 
13372
+
 
13373
+  do_print_passes = (
 
13374
+                    test_entry->required_quorum != 1 ||
 
13375
+                    test_entry->max_repetitions != 1);
 
13376
+  printf("RRR RUN  %s\n", test_entry->name);
 
13377
+  if (do_print_passes == 1)
 
13378
+    {
 
13379
+      printf(
 
13380
+            "         (requires %d successful out of %d runs)\n",
 
13381
+            test_entry->required_quorum,
 
13382
+            test_entry->max_repetitions);
 
13383
+    }
 
13384
+  succeeded = 0;
 
13385
+  rc = 0;
 
13386
+  for (rc = 0, i = 0; i < test_entry->max_repetitions; i++)
 
13387
+    {
 
13388
+      if (do_print_passes == 1)
 
13389
+       {
 
13390
+         if (i == 0)
 
13391
+           {
 
13392
+             printf("        ");
 
13393
+           }
 
13394
+         else
 
13395
+           {
 
13396
+             printf(",");
 
13397
+           }
 
13398
+       }
 
13399
+      rc = test_entry->test_func();
 
13400
+      if (rc == 0)
 
13401
+       {
 
13402
+         if (do_print_passes == 1)
 
13403
+           {
 
13404
+             printf(" success");
 
13405
+           }
 
13406
+         succeeded++;
 
13407
+         if (succeeded >= test_entry->required_quorum)
 
13408
+           {
 
13409
+             break;
 
13410
+           }
 
13411
+       }
 
13412
+      else
 
13413
+       {
 
13414
+         printf(" failed (rc = %d)", rc);
 
13415
+       }
 
13416
+    }
 
13417
+  if (do_print_passes == 1 || rc != 0)
 
13418
+    {
 
13419
+      printf("\n");
 
13420
+    }
 
13421
+  if (succeeded >= test_entry->required_quorum)
 
13422
+    {
 
13423
+      printf("+++ OK   %s\n", test_entry->name);
 
13424
+
 
13425
+      return 0;
 
13426
+    }
 
13427
+  else
 
13428
+    {
 
13429
+      printf("--- FAIL %s\n", test_entry->name);
 
13430
+
 
13431
+      return (rc != 0) ? rc : -1;
 
13432
+    }
 
13433
+}
 
13434
+
 
13435
+static int run_all_tests(const test_table_entry_t *test_table)
 
13436
+{
 
13437
+  const test_table_entry_t *test;
 
13438
+  int rc;
 
13439
+
 
13440
+  for (
 
13441
+       rc = 0, test = &test_table[0];
 
13442
+       test->test_func != NULL && rc == 0; test++)
 
13443
+    {
 
13444
+      rc = run_one_test(test);
 
13445
+    }
 
13446
+
 
13447
+  return rc;
 
13448
+}
 
13449
+
 
13450
+/* ---------------------------- interface functions ------------------------ */
 
13451
+
 
13452
+int main(void)
 
13453
+{
 
13454
+  const test_table_entry_t test_table[] = {
 
13455
+    TEST_NO_REP(init_cache),
 
13456
+    TEST_NO_REP(test_abort_classification),
 
13457
+    TEST_NO_REP(test_cc_classification),
 
13458
+    TEST_DF_REP(test_tbegin_ntstg_tend),
 
13459
+    TEST_DF_REP(test_tbegin_ntstg_tabort),
 
13460
+    TEST_DF_REP(test_tbegin_aborts),
 
13461
+    TEST_DF_REP(test_tbegin_tdb),
 
13462
+    TEST_DF_REP(test_etnd),
 
13463
+    { (void *)0, 0, 0 }
 
13464
+  };
 
13465
+
 
13466
+  {
 
13467
+    int rc;
 
13468
+
 
13469
+    rc = run_all_tests(test_table);
 
13470
+
 
13471
+    return rc;
 
13472
+  }
 
13473
+}
 
13474
Index: gcc/testsuite/gcc.target/s390/hotpatch-8.c
 
13475
===================================================================
 
13476
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-8.c    (.../tags/gcc_4_8_2_release)
 
13477
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-8.c    (.../branches/gcc-4_8-branch)
 
13478
@@ -0,0 +1,28 @@
 
13479
+/* Functional tests for the function hotpatching feature.  */
 
13480
+
 
13481
+/* { dg-do run } */
 
13482
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
 
13483
+
 
13484
+#include <stdio.h>
 
13485
+
 
13486
+__attribute__ ((hotpatch))
 
13487
+inline void hp1(void)
 
13488
+{
 
13489
+  printf("hello, world!\n");
 
13490
+}
 
13491
+
 
13492
+__attribute__ ((hotpatch))
 
13493
+__attribute__ ((always_inline))
 
13494
+void hp2(void) /* { dg-warning "always_inline function might not be inlinable" } */
 
13495
+{
 
13496
+  printf("hello, world!\n");
 
13497
+} /* { dg-warning "function 'hp2' with the 'always_inline' attribute is not hotpatchable" } */
 
13498
+
 
13499
+int main (void)
 
13500
+{
 
13501
+  return 0;
 
13502
+}
 
13503
+
 
13504
+/* Check number of occurences of certain instructions.  */
 
13505
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
 
13506
+/* { dg-final { scan-assembler-not "nop\t0" } } */
 
13507
Index: gcc/testsuite/gcc.target/s390/hotpatch-9.c
 
13508
===================================================================
 
13509
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-9.c    (.../tags/gcc_4_8_2_release)
 
13510
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-9.c    (.../branches/gcc-4_8-branch)
 
13511
@@ -0,0 +1,21 @@
 
13512
+/* Functional tests for the function hotpatching feature.  */
 
13513
+
 
13514
+/* { dg-do run } */
 
13515
+/* { dg-options "-O3 -mzarch -mhotpatch=1 --save-temps" } */
 
13516
+
 
13517
+#include <stdio.h>
 
13518
+
 
13519
+__attribute__ ((hotpatch(2)))
 
13520
+void hp1(void)
 
13521
+{
 
13522
+  printf("hello, world!\n");
 
13523
+}
 
13524
+
 
13525
+int main (void)
 
13526
+{
 
13527
+  return 0;
 
13528
+}
 
13529
+
 
13530
+/* Check number of occurences of certain instructions.  */
 
13531
+/* { dg-final { scan-assembler-times "nopr\t%r7" 2 } } */
 
13532
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
 
13533
Index: gcc/testsuite/gcc.target/s390/hotpatch-10.c
 
13534
===================================================================
 
13535
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-10.c   (.../tags/gcc_4_8_2_release)
 
13536
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-10.c   (.../branches/gcc-4_8-branch)
 
13537
@@ -0,0 +1,21 @@
 
13538
+/* Functional tests for the function hotpatching feature.  */
 
13539
+
 
13540
+/* { dg-do run } */
 
13541
+/* { dg-options "-O3 -mzarch -mno-hotpatch --save-temps" } */
 
13542
+
 
13543
+#include <stdio.h>
 
13544
+
 
13545
+__attribute__ ((hotpatch(2)))
 
13546
+void hp1(void)
 
13547
+{
 
13548
+  printf("hello, world!\n");
 
13549
+}
 
13550
+
 
13551
+int main (void)
 
13552
+{
 
13553
+  return 0;
 
13554
+}
 
13555
+
 
13556
+/* Check number of occurences of certain instructions.  */
 
13557
+/* { dg-final { scan-assembler-times "nopr\t%r7" 2 } } */
 
13558
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
 
13559
Index: gcc/testsuite/gcc.target/s390/hotpatch-11.c
 
13560
===================================================================
 
13561
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-11.c   (.../tags/gcc_4_8_2_release)
 
13562
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-11.c   (.../branches/gcc-4_8-branch)
 
13563
@@ -0,0 +1,20 @@
 
13564
+/* Functional tests for the function hotpatching feature.  */
 
13565
+
 
13566
+/* { dg-do run } */
 
13567
+/* { dg-options "-O3 -mzarch -mhotpatch -mno-hotpatch --save-temps" } */
 
13568
+
 
13569
+#include <stdio.h>
 
13570
+
 
13571
+void hp1(void)
 
13572
+{
 
13573
+  printf("hello, world!\n");
 
13574
+}
 
13575
+
 
13576
+int main (void)
 
13577
+{
 
13578
+  return 0;
 
13579
+}
 
13580
+
 
13581
+/* Check number of occurences of certain instructions.  */
 
13582
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
 
13583
+/* { dg-final { scan-assembler-not "nop\t0" } } */
 
13584
Index: gcc/testsuite/gcc.target/s390/hotpatch-12.c
 
13585
===================================================================
 
13586
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-12.c   (.../tags/gcc_4_8_2_release)
 
13587
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-12.c   (.../branches/gcc-4_8-branch)
 
13588
@@ -0,0 +1,20 @@
 
13589
+/* Functional tests for the function hotpatching feature.  */
 
13590
+
 
13591
+/* { dg-do run } */
 
13592
+/* { dg-options "-O3 -mzarch -mno-hotpatch -mhotpatch=1 --save-temps" } */
 
13593
+
 
13594
+#include <stdio.h>
 
13595
+
 
13596
+void hp1(void)
 
13597
+{
 
13598
+  printf("hello, world!\n");
 
13599
+}
 
13600
+
 
13601
+int main (void)
 
13602
+{
 
13603
+  return 0;
 
13604
+}
 
13605
+
 
13606
+/* Check number of occurences of certain instructions.  */
 
13607
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
 
13608
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
 
13609
Index: gcc/testsuite/gcc.target/mips/bswap-1.c
 
13610
===================================================================
 
13611
--- a/src/gcc/testsuite/gcc.target/mips/bswap-1.c       (.../tags/gcc_4_8_2_release)
 
13612
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-1.c       (.../branches/gcc-4_8-branch)
 
13613
@@ -0,0 +1,10 @@
 
13614
+/* { dg-options "isa_rev>=2" } */
 
13615
+/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
 
13616
+
 
13617
+NOMIPS16 unsigned short
 
13618
+foo (unsigned short x)
 
13619
+{
 
13620
+  return ((x << 8) & 0xff00) | ((x >> 8) & 0xff);
 
13621
+}
 
13622
+
 
13623
+/* { dg-final { scan-assembler "\twsbh\t" } } */
 
13624
Index: gcc/testsuite/gcc.target/mips/bswap-2.c
 
13625
===================================================================
 
13626
--- a/src/gcc/testsuite/gcc.target/mips/bswap-2.c       (.../tags/gcc_4_8_2_release)
 
13627
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-2.c       (.../branches/gcc-4_8-branch)
 
13628
@@ -0,0 +1,9 @@
 
13629
+/* { dg-options "isa_rev>=2" } */
 
13630
+
 
13631
+NOMIPS16 unsigned short
 
13632
+foo (unsigned short x)
 
13633
+{
 
13634
+  return __builtin_bswap16 (x);
 
13635
+}
 
13636
+
 
13637
+/* { dg-final { scan-assembler "\twsbh\t" } } */
 
13638
Index: gcc/testsuite/gcc.target/mips/pr59137.c
 
13639
===================================================================
 
13640
--- a/src/gcc/testsuite/gcc.target/mips/pr59137.c       (.../tags/gcc_4_8_2_release)
 
13641
+++ b/src/gcc/testsuite/gcc.target/mips/pr59137.c       (.../branches/gcc-4_8-branch)
 
13642
@@ -0,0 +1,34 @@
 
13643
+/* { dg-do run } */
 
13644
+/* { dg-options "-mno-plt" } */
 
13645
+
 
13646
+extern void abort (void);
 
13647
+
 
13648
+struct lispstruct
 
13649
+{
 
13650
+  int e;
 
13651
+  int t;
 
13652
+};
 
13653
+
 
13654
+struct lispstruct Cnil_body;
 
13655
+struct lispstruct Ct_body;
 
13656
+int nvalues;
 
13657
+
 
13658
+struct lispstruct * __attribute__ ((noinline))
 
13659
+fLlistp (struct lispstruct *x0)
 
13660
+{
 
13661
+  if (x0 == &Cnil_body
 
13662
+      || (((unsigned long) x0 >= 0x80000000) ? 0
 
13663
+         : (!x0->e ? (x0 != &Cnil_body) : x0->t)))
 
13664
+    x0 = &Ct_body;
 
13665
+  else
 
13666
+    x0 = &Cnil_body;
 
13667
+  nvalues = 1;
 
13668
+  return x0;
 
13669
+}
 
13670
+
 
13671
+int main ()
 
13672
+{
 
13673
+  if (fLlistp ((struct lispstruct *) 0xa0000001) != &Cnil_body)
 
13674
+    abort ();
 
13675
+  return 0;
 
13676
+}
 
13677
Index: gcc/testsuite/gcc.target/mips/bswap-3.c
 
13678
===================================================================
 
13679
--- a/src/gcc/testsuite/gcc.target/mips/bswap-3.c       (.../tags/gcc_4_8_2_release)
 
13680
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-3.c       (.../branches/gcc-4_8-branch)
 
13681
@@ -0,0 +1,14 @@
 
13682
+/* { dg-options "isa_rev>=2" } */
 
13683
+/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
 
13684
+
 
13685
+NOMIPS16 unsigned int
 
13686
+foo (unsigned int x)
 
13687
+{
 
13688
+  return (((x << 24) & 0xff000000)
 
13689
+         | ((x << 8) & 0xff0000)
 
13690
+         | ((x >> 8) & 0xff00)
 
13691
+         | ((x >> 24) & 0xff));
 
13692
+}
 
13693
+
 
13694
+/* { dg-final { scan-assembler "\twsbh\t" } } */
 
13695
+/* { dg-final { scan-assembler "\tror\t" } } */
 
13696
Index: gcc/testsuite/gcc.target/mips/bswap-4.c
 
13697
===================================================================
 
13698
--- a/src/gcc/testsuite/gcc.target/mips/bswap-4.c       (.../tags/gcc_4_8_2_release)
 
13699
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-4.c       (.../branches/gcc-4_8-branch)
 
13700
@@ -0,0 +1,10 @@
 
13701
+/* { dg-options "isa_rev>=2" } */
 
13702
+
 
13703
+NOMIPS16 unsigned int
 
13704
+foo (unsigned int x)
 
13705
+{
 
13706
+  return __builtin_bswap32 (x);
 
13707
+}
 
13708
+
 
13709
+/* { dg-final { scan-assembler "\twsbh\t" } } */
 
13710
+/* { dg-final { scan-assembler "\tror\t" } } */
 
13711
Index: gcc/testsuite/gcc.target/mips/bswap-5.c
 
13712
===================================================================
 
13713
--- a/src/gcc/testsuite/gcc.target/mips/bswap-5.c       (.../tags/gcc_4_8_2_release)
 
13714
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-5.c       (.../branches/gcc-4_8-branch)
 
13715
@@ -0,0 +1,20 @@
 
13716
+/* { dg-options "isa_rev>=2 -mgp64" } */
 
13717
+/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
 
13718
+
 
13719
+typedef unsigned long long uint64_t;
 
13720
+
 
13721
+NOMIPS16 uint64_t
 
13722
+foo (uint64_t x)
 
13723
+{
 
13724
+  return (((x << 56) & 0xff00000000000000ull)
 
13725
+         | ((x << 40) & 0xff000000000000ull)
 
13726
+         | ((x << 24) & 0xff0000000000ull)
 
13727
+         | ((x << 8) & 0xff00000000ull)
 
13728
+         | ((x >> 8) & 0xff000000)
 
13729
+         | ((x >> 24) & 0xff0000)
 
13730
+         | ((x >> 40) & 0xff00)
 
13731
+         | ((x >> 56) & 0xff));
 
13732
+}
 
13733
+
 
13734
+/* { dg-final { scan-assembler "\tdsbh\t" } } */
 
13735
+/* { dg-final { scan-assembler "\tdshd\t" } } */
 
13736
Index: gcc/testsuite/gcc.target/mips/bswap-6.c
 
13737
===================================================================
 
13738
--- a/src/gcc/testsuite/gcc.target/mips/bswap-6.c       (.../tags/gcc_4_8_2_release)
 
13739
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-6.c       (.../branches/gcc-4_8-branch)
 
13740
@@ -0,0 +1,12 @@
 
13741
+/* { dg-options "isa_rev>=2 -mgp64" } */
 
13742
+
 
13743
+typedef unsigned long long uint64_t;
 
13744
+
 
13745
+NOMIPS16 uint64_t
 
13746
+foo (uint64_t x)
 
13747
+{
 
13748
+  return __builtin_bswap64 (x);
 
13749
+}
 
13750
+
 
13751
+/* { dg-final { scan-assembler "\tdsbh\t" } } */
 
13752
+/* { dg-final { scan-assembler "\tdshd\t" } } */
 
13753
Index: gcc/testsuite/gcc.target/sh/pr51244-19.c
 
13754
===================================================================
 
13755
--- a/src/gcc/testsuite/gcc.target/sh/pr51244-19.c      (.../tags/gcc_4_8_2_release)
 
13756
+++ b/src/gcc/testsuite/gcc.target/sh/pr51244-19.c      (.../branches/gcc-4_8-branch)
 
13757
@@ -22,11 +22,16 @@
 
13758
    unwanted sequences.  Thus, if we see any movt insns, something is not
 
13759
    working as expected.  This test requires -O2 because the T bit stores
 
13760
    in question will be eliminated in additional insn split passes after
 
13761
-   reload.  */
 
13762
+   reload.
 
13763
+
 
13764
+   Notice: When this test case was initially added, the T bit optimization
 
13765
+           was buggy and this test case resulted in wrong code.  The movt
 
13766
+           instructions actually have to be present in this case to get
 
13767
+           correct code.  */
 
13768
 /* { dg-do compile { target "sh*-*-*" } } */
 
13769
 /* { dg-options "-O2" } */
 
13770
 /* { dg-skip-if "" { "sh*-*-*" } { "-m5*" } { "" } } */
 
13771
-/* { dg-final { scan-assembler-not "movt" } } */
 
13772
+/* { dg-final { scan-assembler "movt" } } */
 
13773
 
 
13774
 struct request
 
13775
 {
 
13776
Index: gcc/testsuite/gcc.target/sh/pr54089-3.c
 
13777
===================================================================
 
13778
--- a/src/gcc/testsuite/gcc.target/sh/pr54089-3.c       (.../tags/gcc_4_8_2_release)
 
13779
+++ b/src/gcc/testsuite/gcc.target/sh/pr54089-3.c       (.../branches/gcc-4_8-branch)
 
13780
@@ -5,7 +5,7 @@
 
13781
 /* { dg-options "-O1" } */
 
13782
 /* { dg-skip-if "" { "sh*-*-*" } { "*" } { "-m1*" "-m2" "-m2e*" } } */
 
13783
 /* { dg-final { scan-assembler-not "and" } } */
 
13784
-/* { dg-final { scan-assembler-not "31" } } */
 
13785
+/* { dg-final { scan-assembler-not "#31" } } */
 
13786
 
 
13787
 int
 
13788
 test00 (unsigned int a, int* b, int c, int* d, unsigned int e)
 
13789
Index: gcc/testsuite/go.test/go-test.exp
 
13790
===================================================================
 
13791
--- a/src/gcc/testsuite/go.test/go-test.exp     (.../tags/gcc_4_8_2_release)
 
13792
+++ b/src/gcc/testsuite/go.test/go-test.exp     (.../branches/gcc-4_8-branch)
 
13793
@@ -333,17 +333,16 @@
 
13794
        }
 
13795
 
 
13796
        if { ( [file tail $test] == "select2.go" \
 
13797
-                  || [file tail $test] == "stack.go" ) \
 
13798
+                  || [file tail $test] == "stack.go" \
 
13799
+                  || [file tail $test] == "peano.go" ) \
 
13800
                 && ! [check_effective_target_split_stack] } {
 
13801
-           # chan/select2.go fails on targets without split stack,
 
13802
-           # because they allocate a large stack segment that blows
 
13803
-           # out the memory calculations.
 
13804
+           # These tests fails on targets without split stack.
 
13805
            untested $name
 
13806
            continue
 
13807
        }
 
13808
 
 
13809
-       if { [file tail $test] == "rotate.go" } {
 
13810
-           # This test produces a temporary file that takes too long
 
13811
+       if [string match "*go.test/test/rotate\[0123\].go" $test] {
 
13812
+           # These tests produces a temporary file that takes too long
 
13813
            # to compile--5 minutes on my laptop without optimization.
 
13814
            # When compiling without optimization it tests nothing
 
13815
            # useful, since the point of the test is to see whether
 
13816
Index: gcc/testsuite/gfortran.dg/shape_8.f90
 
13817
===================================================================
 
13818
--- a/src/gcc/testsuite/gfortran.dg/shape_8.f90 (.../tags/gcc_4_8_2_release)
 
13819
+++ b/src/gcc/testsuite/gfortran.dg/shape_8.f90 (.../branches/gcc-4_8-branch)
 
13820
@@ -0,0 +1,10 @@
 
13821
+! { dg-do compile }
 
13822
+!
 
13823
+! PR 60450: [4.7/4.8 Regression] ICE with SHAPE intrinsic
 
13824
+!
 
13825
+! Contributed by Dave Allured <dave.allured@noaa.gov>
 
13826
+
 
13827
+  real, allocatable :: x(:,:)
 
13828
+  allocate (x(3,2), source=99.)
 
13829
+  print *, shape (x / 10.0)
 
13830
+end
 
13831
Index: gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90
 
13832
===================================================================
 
13833
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90        (.../tags/gcc_4_8_2_release)
 
13834
+++ b/src/gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90        (.../branches/gcc-4_8-branch)
 
13835
@@ -0,0 +1,12 @@
 
13836
+! { dg-do compile }
 
13837
+!
 
13838
+! PR fortran/58803
 
13839
+!
 
13840
+! Contributed by Vittorio Zecca
 
13841
+!
 
13842
+! Was before ICEing due to a double free
 
13843
+!
 
13844
+      type t
 
13845
+       procedure(real), pointer, nopass  :: f1, f2
 
13846
+      end type
 
13847
+      end
 
13848
Index: gcc/testsuite/gfortran.dg/where_4.f90
 
13849
===================================================================
 
13850
--- a/src/gcc/testsuite/gfortran.dg/where_4.f90 (.../tags/gcc_4_8_2_release)
 
13851
+++ b/src/gcc/testsuite/gfortran.dg/where_4.f90 (.../branches/gcc-4_8-branch)
 
13852
@@ -0,0 +1,18 @@
 
13853
+! { dg-do compile }
 
13854
+! PR 60522 - this used to ICE.
 
13855
+! Original test case Roger Ferrer Ibanez
 
13856
+subroutine foo(a, b)
 
13857
+   implicit none
 
13858
+   integer, dimension(:), intent(inout) :: a
 
13859
+   integer, dimension(:), intent(in) :: b
 
13860
+
 
13861
+   where (b(:) > 0)
 
13862
+      where (b(:) > 100)
 
13863
+         a(lbound(a, 1):ubound(a, 1)) = b(lbound(b, 1):ubound(b, 1)) * b(lbound(b, 1):ubound(b, 1)) - 100
 
13864
+      elsewhere
 
13865
+         a(lbound(a, 1):ubound(a, 1)) = b(lbound(b, 1):ubound(b, 1)) * b(lbound(b, 1):ubound(b, 1))
 
13866
+      end where
 
13867
+   elsewhere
 
13868
+      a(lbound(a, 1):ubound(a, 1)) = - b(lbound(b, 1):ubound(b, 1)) * b(lbound(b, 1):ubound(b, 1))
 
13869
+   end where
 
13870
+end subroutine foo
 
13871
Index: gcc/testsuite/gfortran.dg/gomp/pr59467.f90
 
13872
===================================================================
 
13873
--- a/src/gcc/testsuite/gfortran.dg/gomp/pr59467.f90    (.../tags/gcc_4_8_2_release)
 
13874
+++ b/src/gcc/testsuite/gfortran.dg/gomp/pr59467.f90    (.../branches/gcc-4_8-branch)
 
13875
@@ -0,0 +1,24 @@
 
13876
+! PR libgomp/59467
 
13877
+! { dg-do compile }
 
13878
+! { dg-options "-fopenmp" }
 
13879
+  FUNCTION t()
 
13880
+    INTEGER :: a, b, t
 
13881
+    a = 0
 
13882
+    b = 0
 
13883
+    !$OMP PARALLEL REDUCTION(+:b)
 
13884
+      !$OMP SINGLE     ! { dg-error "is not threadprivate or private in outer context" }
 
13885
+        !$OMP ATOMIC WRITE
 
13886
+        a = 6
 
13887
+      !$OMP END SINGLE COPYPRIVATE (a)
 
13888
+      b = a
 
13889
+    !$OMP END PARALLEL
 
13890
+    t = b
 
13891
+    b = 0
 
13892
+    !$OMP PARALLEL REDUCTION(+:b)
 
13893
+      !$OMP SINGLE
 
13894
+        !$OMP ATOMIC WRITE
 
13895
+        b = 6
 
13896
+      !$OMP END SINGLE COPYPRIVATE (b)
 
13897
+    !$OMP END PARALLEL
 
13898
+    t = t + b
 
13899
+  END FUNCTION
 
13900
Index: gcc/testsuite/gfortran.dg/allocate_class_3.f90
 
13901
===================================================================
 
13902
--- a/src/gcc/testsuite/gfortran.dg/allocate_class_3.f90        (.../tags/gcc_4_8_2_release)
 
13903
+++ b/src/gcc/testsuite/gfortran.dg/allocate_class_3.f90        (.../branches/gcc-4_8-branch)
 
13904
@@ -0,0 +1,107 @@
 
13905
+! { dg-do run }
 
13906
+! Tests the fix for PR59414, comment #3, in which the allocate
 
13907
+! expressions were not correctly being stripped to provide the
 
13908
+! vpointer as an lhs to the pointer assignment of the vptr from
 
13909
+! the SOURCE expression.
 
13910
+!
 
13911
+! Contributed by Antony Lewis  <antony@cosmologist.info>
 
13912
+!
 
13913
+module ObjectLists
 
13914
+  implicit none
 
13915
+
 
13916
+  type :: t
 
13917
+    integer :: i
 
13918
+  end type
 
13919
+
 
13920
+  type Object_array_pointer
 
13921
+    class(t), pointer :: p(:)
 
13922
+  end type
 
13923
+
 
13924
+contains
 
13925
+
 
13926
+  subroutine AddArray1 (P, Pt)
 
13927
+    class(t) :: P(:)
 
13928
+    class(Object_array_pointer) :: Pt
 
13929
+
 
13930
+    select type (Pt)
 
13931
+    class is (Object_array_pointer)
 
13932
+      if (associated (Pt%P)) deallocate (Pt%P)
 
13933
+      allocate(Pt%P(1:SIZE(P)), source=P)
 
13934
+    end select
 
13935
+  end subroutine
 
13936
+
 
13937
+  subroutine AddArray2 (P, Pt)
 
13938
+    class(t) :: P(:)
 
13939
+    class(Object_array_pointer) :: Pt
 
13940
+
 
13941
+    select type (Pt)
 
13942
+    type is (Object_array_pointer)
 
13943
+      if (associated (Pt%P)) deallocate (Pt%P)
 
13944
+      allocate(Pt%P(1:SIZE(P)), source=P)
 
13945
+    end select
 
13946
+  end subroutine
 
13947
+
 
13948
+  subroutine AddArray3 (P, Pt)
 
13949
+    class(t) :: P
 
13950
+    class(Object_array_pointer) :: Pt
 
13951
+
 
13952
+    select type (Pt)
 
13953
+    class is (Object_array_pointer)
 
13954
+      if (associated (Pt%P)) deallocate (Pt%P)
 
13955
+      allocate(Pt%P(1:4), source=P)
 
13956
+    end select
 
13957
+  end subroutine
 
13958
+
 
13959
+  subroutine AddArray4 (P, Pt)
 
13960
+    type(t) :: P(:)
 
13961
+    class(Object_array_pointer) :: Pt
 
13962
+
 
13963
+    select type (Pt)
 
13964
+    class is (Object_array_pointer)
 
13965
+      if (associated (Pt%P)) deallocate (Pt%P)
 
13966
+      allocate(Pt%P(1:SIZE(P)), source=P)
 
13967
+    end select
 
13968
+  end subroutine
 
13969
+end module
 
13970
+
 
13971
+  use ObjectLists
 
13972
+  type(Object_array_pointer), pointer :: Pt
 
13973
+  class(t), pointer :: P(:)
 
13974
+
 
13975
+  allocate (P(2), source = [t(1),t(2)])
 
13976
+  allocate (Pt, source = Object_array_pointer(NULL()))
 
13977
+  call AddArray1 (P, Pt)
 
13978
+  select type (x => Pt%p)
 
13979
+    type is (t)
 
13980
+      if (any (x%i .ne. [1,2])) call abort
 
13981
+  end select
 
13982
+  deallocate (P)
 
13983
+  deallocate (pt)
 
13984
+
 
13985
+  allocate (P(3), source = [t(3),t(4),t(5)])
 
13986
+  allocate (Pt, source = Object_array_pointer(NULL()))
 
13987
+  call AddArray2 (P, Pt)
 
13988
+  select type (x => Pt%p)
 
13989
+    type is (t)
 
13990
+      if (any (x%i .ne. [3,4,5])) call abort
 
13991
+  end select
 
13992
+  deallocate (P)
 
13993
+  deallocate (pt)
 
13994
+
 
13995
+  allocate (Pt, source = Object_array_pointer(NULL()))
 
13996
+  call AddArray3 (t(6), Pt)
 
13997
+  select type (x => Pt%p)
 
13998
+    type is (t)
 
13999
+      if (any (x%i .ne. [6,6,6,6])) call abort
 
14000
+  end select
 
14001
+  deallocate (pt)
 
14002
+
 
14003
+  allocate (Pt, source = Object_array_pointer(NULL()))
 
14004
+  call AddArray4 ([t(7), t(8)], Pt)
 
14005
+  select type (x => Pt%p)
 
14006
+    type is (t)
 
14007
+      if (any (x%i .ne. [7,8])) call abort
 
14008
+  end select
 
14009
+  deallocate (pt)
 
14010
+ end
 
14011
+
 
14012
Index: gcc/testsuite/gfortran.dg/reshape_6.f90
 
14013
===================================================================
 
14014
--- a/src/gcc/testsuite/gfortran.dg/reshape_6.f90       (.../tags/gcc_4_8_2_release)
 
14015
+++ b/src/gcc/testsuite/gfortran.dg/reshape_6.f90       (.../branches/gcc-4_8-branch)
 
14016
@@ -0,0 +1,19 @@
 
14017
+! { dg-do compile }
 
14018
+! PR fortran/58989
 
14019
+!
 
14020
+program test
 
14021
+
 
14022
+  real(8), dimension(4,4) :: fluxes
 
14023
+  real(8), dimension(2,2,2,2) :: f
 
14024
+  integer, dimension(3) :: dmmy 
 
14025
+  integer, parameter :: indx(4)=(/2,2,2,2/)
 
14026
+
 
14027
+  fluxes = 1
 
14028
+
 
14029
+  dmmy = (/2,2,2/)
 
14030
+
 
14031
+  f = reshape(fluxes,(/dmmy,2/))  ! Caused an ICE
 
14032
+  f = reshape(fluxes,(/2,2,2,2/)) ! Works as expected
 
14033
+  f = reshape(fluxes,indx)        ! Works as expected
 
14034
+
 
14035
+end program test
 
14036
Index: gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90
 
14037
===================================================================
 
14038
--- a/src/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90      (.../tags/gcc_4_8_2_release)
 
14039
+++ b/src/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90      (.../branches/gcc-4_8-branch)
 
14040
@@ -0,0 +1,36 @@
 
14041
+! { dg-do compile }
 
14042
+!
 
14043
+! PR fortran/58007
 
14044
+! Unresolved fiixup while loading a module.
 
14045
+!
 
14046
+! This tests that the specification expression A%MAX_DEGREE in module BSR is
 
14047
+! correctly loaded and resolved in program MAIN.
 
14048
+!
 
14049
+! Original testcase from Daniel Shapiro <shapero@uw.edu>
 
14050
+
 
14051
+module matrix
 
14052
+  type :: sparse_matrix
 
14053
+    integer :: max_degree
 
14054
+  end type
 
14055
+end module
 
14056
+
 
14057
+module bsr
 
14058
+  use matrix
 
14059
+
 
14060
+  type, extends(sparse_matrix) :: bsr_matrix
 
14061
+  end type
 
14062
+
 
14063
+  integer :: i1
 
14064
+  integer :: i2
 
14065
+  integer :: i3
 
14066
+contains
 
14067
+  function get_neighbors (A)
 
14068
+    type(bsr_matrix), intent(in) :: A
 
14069
+    integer :: get_neighbors(A%max_degree)
 
14070
+  end function
 
14071
+end module
 
14072
+
 
14073
+program main
 
14074
+  use matrix
 
14075
+  use bsr
 
14076
+end
 
14077
Index: gcc/testsuite/gfortran.dg/init_flag_12.f90
 
14078
===================================================================
 
14079
--- a/src/gcc/testsuite/gfortran.dg/init_flag_12.f90    (.../tags/gcc_4_8_2_release)
 
14080
+++ b/src/gcc/testsuite/gfortran.dg/init_flag_12.f90    (.../branches/gcc-4_8-branch)
 
14081
@@ -0,0 +1,13 @@
 
14082
+! { dg-do compile }
 
14083
+! { dg-options "-fno-automatic -finit-local-zero" }
 
14084
+!
 
14085
+! PR 55907: [4.7/4.8/4.9 Regression] ICE with -fno-automatic -finit-local-zero
 
14086
+!
 
14087
+! Contributed by J.R. Garcia <garcia.espinosa.jr@gmail.com>
 
14088
+
 
14089
+subroutine cchaine (i)
 
14090
+  implicit none
 
14091
+  integer :: i
 
14092
+  character(len=i) :: chaine
 
14093
+  write(*,*) chaine
 
14094
+end subroutine 
 
14095
Index: gcc/testsuite/gfortran.dg/derived_external_function_1.f90
 
14096
===================================================================
 
14097
--- a/src/gcc/testsuite/gfortran.dg/derived_external_function_1.f90     (.../tags/gcc_4_8_2_release)
 
14098
+++ b/src/gcc/testsuite/gfortran.dg/derived_external_function_1.f90     (.../branches/gcc-4_8-branch)
 
14099
@@ -0,0 +1,27 @@
 
14100
+! { dg-do run }
 
14101
+!
 
14102
+! PR fortran/58771
 
14103
+!
 
14104
+! Contributed by Vittorio Secca  <zeccav@gmail.com>
 
14105
+!
 
14106
+! ICEd on the write statement with f() because the derived type backend
 
14107
+! declaration not built.
 
14108
+!
 
14109
+module m
 
14110
+  type t
 
14111
+    integer(4) g
 
14112
+  end type
 
14113
+end
 
14114
+
 
14115
+type(t) function f() result(ff)
 
14116
+  use m
 
14117
+  ff%g = 42
 
14118
+end
 
14119
+
 
14120
+  use m
 
14121
+  character (20) :: line1, line2
 
14122
+  type(t)  f
 
14123
+  write (line1, *) f()
 
14124
+  write (line2, *) 42_4
 
14125
+  if (line1 .ne. line2) call abort
 
14126
+end
 
14127
Index: gcc/testsuite/gfortran.dg/implicit_pure_4.f90
 
14128
===================================================================
 
14129
--- a/src/gcc/testsuite/gfortran.dg/implicit_pure_4.f90 (.../tags/gcc_4_8_2_release)
 
14130
+++ b/src/gcc/testsuite/gfortran.dg/implicit_pure_4.f90 (.../branches/gcc-4_8-branch)
 
14131
@@ -0,0 +1,22 @@
 
14132
+! { dg-do compile }
 
14133
+!
 
14134
+! PR fortran/60543
 
14135
+! PR fortran/60283
 
14136
+!
 
14137
+module m
 
14138
+contains
 
14139
+  REAL(8) FUNCTION random()
 
14140
+    CALL RANDOM_NUMBER(random)
 
14141
+  END FUNCTION random
 
14142
+  REAL(8) FUNCTION random2()
 
14143
+    block
 
14144
+      block
 
14145
+        block
 
14146
+          CALL RANDOM_NUMBER(random2)
 
14147
+        end block
 
14148
+      end block
 
14149
+    end block
 
14150
+  END FUNCTION random2
 
14151
+end module m
 
14152
+
 
14153
+! { dg-final { scan-module-absence "m" "IMPLICIT_PURE" } }
 
14154
Index: gcc/testsuite/gfortran.dg/null_6.f90
 
14155
===================================================================
 
14156
--- a/src/gcc/testsuite/gfortran.dg/null_6.f90  (.../tags/gcc_4_8_2_release)
 
14157
+++ b/src/gcc/testsuite/gfortran.dg/null_6.f90  (.../branches/gcc-4_8-branch)
 
14158
@@ -30,5 +30,5 @@
 
14159
 
 
14160
 subroutine test_PR34547_3 ()
 
14161
   integer, allocatable :: i(:)
 
14162
-  print *, NULL(i)
 
14163
+  print *, NULL(i)    ! { dg-error "Invalid context for NULL" }
 
14164
 end subroutine test_PR34547_3
 
14165
Index: gcc/testsuite/gfortran.dg/fmt_en.f90
 
14166
===================================================================
 
14167
--- a/src/gcc/testsuite/gfortran.dg/fmt_en.f90  (.../tags/gcc_4_8_2_release)
 
14168
+++ b/src/gcc/testsuite/gfortran.dg/fmt_en.f90  (.../branches/gcc-4_8-branch)
 
14169
@@ -0,0 +1,141 @@
 
14170
+! { dg-do run }
 
14171
+! PR60128 Invalid outputs with EN descriptors
 
14172
+! Test case provided by Walt Brainerd.
 
14173
+program pr60128
 
14174
+implicit none
 
14175
+    integer :: n_tst = 0, n_cnt = 0
 
14176
+
 
14177
+! Original test.
 
14178
+    call checkfmt("(en15.2)", -.44444,    "    -444.44E-03")
 
14179
+
 
14180
+! Test for the bug in comment 6.
 
14181
+    call checkfmt("(en15.0)", 1.0,        "         1.E+00")
 
14182
+    call checkfmt("(en15.0)", 1.00000012, "         1.E+00")
 
14183
+    call checkfmt("(en15.0)", 0.99999994, "         1.E+00")
 
14184
+    call checkfmt("(en15.0)", 10.0,       "        10.E+00")
 
14185
+    call checkfmt("(en15.0)", 10.0000010, "        10.E+00")
 
14186
+    call checkfmt("(en15.0)", 9.99999905, "        10.E+00")
 
14187
+    call checkfmt("(en15.0)", 100.0,      "       100.E+00")
 
14188
+    call checkfmt("(en15.0)", 100.000008, "       100.E+00")
 
14189
+    call checkfmt("(en15.0)", 99.9999924, "       100.E+00")
 
14190
+    call checkfmt("(en15.0)", 1000.0,     "         1.E+03")
 
14191
+    call checkfmt("(en15.0)", 1000.00006, "         1.E+03")
 
14192
+    call checkfmt("(en15.0)", 999.999939, "         1.E+03")
 
14193
+    call checkfmt("(en15.0)", 9.5,        "        10.E+00")
 
14194
+    call checkfmt("(en15.0)", 9.50000095, "        10.E+00")
 
14195
+    call checkfmt("(en15.0)", 9.49999905, "         9.E+00")
 
14196
+    call checkfmt("(en15.0)", 99.5,       "       100.E+00")
 
14197
+    call checkfmt("(en15.0)", 99.5000076, "       100.E+00")
 
14198
+    call checkfmt("(en15.0)", 99.4999924, "        99.E+00")
 
14199
+    call checkfmt("(en15.0)", 999.5,      "         1.E+03")
 
14200
+    call checkfmt("(en15.0)", 999.500061, "         1.E+03")
 
14201
+    call checkfmt("(en15.0)", 999.499939, "       999.E+00")
 
14202
+    call checkfmt("(en15.0)", 9500.0,     "        10.E+03")
 
14203
+    call checkfmt("(en15.0)", 9500.00098, "        10.E+03")
 
14204
+    call checkfmt("(en15.0)", 9499.99902, "         9.E+03")
 
14205
+    call checkfmt("(en15.1)", 9950.0,     "       10.0E+03")
 
14206
+    call checkfmt("(en15.2)", 9995.0,     "      10.00E+03")
 
14207
+    call checkfmt("(en15.3)", 9999.5,     "     10.000E+03")
 
14208
+    call checkfmt("(en15.1)", 9.5,        "        9.5E+00")
 
14209
+    call checkfmt("(en15.1)", 9.50000095, "        9.5E+00")
 
14210
+    call checkfmt("(en15.1)", 9.49999905, "        9.5E+00")
 
14211
+    call checkfmt("(en15.1)", 0.099951,   "      100.0E-03")
 
14212
+    call checkfmt("(en15.1)", 0.009951,   "       10.0E-03")
 
14213
+    call checkfmt("(en15.1)", 0.000999951,"        1.0E-03")
 
14214
+
 
14215
+    call checkfmt("(en15.0)", -1.0,        "        -1.E+00")
 
14216
+    call checkfmt("(en15.0)", -1.00000012, "        -1.E+00")
 
14217
+    call checkfmt("(en15.0)", -0.99999994, "        -1.E+00")
 
14218
+    call checkfmt("(en15.0)", -10.0,       "       -10.E+00")
 
14219
+    call checkfmt("(en15.0)", -10.0000010, "       -10.E+00")
 
14220
+    call checkfmt("(en15.0)", -9.99999905, "       -10.E+00")
 
14221
+    call checkfmt("(en15.0)", -100.0,      "      -100.E+00")
 
14222
+    call checkfmt("(en15.0)", -100.000008, "      -100.E+00")
 
14223
+    call checkfmt("(en15.0)", -99.9999924, "      -100.E+00")
 
14224
+    call checkfmt("(en15.0)", -1000.0,     "        -1.E+03")
 
14225
+    call checkfmt("(en15.0)", -1000.00006, "        -1.E+03")
 
14226
+    call checkfmt("(en15.0)", -999.999939, "        -1.E+03")
 
14227
+    call checkfmt("(en15.0)", -9.5,        "       -10.E+00")
 
14228
+    call checkfmt("(en15.0)", -9.50000095, "       -10.E+00")
 
14229
+    call checkfmt("(en15.0)", -9.49999905, "        -9.E+00")
 
14230
+    call checkfmt("(en15.0)", -99.5,       "      -100.E+00")
 
14231
+    call checkfmt("(en15.0)", -99.5000076, "      -100.E+00")
 
14232
+    call checkfmt("(en15.0)", -99.4999924, "       -99.E+00")
 
14233
+    call checkfmt("(en15.0)", -999.5,      "        -1.E+03")
 
14234
+    call checkfmt("(en15.0)", -999.500061, "        -1.E+03")
 
14235
+    call checkfmt("(en15.0)", -999.499939, "      -999.E+00")
 
14236
+    call checkfmt("(en15.0)", -9500.0,     "       -10.E+03")
 
14237
+    call checkfmt("(en15.0)", -9500.00098, "       -10.E+03")
 
14238
+    call checkfmt("(en15.0)", -9499.99902, "        -9.E+03")
 
14239
+    call checkfmt("(en15.1)", -9950.0,     "      -10.0E+03")
 
14240
+    call checkfmt("(en15.2)", -9995.0,     "     -10.00E+03")
 
14241
+    call checkfmt("(en15.3)", -9999.5,     "    -10.000E+03")
 
14242
+    call checkfmt("(en15.1)", -9.5,        "       -9.5E+00")
 
14243
+    call checkfmt("(en15.1)", -9.50000095, "       -9.5E+00")
 
14244
+    call checkfmt("(en15.1)", -9.49999905, "       -9.5E+00")
 
14245
+    call checkfmt("(en15.1)", -0.099951,   "     -100.0E-03")
 
14246
+    call checkfmt("(en15.1)", -0.009951,   "      -10.0E-03")
 
14247
+    call checkfmt("(en15.1)", -0.000999951,"       -1.0E-03")
 
14248
+
 
14249
+    call checkfmt("(en15.1)", 987350.,     "      987.4E+03")
 
14250
+    call checkfmt("(en15.2)", 98735.,      "      98.74E+03")
 
14251
+    call checkfmt("(en15.3)", 9873.5,      "      9.874E+03")
 
14252
+    call checkfmt("(en15.1)", 987650.,     "      987.6E+03")
 
14253
+    call checkfmt("(en15.2)", 98765.,      "      98.76E+03")
 
14254
+    call checkfmt("(en15.3)", 9876.5,      "      9.876E+03")
 
14255
+    call checkfmt("(en15.1)", 3.125E-02,   "       31.2E-03")
 
14256
+    call checkfmt("(en15.1)", 9.375E-02,   "       93.8E-03")
 
14257
+    call checkfmt("(en15.2)", 1.5625E-02,  "      15.62E-03")
 
14258
+    call checkfmt("(en15.2)", 4.6875E-02,  "      46.88E-03")
 
14259
+    call checkfmt("(en15.3)", 7.8125E-03,  "      7.812E-03")
 
14260
+    call checkfmt("(en15.3)", 2.34375E-02, "     23.438E-03")
 
14261
+    call checkfmt("(en15.3)", 9.765625E-04,"    976.562E-06")
 
14262
+    call checkfmt("(en15.6)", 2.9296875E-03,"   2.929688E-03")
 
14263
+
 
14264
+    call checkfmt("(en15.1)", -987350.,     "     -987.4E+03")
 
14265
+    call checkfmt("(en15.2)", -98735.,      "     -98.74E+03")
 
14266
+    call checkfmt("(en15.3)", -9873.5,      "     -9.874E+03")
 
14267
+    call checkfmt("(en15.1)", -987650.,     "     -987.6E+03")
 
14268
+    call checkfmt("(en15.2)", -98765.,      "     -98.76E+03")
 
14269
+    call checkfmt("(en15.3)", -9876.5,      "     -9.876E+03")
 
14270
+    call checkfmt("(en15.1)", -3.125E-02,   "      -31.2E-03")
 
14271
+    call checkfmt("(en15.1)", -9.375E-02,   "      -93.8E-03")
 
14272
+    call checkfmt("(en15.2)", -1.5625E-02,  "     -15.62E-03")
 
14273
+    call checkfmt("(en15.2)", -4.6875E-02,  "     -46.88E-03")
 
14274
+    call checkfmt("(en15.3)", -7.8125E-03,  "     -7.812E-03")
 
14275
+    call checkfmt("(en15.3)", -2.34375E-02, "    -23.438E-03")
 
14276
+    call checkfmt("(en15.3)", -9.765625E-04,"   -976.562E-06")
 
14277
+    call checkfmt("(en15.6)", -2.9296875E-03,"  -2.929688E-03")
 
14278
+
 
14279
+    !print *, n_tst, n_cnt
 
14280
+    if (n_cnt /= 0) call abort
 
14281
+
 
14282
+contains
 
14283
+    subroutine checkfmt(fmt, x, cmp)
 
14284
+        use ISO_FORTRAN_ENV
 
14285
+        implicit none
 
14286
+        integer, parameter :: j(size(real_kinds)+4)=[REAL_KINDS, [4, 4, 4, 4]]
 
14287
+        integer :: i
 
14288
+        character(len=*), intent(in) :: fmt
 
14289
+        real, intent(in) :: x
 
14290
+        character(len=*), intent(in) :: cmp
 
14291
+        character(len=20) :: s
 
14292
+        do i=1,size(real_kinds)
 
14293
+          if (i == 1) then
 
14294
+            write(s, fmt) real(x,kind=j(1))
 
14295
+          else if (i == 2) then
 
14296
+            write(s, fmt) real(x,kind=j(2))
 
14297
+          else if (i == 3) then
 
14298
+            write(s, fmt) real(x,kind=j(3))
 
14299
+          else if (i == 4) then
 
14300
+            write(s, fmt) real(x,kind=j(4))
 
14301
+          end if
 
14302
+          n_tst = n_tst + 1
 
14303
+          if (s /= cmp) then
 
14304
+             print "(a,1x,a,' expected: ',1x,a)", fmt, s, cmp
 
14305
+             n_cnt = n_cnt + 1
 
14306
+           end if
 
14307
+        end do
 
14308
+        
 
14309
+    end subroutine
 
14310
+end program
 
14311
Index: gcc/testsuite/gfortran.dg/constructor_9.f90
 
14312
===================================================================
 
14313
--- a/src/gcc/testsuite/gfortran.dg/constructor_9.f90   (.../tags/gcc_4_8_2_release)
 
14314
+++ b/src/gcc/testsuite/gfortran.dg/constructor_9.f90   (.../branches/gcc-4_8-branch)
 
14315
@@ -0,0 +1,22 @@
 
14316
+! { dg-do compile }
 
14317
+! { dg-options "-Wall" }
 
14318
+!
 
14319
+! PR 58471: [4.8/4.9 Regression] ICE on invalid with missing type constructor and -Wall
 
14320
+!
 
14321
+! Contributed by Andrew Benson <abensonca@gmail.com>
 
14322
+
 
14323
+module cf
 
14324
+  implicit none
 
14325
+  type :: cfmde
 
14326
+  end type
 
14327
+  interface cfmde
 
14328
+     module procedure mdedc   ! { dg-error "is neither function nor subroutine" }
 
14329
+  end interface
 
14330
+contains
 
14331
+  subroutine cfi()
 
14332
+    type(cfmde), pointer :: cfd
 
14333
+    cfd=cfmde()                  ! { dg-error "Can't convert" }
 
14334
+  end subroutine
 
14335
+end module
 
14336
+
 
14337
+! { dg-final { cleanup-modules "cf" } }
 
14338
Index: gcc/testsuite/gfortran.dg/round_3.f08
 
14339
===================================================================
 
14340
--- a/src/gcc/testsuite/gfortran.dg/round_3.f08 (.../tags/gcc_4_8_2_release)
 
14341
+++ b/src/gcc/testsuite/gfortran.dg/round_3.f08 (.../branches/gcc-4_8-branch)
 
14342
@@ -16,19 +16,44 @@
 
14343
     call checkfmt("(RU,1P,G6.0E2)", 2.0,  "2.E+00")
 
14344
     call checkfmt("(RU,1P,G10.4E2)", 2.3456e5,  "2.3456E+05")
 
14345
 
 
14346
-    call checkfmt("(RU,F2.0)",     0.09,  "1.")     ! 0.
 
14347
+    call checkfmt("(RC,G10.2)", 99.5,   "  0.10E+03") ! pr59774
 
14348
+    call checkfmt("(RC,G10.2)", 995.,   "  0.10E+04") ! pr59774
 
14349
+    call checkfmt("(RC,G10.3)", 999.5,  " 0.100E+04") ! pr59774
 
14350
+    call checkfmt("(RC,G10.3)", 9995.,  " 0.100E+05") ! pr59774
 
14351
+    call checkfmt("(RU,G10.2)", .099,   "  0.10    ") ! pr59774
 
14352
+    call checkfmt("(RC,G10.1)", .095,   "   0.1    ") ! pr59774
 
14353
+    call checkfmt("(RU,G10.3)", .0999,  " 0.100    ") ! pr59774
 
14354
+    call checkfmt("(RC,G10.2)", .0995,  "  0.10    ") ! pr59774
 
14355
+
 
14356
+    call checkfmt("(RU,G9.3)",  891.1,  " 892.")      ! pr59836
 
14357
+    call checkfmt("(RD,G9.3)", -891.1,  "-892.")      ! pr59836
 
14358
+    
 
14359
+    call checkfmt("(RU,F6.4)",     0.00006,  "0.0001")! 0.
 
14360
+    call checkfmt("(RU,F5.3)",     0.0007,  "0.001")  ! 0.
 
14361
+    call checkfmt("(RU,F4.2)",     0.008,  "0.01")    ! 0.
 
14362
+    call checkfmt("(RU,F3.1)",     0.09,  "0.1")      ! 0.
 
14363
+
 
14364
+    call checkfmt("(RU,F2.0)",     0.09,  "1.")       ! 0.
 
14365
     call checkfmt("(RD,F3.0)",     -0.09,  "-1.")     ! -0.
 
14366
-    call checkfmt("(RU,F2.0)",      2.0,  "2.")     ! 3.
 
14367
-    call checkfmt("(RD,F3.0)",     -2.0,  "-2.")     ! -3.
 
14368
-    call checkfmt("(RU,F6.4)",      2.0,  "2.0000")     ! 2.0001
 
14369
-    call checkfmt("(RD,F7.4)",     -2.0,  "-2.0000")     ! -2.0001
 
14370
-    call checkfmt("(RU,1P,E6.0E2)", 2.0,  "2.E+00") ! 3.E+00
 
14371
+    call checkfmt("(RU,F2.0)",     0.9,  "1.")        ! pr59836
 
14372
+    call checkfmt("(RC,F2.0)",     0.4,  "0.")        ! pr59836
 
14373
+    call checkfmt("(RC,F2.0)",     0.5,  "1.")        ! pr59836
 
14374
+    call checkfmt("(RC,F2.0)",     0.6,  "1.")        ! pr59836
 
14375
+    call checkfmt("(RD,F3.0)",     -0.9,  "-1.")      ! pr59836
 
14376
+    call checkfmt("(RC,F3.0)",     -0.4,  "-0.")      ! pr59836
 
14377
+    call checkfmt("(RC,F3.0)",     -0.5,  "-1.")      ! pr59836
 
14378
+    call checkfmt("(RC,F3.0)",     -0.6,  "-1.")      ! pr59836
 
14379
+    call checkfmt("(RU,F2.0)",      2.0,  "2.")       ! 3.
 
14380
+    call checkfmt("(RD,F3.0)",     -2.0,  "-2.")      ! -3.
 
14381
+    call checkfmt("(RU,F6.4)",      2.0,  "2.0000")   ! 2.0001
 
14382
+    call checkfmt("(RD,F7.4)",     -2.0,  "-2.0000")  ! -2.0001
 
14383
+    call checkfmt("(RU,1P,E6.0E2)", 2.0,  "2.E+00")   ! 3.E+00
 
14384
     call checkfmt("(RD,1P,E7.0E2)", -2.0,  "-2.E+00") ! -3.E+00
 
14385
-    call checkfmt("(RU,1P,E7.1E2)", 2.5,  "2.5E+00") ! 2.6E+00
 
14386
+    call checkfmt("(RU,1P,E7.1E2)", 2.5,  "2.5E+00")  ! 2.6E+00
 
14387
     call checkfmt("(RD,1P,E8.1E2)", -2.5,  "-2.5E+00") ! -2.6E+00
 
14388
     call checkfmt("(RU,1P,E10.4E2)", 2.5,  "2.5000E+00") ! 2.5001E+00
 
14389
     call checkfmt("(RD,1P,E11.4E2)", -2.5,  "-2.5000E+00") ! -2.5001E+00
 
14390
-    call checkfmt("(RU,1P,G6.0E2)", 2.0,  "2.E+00") ! 3.E+00
 
14391
+    call checkfmt("(RU,1P,G6.0E2)", 2.0,  "2.E+00")   ! 3.E+00
 
14392
     call checkfmt("(RD,1P,G7.0E2)", -2.0,  "-2.E+00") ! -3.E+00
 
14393
     call checkfmt("(RU,1P,G10.4E2)", 2.3456e5,  "2.3456E+05") ! 2.3457E+05
 
14394
     call checkfmt("(RD,1P,G11.4E2)", -2.3456e5,  "-2.3456E+05") ! -2.3457E+05
 
14395
Index: gcc/testsuite/gfortran.dg/default_initialization_7.f90
 
14396
===================================================================
 
14397
--- a/src/gcc/testsuite/gfortran.dg/default_initialization_7.f90        (.../tags/gcc_4_8_2_release)
 
14398
+++ b/src/gcc/testsuite/gfortran.dg/default_initialization_7.f90        (.../branches/gcc-4_8-branch)
 
14399
@@ -0,0 +1,22 @@
 
14400
+! { dg-do compile }
 
14401
+!
 
14402
+! PR fortran/57033
 
14403
+! ICE on a structure constructor of an extended derived type whose parent
 
14404
+! type last component has a default initializer
 
14405
+!
 
14406
+! Contributed by Tilo Schwarz <tilo@tilo-schwarz.de>
 
14407
+
 
14408
+program ice
 
14409
+
 
14410
+type m
 
14411
+    integer i
 
14412
+    logical :: f = .false.
 
14413
+end type m
 
14414
+
 
14415
+type, extends(m) :: me
 
14416
+end type me
 
14417
+
 
14418
+type(me) meo
 
14419
+
 
14420
+meo = me(1)              ! ICE
 
14421
+end program ice
 
14422
Index: gcc/testsuite/gfortran.dg/proc_ptr_46.f90
 
14423
===================================================================
 
14424
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_46.f90     (.../tags/gcc_4_8_2_release)
 
14425
+++ b/src/gcc/testsuite/gfortran.dg/proc_ptr_46.f90     (.../branches/gcc-4_8-branch)
 
14426
@@ -0,0 +1,14 @@
 
14427
+! { dg-do compile }
 
14428
+!
 
14429
+! PR fortran/49397
 
14430
+!
 
14431
+! Invalid per IR F08/0060 and F2008Corr2, C729
 
14432
+!
 
14433
+
 
14434
+!  Print *,f() ! << Valid when uncommented
 
14435
+Contains
 
14436
+  Subroutine s
 
14437
+    Procedure(Real),Pointer :: p
 
14438
+    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" }
 
14439
+  End Subroutine
 
14440
+End
 
14441
Index: gcc/testsuite/gfortran.dg/pr52370.f90
 
14442
===================================================================
 
14443
--- a/src/gcc/testsuite/gfortran.dg/pr52370.f90 (.../tags/gcc_4_8_2_release)
 
14444
+++ b/src/gcc/testsuite/gfortran.dg/pr52370.f90 (.../branches/gcc-4_8-branch)
 
14445
@@ -0,0 +1,21 @@
 
14446
+! PR fortran/52370
 
14447
+! { dg-do compile }
 
14448
+! { dg-options "-O1 -Wall" }
 
14449
+
 
14450
+module pr52370
 
14451
+contains
 
14452
+  subroutine foo(a,b)
 
14453
+    real, intent(out) :: a
 
14454
+    real, dimension(:), optional, intent(out) :: b
 
14455
+    a=0.5
 
14456
+    if (present(b)) then
 
14457
+      b=1.0
 
14458
+    end if
 
14459
+  end subroutine foo
 
14460
+end module pr52370
 
14461
+
 
14462
+program prg52370
 
14463
+  use pr52370
 
14464
+  real :: a
 
14465
+  call foo(a)
 
14466
+end program prg52370
 
14467
Index: gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90
 
14468
===================================================================
 
14469
--- a/src/gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90     (.../tags/gcc_4_8_2_release)
 
14470
+++ b/src/gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90     (.../branches/gcc-4_8-branch)
 
14471
@@ -0,0 +1,22 @@
 
14472
+! { dg-do compile }
 
14473
+! { dg-options "-ffrontend-optimize" }
 
14474
+!
 
14475
+! PR fortran/60341
 
14476
+! An unguarded union access was wrongly enabling a frontend optimization on a
 
14477
+! string comparison, leading to an ICE.
 
14478
+!
 
14479
+! Original testcase from Steve Chapel  <steve.chapel@a2pg.com>.
 
14480
+! Reduced by Steven G. Kargl  <kargl@gcc.gnu.org>.
 
14481
+!
 
14482
+
 
14483
+      subroutine modelg(ncm)
 
14484
+      implicit none
 
14485
+      integer, parameter :: pc = 30, pm = pc - 1
 
14486
+      integer i
 
14487
+      character*4 catt(pm,2)
 
14488
+      integer ncm,iatt(pm,pc)
 
14489
+      do i=1,ncm
 
14490
+         if (catt(i,1)//catt(i,2).eq.'central') exit
 
14491
+      end do
 
14492
+      iatt(i,4)=1
 
14493
+      end
 
14494
Index: gcc/testsuite/gfortran.dg/list_read_12.f90
 
14495
===================================================================
 
14496
--- a/src/gcc/testsuite/gfortran.dg/list_read_12.f90    (.../tags/gcc_4_8_2_release)
 
14497
+++ b/src/gcc/testsuite/gfortran.dg/list_read_12.f90    (.../branches/gcc-4_8-branch)
 
14498
@@ -0,0 +1,11 @@
 
14499
+! { dg-do run }
 
14500
+! PR58324 Bogus end of file condition
 
14501
+integer :: i, ios
 
14502
+open(99, access='stream', form='unformatted')
 
14503
+write(99) "5 a"
 
14504
+close(99)
 
14505
+
 
14506
+open(99, access='sequential', form='formatted')
 
14507
+read(99, *, iostat=ios) i
 
14508
+if (ios /= 0) call abort
 
14509
+end
 
14510
Index: gcc/testsuite/gfortran.dg/generic_28.f90
 
14511
===================================================================
 
14512
--- a/src/gcc/testsuite/gfortran.dg/generic_28.f90      (.../tags/gcc_4_8_2_release)
 
14513
+++ b/src/gcc/testsuite/gfortran.dg/generic_28.f90      (.../branches/gcc-4_8-branch)
 
14514
@@ -0,0 +1,18 @@
 
14515
+! { dg-do compile }
 
14516
+!
 
14517
+! PR 58998: [4.8/4.9 Regression] Generic interface problem with gfortran
 
14518
+!
 
14519
+! Contributed by Paul van Delst
 
14520
+
 
14521
+  interface iargc
 
14522
+    procedure iargc_8
 
14523
+  end interface
 
14524
+  
 
14525
+contains
 
14526
+
 
14527
+  integer(8) function iargc_8()
 
14528
+    integer(4) iargc
 
14529
+    iargc_8 = iargc()
 
14530
+  end function
 
14531
+  
 
14532
+end
 
14533
Index: gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90
 
14534
===================================================================
 
14535
--- a/src/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90      (.../tags/gcc_4_8_2_release)
 
14536
+++ b/src/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90      (.../branches/gcc-4_8-branch)
 
14537
@@ -0,0 +1,44 @@
 
14538
+! { dg-do compile }
 
14539
+!
 
14540
+! PR fortran/58007
 
14541
+! Unresolved fixup while loading a module.
 
14542
+!
 
14543
+! This tests that the specification expression A%MAX_DEGREE in module BSR is
 
14544
+! correctly loaded and resolved in program MAIN.
 
14545
+!
 
14546
+! Original testcase from Daniel Shapiro <shapero@uw.edu>
 
14547
+! Reduced by Tobias Burnus <burnus@net-b.de> and Janus Weil <janus@gcc.gnu.org>
 
14548
+
 
14549
+module matrix
 
14550
+  type :: sparse_matrix
 
14551
+    integer :: max_degree
 
14552
+  end type
 
14553
+contains
 
14554
+  subroutine init_interface (A)
 
14555
+    class(sparse_matrix), intent(in) :: A
 
14556
+  end subroutine
 
14557
+  real function get_value_interface()
 
14558
+  end function
 
14559
+end module
 
14560
+
 
14561
+module ellpack
 
14562
+  use matrix
 
14563
+end module
 
14564
+
 
14565
+module bsr
 
14566
+  use matrix
 
14567
+  type, extends(sparse_matrix) :: bsr_matrix
 
14568
+  contains
 
14569
+    procedure :: get_neighbors
 
14570
+  end type
 
14571
+contains
 
14572
+  function get_neighbors (A)
 
14573
+    class(bsr_matrix), intent(in) :: A
 
14574
+    integer :: get_neighbors(A%max_degree)
 
14575
+  end function
 
14576
+end module
 
14577
+
 
14578
+program main
 
14579
+  use ellpack
 
14580
+  use bsr
 
14581
+end
 
14582
Index: gcc/testsuite/gfortran.dg/null_5.f90
 
14583
===================================================================
 
14584
--- a/src/gcc/testsuite/gfortran.dg/null_5.f90  (.../tags/gcc_4_8_2_release)
 
14585
+++ b/src/gcc/testsuite/gfortran.dg/null_5.f90  (.../branches/gcc-4_8-branch)
 
14586
@@ -34,7 +34,7 @@
 
14587
 end subroutine test_PR34547_1
 
14588
 
 
14589
 subroutine test_PR34547_2 ()
 
14590
-  print *, null () ! { dg-error "in data transfer statement requires MOLD" }
 
14591
+  print *, null () ! { dg-error "Invalid context" }
 
14592
 end subroutine test_PR34547_2
 
14593
 
 
14594
 subroutine test_PR34547_3 ()
 
14595
Index: gcc/testsuite/gfortran.dg/proc_ptr_43.f90
 
14596
===================================================================
 
14597
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_43.f90     (.../tags/gcc_4_8_2_release)
 
14598
+++ b/src/gcc/testsuite/gfortran.dg/proc_ptr_43.f90     (.../branches/gcc-4_8-branch)
 
14599
@@ -0,0 +1,19 @@
 
14600
+! { dg-do compile }
 
14601
+!
 
14602
+! PR 58099: [4.8/4.9 Regression] [F03] over-zealous procedure-pointer error checking
 
14603
+!
 
14604
+! Contributed by Daniel Price <daniel.price@monash.edu>
 
14605
+
 
14606
+  implicit none
 
14607
+  procedure(real), pointer :: wfunc
 
14608
+
 
14609
+  wfunc => w_cubic 
 
14610
 
14611
+contains
 
14612
+
 
14613
+  pure real function w_cubic(q2)
 
14614
+    real, intent(in) :: q2
 
14615
+    w_cubic = 0.
 
14616
+  end function
 
14617
+
 
14618
+end
 
14619
Index: gcc/testsuite/gfortran.dg/typebound_generic_15.f90
 
14620
===================================================================
 
14621
--- a/src/gcc/testsuite/gfortran.dg/typebound_generic_15.f90    (.../tags/gcc_4_8_2_release)
 
14622
+++ b/src/gcc/testsuite/gfortran.dg/typebound_generic_15.f90    (.../branches/gcc-4_8-branch)
 
14623
@@ -0,0 +1,18 @@
 
14624
+! { dg-do compile }
 
14625
+!
 
14626
+! PR 60231: [4.8/4.9 Regression] ICE on undefined generic
 
14627
+!
 
14628
+! Contributed by Antony Lewis <antony@cosmologist.info>
 
14629
+
 
14630
+module Objects
 
14631
+
 
14632
+  Type TObjectList
 
14633
+  contains
 
14634
+    procedure :: Add1             ! { dg-error "must be a module procedure" }
 
14635
+    procedure :: Add2             ! { dg-error "must be a module procedure" }
 
14636
+    generic :: Add => Add1, Add2  ! { dg-error "are ambiguous" }
 
14637
+  end Type
 
14638
+
 
14639
+end module
 
14640
+
 
14641
+! { dg-final { cleanup-modules "Objects" } }
 
14642
Index: gcc/testsuite/gfortran.dg/extends_15.f90
 
14643
===================================================================
 
14644
--- a/src/gcc/testsuite/gfortran.dg/extends_15.f90      (.../tags/gcc_4_8_2_release)
 
14645
+++ b/src/gcc/testsuite/gfortran.dg/extends_15.f90      (.../branches/gcc-4_8-branch)
 
14646
@@ -0,0 +1,16 @@
 
14647
+! { dg-do compile }
 
14648
+!
 
14649
+! PR 58355: [4.7/4.8/4.9 Regression] [F03] ICE with TYPE, EXTENDS before parent TYPE defined
 
14650
+!
 
14651
+! Contributed by Andrew Benson <abensonca@gmail.com>
 
14652
+
 
14653
+module ct
 
14654
+  public :: t1
 
14655
+
 
14656
+  type, extends(t1) :: t2   ! { dg-error "has not been previously defined" }
 
14657
+
 
14658
+  type :: t1
 
14659
+  end type
 
14660
+end
 
14661
+
 
14662
+! { dg-final { cleanup-modules "ct" } }
 
14663
Index: gcc/testsuite/gfortran.dg/optional_class_1.f90
 
14664
===================================================================
 
14665
--- a/src/gcc/testsuite/gfortran.dg/optional_class_1.f90        (.../tags/gcc_4_8_2_release)
 
14666
+++ b/src/gcc/testsuite/gfortran.dg/optional_class_1.f90        (.../branches/gcc-4_8-branch)
 
14667
@@ -0,0 +1,45 @@
 
14668
+! { dg-do run }
 
14669
+!
 
14670
+! PR fortran/57445
 
14671
+!
 
14672
+! Contributed by Tobias Burnus  <burnus@gcc.gnu.org>
 
14673
+!
 
14674
+! Spurious assert was added at revision 192495
 
14675
+!
 
14676
+module m
 
14677
+  implicit none
 
14678
+  type t
 
14679
+    integer :: i
 
14680
+  end type t
 
14681
+contains
 
14682
+  subroutine opt(xa, xc, xaa, xca)
 
14683
+    type(t),  allocatable, intent(out), optional :: xa
 
14684
+    class(t), allocatable, intent(out), optional :: xc
 
14685
+    type(t),  allocatable, intent(out), optional :: xaa(:)
 
14686
+    class(t), allocatable, intent(out), optional :: xca(:)
 
14687
+    if (present (xca)) call foo_opt(xca=xca)
 
14688
+  end subroutine opt
 
14689
+  subroutine foo_opt(xa, xc, xaa, xca)
 
14690
+    type(t),  allocatable, intent(out), optional :: xa
 
14691
+    class(t), allocatable, intent(out), optional :: xc
 
14692
+    type(t),  allocatable, intent(out), optional :: xaa(:)
 
14693
+    class(t), allocatable, intent(out), optional :: xca(:)
 
14694
+    if (present (xca)) then
 
14695
+      if (allocated (xca)) deallocate (xca)
 
14696
+      allocate (xca(3), source = [t(9),t(99),t(999)])
 
14697
+    end if
 
14698
+  end subroutine foo_opt
 
14699
+end module m
 
14700
+  use m
 
14701
+  class(t), allocatable :: xca(:)
 
14702
+  allocate (xca(1), source = t(42))
 
14703
+  select type (xca)
 
14704
+    type is (t)
 
14705
+      if (any (xca%i .ne. [42])) call abort
 
14706
+  end select
 
14707
+  call opt (xca = xca)
 
14708
+  select type (xca)
 
14709
+    type is (t)
 
14710
+      if (any (xca%i .ne. [9,99,999])) call abort
 
14711
+  end select
 
14712
+end
 
14713
Index: gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90
 
14714
===================================================================
 
14715
--- a/src/gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90     (.../tags/gcc_4_8_2_release)
 
14716
+++ b/src/gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90     (.../branches/gcc-4_8-branch)
 
14717
@@ -0,0 +1,74 @@
 
14718
+! { dg-do run }
 
14719
+!
 
14720
+! PR 59654: [4.8/4.9 Regression] [OOP] Broken function table with complex OO use case
 
14721
+!
 
14722
+! Contributed by Thomas Clune <Thomas.L.Clune@nasa.gov>
 
14723
+
 
14724
+module TestResult_mod
 
14725
+  implicit none
 
14726
+
 
14727
+  type TestResult
 
14728
+    integer :: numRun = 0
 
14729
+  contains
 
14730
+    procedure :: run
 
14731
+    procedure, nopass :: getNumRun
 
14732
+  end type
 
14733
+
 
14734
+contains
 
14735
+
 
14736
+  subroutine run (this)
 
14737
+    class (TestResult) :: this
 
14738
+    this%numRun = this%numRun + 1
 
14739
+  end subroutine
 
14740
+
 
14741
+  subroutine getNumRun()
 
14742
+   end subroutine
 
14743
+
 
14744
+end module
 
14745
+
 
14746
+
 
14747
+module BaseTestRunner_mod
 
14748
+  implicit none
 
14749
+
 
14750
+  type :: BaseTestRunner
 
14751
+  contains
 
14752
+    procedure, nopass :: norun
 
14753
+  end type
 
14754
+
 
14755
+contains
 
14756
+
 
14757
+  function norun () result(result)
 
14758
+    use TestResult_mod, only: TestResult
 
14759
+    type (TestResult) :: result
 
14760
+  end function
 
14761
+
 
14762
+end module
 
14763
+
 
14764
+
 
14765
+module TestRunner_mod
 
14766
+  use BaseTestRunner_mod, only: BaseTestRunner
 
14767
+  implicit none
 
14768
+end module
 
14769
+
 
14770
+
 
14771
+program main
 
14772
+  use TestRunner_mod, only: BaseTestRunner
 
14773
+  use TestResult_mod, only: TestResult
 
14774
+  implicit none
 
14775
+
 
14776
+  type (TestResult) :: result
 
14777
+
 
14778
+  call runtest (result)
 
14779
+  
 
14780
+contains
 
14781
+
 
14782
+  subroutine runtest (result)
 
14783
+    use TestResult_mod, only: TestResult
 
14784
+    class (TestResult) :: result
 
14785
+    call result%run()
 
14786
+    if (result%numRun /= 1) call abort()
 
14787
+  end subroutine
 
14788
+
 
14789
+end
 
14790
+
 
14791
+! { dg-final { cleanup-modules "TestResult_mod BaseTestRunner_mod TestRunner_mod" } }
 
14792
Index: gcc/testsuite/gfortran.dg/proc_ptr_45.f90
 
14793
===================================================================
 
14794
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_45.f90     (.../tags/gcc_4_8_2_release)
 
14795
+++ b/src/gcc/testsuite/gfortran.dg/proc_ptr_45.f90     (.../branches/gcc-4_8-branch)
 
14796
@@ -0,0 +1,24 @@
 
14797
+! { dg-do compile }
 
14798
+!
 
14799
+! PR fortran/49397
 
14800
+!
 
14801
+! Valid per IR F08/0060 and F2008Corr2, C729
 
14802
+!
 
14803
+Program m5
 
14804
+  Print *,f()
 
14805
+Contains
 
14806
+  Subroutine s
 
14807
+    Procedure(Real),Pointer :: p
 
14808
+    Print *,g()
 
14809
+    p => f                           ! (1)
 
14810
+    Print *,p()
 
14811
+    p => g                           ! (2)
 
14812
+    Print *,p()
 
14813
+  End Subroutine
 
14814
+End Program
 
14815
+Function f()
 
14816
+  f = 1
 
14817
+End Function
 
14818
+Function g()
 
14819
+  g = 2
 
14820
+End Function
 
14821
Index: gcc/testsuite/gfortran.dg/pr59700.f90
 
14822
===================================================================
 
14823
--- a/src/gcc/testsuite/gfortran.dg/pr59700.f90 (.../tags/gcc_4_8_2_release)
 
14824
+++ b/src/gcc/testsuite/gfortran.dg/pr59700.f90 (.../branches/gcc-4_8-branch)
 
14825
@@ -0,0 +1,40 @@
 
14826
+! { dg-do run }
 
14827
+! PR59700 Test case by Steve Kargl
 
14828
+program foo
 
14829
+
 
14830
+   implicit none
 
14831
+
 
14832
+   character(len=80) msg
 
14833
+   integer, parameter :: fd = 10
 
14834
+   integer i1, i2, i3, i4
 
14835
+   real    x1, x2, x3, x4
 
14836
+   complex c1, c2
 
14837
+   logical a
 
14838
+
 
14839
+   open(unit=fd, status='scratch')
 
14840
+   write(fd, '(A)') '1 2 3.4 q'
 
14841
+
 
14842
+   rewind(fd)
 
14843
+   msg = 'ok'
 
14844
+   read(fd, *, err=10, iomsg=msg) i1, i2, i3, i4
 
14845
+10 if (msg /= 'Bad integer for item 3 in list input') call abort
 
14846
+   rewind(fd)
 
14847
+   msg = 'ok'
 
14848
+   read(fd, *, err=20, iomsg=msg) x1, x2, x3, x4
 
14849
+20 if (msg /= 'Bad real number in item 4 of list input') call abort
 
14850
+   rewind(fd)
 
14851
+   msg = 'ok'
 
14852
+   read(fd, *, err=30, iomsg=msg) i1, x2, x1, a
 
14853
+30 if (msg /= 'Bad logical value while reading item 4') call abort
 
14854
+   rewind(fd)
 
14855
+   read(fd, *, err=31, iomsg=msg) i1, x2, a, x1
 
14856
+31 if (msg /= 'Bad repeat count in item 3 of list input') call abort
 
14857
+   close(fd)
 
14858
+   open(unit=fd, status='scratch')
 
14859
+   write(fd, '(A)') '(1, 2) (3.4, q)'
 
14860
+   rewind(fd)
 
14861
+   msg = 'ok'
 
14862
+   read(fd, *, err=40, iomsg=msg) c1, c2
 
14863
+40 if (msg /= 'Bad floating point number for item 2') call abort
 
14864
+   close(fd)
 
14865
+end program foo
 
14866
Index: gcc/testsuite/gfortran.dg/ichar_3.f90
 
14867
===================================================================
 
14868
--- a/src/gcc/testsuite/gfortran.dg/ichar_3.f90 (.../tags/gcc_4_8_2_release)
 
14869
+++ b/src/gcc/testsuite/gfortran.dg/ichar_3.f90 (.../branches/gcc-4_8-branch)
 
14870
@@ -0,0 +1,13 @@
 
14871
+! { dg-do compile }
 
14872
+!
 
14873
+! PR fortran/59599
 
14874
+! The call to ichar was triggering an ICE.
 
14875
+!
 
14876
+! Original testcase from Fran Martinez Fadrique <fmartinez@gmv.com>
 
14877
+
 
14878
+character(1) cpk(2)
 
14879
+integer res(2)
 
14880
+cpk = 'a'
 
14881
+res = ichar( cpk, kind=1 )
 
14882
+print *, ichar( cpk, kind=1 )
 
14883
+end
 
14884
Index: gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90
 
14885
===================================================================
 
14886
--- a/src/gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90        (.../tags/gcc_4_8_2_release)
 
14887
+++ b/src/gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90        (.../branches/gcc-4_8-branch)
 
14888
@@ -0,0 +1,17 @@
 
14889
+! { dg-do compile }
 
14890
+!
 
14891
+! PR 59493: [OOP] ICE: Segfault on Class(*) pointer association
 
14892
+!
 
14893
+! Contributed by Hossein Talebi <talebi.hossein@gmail.com>
 
14894
+
 
14895
+  implicit none
 
14896
+
 
14897
+  type ty_mytype1
 
14898
+  end type
 
14899
+
 
14900
+  class(ty_mytype1), allocatable, target:: cla1
 
14901
+  class(*), pointer :: ptr
 
14902
+
 
14903
+  ptr => cla1
 
14904
+
 
14905
+end
 
14906
Index: gcc/testsuite/gfortran.dg/fmt_g_1.f90
 
14907
===================================================================
 
14908
--- a/src/gcc/testsuite/gfortran.dg/fmt_g_1.f90 (.../tags/gcc_4_8_2_release)
 
14909
+++ b/src/gcc/testsuite/gfortran.dg/fmt_g_1.f90 (.../branches/gcc-4_8-branch)
 
14910
@@ -0,0 +1,11 @@
 
14911
+! { dg-do run }
 
14912
+! PR59771 Cleanup handling of Gw.0 and Gw.0Ee format
 
14913
+! Test case prepared by Dominique d'Humieres <dominiq@lps.ens.fr>
 
14914
+       PROGRAM FOO
 
14915
+       character(len=60) :: buffer, buffer1
 
14916
+
 
14917
+       write (buffer ,'(6(1X,1PG9.0e2))') 0.0, 0.04, 0.06, 0.4, 0.6, 243.0
 
14918
+       write (buffer1,'(6(1X,1PE9.0e2))') 0.0, 0.04, 0.06, 0.4, 0.6, 243.0
 
14919
+
 
14920
+       if (buffer /= buffer1) call abort
 
14921
+       end
 
14922
Index: gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90
 
14923
===================================================================
 
14924
--- a/src/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90  (.../tags/gcc_4_8_2_release)
 
14925
+++ b/src/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90  (.../branches/gcc-4_8-branch)
 
14926
@@ -0,0 +1,39 @@
 
14927
+! { dg-do run }
 
14928
+!
 
14929
+! PR fortran/59906
 
14930
+!
 
14931
+! Contributed by H Anlauf  <anlauf@gmx.de>
 
14932
+!
 
14933
+! Failed generate character scalar for scalarized loop for elemantal call.
 
14934
+!
 
14935
+program x
 
14936
+  implicit none
 
14937
+  call y('bbb')
 
14938
+contains
 
14939
+
 
14940
+  subroutine y(str)
 
14941
+    character(len=*), intent(in) :: str
 
14942
+    character(len=len_trim(str)) :: str_aux
 
14943
+    character(len=3) :: str3 = 'abc'
 
14944
+
 
14945
+    str_aux = str
 
14946
+
 
14947
+    ! Compiled but did not give correct result
 
14948
+    if (any (str_cmp((/'aaa','bbb'/), str) .neqv. [.FALSE.,.TRUE.])) call abort
 
14949
+
 
14950
+    ! Did not compile
 
14951
+    if (any (str_cmp((/'bbb', 'aaa'/), str_aux) .neqv. [.TRUE.,.FALSE.])) call abort
 
14952
+
 
14953
+    ! Verify patch
 
14954
+    if (any (str_cmp((/'bbb', 'aaa'/), str3) .neqv. [.FALSE.,.FALSE.])) call abort
 
14955
+    if (any (str_cmp((/'bbb', 'aaa'/), 'aaa') .neqv. [.FALSE.,.TRUE.])) call abort
 
14956
+
 
14957
+  end subroutine y
 
14958
+
 
14959
+  elemental logical function str_cmp(str1, str2)
 
14960
+    character(len=*), intent(in) :: str1
 
14961
+    character(len=*), intent(in) :: str2
 
14962
+    str_cmp = (str1 == str2)
 
14963
+  end function str_cmp
 
14964
+
 
14965
+end program x
 
14966
Index: gcc/testsuite/gcc.c-torture/execute/20140212-1.c
 
14967
===================================================================
 
14968
--- a/src/gcc/testsuite/gcc.c-torture/execute/20140212-1.c      (.../tags/gcc_4_8_2_release)
 
14969
+++ b/src/gcc/testsuite/gcc.c-torture/execute/20140212-1.c      (.../branches/gcc-4_8-branch)
 
14970
@@ -0,0 +1,37 @@
 
14971
+/* PR rtl-optimization/60116 */
 
14972
+/* Reported by Zhendong Su <su@cs.ucdavis.edu> */
 
14973
+
 
14974
+extern void abort (void);
 
14975
+
 
14976
+int a, b, c, d = 1, e, f = 1, h, i, k;
 
14977
+char g, j;
 
14978
+
 
14979
+void
 
14980
+fn1 (void)
 
14981
+{
 
14982
+  int l;
 
14983
+  e = 0;
 
14984
+  c = 0;
 
14985
+  for (;;)
 
14986
+    {
 
14987
+      k = a && b;
 
14988
+      j = k * 54;
 
14989
+      g = j * 147;
 
14990
+      l = ~g + (long long) e && 1;
 
14991
+      if (d)
 
14992
+       c = l;
 
14993
+      else
 
14994
+       h = i = l * 9UL;
 
14995
+      if (f)
 
14996
+       return;
 
14997
+    }
 
14998
+}
 
14999
+
 
15000
+int
 
15001
+main (void)
 
15002
+{
 
15003
+  fn1 ();
 
15004
+  if (c != 1)
 
15005
+    abort ();
 
15006
+  return 0;
 
15007
+}
 
15008
Index: gcc/testsuite/gcc.c-torture/execute/pr58984.c
 
15009
===================================================================
 
15010
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr58984.c (.../tags/gcc_4_8_2_release)
 
15011
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr58984.c (.../branches/gcc-4_8-branch)
 
15012
@@ -0,0 +1,57 @@
 
15013
+/* PR tree-optimization/58984 */
 
15014
+
 
15015
+struct S { int f0 : 8; int : 6; int f1 : 5; };
 
15016
+struct T { char f0; int : 6; int f1 : 5; };
 
15017
+
 
15018
+int a, *c = &a, e, n, b, m;
 
15019
+
 
15020
+static int
 
15021
+foo (struct S p)
 
15022
+{
 
15023
+  const unsigned short *f[36];
 
15024
+  for (; e < 2; e++)
 
15025
+    {
 
15026
+      const unsigned short **i = &f[0];
 
15027
+      *c ^= 1;
 
15028
+      if (p.f1)
 
15029
+       {
 
15030
+         *i = 0;
 
15031
+         return b;
 
15032
+       }
 
15033
+    }
 
15034
+  return 0;
 
15035
+}
 
15036
+
 
15037
+static int
 
15038
+bar (struct T p)
 
15039
+{
 
15040
+  const unsigned short *f[36];
 
15041
+  for (; e < 2; e++)
 
15042
+    {
 
15043
+      const unsigned short **i = &f[0];
 
15044
+      *c ^= 1;
 
15045
+      if (p.f1)
 
15046
+       {
 
15047
+         *i = 0;
 
15048
+         return b;
 
15049
+       }
 
15050
+    }
 
15051
+  return 0;
 
15052
+}
 
15053
+
 
15054
+int
 
15055
+main ()
 
15056
+{
 
15057
+  struct S o = { 1, 1 };
 
15058
+  foo (o);
 
15059
+  m = n || o.f0;
 
15060
+  if (a != 1)
 
15061
+    __builtin_abort ();
 
15062
+  e = 0;
 
15063
+  struct T p = { 1, 1 };
 
15064
+  bar (p);
 
15065
+  m |= n || p.f0;
 
15066
+  if (a != 0)
 
15067
+    __builtin_abort ();
 
15068
+  return 0;
 
15069
+}
 
15070
Index: gcc/testsuite/gcc.c-torture/execute/pr60454.c
 
15071
===================================================================
 
15072
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr60454.c (.../tags/gcc_4_8_2_release)
 
15073
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr60454.c (.../branches/gcc-4_8-branch)
 
15074
@@ -0,0 +1,31 @@
 
15075
+#ifdef __UINT32_TYPE__
 
15076
+typedef __UINT32_TYPE__ uint32_t;
 
15077
+#else
 
15078
+typedef unsigned uint32_t;
 
15079
+#endif
 
15080
+
 
15081
+#define __fake_const_swab32(x) ((uint32_t)(                          \
 
15082
+        (((uint32_t)(x) & (uint32_t)0x000000ffUL) << 24) |            \
 
15083
+        (((uint32_t)(x) & (uint32_t)0x0000ff00UL) <<  8) |            \
 
15084
+        (((uint32_t)(x) & (uint32_t)0x000000ffUL) <<  8) |            \
 
15085
+        (((uint32_t)(x) & (uint32_t)0x0000ff00UL)      ) |            \
 
15086
+        (((uint32_t)(x) & (uint32_t)0xff000000UL) >> 24)))
 
15087
+
 
15088
+/* Previous version of bswap optimization would detect byte swap when none
 
15089
+   happen. This test aims at catching such wrong detection to avoid
 
15090
+   regressions.  */
 
15091
+
 
15092
+__attribute__ ((noinline, noclone)) uint32_t
 
15093
+fake_swap32 (uint32_t in)
 
15094
+{
 
15095
+  return __fake_const_swab32 (in);
 
15096
+}
 
15097
+
 
15098
+int main(void)
 
15099
+{
 
15100
+  if (sizeof (uint32_t) * __CHAR_BIT__ != 32)
 
15101
+    return 0;
 
15102
+  if (fake_swap32 (0x12345678UL) != 0x78567E12UL)
 
15103
+    __builtin_abort ();
 
15104
+  return 0;
 
15105
+}
 
15106
Index: gcc/testsuite/gcc.c-torture/execute/pr60017.c
 
15107
===================================================================
 
15108
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr60017.c (.../tags/gcc_4_8_2_release)
 
15109
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr60017.c (.../branches/gcc-4_8-branch)
 
15110
@@ -0,0 +1,33 @@
 
15111
+/* PR target/60017 */
 
15112
+
 
15113
+extern void abort (void);
 
15114
+
 
15115
+struct S0
 
15116
+{
 
15117
+  short m0;
 
15118
+  short m1;
 
15119
+};
 
15120
+
 
15121
+struct S1
 
15122
+{
 
15123
+  unsigned m0:1;
 
15124
+  char m1[2][2];
 
15125
+  struct S0 m2[2];
 
15126
+};
 
15127
+
 
15128
+struct S1 x = { 1, {{2, 3}, {4, 5}}, {{6, 7}, {8, 9}} };
 
15129
+
 
15130
+struct S1 func (void)
 
15131
+{
 
15132
+  return x;
 
15133
+}
 
15134
+
 
15135
+int main (void)
 
15136
+{
 
15137
+  struct S1 ret = func ();
 
15138
+
 
15139
+  if (ret.m2[1].m1 != 9)
 
15140
+    abort ();
 
15141
+
 
15142
+  return 0;
 
15143
+}
 
15144
Index: gcc/testsuite/gcc.c-torture/execute/20131127-1.c
 
15145
===================================================================
 
15146
--- a/src/gcc/testsuite/gcc.c-torture/execute/20131127-1.c      (.../tags/gcc_4_8_2_release)
 
15147
+++ b/src/gcc/testsuite/gcc.c-torture/execute/20131127-1.c      (.../branches/gcc-4_8-branch)
 
15148
@@ -0,0 +1,34 @@
 
15149
+/* PR middle-end/59138 */
 
15150
+/* Testcase by John Regehr <regehr@cs.utah.edu> */
 
15151
+
 
15152
+extern void abort (void);
 
15153
+
 
15154
+#pragma pack(1)
 
15155
+
 
15156
+struct S0 {
 
15157
+  int f0;
 
15158
+  int f1;
 
15159
+  int f2;
 
15160
+  short f3;
 
15161
+};
 
15162
+
 
15163
+short a = 1;
 
15164
+
 
15165
+struct S0 b = { 1 }, c, d, e;
 
15166
+
 
15167
+struct S0 fn1() { return c; }
 
15168
+
 
15169
+void fn2 (void)
 
15170
+{
 
15171
+  b = fn1 ();
 
15172
+  a = 0;
 
15173
+  d = e;
 
15174
+}
 
15175
+
 
15176
+int main (void)
 
15177
+{
 
15178
+  fn2 ();
 
15179
+  if (a != 0)
 
15180
+    abort ();
 
15181
+  return 0;
 
15182
+}
 
15183
Index: gcc/testsuite/gcc.c-torture/execute/pr59358.c
 
15184
===================================================================
 
15185
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59358.c (.../tags/gcc_4_8_2_release)
 
15186
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59358.c (.../branches/gcc-4_8-branch)
 
15187
@@ -0,0 +1,44 @@
 
15188
+/* PR tree-optimization/59358 */
 
15189
+
 
15190
+__attribute__((noinline, noclone)) int
 
15191
+foo (int *x, int y)
 
15192
+{
 
15193
+  int z = *x;
 
15194
+  if (y > z && y <= 16)
 
15195
+    while (y > z)
 
15196
+      z *= 2;
 
15197
+  return z;
 
15198
+}
 
15199
+
 
15200
+int
 
15201
+main ()
 
15202
+{
 
15203
+  int i;
 
15204
+  for (i = 1; i < 17; i++)
 
15205
+    {
 
15206
+      int j = foo (&i, 16);
 
15207
+      int k;
 
15208
+      if (i >= 8 && i <= 15)
 
15209
+       k = 16 + (i - 8) * 2;
 
15210
+      else if (i >= 4 && i <= 7)
 
15211
+       k = 16 + (i - 4) * 4;
 
15212
+      else if (i == 3)
 
15213
+       k = 24;
 
15214
+      else
 
15215
+       k = 16;
 
15216
+      if (j != k)
 
15217
+       __builtin_abort ();
 
15218
+      j = foo (&i, 7);
 
15219
+      if (i >= 7)
 
15220
+       k = i;
 
15221
+      else if (i >= 4)
 
15222
+       k = 8 + (i - 4) * 2;
 
15223
+      else if (i == 3)
 
15224
+       k = 12;
 
15225
+      else
 
15226
+       k = 8;
 
15227
+      if (j != k)
 
15228
+       __builtin_abort ();
 
15229
+    }
 
15230
+  return 0;
 
15231
+}
 
15232
Index: gcc/testsuite/gcc.c-torture/execute/pr60062.c
 
15233
===================================================================
 
15234
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr60062.c (.../tags/gcc_4_8_2_release)
 
15235
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr60062.c (.../branches/gcc-4_8-branch)
 
15236
@@ -0,0 +1,25 @@
 
15237
+/* PR target/60062 */
 
15238
+
 
15239
+int a;
 
15240
+
 
15241
+static void
 
15242
+foo (const char *p1, int p2)
 
15243
+{
 
15244
+  if (__builtin_strcmp (p1, "hello") != 0)
 
15245
+    __builtin_abort ();
 
15246
+}
 
15247
+
 
15248
+static void
 
15249
+bar (const char *p1)
 
15250
+{
 
15251
+  if (__builtin_strcmp (p1, "hello") != 0)
 
15252
+    __builtin_abort ();
 
15253
+}
 
15254
+
 
15255
+__attribute__((optimize (0))) int
 
15256
+main ()
 
15257
+{
 
15258
+  foo ("hello", a);
 
15259
+  bar ("hello");
 
15260
+  return 0;
 
15261
+}
 
15262
Index: gcc/testsuite/gcc.c-torture/execute/pr59014-2.c
 
15263
===================================================================
 
15264
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c       (.../tags/gcc_4_8_2_release)
 
15265
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c       (.../branches/gcc-4_8-branch)
 
15266
@@ -0,0 +1,23 @@
 
15267
+/* PR tree-optimization/59014 */
 
15268
+
 
15269
+__attribute__((noinline, noclone)) long long int
 
15270
+foo (long long int x, long long int y)
 
15271
+{
 
15272
+  if (((int) x | (int) y) != 0)
 
15273
+    return 6;
 
15274
+  return x + y;
 
15275
+}
 
15276
+
 
15277
+int
 
15278
+main ()
 
15279
+{
 
15280
+  if (sizeof (long long) == sizeof (int))
 
15281
+    return 0;
 
15282
+  int shift_half = sizeof (int) * __CHAR_BIT__ / 2;
 
15283
+  long long int x = (3LL << shift_half) << shift_half;
 
15284
+  long long int y = (5LL << shift_half) << shift_half;
 
15285
+  long long int z = foo (x, y);
 
15286
+  if (z != ((8LL << shift_half) << shift_half))
 
15287
+    __builtin_abort ();
 
15288
+  return 0;
 
15289
+}
 
15290
Index: gcc/testsuite/gcc.c-torture/execute/pr59101.c
 
15291
===================================================================
 
15292
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59101.c (.../tags/gcc_4_8_2_release)
 
15293
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59101.c (.../branches/gcc-4_8-branch)
 
15294
@@ -0,0 +1,15 @@
 
15295
+/* PR target/59101 */
 
15296
+
 
15297
+__attribute__((noinline, noclone)) int
 
15298
+foo (int a)
 
15299
+{
 
15300
+  return (~a & 4102790424LL) > 0 | 6;
 
15301
+}
 
15302
+
 
15303
+int
 
15304
+main ()
 
15305
+{
 
15306
+  if (foo (0) != 7)
 
15307
+    __builtin_abort ();
 
15308
+  return 0;
 
15309
+}
 
15310
Index: gcc/testsuite/gcc.c-torture/execute/pr58831.c
 
15311
===================================================================
 
15312
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr58831.c (.../tags/gcc_4_8_2_release)
 
15313
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr58831.c (.../branches/gcc-4_8-branch)
 
15314
@@ -0,0 +1,40 @@
 
15315
+#include <assert.h>
 
15316
+
 
15317
+int a, *b, c, d, f, **i, p, q, *r;
 
15318
+short o, j;
 
15319
+
 
15320
+static int __attribute__((noinline, noclone))
 
15321
+fn1 (int *p1, int **p2)
 
15322
+{
 
15323
+  int **e = &b;
 
15324
+  for (; p; p++)
 
15325
+    *p1 = 1;
 
15326
+  *e = *p2 = &d;
 
15327
+
 
15328
+  assert (r);
 
15329
+
 
15330
+  return c;
 
15331
+}
 
15332
+
 
15333
+static int ** __attribute__((noinline, noclone))
 
15334
+fn2 (void)
 
15335
+{
 
15336
+  for (f = 0; f != 42; f++)
 
15337
+    {
 
15338
+      int *g[3] = {0, 0, 0};
 
15339
+      for (o = 0; o; o--)
 
15340
+        for (; a > 1;)
 
15341
+          {
 
15342
+            int **h[1] = { &g[2] };
 
15343
+          }
 
15344
+    }
 
15345
+  return &r;
 
15346
+}
 
15347
+
 
15348
+int
 
15349
+main (void)
 
15350
+{
 
15351
+  i = fn2 ();
 
15352
+  fn1 (b, i);
 
15353
+  return 0;
 
15354
+}
 
15355
Index: gcc/testsuite/gcc.c-torture/execute/pr58726.c
 
15356
===================================================================
 
15357
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr58726.c (.../tags/gcc_4_8_2_release)
 
15358
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr58726.c (.../branches/gcc-4_8-branch)
 
15359
@@ -0,0 +1,26 @@
 
15360
+/* PR rtl-optimization/58726 */
 
15361
+
 
15362
+int a, c;
 
15363
+union { int f1; int f2 : 1; } b;
 
15364
+
 
15365
+short
 
15366
+foo (short p)
 
15367
+{
 
15368
+  return p < 0 ? p : a;
 
15369
+}
 
15370
+
 
15371
+int
 
15372
+main ()
 
15373
+{
 
15374
+  if (sizeof (short) * __CHAR_BIT__ != 16
 
15375
+      || sizeof (int) * __CHAR_BIT__ != 32)
 
15376
+    return 0;
 
15377
+  b.f1 = 56374;
 
15378
+  unsigned short d;
 
15379
+  int e = b.f2;
 
15380
+  d = e == 0 ? b.f1 : 0;
 
15381
+  c = foo (d);
 
15382
+  if (c != (short) 56374)
 
15383
+    __builtin_abort ();
 
15384
+  return 0;
 
15385
+}
 
15386
Index: gcc/testsuite/gcc.c-torture/execute/pr59014.c
 
15387
===================================================================
 
15388
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59014.c (.../tags/gcc_4_8_2_release)
 
15389
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59014.c (.../branches/gcc-4_8-branch)
 
15390
@@ -0,0 +1,25 @@
 
15391
+/* PR tree-optimization/59014 */
 
15392
+
 
15393
+int a = 2, b, c, d;
 
15394
+
 
15395
+int
 
15396
+foo ()
 
15397
+{
 
15398
+  for (;; c++)
 
15399
+    if ((b > 0) | (a & 1))
 
15400
+      ;
 
15401
+    else
 
15402
+      {
 
15403
+       d = a;
 
15404
+       return 0;
 
15405
+      }
 
15406
+}
 
15407
+
 
15408
+int
 
15409
+main ()
 
15410
+{
 
15411
+  foo ();
 
15412
+  if (d != 2)
 
15413
+    __builtin_abort ();
 
15414
+  return 0;
 
15415
+}
 
15416
Index: gcc/testsuite/gcc.c-torture/execute/pr60072.c
 
15417
===================================================================
 
15418
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr60072.c (.../tags/gcc_4_8_2_release)
 
15419
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr60072.c (.../branches/gcc-4_8-branch)
 
15420
@@ -0,0 +1,16 @@
 
15421
+/* PR target/60072 */
 
15422
+
 
15423
+int c = 1;
 
15424
+
 
15425
+__attribute__ ((optimize (1)))
 
15426
+static int *foo (int *p)
 
15427
+{
 
15428
+  return p;
 
15429
+}
 
15430
+
 
15431
+int
 
15432
+main ()
 
15433
+{
 
15434
+  *foo (&c) = 2;
 
15435
+  return c - 2;
 
15436
+}
 
15437
Index: gcc/testsuite/gcc.c-torture/execute/20140326-1.c
 
15438
===================================================================
 
15439
--- a/src/gcc/testsuite/gcc.c-torture/execute/20140326-1.c      (.../tags/gcc_4_8_2_release)
 
15440
+++ b/src/gcc/testsuite/gcc.c-torture/execute/20140326-1.c      (.../branches/gcc-4_8-branch)
 
15441
@@ -0,0 +1,10 @@
 
15442
+int a;
 
15443
+
 
15444
+int
 
15445
+main (void)
 
15446
+{
 
15447
+  char e[2] = { 0, 0 }, f = 0;
 
15448
+  if (a == 131072)
 
15449
+    f = e[a];
 
15450
+  return f;
 
15451
+}
 
15452
Index: gcc/testsuite/gcc.c-torture/execute/pr59388.c
 
15453
===================================================================
 
15454
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59388.c (.../tags/gcc_4_8_2_release)
 
15455
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59388.c (.../branches/gcc-4_8-branch)
 
15456
@@ -0,0 +1,11 @@
 
15457
+/* PR tree-optimization/59388 */
 
15458
+
 
15459
+int a;
 
15460
+struct S { unsigned int f:1; } b;
 
15461
+
 
15462
+int
 
15463
+main ()
 
15464
+{
 
15465
+  a = (0 < b.f) | b.f;
 
15466
+  return a;
 
15467
+}
 
15468
Index: gcc/testsuite/gcc.c-torture/compile/pr58970-1.c
 
15469
===================================================================
 
15470
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr58970-1.c       (.../tags/gcc_4_8_2_release)
 
15471
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr58970-1.c       (.../branches/gcc-4_8-branch)
 
15472
@@ -0,0 +1,11 @@
 
15473
+/* PR middle-end/58970 */
 
15474
+
 
15475
+struct T { int b : 1; };
 
15476
+struct S { struct T t[1]; };
 
15477
+
 
15478
+void
 
15479
+foo (int x, struct S *s)
 
15480
+{
 
15481
+  if (x == -1)
 
15482
+    s->t[x].b = 0;
 
15483
+}
 
15484
Index: gcc/testsuite/gcc.c-torture/compile/pr59803.c
 
15485
===================================================================
 
15486
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr59803.c (.../tags/gcc_4_8_2_release)
 
15487
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr59803.c (.../branches/gcc-4_8-branch)
 
15488
@@ -0,0 +1,27 @@
 
15489
+/* PR target/59803 */
 
15490
+
 
15491
+extern void baz (void) __attribute__ ((__noreturn__));
 
15492
+struct A { int g, h; };
 
15493
+extern struct A a;
 
15494
+struct B { unsigned char i, j, k, l, m; };
 
15495
+int c, d, e;
 
15496
+static int f;
 
15497
+
 
15498
+void
 
15499
+foo (void)
 
15500
+{
 
15501
+  f = 1;
 
15502
+}
 
15503
+
 
15504
+void
 
15505
+bar (struct B *x)
 
15506
+{
 
15507
+  x->i = e;
 
15508
+  x->k = c;
 
15509
+  x->l = d;
 
15510
+  x->j = a.h;
 
15511
+  x->m = f;
 
15512
+  if (x->i != e) baz ();
 
15513
+  if (x->k != c) baz ();
 
15514
+  if (x->j != a.h) baz ();
 
15515
+}
 
15516
Index: gcc/testsuite/gcc.c-torture/compile/pr58997.c
 
15517
===================================================================
 
15518
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr58997.c (.../tags/gcc_4_8_2_release)
 
15519
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr58997.c (.../branches/gcc-4_8-branch)
 
15520
@@ -0,0 +1,19 @@
 
15521
+/* PR rtl-optimization/58997 */
 
15522
+
 
15523
+int a, b, c, e;
 
15524
+short d;
 
15525
+char h;
 
15526
+
 
15527
+void
 
15528
+foo ()
 
15529
+{
 
15530
+  while (b)
 
15531
+    {
 
15532
+      d = a ? c : 1 % a;
 
15533
+      c = d;
 
15534
+      h = d;
 
15535
+      if (!h)
 
15536
+       while (e)
 
15537
+         ;
 
15538
+    }
 
15539
+}
 
15540
Index: gcc/testsuite/gcc.c-torture/compile/pr58970-2.c
 
15541
===================================================================
 
15542
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr58970-2.c       (.../tags/gcc_4_8_2_release)
 
15543
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr58970-2.c       (.../branches/gcc-4_8-branch)
 
15544
@@ -0,0 +1,11 @@
 
15545
+/* PR middle-end/58970 */
 
15546
+
 
15547
+struct T { char a : 8; char b : 1; };
 
15548
+struct S { char x; struct T t[1]; };
 
15549
+
 
15550
+void
 
15551
+foo (int x, struct S *s)
 
15552
+{
 
15553
+  if (x == -1)
 
15554
+    s->t[x].b = 0;
 
15555
+}
 
15556
Index: gcc/testsuite/gcc.c-torture/compile/pr59362.c
 
15557
===================================================================
 
15558
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr59362.c (.../tags/gcc_4_8_2_release)
 
15559
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr59362.c (.../branches/gcc-4_8-branch)
 
15560
@@ -0,0 +1,21 @@
 
15561
+/* PR tree-optimization/59362 */
 
15562
+
 
15563
+char *
 
15564
+foo (char *r, int s)
 
15565
+{
 
15566
+  r = __builtin___stpcpy_chk (r, "abc", __builtin_object_size (r, 1));
 
15567
+  if (s)
 
15568
+    r = __builtin___stpcpy_chk (r, "d", __builtin_object_size (r, 1));
 
15569
+  return r;
 
15570
+}
 
15571
+
 
15572
+char *a;
 
15573
+long int b;
 
15574
+
 
15575
+void
 
15576
+bar (void)
 
15577
+{
 
15578
+  b = __builtin_object_size (0, 0);
 
15579
+  a = __builtin___stpcpy_chk (0, "", b);
 
15580
+  b = __builtin_object_size (a, 0);
 
15581
+}
 
15582
Index: gcc/testsuite/gnat.dg/opt32.adb
 
15583
===================================================================
 
15584
--- a/src/gcc/testsuite/gnat.dg/opt32.adb       (.../tags/gcc_4_8_2_release)
 
15585
+++ b/src/gcc/testsuite/gnat.dg/opt32.adb       (.../branches/gcc-4_8-branch)
 
15586
@@ -0,0 +1,37 @@
 
15587
+-- { dg-do compile }
 
15588
+-- { dg-options "-O2" }
 
15589
+
 
15590
+with Ada.Containers; use Ada.Containers;
 
15591
+with Ada.Containers.Vectors;
 
15592
+
 
15593
+function Opt32 return Natural is
 
15594
+
 
15595
+   package My_Vectors
 
15596
+      is new Vectors (Index_Type => Natural, Element_Type => Integer);
 
15597
+   use My_Vectors;
 
15598
+
 
15599
+   V : Vector;
 
15600
+
 
15601
+   function Sign_Changes return Natural is
 
15602
+      Cur      : Cursor := To_Cursor (V, 0);
 
15603
+      R        : Natural := 0;
 
15604
+      Negative : Boolean;
 
15605
+   begin
 
15606
+      Negative := Element (Cur) < 0;
 
15607
+
 
15608
+      loop
 
15609
+         Cur := Next (Cur);
 
15610
+         exit when R > 100;
 
15611
+
 
15612
+         if (Element (Cur) < 0) /= Negative then
 
15613
+            Negative := not Negative;
 
15614
+            R := R + 1;
 
15615
+         end if;
 
15616
+      end loop;
 
15617
+
 
15618
+      return R;
 
15619
+   end;
 
15620
+
 
15621
+begin
 
15622
+   return Sign_Changes;
 
15623
+end;
 
15624
Index: gcc/testsuite/gcc.dg/pr58668.c
 
15625
===================================================================
 
15626
--- a/src/gcc/testsuite/gcc.dg/pr58668.c        (.../tags/gcc_4_8_2_release)
 
15627
+++ b/src/gcc/testsuite/gcc.dg/pr58668.c        (.../branches/gcc-4_8-branch)
 
15628
@@ -0,0 +1,25 @@
 
15629
+/* PR rtl-optimization/58668 */
 
15630
+/* { dg-do compile } */
 
15631
+/* { dg-options "-O2" } */
 
15632
+/* { dg-additional-options "-mthumb" { target { { arm*-*-* } && arm_thumb2_ok } } } */
 
15633
+
 
15634
+void *fn1 (void *);
 
15635
+void *fn2 (void *, const char *);
 
15636
+void fn3 (void *);
 
15637
+void fn4 (void *, int);
 
15638
+
 
15639
+void *
 
15640
+test (void *x)
 
15641
+{
 
15642
+  void *a, *b;
 
15643
+  if (!(a = fn1 (x)))
 
15644
+    return (void *) 0;
 
15645
+  if (!(b = fn2 (a, "w")))
 
15646
+    {
 
15647
+      fn3 (a);
 
15648
+      return (void *) 0;
 
15649
+    }
 
15650
+  fn3 (a);
 
15651
+  fn4 (b, 1);
 
15652
+  return b;
 
15653
+}
 
15654
Index: gcc/testsuite/gcc.dg/pr57518.c
 
15655
===================================================================
 
15656
--- a/src/gcc/testsuite/gcc.dg/pr57518.c        (.../tags/gcc_4_8_2_release)
 
15657
+++ b/src/gcc/testsuite/gcc.dg/pr57518.c        (.../branches/gcc-4_8-branch)
 
15658
@@ -1,8 +1,8 @@
 
15659
-/* PR rtl-optimization/57130 */
 
15660
+/* PR rtl-optimization/57518 */
 
15661
 
 
15662
 /* { dg-do compile } */
 
15663
 /* { dg-options "-O2 -fdump-rtl-ira" } */
 
15664
-/* { dg-final { scan-rtl-dump-not "REG_EQUIV.*mem.*\"ip\"" "ira" } } */
 
15665
+/* { dg-final { scan-rtl-dump-not "REG_EQUIV\[^\n\]*mem\[^\n\]*\"ip\".*subreg" "ira" } } */
 
15666
 
 
15667
 char ip[10];
 
15668
 int total;
 
15669
Index: gcc/testsuite/gcc.dg/builtin-object-size-14.c
 
15670
===================================================================
 
15671
--- a/src/gcc/testsuite/gcc.dg/builtin-object-size-14.c (.../tags/gcc_4_8_2_release)
 
15672
+++ b/src/gcc/testsuite/gcc.dg/builtin-object-size-14.c (.../branches/gcc-4_8-branch)
 
15673
@@ -0,0 +1,28 @@
 
15674
+/* { dg-do run } */
 
15675
+/* { dg-options "-O2" } */
 
15676
+
 
15677
+extern void abort (void);
 
15678
+extern char *strncpy(char *, const char *, __SIZE_TYPE__);
 
15679
+
 
15680
+union u {
 
15681
+    struct {
 
15682
+       char vi[8];
 
15683
+       char pi[16];
 
15684
+    };
 
15685
+    char all[8+16+4];
 
15686
+};
 
15687
+
 
15688
+void __attribute__((noinline,noclone))
 
15689
+f(union u *u)
 
15690
+{
 
15691
+  char vi[8+1];
 
15692
+  __builtin_strncpy(vi, u->vi, sizeof(u->vi));
 
15693
+  if (__builtin_object_size (u->all, 1) != -1)
 
15694
+    abort ();
 
15695
+}
 
15696
+int main()
 
15697
+{
 
15698
+  union u u;
 
15699
+  f (&u);
 
15700
+  return 0;
 
15701
+}
 
15702
Index: gcc/testsuite/gcc.dg/gomp/pr58809.c
 
15703
===================================================================
 
15704
--- a/src/gcc/testsuite/gcc.dg/gomp/pr58809.c   (.../tags/gcc_4_8_2_release)
 
15705
+++ b/src/gcc/testsuite/gcc.dg/gomp/pr58809.c   (.../branches/gcc-4_8-branch)
 
15706
@@ -0,0 +1,13 @@
 
15707
+/* PR middle-end/58809 */
 
15708
+/* { dg-do compile } */
 
15709
+/* { dg-options "-fopenmp -O" } */
 
15710
+
 
15711
+int i;
 
15712
+#pragma omp threadprivate (i)
 
15713
+
 
15714
+void foo()
 
15715
+{
 
15716
+  _Complex int j;
 
15717
+#pragma omp parallel copyin (i) reduction (&&:j)
 
15718
+  ;
 
15719
+}
 
15720
Index: gcc/testsuite/gcc.dg/20050922-1.c
 
15721
===================================================================
 
15722
--- a/src/gcc/testsuite/gcc.dg/20050922-1.c     (.../tags/gcc_4_8_2_release)
 
15723
+++ b/src/gcc/testsuite/gcc.dg/20050922-1.c     (.../branches/gcc-4_8-branch)
 
15724
@@ -4,7 +4,7 @@
 
15725
 /* { dg-do run } */
 
15726
 /* { dg-options "-O1 -std=c99" } */
 
15727
 
 
15728
-#include <stdlib.h>
 
15729
+extern void abort (void);
 
15730
 
 
15731
 #if __INT_MAX__ == 2147483647
 
15732
 typedef unsigned int uint32_t;
 
15733
Index: gcc/testsuite/gcc.dg/pr46309.c
 
15734
===================================================================
 
15735
--- a/src/gcc/testsuite/gcc.dg/pr46309.c        (.../tags/gcc_4_8_2_release)
 
15736
+++ b/src/gcc/testsuite/gcc.dg/pr46309.c        (.../branches/gcc-4_8-branch)
 
15737
@@ -1,5 +1,5 @@
 
15738
 /* PR tree-optimization/46309 */
 
15739
-/* { dg-do compile } */
 
15740
+/* { dg-do compile { target { ! { cris*-*-* } } } } */
 
15741
 /* { dg-options "-O2 -fdump-tree-reassoc-details" } */
 
15742
 /* The transformation depends on BRANCH_COST being greater than 1
 
15743
    (see the notes in the PR), so try to force that.  */
 
15744
Index: gcc/testsuite/gcc.dg/pr60485-2.c
 
15745
===================================================================
 
15746
--- a/src/gcc/testsuite/gcc.dg/pr60485-2.c      (.../tags/gcc_4_8_2_release)
 
15747
+++ b/src/gcc/testsuite/gcc.dg/pr60485-2.c      (.../branches/gcc-4_8-branch)
 
15748
@@ -0,0 +1,38 @@
 
15749
+/* { dg-do run } */
 
15750
+/* { dg-options "-O2" } */
 
15751
+
 
15752
+extern void abort (void);
 
15753
+struct S {
 
15754
+    int *i[4];
 
15755
+    int *p1;
 
15756
+    int *p2;
 
15757
+    int *p3;
 
15758
+    int *p4;
 
15759
+    int **x;
 
15760
+};
 
15761
+int **b;
 
15762
+int main()
 
15763
+{
 
15764
+  int i = 1;
 
15765
+  struct S s;
 
15766
+  s.p3 = &i;
 
15767
+  int **p;
 
15768
+  if (b)
 
15769
+    p = b;
 
15770
+  else
 
15771
+    p = &s.i[2];
 
15772
+  p += 4;
 
15773
+  /* prevert fowrprop from creating an offsetted sd constraint and
 
15774
+     preserve the pointer offsetting constraint.  */
 
15775
+  s.x = p;
 
15776
+  p = s.x;
 
15777
+  if (!b)
 
15778
+    {
 
15779
+      int *z = *p;
 
15780
+      /* z should point to i (and non-local/escaped).  */
 
15781
+      *z = 0;
 
15782
+    }
 
15783
+  if (i != 0)
 
15784
+    abort ();
 
15785
+  return i;
 
15786
+}
 
15787
Index: gcc/testsuite/gcc.dg/atomic-store-6.c
 
15788
===================================================================
 
15789
--- a/src/gcc/testsuite/gcc.dg/atomic-store-6.c (.../tags/gcc_4_8_2_release)
 
15790
+++ b/src/gcc/testsuite/gcc.dg/atomic-store-6.c (.../branches/gcc-4_8-branch)
 
15791
@@ -0,0 +1,13 @@
 
15792
+/* { dg-do run } */
 
15793
+/* { dg-require-effective-target sync_int_128_runtime } */
 
15794
+/* { dg-options "-mcx16" { target { i?86-*-* x86_64-*-* } } } */
 
15795
+
 
15796
+__int128_t i;
 
15797
+
 
15798
+int main()
 
15799
+{
 
15800
+  __atomic_store_16(&i, -1, 0);
 
15801
+  if (i != -1)
 
15802
+    __builtin_abort();
 
15803
+  return 0;
 
15804
+}
 
15805
Index: gcc/testsuite/gcc.dg/guality/pr59776.c
 
15806
===================================================================
 
15807
--- a/src/gcc/testsuite/gcc.dg/guality/pr59776.c        (.../tags/gcc_4_8_2_release)
 
15808
+++ b/src/gcc/testsuite/gcc.dg/guality/pr59776.c        (.../branches/gcc-4_8-branch)
 
15809
@@ -0,0 +1,29 @@
 
15810
+/* PR debug/59776 */
 
15811
+/* { dg-do run } */
 
15812
+/* { dg-options "-g" } */
 
15813
+
 
15814
+#include "../nop.h"
 
15815
+
 
15816
+struct S { float f, g; };
 
15817
+
 
15818
+__attribute__((noinline, noclone)) void
 
15819
+foo (struct S *p)
 
15820
+{
 
15821
+  struct S s1, s2;                     /* { dg-final { gdb-test pr59776.c:17 "s1.f" "5.0" } } */
 
15822
+  s1 = *p;                             /* { dg-final { gdb-test pr59776.c:17 "s1.g" "6.0" } } */
 
15823
+  s2 = s1;                             /* { dg-final { gdb-test pr59776.c:17 "s2.f" "0.0" } } */
 
15824
+  *(int *) &s2.f = 0;                  /* { dg-final { gdb-test pr59776.c:17 "s2.g" "6.0" } } */
 
15825
+  asm volatile (NOP : : : "memory");   /* { dg-final { gdb-test pr59776.c:20 "s1.f" "5.0" } } */
 
15826
+  asm volatile (NOP : : : "memory");   /* { dg-final { gdb-test pr59776.c:20 "s1.g" "6.0" } } */
 
15827
+  s2 = s1;                             /* { dg-final { gdb-test pr59776.c:20 "s2.f" "5.0" } } */
 
15828
+  asm volatile (NOP : : : "memory");   /* { dg-final { gdb-test pr59776.c:20 "s2.g" "6.0" } } */
 
15829
+  asm volatile (NOP : : : "memory");
 
15830
+}
 
15831
+
 
15832
+int
 
15833
+main ()
 
15834
+{
 
15835
+  struct S x = { 5.0f, 6.0f };
 
15836
+  foo (&x);
 
15837
+  return 0;
 
15838
+}
 
15839
Index: gcc/testsuite/gcc.dg/pr59827.c
 
15840
===================================================================
 
15841
--- a/src/gcc/testsuite/gcc.dg/pr59827.c        (.../tags/gcc_4_8_2_release)
 
15842
+++ b/src/gcc/testsuite/gcc.dg/pr59827.c        (.../branches/gcc-4_8-branch)
 
15843
@@ -0,0 +1,15 @@
 
15844
+/* PR middle-end/59827 */
 
15845
+/* { dg-do compile } */
 
15846
+
 
15847
+int
 
15848
+foo (int p[2][]) /* { dg-error "array type has incomplete element type" } */
 
15849
+{
 
15850
+  return p[0][0];
 
15851
+}
 
15852
+
 
15853
+void
 
15854
+bar (void)
 
15855
+{
 
15856
+  int p[2][1];
 
15857
+  foo (p); /* { dg-error "type of formal parameter 1 is incomplete" } */
 
15858
+}
 
15859
Index: gcc/testsuite/gcc.dg/strlenopt-4gf.c
 
15860
===================================================================
 
15861
--- a/src/gcc/testsuite/gcc.dg/strlenopt-4gf.c  (.../tags/gcc_4_8_2_release)
 
15862
+++ b/src/gcc/testsuite/gcc.dg/strlenopt-4gf.c  (.../branches/gcc-4_8-branch)
 
15863
@@ -7,13 +7,13 @@
 
15864
 #include "strlenopt-4.c"
 
15865
 
 
15866
 /* { dg-final { scan-tree-dump-times "strlen \\(" 1 "strlen" } } */
 
15867
-/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 4 "strlen" } } */
 
15868
-/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 1 "strlen" } } */
 
15869
+/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 0 "strlen" } } */
 
15870
+/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 0 "strlen" } } */
 
15871
 /* { dg-final { scan-tree-dump-times "__strcat_chk \\(" 0 "strlen" } } */
 
15872
 /* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
 
15873
-/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 5 "strlen" } } */
 
15874
-/* { dg-final { scan-tree-dump-times "memcpy \\(" 0 "strlen" } } */
 
15875
-/* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
 
15876
+/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 0 "strlen" } } */
 
15877
+/* { dg-final { scan-tree-dump-times "memcpy \\(" 4 "strlen" } } */
 
15878
+/* { dg-final { scan-tree-dump-times "strcpy \\(" 1 "strlen" } } */
 
15879
 /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
 
15880
-/* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
 
15881
+/* { dg-final { scan-tree-dump-times "stpcpy \\(" 5 "strlen" } } */
 
15882
 /* { dg-final { cleanup-tree-dump "strlen" } } */
 
15883
Index: gcc/testsuite/gcc.dg/pr59351.c
 
15884
===================================================================
 
15885
--- a/src/gcc/testsuite/gcc.dg/pr59351.c        (.../tags/gcc_4_8_2_release)
 
15886
+++ b/src/gcc/testsuite/gcc.dg/pr59351.c        (.../branches/gcc-4_8-branch)
 
15887
@@ -0,0 +1,8 @@
 
15888
+/* { dg-do compile } */
 
15889
+/* { dg-options "-std=c99 -Wpedantic" } */
 
15890
+
 
15891
+unsigned int
 
15892
+foo (void)
 
15893
+{
 
15894
+  return sizeof ((int[]) {}); /* { dg-warning "ISO C forbids empty initializer braces" } */
 
15895
+}
 
15896
Index: gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c
 
15897
===================================================================
 
15898
--- a/src/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c       (.../tags/gcc_4_8_2_release)
 
15899
+++ b/src/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c       (.../branches/gcc-4_8-branch)
 
15900
@@ -1,6 +1,7 @@
 
15901
 /* { dg-do compile } */
 
15902
 /* { dg-options "-O2 -Wall" } */
 
15903
 /* { dg-options "-O2 -Wall -mabi=altivec" { target { { powerpc*-*-linux* } && ilp32 } } } */
 
15904
+/* { dg-options "-O2 -Wall -msse2" { target { i?86-*-* x86_64-*-* } } } */
 
15905
 
 
15906
 typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
 
15907
 
 
15908
Index: gcc/testsuite/gcc.dg/builtin-object-size-8.c
 
15909
===================================================================
 
15910
--- a/src/gcc/testsuite/gcc.dg/builtin-object-size-8.c  (.../tags/gcc_4_8_2_release)
 
15911
+++ b/src/gcc/testsuite/gcc.dg/builtin-object-size-8.c  (.../branches/gcc-4_8-branch)
 
15912
@@ -1,4 +1,4 @@
 
15913
-/* { dg-do run { xfail *-*-* } } */
 
15914
+/* { dg-do run } */
 
15915
 /* { dg-options "-O2" } */
 
15916
 
 
15917
 typedef __SIZE_TYPE__ size_t;
 
15918
Index: gcc/testsuite/gcc.dg/20050922-2.c
 
15919
===================================================================
 
15920
--- a/src/gcc/testsuite/gcc.dg/20050922-2.c     (.../tags/gcc_4_8_2_release)
 
15921
+++ b/src/gcc/testsuite/gcc.dg/20050922-2.c     (.../branches/gcc-4_8-branch)
 
15922
@@ -4,7 +4,8 @@
 
15923
 /* { dg-do run } */
 
15924
 /* { dg-options "-O1 -std=c99" } */
 
15925
 
 
15926
-#include <stdlib.h>
 
15927
+extern void abort (void);
 
15928
+extern void exit (int);
 
15929
 
 
15930
 #if __INT_MAX__ == 2147483647
 
15931
 typedef unsigned int uint32_t;
 
15932
Index: gcc/testsuite/gcc.dg/pr59860.c
 
15933
===================================================================
 
15934
--- a/src/gcc/testsuite/gcc.dg/pr59860.c        (.../tags/gcc_4_8_2_release)
 
15935
+++ b/src/gcc/testsuite/gcc.dg/pr59860.c        (.../branches/gcc-4_8-branch)
 
15936
@@ -0,0 +1,15 @@
 
15937
+/* { dg-do compile } */
 
15938
+/* { dg-options "-O" } */
 
15939
+
 
15940
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * __attribute__ ((__nothrow__ , __leaf__))
 
15941
+strcat (char *__restrict __dest, const char *__restrict __src)
 
15942
+{
 
15943
+  return __builtin___strcat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
 
15944
+}
 
15945
+static char raw_decode;
 
15946
+void foo (char **argv, char *outfilename)
 
15947
+{
 
15948
+  if (**argv == 'r')
 
15949
+    raw_decode = 1;
 
15950
+  strcat (outfilename, raw_decode ? ".raw" : ".wav");
 
15951
+}
 
15952
Index: gcc/testsuite/gcc.dg/pr59011.c
 
15953
===================================================================
 
15954
--- a/src/gcc/testsuite/gcc.dg/pr59011.c        (.../tags/gcc_4_8_2_release)
 
15955
+++ b/src/gcc/testsuite/gcc.dg/pr59011.c        (.../branches/gcc-4_8-branch)
 
15956
@@ -0,0 +1,22 @@
 
15957
+/* PR middle-end/59011 */
 
15958
+/* { dg-do compile } */
 
15959
+/* { dg-options "-std=gnu99" } */
 
15960
+
 
15961
+void
 
15962
+foo (int m)
 
15963
+{
 
15964
+  int a[m];
 
15965
+  void
 
15966
+  bar (void)
 
15967
+  {
 
15968
+    {
 
15969
+      int
 
15970
+      baz (void)
 
15971
+      {
 
15972
+       return a[0];
 
15973
+      }
 
15974
+    }
 
15975
+    a[0] = 42;
 
15976
+  }
 
15977
+  bar ();
 
15978
+}
 
15979
Index: gcc/testsuite/gcc.dg/pr58805.c
 
15980
===================================================================
 
15981
--- a/src/gcc/testsuite/gcc.dg/pr58805.c        (.../tags/gcc_4_8_2_release)
 
15982
+++ b/src/gcc/testsuite/gcc.dg/pr58805.c        (.../branches/gcc-4_8-branch)
 
15983
@@ -0,0 +1,24 @@
 
15984
+/* { dg-do compile } */
 
15985
+/* { dg-options "-O2 -ftree-tail-merge -fdump-tree-pre" } */
 
15986
+
 
15987
+/* Type that matches the 'p' constraint.  */
 
15988
+#define TYPE void *
 
15989
+
 
15990
+static inline
 
15991
+void bar (TYPE *r)
 
15992
+{
 
15993
+  TYPE t;
 
15994
+  __asm__ ("" : "=&p" (t), "=p" (*r));
 
15995
+}
 
15996
+
 
15997
+void
 
15998
+foo (int n, TYPE *x, TYPE *y)
 
15999
+{
 
16000
+  if (n == 0)
 
16001
+    bar (x);
 
16002
+  else
 
16003
+    bar (y);
 
16004
+}
 
16005
+
 
16006
+/* { dg-final { scan-tree-dump-times "__asm__" 2 "pre"} } */
 
16007
+/* { dg-final { cleanup-tree-dump "pre" } } */
 
16008
Index: gcc/testsuite/gcc.dg/strlenopt-14gf.c
 
16009
===================================================================
 
16010
--- a/src/gcc/testsuite/gcc.dg/strlenopt-14gf.c (.../tags/gcc_4_8_2_release)
 
16011
+++ b/src/gcc/testsuite/gcc.dg/strlenopt-14gf.c (.../branches/gcc-4_8-branch)
 
16012
@@ -11,14 +11,14 @@
 
16013
    memcpy.  */
 
16014
 /* { dg-final { scan-tree-dump-times "strlen \\(" 4 "strlen" } } */
 
16015
 /* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 0 "strlen" } } */
 
16016
-/* { dg-final { scan-tree-dump-times "__mempcpy_chk \\(" 2 "strlen" } } */
 
16017
+/* { dg-final { scan-tree-dump-times "__mempcpy_chk \\(" 0 "strlen" } } */
 
16018
 /* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 0 "strlen" } } */
 
16019
 /* { dg-final { scan-tree-dump-times "__strcat_chk \\(" 0 "strlen" } } */
 
16020
 /* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
 
16021
-/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 3 "strlen" } } */
 
16022
-/* { dg-final { scan-tree-dump-times "memcpy \\(" 0 "strlen" } } */
 
16023
-/* { dg-final { scan-tree-dump-times "mempcpy \\(" 0 "strlen" } } */
 
16024
+/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 0 "strlen" } } */
 
16025
+/* { dg-final { scan-tree-dump-times "memcpy \\(" 1 "strlen" } } */
 
16026
+/* { dg-final { scan-tree-dump-times "mempcpy \\(" 2 "strlen" } } */
 
16027
 /* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
 
16028
 /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
 
16029
-/* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
 
16030
+/* { dg-final { scan-tree-dump-times "stpcpy \\(" 2 "strlen" } } */
 
16031
 /* { dg-final { cleanup-tree-dump "strlen" } } */
 
16032
Index: gcc/testsuite/gcc.dg/torture/pr57425-2.c
 
16033
===================================================================
 
16034
--- a/src/gcc/testsuite/gcc.dg/torture/pr57425-2.c      (.../tags/gcc_4_8_2_release)
 
16035
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57425-2.c      (.../branches/gcc-4_8-branch)
 
16036
@@ -0,0 +1,31 @@
 
16037
+/* { dg-do run } */
 
16038
+
 
16039
+extern void abort (void) __attribute__((noreturn));
 
16040
+
 
16041
+int
 
16042
+main ()
 
16043
+{
 
16044
+  int sum = 0;
 
16045
+  {
 
16046
+    int a[20];
 
16047
+    int *c;
 
16048
+    c = a;
 
16049
+    asm ("": "=r" (c):"0" (c));
 
16050
+    *c = 0;
 
16051
+    asm ("": "=r" (c):"0" (c));
 
16052
+    sum += *c;
 
16053
+  }
 
16054
+  {
 
16055
+    long b[10];
 
16056
+    long *c;
 
16057
+    c = b;
 
16058
+    asm ("": "=r" (c):"0" (c));
 
16059
+    *c = 1;
 
16060
+    asm ("": "=r" (c):"0" (c));
 
16061
+    sum += *c;
 
16062
+  }
 
16063
+
 
16064
+  if (sum != 1)
 
16065
+    abort();
 
16066
+  return 0;
 
16067
+}
 
16068
Index: gcc/testsuite/gcc.dg/torture/pr57425-3.c
 
16069
===================================================================
 
16070
--- a/src/gcc/testsuite/gcc.dg/torture/pr57425-3.c      (.../tags/gcc_4_8_2_release)
 
16071
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57425-3.c      (.../branches/gcc-4_8-branch)
 
16072
@@ -0,0 +1,31 @@
 
16073
+/* { dg-do run } */
 
16074
+
 
16075
+extern void abort (void) __attribute__((noreturn));
 
16076
+
 
16077
+int
 
16078
+main ()
 
16079
+{
 
16080
+  int sum = 0;
 
16081
+  {
 
16082
+    long a[20];
 
16083
+    long *c;
 
16084
+    c = a;
 
16085
+    asm ("": "=r" (c):"0" (c));
 
16086
+    *c = 0;
 
16087
+    asm ("": "=r" (c):"0" (c));
 
16088
+    sum += *c;
 
16089
+  }
 
16090
+  {
 
16091
+    long long b[10];
 
16092
+    long long *c;
 
16093
+    c = b;
 
16094
+    asm ("": "=r" (c):"0" (c));
 
16095
+    *c = 1;
 
16096
+    asm ("": "=r" (c):"0" (c));
 
16097
+    sum += *c;
 
16098
+  }
 
16099
+
 
16100
+  if (sum != 1)
 
16101
+    abort();
 
16102
+  return 0;
 
16103
+}
 
16104
Index: gcc/testsuite/gcc.dg/torture/pr59047.c
 
16105
===================================================================
 
16106
--- a/src/gcc/testsuite/gcc.dg/torture/pr59047.c        (.../tags/gcc_4_8_2_release)
 
16107
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59047.c        (.../branches/gcc-4_8-branch)
 
16108
@@ -0,0 +1,39 @@
 
16109
+/* { dg-do run } */
 
16110
+
 
16111
+extern void abort (void);
 
16112
+
 
16113
+struct
 
16114
+{
 
16115
+  int f0;
 
16116
+  int f1:1;
 
16117
+  int f2:2;
 
16118
+} a = {0, 0, 1};
 
16119
+
 
16120
+int b, c, *d, e, f;
 
16121
+
 
16122
+int
 
16123
+fn1 ()
 
16124
+{
 
16125
+  for (; b < 1; ++b)
 
16126
+    {
 
16127
+      for (e = 0; e < 1; e = 1)
 
16128
+       {
 
16129
+         int **g = &d;
 
16130
+         *g = &c;
 
16131
+       } 
 
16132
+      *d = 0;
 
16133
+      f = a.f1;
 
16134
+      if (f)
 
16135
+       return 0;
 
16136
+    }
 
16137
+  return 0;
 
16138
+}
 
16139
+
 
16140
+int
 
16141
+main ()
 
16142
+{
 
16143
+  fn1 ();
 
16144
+  if (b != 1)
 
16145
+    abort ();
 
16146
+  return 0;
 
16147
+}
 
16148
Index: gcc/testsuite/gcc.dg/torture/pr58956.c
 
16149
===================================================================
 
16150
--- a/src/gcc/testsuite/gcc.dg/torture/pr58956.c        (.../tags/gcc_4_8_2_release)
 
16151
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58956.c        (.../branches/gcc-4_8-branch)
 
16152
@@ -0,0 +1,30 @@
 
16153
+/* { dg-do run } */
 
16154
+
 
16155
+extern void abort (void);
 
16156
+
 
16157
+struct S
 
16158
+{
 
16159
+  int f0;
 
16160
+} a = {1}, b, g, *c = &b, **f = &c;
 
16161
+
 
16162
+int *d, **e = &d, h;
 
16163
+
 
16164
+struct S
 
16165
+foo ()
 
16166
+{
 
16167
+  *e = &h;
 
16168
+  if (!d) 
 
16169
+    __builtin_unreachable ();
 
16170
+  *f = &g;
 
16171
+  return a;
 
16172
+}
 
16173
+
 
16174
+int
 
16175
+main ()
 
16176
+{
 
16177
+  struct S *i = c;
 
16178
+  *i = foo ();
 
16179
+  if (b.f0 != 1)
 
16180
+    abort ();
 
16181
+  return 0;
 
16182
+}
 
16183
Index: gcc/testsuite/gcc.dg/torture/pr60183.c
 
16184
===================================================================
 
16185
--- a/src/gcc/testsuite/gcc.dg/torture/pr60183.c        (.../tags/gcc_4_8_2_release)
 
16186
+++ b/src/gcc/testsuite/gcc.dg/torture/pr60183.c        (.../branches/gcc-4_8-branch)
 
16187
@@ -0,0 +1,38 @@
 
16188
+/* { dg-do run } */
 
16189
+
 
16190
+/* Large so an out-of-bound read will crash.  */
 
16191
+unsigned char c[0x30001] = { 1 };
 
16192
+int j = 2;
 
16193
+
 
16194
+static void
 
16195
+foo (unsigned long *x, unsigned char *y)
 
16196
+{
 
16197
+  int i;
 
16198
+  unsigned long w = x[0];
 
16199
+  for (i = 0; i < j; i++)
 
16200
+    {
 
16201
+      w += *y;
 
16202
+      y += 0x10000;
 
16203
+      w += *y;
 
16204
+      y += 0x10000;
 
16205
+    }
 
16206
+  x[1] = w;
 
16207
+}
 
16208
+
 
16209
+__attribute__ ((noinline, noclone)) void
 
16210
+bar (unsigned long *x)
 
16211
+{
 
16212
+  foo (x, c);
 
16213
+}
 
16214
+
 
16215
+int
 
16216
+main ()
 
16217
+{
 
16218
+  unsigned long a[2] = { 0, -1UL };
 
16219
+  asm volatile (""::"r" (c):"memory");
 
16220
+  c[0] = 0;
 
16221
+  bar (a);
 
16222
+  if (a[1] != 0)
 
16223
+    __builtin_abort ();
 
16224
+  return 0;
 
16225
+}
 
16226
Index: gcc/testsuite/gcc.dg/torture/pr57517.c
 
16227
===================================================================
 
16228
--- a/src/gcc/testsuite/gcc.dg/torture/pr57517.c        (.../tags/gcc_4_8_2_release)
 
16229
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57517.c        (.../branches/gcc-4_8-branch)
 
16230
@@ -0,0 +1,16 @@
 
16231
+/* { dg-do compile } */
 
16232
+
 
16233
+int x[1024], y[1024], z[1024], w[1024];
 
16234
+void foo (void)
 
16235
+{
 
16236
+  int i;
 
16237
+  for (i = 1; i < 1024; ++i)
 
16238
+    {
 
16239
+      int a = x[i];
 
16240
+      int b = y[i];
 
16241
+      int c = x[i-1];
 
16242
+      int d = y[i-1];
 
16243
+      if (w[i])
 
16244
+       z[i] = (a + b) + (c + d);
 
16245
+    }
 
16246
+}
 
16247
Index: gcc/testsuite/gcc.dg/torture/pr59891.c
 
16248
===================================================================
 
16249
--- a/src/gcc/testsuite/gcc.dg/torture/pr59891.c        (.../tags/gcc_4_8_2_release)
 
16250
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59891.c        (.../branches/gcc-4_8-branch)
 
16251
@@ -0,0 +1,9 @@
 
16252
+/* PR c/59891 */
 
16253
+
 
16254
+unsigned int a;
 
16255
+
 
16256
+int
 
16257
+main ()
 
16258
+{
 
16259
+  return (0 ? a : 0) ? : 0 % 0; /* { dg-warning "division by zero" } */
 
16260
+}
 
16261
Index: gcc/testsuite/gcc.dg/torture/pr59164.c
 
16262
===================================================================
 
16263
--- a/src/gcc/testsuite/gcc.dg/torture/pr59164.c        (.../tags/gcc_4_8_2_release)
 
16264
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59164.c        (.../branches/gcc-4_8-branch)
 
16265
@@ -0,0 +1,21 @@
 
16266
+/* { dg-do compile } */
 
16267
+
 
16268
+int a, d, e;
 
16269
+long b[10];
 
16270
+int c[10][8];
 
16271
+
 
16272
+int fn1(p1)
 
16273
+{ 
 
16274
+  return 1 >> p1; 
 
16275
+}
 
16276
+
 
16277
+void fn2(void)
 
16278
+{
 
16279
+  int f;
 
16280
+  for (a=1; a <= 4; a++)
 
16281
+    {
 
16282
+      f = fn1(0 < c[a][0]);
 
16283
+      if (f || d)
 
16284
+       e = b[a] = 1;
 
16285
+    }
 
16286
+}
 
16287
Index: gcc/testsuite/gcc.dg/torture/pr58779.c
 
16288
===================================================================
 
16289
--- a/src/gcc/testsuite/gcc.dg/torture/pr58779.c        (.../tags/gcc_4_8_2_release)
 
16290
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58779.c        (.../branches/gcc-4_8-branch)
 
16291
@@ -0,0 +1,12 @@
 
16292
+/* { dg-do run } */
 
16293
+
 
16294
+int a, c;
 
16295
+
 
16296
+int main ()
 
16297
+{
 
16298
+  int e = -1;
 
16299
+  short d = (c <= 0) ^ e;
 
16300
+  if ((unsigned int) a - (a || d) <= (unsigned int) a)
 
16301
+    __builtin_abort ();
 
16302
+  return 0;
 
16303
+}
 
16304
Index: gcc/testsuite/gcc.dg/torture/pr59139.c
 
16305
===================================================================
 
16306
--- a/src/gcc/testsuite/gcc.dg/torture/pr59139.c        (.../tags/gcc_4_8_2_release)
 
16307
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59139.c        (.../branches/gcc-4_8-branch)
 
16308
@@ -0,0 +1,20 @@
 
16309
+/* { dg-do compile } */
 
16310
+
 
16311
+int a, b, c, d, e;
 
16312
+int fn1(p1, p2) { return p2 == 0 ? p1 : 1 % p2; }
 
16313
+
 
16314
+void fn2()
 
16315
+{
 
16316
+  c = 0;
 
16317
+  for (;; c = (unsigned short)c)
 
16318
+    {
 
16319
+      b = 2;
 
16320
+      for (; b; b = a)
 
16321
+       {
 
16322
+         e = fn1(2, c && 1);
 
16323
+         d = c == 0 ? e : c;
 
16324
+         if (d)
 
16325
+           return;
 
16326
+       }
 
16327
+    }
 
16328
+}
 
16329
Index: gcc/testsuite/gcc.dg/torture/pr58079.c
 
16330
===================================================================
 
16331
--- a/src/gcc/testsuite/gcc.dg/torture/pr58079.c        (.../tags/gcc_4_8_2_release)
 
16332
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58079.c        (.../branches/gcc-4_8-branch)
 
16333
@@ -0,0 +1,107 @@
 
16334
+/* { dg-options "-mlong-calls" { target mips*-*-* } } */
 
16335
+
 
16336
+typedef unsigned char u8;
 
16337
+typedef unsigned short u16;
 
16338
+typedef unsigned int __kernel_size_t;
 
16339
+typedef __kernel_size_t size_t;
 
16340
+struct list_head {
 
16341
+ struct list_head *next;
 
16342
+};
 
16343
+
 
16344
+struct dmx_ts_feed {
 
16345
+ int is_filtering;
 
16346
+};
 
16347
+struct dmx_section_feed {
 
16348
+ u16 secbufp;
 
16349
+ u16 seclen;
 
16350
+ u16 tsfeedp;
 
16351
+};
 
16352
+
 
16353
+typedef int (*dmx_ts_cb) (
 
16354
+       const u8 * buffer1,
 
16355
+      size_t buffer1_length,
 
16356
+      const u8 * buffer2,
 
16357
+      size_t buffer2_length
 
16358
+);
 
16359
+
 
16360
+struct dvb_demux_feed {
 
16361
+ union {
 
16362
+  struct dmx_ts_feed ts;
 
16363
+  struct dmx_section_feed sec;
 
16364
+ } feed;
 
16365
+ union {
 
16366
+  dmx_ts_cb ts;
 
16367
+ } cb;
 
16368
+ int type;
 
16369
+ u16 pid;
 
16370
+ int ts_type;
 
16371
+ struct list_head list_head;
 
16372
+};
 
16373
+
 
16374
+struct dvb_demux {
 
16375
+ int (*stop_feed)(struct dvb_demux_feed *feed);
 
16376
+ struct list_head feed_list;
 
16377
+};
 
16378
+
 
16379
+
 
16380
+static
 
16381
+inline
 
16382
+__attribute__((always_inline))
 
16383
+u8
 
16384
+payload(const u8 *tsp)
 
16385
+{
 
16386
+ if (tsp[3] & 0x20) {
 
16387
+   return 184 - 1 - tsp[4];
 
16388
+ }
 
16389
+ return 184;
 
16390
+}
 
16391
+
 
16392
+static
 
16393
+inline
 
16394
+__attribute__((always_inline))
 
16395
+int
 
16396
+dvb_dmx_swfilter_payload(struct dvb_demux_feed *feed, const u8 *buf)
 
16397
+{
 
16398
+ int count = payload(buf);
 
16399
+ int p;
 
16400
+ if (count == 0)
 
16401
+  return -1;
 
16402
+ return feed->cb.ts(&buf[p], count, ((void *)0), 0);
 
16403
+}
 
16404
+
 
16405
+static
 
16406
+inline
 
16407
+__attribute__((always_inline))
 
16408
+void
 
16409
+dvb_dmx_swfilter_packet_type(struct dvb_demux_feed *feed, const u8 *buf)
 
16410
+{
 
16411
+ switch (feed->type) {
 
16412
+ case 0:
 
16413
+  if (feed->ts_type & 1) {
 
16414
+    dvb_dmx_swfilter_payload(feed, buf);
 
16415
+  }
 
16416
+  if (dvb_dmx_swfilter_section_packet(feed, buf) < 0)
 
16417
+   feed->feed.sec.seclen = feed->feed.sec.secbufp = 0;
 
16418
+ }
 
16419
+}
 
16420
+
 
16421
+static
 
16422
+void
 
16423
+dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf)
 
16424
+{
 
16425
+ struct dvb_demux_feed *feed;
 
16426
+ int dvr_done = 0;
 
16427
+
 
16428
+ 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) );})) {
 
16429
+  if (((((feed)->type == 0) && ((feed)->feed.ts.is_filtering) && (((feed)->ts_type & (1 | 8)) == 1))) && (dvr_done++))
 
16430
+   dvb_dmx_swfilter_packet_type(feed, buf);
 
16431
+  else if (feed->pid == 0x2000)
 
16432
+   feed->cb.ts(buf, 188, ((void *)0), 0);
 
16433
+ }
 
16434
+}
 
16435
+void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, size_t count)
 
16436
+{
 
16437
+ while (count--) {
 
16438
+   dvb_dmx_swfilter_packet(demux, buf);
 
16439
+ }
 
16440
+}
 
16441
Index: gcc/testsuite/gcc.dg/torture/pr58830.c
 
16442
===================================================================
 
16443
--- a/src/gcc/testsuite/gcc.dg/torture/pr58830.c        (.../tags/gcc_4_8_2_release)
 
16444
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58830.c        (.../branches/gcc-4_8-branch)
 
16445
@@ -0,0 +1,42 @@
 
16446
+/* { dg-do run } */
 
16447
+/* { dg-additional-options "-ftree-pre -ftree-partial-pre" } */
 
16448
+
 
16449
+extern void abort (void);
 
16450
+
 
16451
+int b, c, d, f, g, h, i, j[6], *l = &b, *m, n, *o, r; 
 
16452
+char k;
 
16453
+
 
16454
+static int
 
16455
+foo ()
 
16456
+{
 
16457
+  char *p = &k;
 
16458
+
 
16459
+  for (; d; d++)
 
16460
+    if (i)
 
16461
+      h = 0;
 
16462
+    else
 
16463
+      h = c || (r = 0);
 
16464
+
 
16465
+  for (f = 0; f < 2; f++)
 
16466
+    {
 
16467
+      unsigned int q;
 
16468
+      *l = 0;
 
16469
+      if (n)
 
16470
+       *m = g;
 
16471
+      if (g)
 
16472
+       o = 0;
 
16473
+      for (q = -8; q >= 5; q++)
 
16474
+       (*p)--;
 
16475
+    }
 
16476
+
 
16477
+  return 0;
 
16478
+}
 
16479
+
 
16480
+int
 
16481
+main ()
 
16482
+{
 
16483
+  foo ();
 
16484
+  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)
 
16485
+    abort ();
 
16486
+  return 0;
 
16487
+}
 
16488
Index: gcc/testsuite/gcc.dg/torture/pr59715.c
 
16489
===================================================================
 
16490
--- a/src/gcc/testsuite/gcc.dg/torture/pr59715.c        (.../tags/gcc_4_8_2_release)
 
16491
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59715.c        (.../branches/gcc-4_8-branch)
 
16492
@@ -0,0 +1,21 @@
 
16493
+/* { dg-do run } */
 
16494
+
 
16495
+extern void abort (void);
 
16496
+
 
16497
+int a = 2, b;
 
16498
+
 
16499
+int
 
16500
+main ()
 
16501
+{
 
16502
+  int c;
 
16503
+  if (!b)
 
16504
+    {
 
16505
+      b = a;
 
16506
+      c = a == 0 ? 1 : 1 % a;
 
16507
+      if (c)
 
16508
+       b = 0;
 
16509
+    }
 
16510
+  if (b != 0)
 
16511
+    abort ();
 
16512
+  return 0;
 
16513
+}
 
16514
Index: gcc/testsuite/gcc.dg/torture/pr60115.c
 
16515
===================================================================
 
16516
--- a/src/gcc/testsuite/gcc.dg/torture/pr60115.c        (.../tags/gcc_4_8_2_release)
 
16517
+++ b/src/gcc/testsuite/gcc.dg/torture/pr60115.c        (.../branches/gcc-4_8-branch)
 
16518
@@ -0,0 +1,14 @@
 
16519
+/* { dg-do run } */
 
16520
+
 
16521
+int a, b[2];
 
16522
+
 
16523
+int
 
16524
+main ()
 
16525
+{
 
16526
+lbl:
 
16527
+  for (; a; a--)
 
16528
+    if (b[10000])
 
16529
+      goto lbl;
 
16530
+
 
16531
+  return 0;
 
16532
+}
 
16533
Index: gcc/testsuite/gcc.dg/torture/pr59903.c
 
16534
===================================================================
 
16535
--- a/src/gcc/testsuite/gcc.dg/torture/pr59903.c        (.../tags/gcc_4_8_2_release)
 
16536
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59903.c        (.../branches/gcc-4_8-branch)
 
16537
@@ -0,0 +1,56 @@
 
16538
+/* { dg-do compile } */
 
16539
+
 
16540
+int a, b, c, d, e, f, g, h, i[3], l, m, n, o, p, q, r;
 
16541
+
 
16542
+struct S0
 
16543
+{
 
16544
+  int f0;
 
16545
+  int f1;
 
16546
+  int f2;
 
16547
+  int f3;
 
16548
+} j;
 
16549
+
 
16550
+static int
 
16551
+fn1 (int p1)
 
16552
+{
 
16553
+  return p1 || ((p1 > 0) > (e << 1)); 
 
16554
+}
 
16555
+
 
16556
+static struct S0
 
16557
+fn2 (struct S0 p1)
 
16558
+{
 
16559
+  char s;
 
16560
+  struct S0 t = {0,0,0,0};
 
16561
+  int u = 2;
 
16562
+  for (;;)
 
16563
+    {
 
16564
+      if (i[0])
 
16565
+       break;
 
16566
+      for (m = 0; m < 4; m++)
 
16567
+       for (p1.f0 = 0; p1.f0 < 3; p1.f0++)
 
16568
+         {
 
16569
+           j = t;
 
16570
+           t.f3 = i[p1.f0];
 
16571
+           o = b || 1 >> b ? 0 : a < 0;
 
16572
+           q = 1 % d;
 
16573
+           if ((g < fn1 ((1 ^ (q & 1)) | n)) ^ u)
 
16574
+             j.f3 |= p % 2;
 
16575
+           s = j.f3 > 0 ? j.f3 : j.f3 << 1;
 
16576
+           r = l = s && p1.f1 * c;
 
16577
+           h = p1.f1;
 
16578
+         }
 
16579
+    }
 
16580
+  return p1;
 
16581
+}
 
16582
+
 
16583
+int
 
16584
+main ()
 
16585
+{
 
16586
+  for (;f;)
 
16587
+    {
 
16588
+      struct S0 v = {0,0,0,0};
 
16589
+      fn2 (v);
 
16590
+      j.f3 = 0;
 
16591
+    }
 
16592
+  return 0;
 
16593
+}
 
16594
Index: gcc/testsuite/gcc.dg/torture/pr58143-1.c
 
16595
===================================================================
 
16596
--- a/src/gcc/testsuite/gcc.dg/torture/pr58143-1.c      (.../tags/gcc_4_8_2_release)
 
16597
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58143-1.c      (.../branches/gcc-4_8-branch)
 
16598
@@ -0,0 +1,51 @@
 
16599
+/* { dg-do run } */
 
16600
+/* { dg-additional-options "-fstrict-overflow" } */
 
16601
+
 
16602
+extern void abort (void);
 
16603
+
 
16604
+int a, b, c, d, e, f, g, h = 1, i;
 
16605
+
 
16606
+int foo (int p)
 
16607
+{
 
16608
+  return p < 0 && a < - __INT_MAX__ - 1 - p ? 0 : 1;
 
16609
+}
 
16610
+
 
16611
+int *bar ()
 
16612
+{
 
16613
+  int j; 
 
16614
+  i = h ? 0 : 1 % h;
 
16615
+  for (j = 0; j < 1; j++)
 
16616
+    for (d = 0; d; d++)
 
16617
+      for (e = 1; e;)
 
16618
+       return 0;
 
16619
+  return 0;
 
16620
+}
 
16621
+
 
16622
+int baz ()
 
16623
+{
 
16624
+  for (; b >= 0; b--)
 
16625
+    for (c = 1; c >= 0; c--)
 
16626
+      {
 
16627
+       int *k = &c;
 
16628
+       for (;;)
 
16629
+         {
 
16630
+           for (f = 0; f < 1; f++)
 
16631
+             {
 
16632
+               g = foo (*k);
 
16633
+               bar ();
 
16634
+             }
 
16635
+           if (*k)
 
16636
+             break;
 
16637
+           return 0;
 
16638
+         }
 
16639
+      }
 
16640
+  return 0;
 
16641
+}
 
16642
+
 
16643
+int main ()
 
16644
+{
 
16645
+  baz ();
 
16646
+  if (b != 0)
 
16647
+    abort ();
 
16648
+  return 0;
 
16649
+}
 
16650
Index: gcc/testsuite/gcc.dg/torture/pr58143-2.c
 
16651
===================================================================
 
16652
--- a/src/gcc/testsuite/gcc.dg/torture/pr58143-2.c      (.../tags/gcc_4_8_2_release)
 
16653
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58143-2.c      (.../branches/gcc-4_8-branch)
 
16654
@@ -0,0 +1,34 @@
 
16655
+/* { dg-do run } */
 
16656
+/* { dg-additional-options "-fstrict-overflow" } */
 
16657
+
 
16658
+int a, b, d, e, f, *g, h, i;
 
16659
+volatile int c;
 
16660
+
 
16661
+char foo (unsigned char p)
 
16662
+{
 
16663
+  return p + 1;
 
16664
+}
 
16665
+
 
16666
+int bar () 
 
16667
+{
 
16668
+  for (h = 0; h < 3; h = foo (h))
 
16669
+    {
 
16670
+      c;
 
16671
+      for (f = 0; f < 1; f++)
 
16672
+       {
 
16673
+         i = a && 0 < -__INT_MAX__ - h ? 0 : 1;
 
16674
+         if (e)
 
16675
+           for (; d;)
 
16676
+             b = 0;
 
16677
+         else
 
16678
+           g = 0;
 
16679
+       }
 
16680
+    }
 
16681
+  return 0;
 
16682
+}
 
16683
+
 
16684
+int main ()
 
16685
+{
 
16686
+  bar ();
 
16687
+  return 0;
 
16688
+}
 
16689
Index: gcc/testsuite/gcc.dg/torture/pr58941.c
 
16690
===================================================================
 
16691
--- a/src/gcc/testsuite/gcc.dg/torture/pr58941.c        (.../tags/gcc_4_8_2_release)
 
16692
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58941.c        (.../branches/gcc-4_8-branch)
 
16693
@@ -0,0 +1,33 @@
 
16694
+/* { dg-do run } */
 
16695
+
 
16696
+extern void abort (void);
 
16697
+
 
16698
+typedef struct {
 
16699
+    int msgLength;
 
16700
+    unsigned char data[1000];
 
16701
+} SMsg;
 
16702
+
 
16703
+typedef struct {
 
16704
+    int dummy;
 
16705
+    int d[0];
 
16706
+} SData;
 
16707
+
 
16708
+int condition = 3;
 
16709
+
 
16710
+int main()
 
16711
+{
 
16712
+  SMsg msg;
 
16713
+  SData *pData = (SData*)(msg.data);
 
16714
+  unsigned int i = 0;
 
16715
+  for (i = 0; i < 1; i++)
 
16716
+    {
 
16717
+      pData->d[i] = 0;
 
16718
+      if(condition & 1)
 
16719
+       pData->d[i] |= 0x55;
 
16720
+      if(condition & 2)
 
16721
+       pData->d[i] |= 0xaa;
 
16722
+    }
 
16723
+  if (pData->d[0] != 0xff)
 
16724
+    abort ();
 
16725
+  return 0;
 
16726
+}
 
16727
Index: gcc/testsuite/gcc.dg/torture/pr57488.c
 
16728
===================================================================
 
16729
--- a/src/gcc/testsuite/gcc.dg/torture/pr57488.c        (.../tags/gcc_4_8_2_release)
 
16730
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57488.c        (.../branches/gcc-4_8-branch)
 
16731
@@ -0,0 +1,58 @@
 
16732
+/* { dg-do run } */
 
16733
+
 
16734
+extern void abort (void);
 
16735
+
 
16736
+int i, j, *pj = &j, **ppj = &pj;
 
16737
+int x, *px = &x;
 
16738
+
 
16739
+short s, *ps = &s, k;
 
16740
+
 
16741
+unsigned short u, *pu = &u, **ppu = &pu;
 
16742
+
 
16743
+char c, *pc = &c;
 
16744
+
 
16745
+unsigned char v = 48;
 
16746
+
 
16747
+static int
 
16748
+bar (int p)
 
16749
+{
 
16750
+  p = k;
 
16751
+  *px = **ppu = i;
 
16752
+  *ppj = &p;
 
16753
+  if (**ppj)
 
16754
+    *pj = p;
 
16755
+  return p;
 
16756
+}
 
16757
+
 
16758
+void __attribute__((noinline))
 
16759
+foo ()
 
16760
+{
 
16761
+  for (; i <= 3; i++)
 
16762
+    for (; j; j--);
 
16763
+
 
16764
+  u ^= bar (*pj);
 
16765
+
 
16766
+  for (k = 1; k >= 0; k--)
 
16767
+    {
 
16768
+      int l;
 
16769
+      bar (0);
 
16770
+      for (l = 1; l < 5; l++)
 
16771
+       {
 
16772
+         int m;
 
16773
+         for (m = 6; m; m--)
 
16774
+           {
 
16775
+             v--;
 
16776
+             *ps = *pc;
 
16777
+           }
 
16778
+       }
 
16779
+    }
 
16780
+}
 
16781
+
 
16782
+int
 
16783
+main ()
 
16784
+{
 
16785
+  foo ();
 
16786
+  if (v != 0)
 
16787
+    abort ();
 
16788
+  return 0;
 
16789
+}
 
16790
Index: gcc/testsuite/gcc.dg/torture/pr57569.c
 
16791
===================================================================
 
16792
--- a/src/gcc/testsuite/gcc.dg/torture/pr57569.c        (.../tags/gcc_4_8_2_release)
 
16793
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57569.c        (.../branches/gcc-4_8-branch)
 
16794
@@ -0,0 +1,37 @@
 
16795
+/* { dg-do run } */
 
16796
+
 
16797
+extern void abort (void) __attribute__((noreturn));
 
16798
+
 
16799
+struct S { int f0; } a; 
 
16800
+
 
16801
+int b, e, *d = &b, f;
 
16802
+
 
16803
+void 
 
16804
+fn1 ()
 
16805
+{
 
16806
+  int **g[9][6];
 
16807
+  int ***h = &g[6][3];
 
16808
+  for (; e < 9; e++) {
 
16809
+    f = 0;
 
16810
+    for (; f < 6; f++)
 
16811
+      g[e][f] = &d;
 
16812
+  }
 
16813
+  ***h = 0;
 
16814
+}
 
16815
+
 
16816
+void
 
16817
+fn2 ()
 
16818
+{
 
16819
+  fn1 ();
 
16820
+  struct S c[4][10] = {};
 
16821
+  a = c[3][9];
 
16822
+}
 
16823
+
 
16824
+int
 
16825
+main ()
 
16826
+{
 
16827
+  fn2 ();
 
16828
+  if (a.f0 != 0)
 
16829
+    abort ();
 
16830
+  return 0;
 
16831
+}
 
16832
Index: gcc/testsuite/gcc.dg/torture/pr58143-3.c
 
16833
===================================================================
 
16834
--- a/src/gcc/testsuite/gcc.dg/torture/pr58143-3.c      (.../tags/gcc_4_8_2_release)
 
16835
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58143-3.c      (.../branches/gcc-4_8-branch)
 
16836
@@ -0,0 +1,18 @@
 
16837
+/* { dg-do run } */
 
16838
+/* { dg-additional-options "-fstrict-overflow" } */
 
16839
+
 
16840
+int a, b, c, d, e;
 
16841
+
 
16842
+int
 
16843
+main ()
 
16844
+{
 
16845
+  for (b = 4; b > -30; b--)
 
16846
+    for (; c;)
 
16847
+      for (;;)
 
16848
+       {
 
16849
+         e = a > __INT_MAX__ - b;
 
16850
+         if (d)
 
16851
+           break;
 
16852
+       }
 
16853
+  return 0;
 
16854
+}
 
16855
Index: gcc/testsuite/gcc.dg/torture/pr59288.c
 
16856
===================================================================
 
16857
--- a/src/gcc/testsuite/gcc.dg/torture/pr59288.c        (.../tags/gcc_4_8_2_release)
 
16858
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59288.c        (.../branches/gcc-4_8-branch)
 
16859
@@ -0,0 +1,9 @@
 
16860
+/* { dg-do compile } */
 
16861
+
 
16862
+void
 
16863
+baz (int *d)
 
16864
+{
 
16865
+  long int i, j, k;
 
16866
+  for (i = 0, j = 0, k = 0; i < 512; i = (int) i + 1, j = (int) j + 1, k = (int) k + 3)
 
16867
+    d[i] = j ^ (i * 3) ^ (2 * k + 2);
 
16868
+}
 
16869
Index: gcc/testsuite/gcc.dg/torture/pr57425-1.c
 
16870
===================================================================
 
16871
--- a/src/gcc/testsuite/gcc.dg/torture/pr57425-1.c      (.../tags/gcc_4_8_2_release)
 
16872
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57425-1.c      (.../branches/gcc-4_8-branch)
 
16873
@@ -0,0 +1,37 @@
 
16874
+/* { dg-do run } */
 
16875
+
 
16876
+extern void abort (void) __attribute__((noreturn));
 
16877
+
 
16878
+union setconflict
 
16879
+{
 
16880
+  int a[20];
 
16881
+  long b[10];
 
16882
+};
 
16883
+
 
16884
+int
 
16885
+main ()
 
16886
+{
 
16887
+  int sum = 0;
 
16888
+  {
 
16889
+    union setconflict a;
 
16890
+    int *c;
 
16891
+    c = a.a;
 
16892
+    asm ("": "=r" (c):"0" (c));
 
16893
+    *c = 0;
 
16894
+    asm ("": "=r" (c):"0" (c));
 
16895
+    sum += *c;
 
16896
+  }
 
16897
+  {
 
16898
+    union setconflict a;
 
16899
+    long *c;
 
16900
+    c = a.b;
 
16901
+    asm ("": "=r" (c):"0" (c));
 
16902
+    *c = 1;
 
16903
+    asm ("": "=r" (c):"0" (c));
 
16904
+    sum += *c;
 
16905
+  }
 
16906
+
 
16907
+  if (sum != 1)
 
16908
+    abort();
 
16909
+  return 0;
 
16910
+}
 
16911
Index: gcc/testsuite/gcc.dg/torture/pr59330.c
 
16912
===================================================================
 
16913
--- a/src/gcc/testsuite/gcc.dg/torture/pr59330.c        (.../tags/gcc_4_8_2_release)
 
16914
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59330.c        (.../branches/gcc-4_8-branch)
 
16915
@@ -0,0 +1,17 @@
 
16916
+/* { dg-do run } */
 
16917
+
 
16918
+void free(void *ptr)
 
16919
+{
 
16920
+}
 
16921
+
 
16922
+void *foo(void)
 
16923
+{
 
16924
+  return 0;
 
16925
+}
 
16926
+
 
16927
+int main(void)
 
16928
+{
 
16929
+  void *p = foo();
 
16930
+  free(p);
 
16931
+  return 0;
 
16932
+}
 
16933
Index: gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c
 
16934
===================================================================
 
16935
--- a/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c     (.../tags/gcc_4_8_2_release)
 
16936
+++ b/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c     (.../branches/gcc-4_8-branch)
 
16937
@@ -0,0 +1,14 @@
 
16938
+/* { dg-do run } */
 
16939
+/* { dg-options "-O3" } */
 
16940
+
 
16941
+int a, c, e[5][2]; 
 
16942
+unsigned int d;
 
16943
+
 
16944
+int
 
16945
+main ()
 
16946
+{
 
16947
+  for (d = 0; d < 2; d++)
 
16948
+    if (a ? 0 : e[c + 3][d] & e[c + 4][d])
 
16949
+      break;
 
16950
+  return 0;
 
16951
+}
 
16952
Index: gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c
 
16953
===================================================================
 
16954
--- a/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c     (.../tags/gcc_4_8_2_release)
 
16955
+++ b/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c     (.../branches/gcc-4_8-branch)
 
16956
@@ -0,0 +1,18 @@
 
16957
+/* { dg-do run } */
 
16958
+/* { dg-options "-O3 -fdump-tree-pcom-details" } */
 
16959
+
 
16960
+int b, f, d[5][2];
 
16961
+unsigned int c;
 
16962
+
 
16963
+int
 
16964
+main ()
 
16965
+{
 
16966
+  for (c = 0; c < 2; c++)
 
16967
+    if (d[b + 3][c] & d[b + 4][c])
 
16968
+      if (f)
 
16969
+       break;
 
16970
+  return 0;
 
16971
+}
 
16972
+
 
16973
+/* { dg-final { scan-tree-dump "Executing predictive commoning" "pcom" } } */
 
16974
+/* { dg-final { cleanup-tree-dump "pcom" } } */
 
16975
Index: gcc/testsuite/gcc.dg/strlenopt-4.c
 
16976
===================================================================
 
16977
--- a/src/gcc/testsuite/gcc.dg/strlenopt-4.c    (.../tags/gcc_4_8_2_release)
 
16978
+++ b/src/gcc/testsuite/gcc.dg/strlenopt-4.c    (.../branches/gcc-4_8-branch)
 
16979
@@ -66,16 +66,10 @@
 
16980
   return 0;
 
16981
 }
 
16982
 
 
16983
-/* For targets providing a movstr pattern strcat is already decomposed
 
16984
-   into strlen + strcpy by fold_builtin_strcat.  */
 
16985
-
 
16986
-/* { dg-final { scan-tree-dump-times "strlen \\(" 3 "strlen" { target { ! s390*-*-* } } } } */
 
16987
-/* { dg-final { scan-tree-dump-times "strlen \\(" 6 "strlen" { target s390*-*-* } } } */
 
16988
+/* { dg-final { scan-tree-dump-times "strlen \\(" 3 "strlen" } } */
 
16989
 /* { dg-final { scan-tree-dump-times "memcpy \\(" 4 "strlen" } } */
 
16990
-/* { dg-final { scan-tree-dump-times "strcpy \\(" 3 "strlen" { target { ! s390*-*-* } } } } */
 
16991
-/* { dg-final { scan-tree-dump-times "strcpy \\(" 6 "strlen" { target s390*-*-* } } } */
 
16992
-/* { dg-final { scan-tree-dump-times "strcat \\(" 3 "strlen" { target { ! s390*-*-* } } } } */
 
16993
-/* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" { target s390*-*-* } } } */
 
16994
+/* { dg-final { scan-tree-dump-times "strcpy \\(" 3 "strlen" } } */
 
16995
+/* { dg-final { scan-tree-dump-times "strcat \\(" 3 "strlen" } } */
 
16996
 /* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
 
16997
 /* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
 
16998
 /* { dg-final { cleanup-tree-dump "strlen" } } */
 
16999
Index: gcc/testsuite/gcc.dg/pr56824.c
 
17000
===================================================================
 
17001
--- a/src/gcc/testsuite/gcc.dg/pr56824.c        (.../tags/gcc_4_8_2_release)
 
17002
+++ b/src/gcc/testsuite/gcc.dg/pr56824.c        (.../branches/gcc-4_8-branch)
 
17003
@@ -0,0 +1,18 @@
 
17004
+/* PR preprocessor/56824 */
 
17005
+/* { dg-do compile } */
 
17006
+/* { dg-options "-Waggregate-return" } */
 
17007
+
 
17008
+struct S { int i; };
 
17009
+struct S foo (void);
 
17010
+
 
17011
+#pragma GCC diagnostic push
 
17012
+#pragma GCC diagnostic ignored "-Waggregate-return"
 
17013
+
 
17014
+int
 
17015
+main ()
 
17016
+{
 
17017
+  foo ();
 
17018
+  return 0;
 
17019
+}
 
17020
+
 
17021
+#pragma GCC diagnostic pop
 
17022
Index: gcc/testsuite/gcc.dg/ipa/pr55260.c
 
17023
===================================================================
 
17024
--- a/src/gcc/testsuite/gcc.dg/ipa/pr55260.c    (.../tags/gcc_4_8_2_release)
 
17025
+++ b/src/gcc/testsuite/gcc.dg/ipa/pr55260.c    (.../branches/gcc-4_8-branch)
 
17026
@@ -0,0 +1,38 @@
 
17027
+/* { dg-do compile } */
 
17028
+/* { dg-options "-O2 -fno-inline -fipa-cp-clone"  } */
 
17029
+
 
17030
+typedef struct {
 
17031
+  int *ptr;
 
17032
+  int len;
 
17033
+} string;
 
17034
+typedef struct {
 
17035
+  string nantstr;
 
17036
+  int *nant;
 
17037
+} malv;
 
17038
+typedef struct {
 
17039
+  int *nor;
 
17040
+} list_heads;
 
17041
+int b;
 
17042
+list_heads *fn1(string, int *, unsigned);
 
17043
+void fn2(malv *p1, list_heads *p2, unsigned p3) {
 
17044
+  string a = p1->nantstr;
 
17045
+  fn1(a, p1->nant, p3);
 
17046
+}
 
17047
+
 
17048
+void fn3(unsigned p1) { fn2(0, 0, p1); }
 
17049
+
 
17050
+list_heads *fn1(string p1, int *p2, unsigned p3) {
 
17051
+  while (1) {
 
17052
+    if (p3)
 
17053
+      fn3(1);
 
17054
+    if (b)
 
17055
+      return 0;
 
17056
+    fn3(1);
 
17057
+  }
 
17058
+}
 
17059
+
 
17060
+void fn5() {
 
17061
+  list_heads c;
 
17062
+  c.nor = 0;
 
17063
+  fn2(0, &c, 1);
 
17064
+}
 
17065
Index: gcc/testsuite/gcc.dg/ipa/pr59610.c
 
17066
===================================================================
 
17067
--- a/src/gcc/testsuite/gcc.dg/ipa/pr59610.c    (.../tags/gcc_4_8_2_release)
 
17068
+++ b/src/gcc/testsuite/gcc.dg/ipa/pr59610.c    (.../branches/gcc-4_8-branch)
 
17069
@@ -0,0 +1,11 @@
 
17070
+/* { dg-do compile } */
 
17071
+/* { dg-options "-O2" } */
 
17072
+
 
17073
+struct A { int a; };
 
17074
+extern void *y;
 
17075
+
 
17076
+__attribute__((optimize (0))) void
 
17077
+foo (void *p, struct A x)
 
17078
+{
 
17079
+  foo (y, x);
 
17080
+}
 
17081
Index: gcc/testsuite/gcc.dg/pr60485-1.c
 
17082
===================================================================
 
17083
--- a/src/gcc/testsuite/gcc.dg/pr60485-1.c      (.../tags/gcc_4_8_2_release)
 
17084
+++ b/src/gcc/testsuite/gcc.dg/pr60485-1.c      (.../branches/gcc-4_8-branch)
 
17085
@@ -0,0 +1,29 @@
 
17086
+/* { dg-do run } */
 
17087
+/* { dg-options "-O2" } */
 
17088
+
 
17089
+extern void abort (void);
 
17090
+struct S {
 
17091
+    int *i[4];
 
17092
+    int *p1;
 
17093
+    int *p2;
 
17094
+    int *p3;
 
17095
+    int *p4;
 
17096
+};
 
17097
+int **b;
 
17098
+int main()
 
17099
+{
 
17100
+  int i = 1;
 
17101
+  struct S s;
 
17102
+  s.p3 = &i;
 
17103
+  int **p;
 
17104
+  if (b)
 
17105
+    p = b;
 
17106
+  else
 
17107
+    p = &s.i[2];
 
17108
+  p += 4;
 
17109
+  if (!b)
 
17110
+    **p = 0;
 
17111
+  if (i != 0)
 
17112
+    abort ();
 
17113
+  return i;
 
17114
+}
 
17115
Index: gcc/testsuite/gcc.dg/strlenopt-1f.c
 
17116
===================================================================
 
17117
--- a/src/gcc/testsuite/gcc.dg/strlenopt-1f.c   (.../tags/gcc_4_8_2_release)
 
17118
+++ b/src/gcc/testsuite/gcc.dg/strlenopt-1f.c   (.../branches/gcc-4_8-branch)
 
17119
@@ -6,13 +6,13 @@
 
17120
 #include "strlenopt-1.c"
 
17121
 
 
17122
 /* { dg-final { scan-tree-dump-times "strlen \\(" 2 "strlen" } } */
 
17123
-/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 3 "strlen" } } */
 
17124
-/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 1 "strlen" } } */
 
17125
+/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 0 "strlen" } } */
 
17126
+/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 0 "strlen" } } */
 
17127
 /* { dg-final { scan-tree-dump-times "__strcat_chk \\(" 0 "strlen" } } */
 
17128
 /* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
 
17129
 /* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 0 "strlen" } } */
 
17130
-/* { dg-final { scan-tree-dump-times "memcpy \\(" 0 "strlen" } } */
 
17131
-/* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
 
17132
+/* { dg-final { scan-tree-dump-times "memcpy \\(" 3 "strlen" } } */
 
17133
+/* { dg-final { scan-tree-dump-times "strcpy \\(" 1 "strlen" } } */
 
17134
 /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
 
17135
 /* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
 
17136
 /* { dg-final { cleanup-tree-dump "strlen" } } */
 
17137
Index: gcc/testsuite/gcc.dg/vect/pr60382.c
 
17138
===================================================================
 
17139
--- a/src/gcc/testsuite/gcc.dg/vect/pr60382.c   (.../tags/gcc_4_8_2_release)
 
17140
+++ b/src/gcc/testsuite/gcc.dg/vect/pr60382.c   (.../branches/gcc-4_8-branch)
 
17141
@@ -0,0 +1,32 @@
 
17142
+#include "tree-vect.h"
 
17143
+
 
17144
+int a, b, c, e, f;
 
17145
+
 
17146
+void
 
17147
+foo ()
 
17148
+{
 
17149
+  for (b = 0; b < 3; b++)
 
17150
+    if (e)
 
17151
+      {
 
17152
+       for (c = 0; c < 4; c++)
 
17153
+         {
 
17154
+           if (b)
 
17155
+             continue;
 
17156
+           f = 1;
 
17157
+           for (a = 0; a < 2; a++)
 
17158
+             f |= 1;
 
17159
+         }
 
17160
+       for (;;)
 
17161
+         ;
 
17162
+      }
 
17163
+}
 
17164
+
 
17165
+int
 
17166
+main ()
 
17167
+{
 
17168
+  check_vect ();
 
17169
+  foo ();
 
17170
+  return 0;
 
17171
+}
 
17172
+
 
17173
+/* { dg-final { cleanup-tree-dump "vect" } } */
 
17174
Index: gcc/testsuite/gcc.dg/vect/pr60276.c
 
17175
===================================================================
 
17176
--- a/src/gcc/testsuite/gcc.dg/vect/pr60276.c   (.../tags/gcc_4_8_2_release)
 
17177
+++ b/src/gcc/testsuite/gcc.dg/vect/pr60276.c   (.../branches/gcc-4_8-branch)
 
17178
@@ -0,0 +1,52 @@
 
17179
+/* { dg-do run } */
 
17180
+
 
17181
+extern void abort (void);
 
17182
+
 
17183
+static void 
 
17184
+foo (int *out, const int *lp, unsigned samples)
 
17185
+{
 
17186
+  int x, target;
 
17187
+  for (x = 0, target = 0; x < (int)samples; x += 2, target++)
 
17188
+    {
 
17189
+      out[x] = lp[target];
 
17190
+      out[x - 1] = out[x - 2] + out[x];
 
17191
+    }
 
17192
+}
 
17193
+
 
17194
+static void 
 
17195
+foo_novec (int *out, const int *lp, unsigned samples)
 
17196
+{
 
17197
+  int x, target;
 
17198
+  for (x = 0, target = 0; x < (int)samples; x += 2, target++)
 
17199
+    {
 
17200
+      out[x] = lp[target];
 
17201
+      out[x - 1] = out[x - 2] + out[x];
 
17202
+      __asm__ volatile ("" : : : "memory");
 
17203
+    }
 
17204
+}
 
17205
+
 
17206
+int main(void)
 
17207
+{
 
17208
+  const int lp[25] = {
 
17209
+      0, 2, 4, 6, 8,
 
17210
+      10, 12, 14, 16,
 
17211
+      18, 20, 22, 24,
 
17212
+      26, 28, 30, 32,
 
17213
+      34, 36, 38, 40,
 
17214
+      42, 44, 46, 48,
 
17215
+  };
 
17216
+  int out[49] = {0};
 
17217
+  int out2[49] = {0};
 
17218
+  int s;
 
17219
+
 
17220
+  foo (out + 2, lp + 1, 48);
 
17221
+  foo_novec (out2 + 2, lp + 1, 48);
 
17222
+
 
17223
+  for (s = 0; s < 49; s++)
 
17224
+    if (out[s] != out2[s])
 
17225
+      abort ();
 
17226
+
 
17227
+  return 0;
 
17228
+}
 
17229
+
 
17230
+/* { dg-final { cleanup-tree-dump "vect" } } */
 
17231
Index: gcc/testsuite/gcc.dg/pr53060.c
 
17232
===================================================================
 
17233
--- a/src/gcc/testsuite/gcc.dg/pr53060.c        (.../tags/gcc_4_8_2_release)
 
17234
+++ b/src/gcc/testsuite/gcc.dg/pr53060.c        (.../branches/gcc-4_8-branch)
 
17235
@@ -25,3 +25,4 @@
 
17236
 
 
17237
 /* Ignore a warning that is irrelevant to the purpose of this test.  */
 
17238
 /* { dg-prune-output ".*GCC vector returned by reference.*" } */
 
17239
+/* { dg-prune-output "changes the ABI" } */
 
17240
Index: gcc/testsuite/ChangeLog
 
17241
===================================================================
 
17242
--- a/src/gcc/testsuite/ChangeLog       (.../tags/gcc_4_8_2_release)
 
17243
+++ b/src/gcc/testsuite/ChangeLog       (.../branches/gcc-4_8-branch)
 
17244
@@ -1,3 +1,1066 @@
 
17245
+2014-03-31  H.J. Lu  <hongjiu.lu@intel.com>
 
17246
+
 
17247
+       Backport from mainline
 
17248
+       2014-03-31  H.J. Lu  <hongjiu.lu@intel.com>
 
17249
+
 
17250
+       PR rtl-optimization/60700
 
17251
+       * gcc.target/i386/pr60700.c: New test.
 
17252
+
 
17253
+2014-03-28  H.J. Lu  <hongjiu.lu@intel.com>
 
17254
+
 
17255
+       PR rtl-optimization/60700
 
17256
+       Backport from mainline
 
17257
+       2013-07-30  Zhenqiang Chen  <zhenqiang.chen@linaro.org>
 
17258
+
 
17259
+       * gcc.target/arm/pr57637.c: New testcase.
 
17260
+
 
17261
+2014-04-28  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
17262
+
 
17263
+       PR fortran/60522
 
17264
+       * gfortran.dg/where_4.f90:  New test case.
 
17265
+
 
17266
+2014-03-26  Martin Jambor  <mjambor@suse.cz>
 
17267
+
 
17268
+      PR ipa/60419
 
17269
+      * g++.dg/ipa/pr60419.C: New test.
 
17270
+
 
17271
+2014-03-26  Eric Botcazou  <ebotcazou@adacore.com>
 
17272
+
 
17273
+       * gcc.c-torture/execute/20140326-1.c: New test.
 
17274
+
 
17275
+2014-03-20  Tobias Burnus  <burnus@net-b.de>
 
17276
+
 
17277
+       PR fortran/60543
 
17278
+       PR fortran/60283
 
17279
+       * gfortran.dg/implicit_pure_4.f90: New.
 
17280
+
 
17281
+2014-03-17  Mikael Pettersson  <mikpelinux@gmail.com>
 
17282
+           Committed by Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
 
17283
+
 
17284
+       Backport from mainline:
 
17285
+
 
17286
+       2013-06-16  Joern Rennecke <joern.rennecke@embecosm.com>
 
17287
+
 
17288
+       PR rtl-optimization/57425
 
17289
+       PR rtl-optimization/57569
 
17290
+       * gcc.dg/torture/pr57425-1.c, gcc.dg/torture/pr57425-2.c: New files.
 
17291
+       * gcc.dg/torture/pr57425-3.c, gcc.dg/torture/pr57569.c: Likewise.
 
17292
+
 
17293
+2014-03-17  Richard Biener  <rguenther@suse.de>
 
17294
+
 
17295
+       Backport from mainline
 
17296
+       2014-03-11  Richard Biener  <rguenther@suse.de>
 
17297
+
 
17298
+       PR tree-optimization/60429
 
17299
+       PR tree-optimization/60485
 
17300
+       * gcc.dg/pr60485-1.c: New testcase.
 
17301
+       * gcc.dg/pr60485-2.c: Likewise.
 
17302
+
 
17303
+2014-03-15  Dominique d'Humieres  <dominiq@lps.ens.fr>
 
17304
+
 
17305
+       Backport from mainline
 
17306
+       PR libfortran/60128
 
17307
+       * gfortran.dg/fmt_en.f90: New test.
 
17308
+
 
17309
+2014-03-15  Jerry DeLisle  <jvdelisle@gcc.gnu>
 
17310
+
 
17311
+       Backport from mainline
 
17312
+       PR libfortran/58324
 
17313
+       * gfortran.dg/list_read_12.f90: New test.
 
17314
+
 
17315
+2014-03-13  Joey Ye  <joey.ye@arm.com>
 
17316
+
 
17317
+       Backport from mainline
 
17318
+       2014-03-12  Thomas Preud'homme  <thomas.preudhomme@arm.com>
 
17319
+
 
17320
+       PR tree-optimization/60454
 
17321
+       * gcc.c-torture/execute/pr60454.c: New test.
 
17322
+
 
17323
+2014-03-08  Janus Weil  <janus@gcc.gnu.org>
 
17324
+
 
17325
+       PR fortran/60450
 
17326
+       * gfortran.dg/shape_8.f90: New.
 
17327
+
 
17328
+2014-03-06  Jakub Jelinek  <jakub@redhat.com>
 
17329
+
 
17330
+       Backport from mainline
 
17331
+       2014-02-19  Jakub Jelinek  <jakub@redhat.com>
 
17332
+
 
17333
+       PR c/37743
 
17334
+       * g++.dg/ext/builtin-bswap1.C: New test.
 
17335
+       * c-c++-common/pr37743.c: New test.
 
17336
+
 
17337
+       PR preprocessor/58844
 
17338
+       * c-c++-common/cpp/pr58844-1.c: New test.
 
17339
+       * c-c++-common/cpp/pr58844-2.c: New test.
 
17340
+
 
17341
+       2014-02-13  Jakub Jelinek  <jakub@redhat.com>
 
17342
+
 
17343
+       PR target/43546
 
17344
+       * gcc.target/i386/pr43546.c: New test.
 
17345
+
 
17346
+       2014-02-12  Jakub Jelinek  <jakub@redhat.com>
 
17347
+
 
17348
+       PR c/60101
 
17349
+       * c-c++-common/pr60101.c: New test.
 
17350
+
 
17351
+       2014-02-11  Jakub Jelinek  <jakub@redhat.com>
 
17352
+
 
17353
+       PR fortran/52370
 
17354
+       * gfortran.dg/pr52370.f90: New test.
 
17355
+
 
17356
+       PR debug/59776
 
17357
+       * gcc.dg/guality/pr59776.c: New test.
 
17358
+
 
17359
+       2014-02-07  Jakub Jelinek  <jakub@redhat.com>
 
17360
+
 
17361
+       PR preprocessor/56824
 
17362
+       * gcc.dg/pr56824.c: New test.
 
17363
+
 
17364
+       2014-02-06  Jakub Jelinek  <jakub@redhat.com>
 
17365
+
 
17366
+       PR target/60062
 
17367
+       * gcc.c-torture/execute/pr60062.c: New test.
 
17368
+       * gcc.c-torture/execute/pr60072.c: New test.
 
17369
+
 
17370
+       2014-02-04  Jakub Jelinek  <jakub@redhat.com>
 
17371
+
 
17372
+       PR ipa/60026
 
17373
+       * c-c++-common/torture/pr60026.c: New test.
 
17374
+
 
17375
+       2014-02-05  Jakub Jelinek  <jakub@redhat.com>
 
17376
+
 
17377
+       PR middle-end/57499
 
17378
+       * g++.dg/torture/pr57499.C: New test.
 
17379
+
 
17380
+       2014-03-03  Jakub Jelinek  <jakub@redhat.com>
 
17381
+
 
17382
+       PR preprocessor/60400
 
17383
+       * c-c++-common/cpp/pr60400.c: New test.
 
17384
+       * c-c++-common/cpp/pr60400-1.h: New file.
 
17385
+       * c-c++-common/cpp/pr60400-2.h: New file.
 
17386
+
 
17387
+2014-03-04  Richard Biener  <rguenther@suse.de>
 
17388
+
 
17389
+       PR tree-optimization/60382
 
17390
+       * gcc.dg/vect/pr60382.c: New testcase.
 
17391
+
 
17392
+2014-03-02  Mikael Morin  <mikael@gcc.gnu.org>
 
17393
+
 
17394
+       PR fortran/60341
 
17395
+       * gfortran.dg/str_comp_optimize_1.f90: New test.
 
17396
+
 
17397
+2014-02-25  Richard Biener  <rguenther@suse.de>
 
17398
+
 
17399
+       Backport from mainline
 
17400
+       2014-02-21  Richard Biener  <rguenther@suse.de>
 
17401
+
 
17402
+       PR tree-optimization/60276
 
17403
+       * gcc.dg/vect/pr60276.c: New testcase.
 
17404
+
 
17405
+2014-02-25  Richard Biener  <rguenther@suse.de>
 
17406
+
 
17407
+       Backport from mainline
 
17408
+       2014-02-14  Richard Biener  <rguenther@suse.de>
 
17409
+
 
17410
+       PR tree-optimization/60183
 
17411
+       * gcc.dg/torture/pr60183.c: New testcase.
 
17412
+
 
17413
+2014-02-24  Fabien Chêne  <fabien@gcc.gnu.org>
 
17414
+
 
17415
+       PR c++/37140
 
17416
+       * g++.dg/template/using27.C: New.
 
17417
+       * g++.dg/template/using28.C: New.
 
17418
+       * g++.dg/template/using29.C: New.
 
17419
+
 
17420
+2014-02-23  David Holsgrove <david.holsgrove@xilinx.com>
 
17421
+
 
17422
+       * gcc/testsuite/gcc.target/microblaze/others/mem_reload.c: New test.
 
17423
+
 
17424
+2014-02-22  Mikael Morin  <mikael@gcc.gnu.org>
 
17425
+
 
17426
+       PR fortran/59599
 
17427
+       * gfortran.dg/ichar_3.f90: New test.
 
17428
+
 
17429
+2014-02-21  Steven G. Kargl  <kargl@gcc.gnu.org>
 
17430
+
 
17431
+       Backport from mainline
 
17432
+       PR fortran/59700
 
17433
+       * gfortran.dg/pr59700.f90: New test.
 
17434
+
 
17435
+2014-02-21  Martin Jambor  <mjambor@suse.cz>
 
17436
+
 
17437
+       PR ipa/55260
 
17438
+       * gcc.dg/ipa/pr55260.c: New test.
 
17439
+
 
17440
+2014-02-19  Tobias Burnus  <burnus@net-b.de>
 
17441
+
 
17442
+       PR fortran/49397
 
17443
+       * gfortran.dg/proc_ptr_45.f90: New.
 
17444
+       * gfortran.dg/proc_ptr_46.f90: New.
 
17445
+
 
17446
+2014-02-19  Uros Bizjak  <ubizjak@gmail.com>
 
17447
+
 
17448
+       Backport from mainline
 
17449
+       2014-02-19  Uros Bizjak  <ubizjak@gmail.com>
 
17450
+
 
17451
+       PR target/59794
 
17452
+       * gcc.target/i386/pr39162.c: Add dg-prune-output.
 
17453
+       (dg-options): Remove -Wno-psabi.
 
17454
+       * gcc.target/i386/pr59794-2.c: Ditto.
 
17455
+       * gcc.target/i386/sse-5.c: Ditto.
 
17456
+
 
17457
+2014-02-19  Janus Weil  <janus@gcc.gnu.org>
 
17458
+
 
17459
+       Backports from mainline:
 
17460
+       2014-02-17  Janus Weil  <janus@gcc.gnu.org>
 
17461
+
 
17462
+       PR fortran/55907
 
17463
+       * gfortran.dg/init_flag_12.f90: New.
 
17464
+
 
17465
+       2014-02-18  Janus Weil  <janus@gcc.gnu.org>
 
17466
+
 
17467
+       PR fortran/60231
 
17468
+       * gfortran.dg/typebound_generic_15.f90: New.
 
17469
+
 
17470
+2014-02-18  Kai Tietz  <ktietz@redhat.com>
 
17471
+
 
17472
+       PR target/60193
 
17473
+       * gcc.target/i386/nest-1.c: New testcase.
 
17474
+
 
17475
+2014-02-18  Eric Botcazou  <ebotcazou@adacore.com>
 
17476
+
 
17477
+       * gnat.dg/opt32.adb: New test.
 
17478
+
 
17479
+2014-02-15  Jerry DeLisle  <jvdelisle@gcc.gnu>
 
17480
+           Dominique d'Humieres  <dominiq@lps.ens.fr>
 
17481
+
 
17482
+       Backport from mainline
 
17483
+       PR libfortran/59771
 
17484
+       PR libfortran/59774
 
17485
+       PR libfortran/59836
 
17486
+       * gfortran.dg/fmt_g_1.f90: New test.
 
17487
+       * gfortran.dg/round_3.f08: New cases added.
 
17488
+
 
17489
+2014-02-13  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
17490
+
 
17491
+       * gcc.target/s390/hotpatch-compile-8.c: New test.
 
17492
+
 
17493
+2014-02-12  Eric Botcazou  <ebotcazou@adacore.com>
 
17494
+
 
17495
+       * gcc.c-torture/execute/20140212-1.c: New test.
 
17496
+
 
17497
+2014-02-10  Richard Biener  <rguenther@suse.de>
 
17498
+
 
17499
+       Backport from mainline
 
17500
+       2014-01-30  Richard Biener  <rguenther@suse.de>
 
17501
+
 
17502
+       PR tree-optimization/59903
 
17503
+       * gcc.dg/torture/pr59903.c: New testcase.
 
17504
+
 
17505
+       2014-02-10  Richard Biener  <rguenther@suse.de>
 
17506
+
 
17507
+       PR tree-optimization/60115
 
17508
+       * gcc.dg/torture/pr60115.c: New testcase.
 
17509
+
 
17510
+2014-02-09  Janus Weil  <janus@gcc.gnu.org>
 
17511
+
 
17512
+       Backport from mainline
 
17513
+       2013-10-21  Tobias Burnus  <burnus@net-b.de>
 
17514
+
 
17515
+       PR fortran/58803
 
17516
+       PR fortran/59395
 
17517
+       * gfortran.dg/proc_ptr_comp_38.f90: New.
 
17518
+
 
17519
+2014-02-08  Mikael Morin  <mikael@gcc.gnu.org>
 
17520
+
 
17521
+       PR fortran/57033
 
17522
+       * gfortran.dg/default_initialization_7.f90: New test.
 
17523
+
 
17524
+2014-02-07  Paul Thomas  <pault@gcc.gnu.org>
 
17525
+
 
17526
+       PR fortran/59906
 
17527
+       * gfortran.dg/elemental_subroutine_9.f90 : New test
 
17528
+
 
17529
+2014-02-04  Uros Bizjak  <ubizjak@gmail.com>
 
17530
+
 
17531
+       Backport from mainline
 
17532
+       2014-02-02  Uros Bizjak  <ubizjak@gmail.com>
 
17533
+
 
17534
+       PR target/60017
 
17535
+       * gcc.c-torture/execute/pr60017.c: New test.
 
17536
+
 
17537
+2014-02-01  Paul Thomas  <pault@gcc.gnu.org>
 
17538
+
 
17539
+       PR fortran/59414
 
17540
+       * gfortran.dg/allocate_class_3.f90 : New test
 
17541
+
 
17542
+2014-01-30  David Holsgrove <david.holsgrove@xilinx.com>
 
17543
+
 
17544
+       Backport from mainline.
 
17545
+       * gcc.target/microblaze/isa/fcmp4.c: New.
 
17546
+
 
17547
+2014-01-26  Mikael Morin  <mikael@gcc.gnu.org>
 
17548
+
 
17549
+       PR fortran/58007
 
17550
+       * gfortran.dg/unresolved_fixup_1.f90: New test.
 
17551
+       * gfortran.dg/unresolved_fixup_2.f90: New test.
 
17552
+
 
17553
+2014-01-24  H.J. Lu  <hongjiu.lu@intel.com>
 
17554
+
 
17555
+       Backport from mainline.
 
17556
+       2014-01-23  H.J. Lu  <hongjiu.lu@intel.com>
 
17557
+
 
17558
+       PR target/59929
 
17559
+       * gcc.target/i386/pr59929.c: New test.
 
17560
+
 
17561
+2014-01-24  Paolo Carlini  <paolo.carlini@oracle.com>
 
17562
+
 
17563
+       PR c++/57524
 
17564
+       * g++.dg/ext/timevar2.C: New.
 
17565
+
 
17566
+2014-01-23  David Holsgrove <david.holsgrove@xilinx.com>
 
17567
+
 
17568
+       Backport from mainline.
 
17569
+       * gcc.target/microblaze/others/builtin-trap.c: New test.
 
17570
+
 
17571
+2014-01-23  Marek Polacek  <polacek@redhat.com>
 
17572
+
 
17573
+       Backport from mainline
 
17574
+       2013-10-21  Marek Polacek  <polacek@redhat.com>
 
17575
+
 
17576
+       PR middle-end/58809
 
17577
+       * gcc.dg/gomp/pr58809.c: New test.
 
17578
+
 
17579
+2014-01-23  Jakub Jelinek  <jakub@redhat.com>
 
17580
+
 
17581
+       PR middle-end/58809
 
17582
+       * c-c++-common/gomp/pr58809.c: New test.
 
17583
+
 
17584
+2014-01-22  Marek Polacek  <polacek@redhat.com>
 
17585
+
 
17586
+       Backport from mainline
 
17587
+       2014-01-22  Marek Polacek  <polacek@redhat.com>
 
17588
+
 
17589
+       PR c/59891
 
17590
+       * gcc.dg/torture/pr59891.c: New test.
 
17591
+
 
17592
+2014-01-21  Jakub Jelinek  <jakub@redhat.com>
 
17593
+
 
17594
+       PR middle-end/59860
 
17595
+       * gcc.dg/strlenopt-4.c: Expect the same counts on s390*-* as on all
 
17596
+       other targets.
 
17597
+
 
17598
+2014-01-20  Richard Biener  <rguenther@suse.de>
 
17599
+
 
17600
+       PR middle-end/59860
 
17601
+       * gcc.dg/pr59860.c: New testcase.
 
17602
+
 
17603
+2014-01-20  Marek Polacek  <polacek@redhat.com>
 
17604
+
 
17605
+       Backported from mainline
 
17606
+       2014-01-17  Marek Polacek  <polacek@redhat.com>
 
17607
+
 
17608
+       PR c++/59838
 
17609
+       * g++.dg/diagnostic/pr59838.C: New test.
 
17610
+
 
17611
+2014-01-19  Paul Thomas  <pault@gcc.gnu.org>
 
17612
+
 
17613
+       Backport from mainline
 
17614
+       2013-12-01  Paul Thomas  <pault@gcc.gnu.org>
 
17615
+
 
17616
+       PR fortran/34547
 
17617
+       * gfortran.dg/null_5.f90 : Include new error.
 
17618
+       * gfortran.dg/null_6.f90 : Include new error.
 
17619
+
 
17620
+2014-01-17  H.J. Lu  <hongjiu.lu@intel.com>
 
17621
+
 
17622
+       Backport from mainline
 
17623
+       2014-01-15  H.J. Lu  <hongjiu.lu@intel.com>
 
17624
+
 
17625
+       PR target/59794
 
17626
+       * c-c++-common/convert-vec-1.c: Also prune ABI change for
 
17627
+       Linux/x86.
 
17628
+       * g++.dg/cpp0x/constexpr-53094-2.C: Likewise.
 
17629
+       * g++.dg/ext/attribute-test-1.C: Likewise.
 
17630
+       * g++.dg/ext/attribute-test-2.C: Likewise.
 
17631
+       * g++.dg/ext/attribute-test-3.C: Likewise.
 
17632
+       * g++.dg/ext/attribute-test-4.C: Likewise.
 
17633
+       * g++.dg/torture/pr38565.C: Likewise.
 
17634
+       * gcc.dg/pr53060.c: Likewise.
 
17635
+       * c-c++-common/scal-to-vec2.c: Add -msse2 for x86.
 
17636
+       * c-c++-common/vector-compare-2.c: Likewise.
 
17637
+       * gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c: Likewise.
 
17638
+       * g++.dg/conversion/simd1.C: Add -msse2 for x86.  Adjust
 
17639
+       dg-message line number.
 
17640
+
 
17641
+2014-01-17  H.J. Lu  <hongjiu.lu@intel.com>
 
17642
+
 
17643
+       Backport from mainline
 
17644
+       2014-01-14  H.J. Lu  <hongjiu.lu@intel.com>
 
17645
+
 
17646
+       PR target/59794
 
17647
+       * gcc.target/i386/pr39162.c (y): New __m256i variable.
 
17648
+       (bar): Change return type to void.  Set y to x.
 
17649
+       * gcc.target/i386/pr59794-1.c: New testcase.
 
17650
+       * gcc.target/i386/pr59794-2.c: Likewise.
 
17651
+       * gcc.target/i386/pr59794-3.c: Likewise.
 
17652
+       * gcc.target/i386/pr59794-4.c: Likewise.
 
17653
+       * gcc.target/i386/pr59794-5.c: Likewise.
 
17654
+       * gcc.target/i386/pr59794-6.c: Likewise.
 
17655
+       * gcc.target/i386/pr59794-7.c: Likewise.
 
17656
+
 
17657
+2014-01-17  Matthias Klose  <doko@ubuntu.com>
 
17658
+
 
17659
+       Backport from the trunk:
 
17660
+       2014-01-09  Uros Bizjak  <ubizjak@gmail.com>
 
17661
+       * go.test/go-test.exp (go-gc-tests): Don't run peano.go on systems
 
17662
+       which don't support -fsplit-stack.  Skip rotate[0123].go tests.
 
17663
+
 
17664
+2014-01-15  Kugan Vivekanandarajah  <kuganv@linaro.org>
 
17665
+
 
17666
+       Backport from mainline
 
17667
+       2014-01-15  Matthew Gretton-Dann  <matthew.gretton-dann@linaro.org>
 
17668
+           Kugan Vivekanandarajah  <kuganv@linaro.org>
 
17669
+
 
17670
+       PR target/59695
 
17671
+       * g++.dg/pr59695.C: New testcase.
 
17672
+
 
17673
+2014-01-17  Terry Guo  <terry.guo@arm.com>
 
17674
+
 
17675
+       * gcc.target/arm/pr59826.c: New test.
 
17676
+
 
17677
+2014-01-16  Jakub Jelinek  <jakub@redhat.com>
 
17678
+
 
17679
+       PR target/59839
 
17680
+       * gcc.target/i386/pr59839.c: New test.
 
17681
+
 
17682
+       PR debug/54694
 
17683
+       * gcc.target/i386/pr9771-1.c (main): Rename to...
 
17684
+       (real_main): ... this.  Add __asm name "main".
 
17685
+       (ASMNAME, ASMNAME2, STRING): Define.
 
17686
+
 
17687
+2014-01-16  Marek Polacek  <polacek@redhat.com>
 
17688
+
 
17689
+       Backported from mainline
 
17690
+       2014-01-16  Marek Polacek  <polacek@redhat.com>
 
17691
+
 
17692
+       PR middle-end/59827
 
17693
+       * gcc.dg/pr59827.c: New test.
 
17694
+
 
17695
+2014-01-15  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
17696
+
 
17697
+       PR target/59803
 
17698
+       * gcc.c-torture/compile/pr59803.c: New testcase.
 
17699
+
 
17700
+2014-01-10  Yufeng Zhang  <yufeng.zhang@arm.com>
 
17701
+
 
17702
+       * gcc.target/arm/neon/vst1Q_laneu64-1.c: New test.
 
17703
+
 
17704
+2014-01-10  Hans-Peter Nilsson  <hp@axis.com>
 
17705
+
 
17706
+       * gcc.dg/pr46309.c: Disable for cris*-*-*.
 
17707
+
 
17708
+2014-01-10  Paolo Carlini  <paolo.carlini@oracle.com>
 
17709
+
 
17710
+       PR c++/56060
 
17711
+       PR c++/59730
 
17712
+       * g++.dg/cpp0x/variadic144.C: New.
 
17713
+       * g++.dg/cpp0x/variadic145.C: Likewise.
 
17714
+
 
17715
+2014-01-10  Richard Biener  <rguenther@suse.de>
 
17716
+
 
17717
+       PR tree-optimization/59715
 
17718
+       * gcc.dg/torture/pr59715.c: New testcase.
 
17719
+
 
17720
+2014-01-09  Richard Sandiford  <rdsandiford@googlemail.com>
 
17721
+
 
17722
+       * gcc.target/mips/bswap-1.c, gcc.target/mips/bswap-2.c,
 
17723
+       gcc.target/mips/bswap-3.c, gcc.target/mips/bswap-4.c,
 
17724
+       gcc.target/mips/bswap-5.c, gcc.target/mips/bswap-6.c: New tests.
 
17725
+
 
17726
+2014-01-09  Richard Sandiford  <rdsandiford@googlemail.com>
 
17727
+
 
17728
+       PR rtl-optimization/59137
 
17729
+       * gcc.target/mips/pr59137.c: New test.
 
17730
+
 
17731
+2014-01-09  Richard Biener  <rguenther@suse.de>
 
17732
+
 
17733
+       Backport from mainline
 
17734
+       2013-11-18  Richard Biener  <rguenther@suse.de>
 
17735
+
 
17736
+       PR tree-optimization/59125
 
17737
+       PR tree-optimization/54570
 
17738
+       * gcc.dg/builtin-object-size-8.c: Un-xfail.
 
17739
+       * gcc.dg/builtin-object-size-14.c: New testcase.
 
17740
+       * gcc.dg/strlenopt-14gf.c: Adjust.
 
17741
+       * gcc.dg/strlenopt-1f.c: Likewise.
 
17742
+       * gcc.dg/strlenopt-4gf.c: Likewise.
 
17743
+
 
17744
+       2013-12-03  Jakub Jelinek  <jakub@redhat.com>
 
17745
+
 
17746
+       PR tree-optimization/59362
 
17747
+       * gcc.c-torture/compile/pr59362.c: New test.
 
17748
+
 
17749
+2014-01-09  Richard Earnshaw  <rearnsha@arm.com>
 
17750
+
 
17751
+       PR rtl-optimization/54300
 
17752
+       * gcc.target/arm/pr54300.C: New test.
 
17753
+
 
17754
+2014-01-08  Martin Jambor  <mjambor@suse.cz>
 
17755
+
 
17756
+       PR ipa/59610
 
17757
+       * gcc.dg/ipa/pr59610.c: New test.
 
17758
+
 
17759
+2014-01-07  Jakub Jelinek  <jakub@redhat.com>
 
17760
+
 
17761
+       PR rtl-optimization/58668
 
17762
+       * gcc.dg/pr58668.c: New test.
 
17763
+
 
17764
+       Backported from mainline
 
17765
+       2013-12-16  Jakub Jelinek  <jakub@redhat.com>
 
17766
+
 
17767
+       PR middle-end/58956
 
17768
+       PR middle-end/59470
 
17769
+       * gcc.target/i386/pr59470.c: New test.
 
17770
+
 
17771
+2014-01-04  Janus Weil  <janus@gcc.gnu.org>
 
17772
+
 
17773
+       Backport from mainline
 
17774
+       2014-01-02  Janus Weil  <janus@gcc.gnu.org>
 
17775
+
 
17776
+       PR fortran/59654
 
17777
+       * gfortran.dg/dynamic_dispatch_12.f90: New.
 
17778
+
 
17779
+2014-01-03  Joseph Myers  <joseph@codesourcery.com>
 
17780
+
 
17781
+       * gcc.target/powerpc/rs6000-ldouble-3.c: New test.
 
17782
+
 
17783
+2014-01-03  Jakub Jelinek  <jakub@redhat.com>
 
17784
+
 
17785
+       PR target/59625
 
17786
+       * gcc.target/i386/pr59625.c: New test.
 
17787
+
 
17788
+2014-01-01  Jakub Jelinek  <jakub@redhat.com>
 
17789
+
 
17790
+       PR rtl-optimization/59647
 
17791
+       * g++.dg/opt/pr59647.C: New test.
 
17792
+
 
17793
+2013-12-31  Janus Weil  <janus@gcc.gnu.org>
 
17794
+
 
17795
+       Backport from mainline
 
17796
+       2013-12-30  Janus Weil  <janus@gcc.gnu.org>
 
17797
+
 
17798
+       PR fortran/58998
 
17799
+       * gfortran.dg/generic_28.f90: New.
 
17800
+
 
17801
+2013-12-20  Jakub Jelinek  <jakub@redhat.com>
 
17802
+
 
17803
+       PR c++/59255
 
17804
+       * g++.dg/tree-prof/pr59255.C: New test.
 
17805
+
 
17806
+2013-12-19  James Greenhalgh  <james.greenhalgh@arm.com>
 
17807
+
 
17808
+       Backport from Mainline
 
17809
+       2013-05-01  James Greenhalgh  <james.greenhalgh@arm.com>
 
17810
+
 
17811
+       * gcc.target/aarch64/scalar_intrinsics.c (force_simd): New.
 
17812
+       (test_vceqd_s64): Force arguments to SIMD registers.
 
17813
+       (test_vceqzd_s64): Likewise.
 
17814
+       (test_vcged_s64): Likewise.
 
17815
+       (test_vcled_s64): Likewise.
 
17816
+       (test_vcgezd_s64): Likewise.
 
17817
+       (test_vcged_u64): Likewise.
 
17818
+       (test_vcgtd_s64): Likewise.
 
17819
+       (test_vcltd_s64): Likewise.
 
17820
+       (test_vcgtzd_s64): Likewise.
 
17821
+       (test_vcgtd_u64): Likewise.
 
17822
+       (test_vclezd_s64): Likewise.
 
17823
+       (test_vcltzd_s64): Likewise.
 
17824
+       (test_vtst_s64): Likewise.
 
17825
+       (test_vtst_u64): Likewise.
 
17826
+
 
17827
+2013-12-19  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
17828
+           Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
17829
+
 
17830
+       Backport from mainline
 
17831
+       2013-12-19  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
17832
+       * gcc/testsuite/gcc.target/s390/hotpatch-1.c: New test
 
17833
+       * gcc/testsuite/gcc.target/s390/hotpatch-2.c: New test
 
17834
+       * gcc/testsuite/gcc.target/s390/hotpatch-3.c: New test
 
17835
+       * gcc/testsuite/gcc.target/s390/hotpatch-4.c: New test
 
17836
+       * gcc/testsuite/gcc.target/s390/hotpatch-5.c: New test
 
17837
+       * gcc/testsuite/gcc.target/s390/hotpatch-6.c: New test
 
17838
+       * gcc/testsuite/gcc.target/s390/hotpatch-7.c: New test
 
17839
+       * gcc/testsuite/gcc.target/s390/hotpatch-8.c: New test
 
17840
+       * gcc/testsuite/gcc.target/s390/hotpatch-9.c: New test
 
17841
+       * gcc/testsuite/gcc.target/s390/hotpatch-10.c: New test
 
17842
+       * gcc/testsuite/gcc.target/s390/hotpatch-11.c: New test
 
17843
+       * gcc/testsuite/gcc.target/s390/hotpatch-12.c: New test
 
17844
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c: New test
 
17845
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c: New test
 
17846
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c: New test
 
17847
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c: New test
 
17848
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c: New test
 
17849
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c: New test
 
17850
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c: New test
 
17851
+
 
17852
+2013-12-18  Janus Weil  <janus@gcc.gnu.org>
 
17853
+
 
17854
+       Backport from mainline
 
17855
+       2013-12-15  Janus Weil  <janus@gcc.gnu.org>
 
17856
+
 
17857
+       PR fortran/59493
 
17858
+       * gfortran.dg/unlimited_polymorphic_15.f90: New.
 
17859
+
 
17860
+2013-12-15  Uros Bizjak  <ubizjak@gmail.com>
 
17861
+
 
17862
+       PR testsuite/58630
 
17863
+       * gcc.target/i386/pr43662.c (dg-options):
 
17864
+       Add -maccumulate-outgoing-args.
 
17865
+       * gcc.target/i386/pr43869.c (dg-options): Ditto.
 
17866
+       * gcc.target/i386/pr57003.c (dg-options): Ditto.
 
17867
+       * gcc.target/i386/avx-vzeroupper-16.c (dg-options):
 
17868
+       Remove -mtune=generic and add -maccumulate-outgoing-args instead.
 
17869
+       * gcc.target/i386/avx-vzeroupper-17.c (dg-options): Ditto.
 
17870
+       * gcc.target/i386/avx-vzeroupper-18.c (dg-options): Ditto.
 
17871
+       * gcc.target/x86_64/abi/callabi/func-1.c (dg-options):
 
17872
+       Add -maccumulate-outgoing-args.
 
17873
+       * gcc.target/x86_64/abi/callabi/func-2a.c (dg-options): Ditto.
 
17874
+       * gcc.target/x86_64/abi/callabi/func-2b.c (dg-options): Ditto.
 
17875
+       * gcc.target/x86_64/abi/callabi/func-indirect.c (dg-options): Ditto.
 
17876
+       * gcc.target/x86_64/abi/callabi/func-indirect-2a.c (dg-options): Ditto.
 
17877
+       * gcc.target/x86_64/abi/callabi/func-indirect-2b.c (dg-options): Ditto.
 
17878
+       * gcc.target/x86_64/abi/callabi/leaf-1.c (dg-options): Ditto.
 
17879
+       * gcc.target/x86_64/abi/callabi/leaf-2.c (dg-options): Ditto.
 
17880
+       * gcc.target/x86_64/abi/callabi/pr38891.c (dg-options): Ditto.
 
17881
+       * gcc.target/x86_64/abi/callabi/vaarg-1.c (dg-options): Ditto.
 
17882
+       * gcc.target/x86_64/abi/callabi/vaarg-2.c (dg-options): Ditto.
 
17883
+       * gcc.target/x86_64/abi/callabi/vaarg-3.c (dg-options): Ditto.
 
17884
+       * gcc.target/x86_64/abi/callabi/vaarg-4a.c (dg-options): Ditto.
 
17885
+       * gcc.target/x86_64/abi/callabi/vaarg-4b.c (dg-options): Ditto.
 
17886
+       * gcc.target/x86_64/abi/callabi/vaarg-5a.c (dg-options): Ditto.
 
17887
+       * gcc.target/x86_64/abi/callabi/vaarg-5b.c (dg-options): Ditto.
 
17888
+
 
17889
+2013-12-12  Jakub Jelinek  <jakub@redhat.com>
 
17890
+
 
17891
+       PR middle-end/59470
 
17892
+       * g++.dg/opt/pr59470.C: New test.
 
17893
+
 
17894
+       PR libgomp/59467
 
17895
+       * gfortran.dg/gomp/pr59467.f90: New test.
 
17896
+       * c-c++-common/gomp/pr59467.c: New test.
 
17897
+
 
17898
+2013-12-12  Uros Bizjak  <ubizjak@gmail.com>
 
17899
+
 
17900
+       Backport from mainline
 
17901
+       2013-12-12  Ryan Mansfield  <rmansfield@qnx.com>
 
17902
+
 
17903
+       PR testsuite/59442
 
17904
+       * gcc.target/i386/sse2-movapd-1.c: Fix alignment attributes.
 
17905
+       * gcc.target/i386/sse2-movapd-2.c: Likewise.
 
17906
+       * gcc.target/i386/avx-vmovapd-256-1.c: Likewise.
 
17907
+       * gcc.target/i386/avx-vmovapd-256-2.c: Likewise.
 
17908
+
 
17909
+2013-12-08  Uros Bizjak  <ubizjak@gmail.com>
 
17910
+
 
17911
+       Backport from mainline
 
17912
+       2013-12-06  Uros Bizjak  <ubizjak@gmail.com>
 
17913
+
 
17914
+       PR target/59405
 
17915
+       * gcc.target/i386/pr59405.c: New test.
 
17916
+
 
17917
+2013-12-06  Jakub Jelinek  <jakub@redhat.com>
 
17918
+
 
17919
+       PR tree-optimization/59388
 
17920
+       * gcc.c-torture/execute/pr59388.c: New test.
 
17921
+
 
17922
+2013-12-06  Richard Biener  <rguenther@suse.de>
 
17923
+
 
17924
+       Backport from mainline
 
17925
+       2013-11-28  Richard Biener  <rguenther@suse.de>
 
17926
+
 
17927
+       PR tree-optimization/59330
 
17928
+       * gcc.dg/torture/pr59330.c: New testcase.
 
17929
+
 
17930
+2013-12-06  Richard Biener  <rguenther@suse.de>
 
17931
+
 
17932
+       Backport from mainline
 
17933
+       2013-11-27  Richard Biener  <rguenther@suse.de>
 
17934
+
 
17935
+       PR tree-optimization/59288
 
17936
+       * gcc.dg/torture/pr59288.c: New testcase.
 
17937
+
 
17938
+       2013-11-19  Richard Biener  <rguenther@suse.de>
 
17939
+
 
17940
+       PR tree-optimization/59164
 
17941
+       * gcc.dg/torture/pr59164.c: New testcase.
 
17942
+
 
17943
+       2013-09-05  Richard Biener  <rguenther@suse.de>
 
17944
+
 
17945
+       PR tree-optimization/58137
 
17946
+       * gcc.target/i386/pr58137.c: New testcase.
 
17947
+
 
17948
+2013-12-06  Oleg Endo  <olegendo@gcc.gnu.org>
 
17949
+
 
17950
+       PR target/51244
 
17951
+       PR target/59343
 
17952
+       * gcc.target/sh/pr51244-19.c: Adjust test case.
 
17953
+
 
17954
+2013-12-05  Richard Biener  <rguenther@suse.de>
 
17955
+
 
17956
+       Backport from mainline
 
17957
+       2013-11-19  Richard Biener  <rguenther@suse.de>
 
17958
+
 
17959
+       PR middle-end/58956
 
17960
+       * gcc.dg/torture/pr58956.c: New testcase.
 
17961
+
 
17962
+2013-12-04  Jakub Jelinek  <jakub@redhat.com>
 
17963
+
 
17964
+       PR c++/59268
 
17965
+       * g++.dg/cpp0x/constexpr-template6.C: New test.
 
17966
+
 
17967
+       PR rtl-optimization/58726
 
17968
+       * gcc.c-torture/execute/pr58726.c: New test.
 
17969
+
 
17970
+       PR target/59163
 
17971
+       * g++.dg/torture/pr59163.C: New test.
 
17972
+
 
17973
+2013-12-03  Marek Polacek  <polacek@redhat.com>
 
17974
+
 
17975
+       Backport from mainline
 
17976
+       2013-12-03  Marek Polacek  <polacek@redhat.com>
 
17977
+
 
17978
+       PR c/59351
 
17979
+       * gcc.dg/pr59351.c: New test.
 
17980
+
 
17981
+2013-12-03  Jakub Jelinek  <jakub@redhat.com>
 
17982
+
 
17983
+       PR middle-end/59011
 
17984
+       * gcc.dg/pr59011.c: New test.
 
17985
+
 
17986
+       PR target/58864
 
17987
+       * g++.dg/opt/pr58864.C: New test.
 
17988
+
 
17989
+2013-12-02  Jakub Jelinek  <jakub@redhat.com>
 
17990
+
 
17991
+       PR tree-optimization/59358
 
17992
+       * gcc.c-torture/execute/pr59358.c: New test.
 
17993
+
 
17994
+2013-12-02  Richard Biener  <rguenther@suse.de>
 
17995
+
 
17996
+       PR tree-optimization/59139
 
17997
+       * gcc.dg/torture/pr59139.c: New testcase.
 
17998
+
 
17999
+2013-11-27  Tom de Vries  <tom@codesourcery.com>
 
18000
+           Marc Glisse  <marc.glisse@inria.fr>
 
18001
+
 
18002
+       PR c++/59032
 
18003
+       * c-c++-common/pr59032.c: New testcase.
 
18004
+
 
18005
+2013-11-27  Tom de Vries  <tom@codesourcery.com>
 
18006
+           Marc Glisse  <marc.glisse@inria.fr>
 
18007
+
 
18008
+       PR middle-end/59037
 
18009
+       * c-c++-common/pr59037.c: New testcase.
 
18010
+
 
18011
+2013-11-30  Paul Thomas  <pault@gcc.gnu.org>
 
18012
+
 
18013
+       Backport from mainline
 
18014
+       2013-11-04  Paul Thomas  <pault@gcc.gnu.org>
 
18015
+
 
18016
+       PR fortran/57445
 
18017
+       * gfortran.dg/optional_class_1.f90 : New test
 
18018
+
 
18019
+2013-11-29  Jakub Jelinek  <jakub@redhat.com>
 
18020
+
 
18021
+       PR c/59280
 
18022
+       * c-c++-common/pr59280.c: New test.
 
18023
+
 
18024
+2013-11-28  Jakub Jelinek  <jakub@redhat.com>
 
18025
+
 
18026
+       PR c++/59297
 
18027
+       * g++.dg/gomp/pr59297.C: New test.
 
18028
+
 
18029
+2013-11-28  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
18030
+
 
18031
+       Backport from mainline
 
18032
+       2013-11-28  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
18033
+
 
18034
+       * gcc.target/arm/vrinta-ce.c: New testcase.
 
18035
+
 
18036
+2013-11-28  Uros Bizjak  <ubizjak@gmail.com>
 
18037
+
 
18038
+       Backport from mainline
 
18039
+       2013-11-23  Uros Bizjak  <ubizjak@gmail.com>
 
18040
+
 
18041
+       PR target/56788
 
18042
+       * config/i386/i386.c (bdesc_multi_arg) <IX86_BUILTIN_VFRCZSS>:
 
18043
+       Declare as MULTI_ARG_1_SF instruction.
 
18044
+       <IX86_BUILTIN_VFRCZSD>: Decleare as MULTI_ARG_1_DF instruction.
 
18045
+       * config/i386/sse.md (*xop_vmfrcz<mode>2): Rename
 
18046
+       from *xop_vmfrcz_<mode>.
 
18047
+       * config/i386/xopintrin.h (_mm_frcz_ss): Use __builtin_ia32_movss
 
18048
+       to merge scalar result with __A.
 
18049
+       (_mm_frcz_sd): Use __builtin_ia32_movsd to merge scalar
 
18050
+       result with __A.
 
18051
+
 
18052
+2013-11-28  Terry Guo  <terry.guo@arm.com>
 
18053
+
 
18054
+       Backport mainline r205391
 
18055
+       2013-11-26  Terry Guo  <terry.guo@arm.com>
 
18056
+
 
18057
+       * gcc.target/arm/thumb1-pic-high-reg.c: New case.
 
18058
+       * gcc.target/arm/thumb1-pic-single-base.c: New case.
 
18059
+
 
18060
+2013-11-27  Jakub Jelinek  <jakub@redhat.com>
 
18061
+
 
18062
+       Backported from mainline
 
18063
+       2013-11-27  Jakub Jelinek  <jakub@redhat.com>
 
18064
+
 
18065
+       PR tree-optimization/59014
 
18066
+       * gcc.c-torture/execute/pr59014-2.c: New test.
 
18067
+
 
18068
+       2013-11-26  Jakub Jelinek  <jakub@redhat.com>
 
18069
+
 
18070
+       PR tree-optimization/59014
 
18071
+       * gcc.c-torture/execute/pr59014.c: New test.
 
18072
+
 
18073
+2013-11-27  Eric Botcazou  <ebotcazou@adacore.com>
 
18074
+
 
18075
+       * gcc.c-torture/execute/20131127-1.c: New test.
 
18076
+
 
18077
+2013-11-25  Vidya Praveen  <vidyapraveen@arm.com>
 
18078
+
 
18079
+       Backport from mainline
 
18080
+       2013-10-21  Vidya Praveen  <vidyapraveen@arm.com>
 
18081
+
 
18082
+       * gcc.dg/20050922-1.c: Remove stdlib.h and declare abort().
 
18083
+       * gcc.dg/20050922-1.c: Remove stdlib.h and declare abort() and exit().
 
18084
+
 
18085
+2013-11-20  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
18086
+
 
18087
+       Backport from mainline
 
18088
+       * gcc.target/s390/htm-1.c: Rename to ...
 
18089
+       * gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c: ... this
 
18090
+       one.
 
18091
+       * gcc.target/s390/htm-xl-intrin-1.c: Rename to ...
 
18092
+       * gcc.target/s390/htm-builtins-compile-3.c: ... this one.
 
18093
+       * gcc.target/s390/htm-builtins-compile-2.c: New testcase.
 
18094
+       * gcc.target/s390/htm-builtins-1.c: New testcase.
 
18095
+       * gcc.target/s390/htm-builtins-2.c: New testcase.
 
18096
+       * gcc.target/s390/s390.exp: Add check for htm machine.
 
18097
+
 
18098
+2013-11-19  Richard Biener  <rguenther@suse.de>
 
18099
+
 
18100
+       PR tree-optimization/57517
 
18101
+       * gfortran.fortran-torture/compile/pr57517.f90: New testcase.
 
18102
+       * gcc.dg/torture/pr57517.c: Likewise.
 
18103
+
 
18104
+2013-11-19  Richard Biener  <rguenther@suse.de>
 
18105
+
 
18106
+       Backport from mainline
 
18107
+       2013-11-05  Richard Biener  <rguenther@suse.de>
 
18108
+
 
18109
+       PR middle-end/58941
 
18110
+       * gcc.dg/torture/pr58941.c: New testcase.
 
18111
+
 
18112
+2013-11-18  Richard Biener  <rguenther@suse.de>
 
18113
+
 
18114
+       Backport from mainline
 
18115
+       2013-10-21  Richard Biener  <rguenther@suse.de>
 
18116
+
 
18117
+       PR tree-optimization/58794
 
18118
+       * c-c++-common/torture/pr58794-1.c: New testcase.
 
18119
+       * c-c++-common/torture/pr58794-2.c: Likewise.
 
18120
+
 
18121
+       2013-10-21  Richard Biener  <rguenther@suse.de>
 
18122
+
 
18123
+       PR middle-end/58742
 
18124
+       * c-c++-common/fold-divmul-1.c: New testcase.
 
18125
+
 
18126
+       2013-11-06  Richard Biener  <rguenther@suse.de>
 
18127
+
 
18128
+       PR tree-optimization/58653
 
18129
+       * gcc.dg/tree-ssa/predcom-6.c: New testcase.
 
18130
+       * gcc.dg/tree-ssa/predcom-7.c: Likewise.
 
18131
+
 
18132
+       PR tree-optimization/59047
 
18133
+       * gcc.dg/torture/pr59047.c: New testcase.
 
18134
+
 
18135
+       2013-10-15  Richard Biener  <rguenther@suse.de>
 
18136
+
 
18137
+       PR tree-optimization/58143
 
18138
+       * gcc.dg/torture/pr58143-1.c: New testcase.
 
18139
+       * gcc.dg/torture/pr58143-2.c: Likewise.
 
18140
+       * gcc.dg/torture/pr58143-3.c: Likewise.
 
18141
+
 
18142
+2013-11-17  Janus Weil  <janus@gcc.gnu.org>
 
18143
+
 
18144
+       Backport from mainline
 
18145
+       2013-11-07  Janus Weil  <janus@gcc.gnu.org>
 
18146
+
 
18147
+       PR fortran/58471
 
18148
+       * gfortran.dg/constructor_9.f90: New.
 
18149
+
 
18150
+2013-11-16  Janus Weil  <janus@gcc.gnu.org>
 
18151
+
 
18152
+       Backport from mainline
 
18153
+       2013-09-20  Janus Weil  <janus@gcc.gnu.org>
 
18154
+
 
18155
+       PR fortran/58099
 
18156
+       * gfortran.dg/proc_ptr_43.f90: New.
 
18157
+
 
18158
+2013-11-16  Paul Thomas  <pault@gcc.gnu.org>
 
18159
+
 
18160
+       PR fortran/58771
 
18161
+       * gfortran.dg/derived_external_function_1.f90 : New test
 
18162
+
 
18163
+2013-11-14  Uros Bizjak  <ubizjak@gmail.com>
 
18164
+
 
18165
+       Backport from mainline
 
18166
+       2013-11-06  Uros Bizjak  <ubizjak@gmail.com>
 
18167
+
 
18168
+       PR target/59021
 
18169
+       * gcc.target/i386/pr59021.c: New test.
 
18170
+
 
18171
+2013-11-14  Jakub Jelinek  <jakub@redhat.com>
 
18172
+
 
18173
+       PR target/59101
 
18174
+       * gcc.c-torture/execute/pr59101.c: New test.
 
18175
+
 
18176
+2013-11-11  Jakub Jelinek  <jakub@redhat.com>
 
18177
+
 
18178
+       Backported from mainline
 
18179
+       2013-11-06  Jakub Jelinek  <jakub@redhat.com>
 
18180
+
 
18181
+       PR middle-end/58970
 
18182
+       * gcc.c-torture/compile/pr58970-1.c: New test.
 
18183
+       * gcc.c-torture/compile/pr58970-2.c: New test.
 
18184
+
 
18185
+       2013-11-05  Jakub Jelinek  <jakub@redhat.com>
 
18186
+
 
18187
+       PR rtl-optimization/58997
 
18188
+       * gcc.c-torture/compile/pr58997.c: New test.
 
18189
+
 
18190
+2013-11-10  Wei Mi  <wmi@google.com>
 
18191
+
 
18192
+       * gcc.dg/pr57518.c: Backport regex fix from r200720.
 
18193
+
 
18194
+2013-11-07  H.J. Lu  <hongjiu.lu@intel.com>
 
18195
+
 
18196
+       Backport from mainline
 
18197
+       2013-11-07  H.J. Lu  <hongjiu.lu@intel.com>
 
18198
+
 
18199
+       PR target/59034
 
18200
+       * gcc.target/i386/pr59034-1.c: New test.
 
18201
+       * gcc.target/i386/pr59034-2.c: Likewise.
 
18202
+
 
18203
+2013-11-06  Wei Mi  <wmi@google.com>
 
18204
+
 
18205
+       PR regression/58985
 
18206
+       * gcc.dg/pr57518.c: Add subreg in regexp pattern.
 
18207
+
 
18208
+2013-11-05  Steven G. Kargl <kargl@gcc.gnu.org>
 
18209
+
 
18210
+       PR fortran/58989
 
18211
+       * gfortran.dg/reshape_6.f90: New test.
 
18212
+
 
18213
+2013-11-05  Jakub Jelinek  <jakub@redhat.com>
 
18214
+
 
18215
+       PR tree-optimization/58984
 
18216
+       * gcc.c-torture/execute/pr58984.c: New test.
 
18217
+
 
18218
+2013-11-04  Marek Polacek  <polacek@redhat.com>
 
18219
+
 
18220
+       Backport from mainline
 
18221
+       2013-11-04  Marek Polacek  <polacek@redhat.com>
 
18222
+
 
18223
+       PR c++/58979
 
18224
+       * g++.dg/diagnostic/pr58979.C: New test.
 
18225
+
 
18226
+2013-11-03  H.J. Lu  <hongjiu.lu@intel.com>
 
18227
+
 
18228
+       Backport from mainline
 
18229
+       2013-10-12  H.J. Lu  <hongjiu.lu@intel.com>
 
18230
+
 
18231
+       PR target/58690
 
18232
+       * gcc.target/i386/pr58690.c: New test
 
18233
+
 
18234
+2013-11-02  Janus Weil  <janus@gcc.gnu.org>
 
18235
+
 
18236
+       Backport from mainline
 
18237
+       2013-09-23  Janus Weil  <janus@gcc.gnu.org>
 
18238
+
 
18239
+       PR fortran/58355
 
18240
+       * gfortran.dg/extends_15.f90: New.
 
18241
+
 
18242
+2013-10-29  Uros Bizjak  <ubizjak@gmail.com>
 
18243
+
 
18244
+       Backport from mainline
 
18245
+       2013-08-08  Richard Sandiford  <rdsandiford@googlemail.com>
 
18246
+
 
18247
+       PR rtl-optimization/58079
 
18248
+       * gcc.dg/torture/pr58079.c: New test.
 
18249
+
 
18250
+2013-10-28  Tom de Vries  <tom@codesourcery.com>
 
18251
+
 
18252
+       * gcc.target/arm/require-pic-register-loc.c: New test.
 
18253
+
 
18254
+2013-10-26  Uros Bizjak  <ubizjak@gmail.com>
 
18255
+
 
18256
+       Backport from mainline
 
18257
+       2013-10-22  Uros Bizjak  <ubizjak@gmail.com>
 
18258
+
 
18259
+       PR target/58779
 
18260
+       * gcc.target/i386/pr30315.c: Remove MINUSCC, DECCC, MINUSCCONLY
 
18261
+       and MINUSCCZEXT defines. Update scan-assembler dg directive.
 
18262
+       * gcc.dg/torture/pr58779.c: New test.
 
18263
+
 
18264
+2013-10-25  Richard Henderson  <rth@redhat.com>
 
18265
+
 
18266
+       PR rtl/58542
 
18267
+       * gcc.dg/atomic-store-6.c: New.
 
18268
+
 
18269
+2013-10-25  Tom de Vries  <tom@codesourcery.com>
 
18270
+
 
18271
+       PR c++/58282
 
18272
+       * g++.dg/tm/noexcept-6.C: New test.
 
18273
+
 
18274
+2013-10-25  Eric Botcazou  <ebotcazou@adacore.com>
 
18275
+
 
18276
+       * gcc.c-torture/execute/pr58831.c: New test.
 
18277
+
 
18278
+2013-10-23  Tom de Vries  <tom@codesourcery.com>
 
18279
+
 
18280
+       PR tree-optimization/58805
 
18281
+       * gcc.dg/pr58805.c: New test.
 
18282
+
 
18283
+2013-10-23  Richard Biener  <rguenther@suse.de>
 
18284
+
 
18285
+       * gcc.dg/torture/pr58830.c: New testcase.
 
18286
+
 
18287
+       Backport from mainline
 
18288
+       2013-06-24  Richard Biener  <rguenther@suse.de>
 
18289
+
 
18290
+       PR tree-optimization/57488
 
18291
+       * gcc.dg/torture/pr57488.c: New testcase.
 
18292
+
 
18293
+2013-10-19  Oleg Endo  <olegendo@gcc.gnu.org>
 
18294
+
 
18295
+       * gcc.target/sh/pr54089-3.c: Fix test for load of constant 31.
 
18296
+
 
18297
+2013-10-17  Paolo Carlini  <paolo.carlini@oracle.com>
 
18298
+
 
18299
+       PR c++/58596
 
18300
+       * g++.dg/cpp0x/lambda/lambda-nsdmi5.C: New
 
18301
+
 
18302
+2013-10-16  Paolo Carlini  <paolo.carlini@oracle.com>
 
18303
+
 
18304
+       PR c++/58633
 
18305
+       * g++.dg/cpp0x/decltype57.C: New.
 
18306
+       * g++.dg/cpp0x/enum18.C: Revert r174385 changes.
 
18307
+
 
18308
 2013-10-16  Release Manager
 
18309
 
 
18310
        * GCC 4.8.2 released.
 
18311
@@ -39,9 +1102,9 @@
 
18312
        Backport from mainline
 
18313
        2013-06-27  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
18314
 
 
18315
-        * gcc.target/s390/htm-1.c: New file.
 
18316
-        * gcc.target/s390/htm-nofloat-1.c: New file.
 
18317
-        * gcc.target/s390/htm-xl-intrin-1.c: New file.
 
18318
+       * gcc.target/s390/htm-1.c: New file.
 
18319
+       * gcc.target/s390/htm-nofloat-1.c: New file.
 
18320
+       * gcc.target/s390/htm-xl-intrin-1.c: New file.
 
18321
 
 
18322
 2013-10-04  Tobias Burnus  <burnus@net-b.de>
 
18323
 
 
18324
@@ -307,8 +1370,8 @@
 
18325
        Backport from mainline
 
18326
        2013-08-12  Perez Read  <netfirewall@gmail.com>
 
18327
 
 
18328
-        PR target/58132
 
18329
-        * gcc.target/i386/movabs-1.c: New test.
 
18330
+       PR target/58132
 
18331
+       * gcc.target/i386/movabs-1.c: New test.
 
18332
 
 
18333
 2013-08-11  Janus Weil  <janus@gcc.gnu.org>
 
18334
 
 
18335
@@ -494,7 +1557,7 @@
 
18336
        2013-06-19  Wei Mi  <wmi@google.com>
 
18337
 
 
18338
        PR rtl-optimization/57518
 
18339
-       * testsuite/gcc.dg/pr57518.c: New test.
 
18340
+       * gcc.dg/pr57518.c: New test.
 
18341
 
 
18342
 2013-06-11  Tobias Burnus  <burnus@net-b.de>
 
18343
 
 
18344
@@ -623,8 +1686,8 @@
 
18345
 
 
18346
 2013-05-09  Martin Jambor  <mjambor@suse.cz>
 
18347
 
 
18348
-        PR middle-end/56988
 
18349
-        * gcc.dg/ipa/pr56988.c: New test.
 
18350
+       PR middle-end/56988
 
18351
+       * gcc.dg/ipa/pr56988.c: New test.
 
18352
 
 
18353
 2013-05-08  Marc Glisse  <marc.glisse@inria.fr>
 
18354
 
 
18355
@@ -701,7 +1764,7 @@
 
18356
        2013-04-25  Marek Polacek  <polacek@redhat.com>
 
18357
 
 
18358
        PR tree-optimization/57066
 
18359
-        * gcc.dg/torture/builtin-logb-1.c: Adjust testcase.
 
18360
+       * gcc.dg/torture/builtin-logb-1.c: Adjust testcase.
 
18361
 
 
18362
 2013-05-02  Jakub Jelinek  <jakub@redhat.com>
 
18363
 
 
18364
@@ -727,8 +1790,8 @@
 
18365
        Backport from mainline
 
18366
        2013-04-24  Vladimir Makarov  <vmakarov@redhat.com>
 
18367
 
 
18368
-        PR rtl-optimizations/57046
 
18369
-        * gcc.target/i386/pr57046.c: New test.
 
18370
+       PR rtl-optimizations/57046
 
18371
+       * gcc.target/i386/pr57046.c: New test.
 
18372
 
 
18373
 2013-05-02  Vladimir Makarov  <vmakarov@redhat.com>
 
18374
 
 
18375
@@ -735,8 +1798,8 @@
 
18376
        Backport from mainline
 
18377
        2013-04-22  Vladimir Makarov  <vmakarov@redhat.com>
 
18378
 
 
18379
-        PR target/57018
 
18380
-        * gcc.target/i386/pr57018.c: New test.
 
18381
+       PR target/57018
 
18382
+       * gcc.target/i386/pr57018.c: New test.
 
18383
 
 
18384
 2013-05-02  Vladimir Makarov  <vmakarov@redhat.com>
 
18385
 
 
18386
@@ -743,8 +1806,8 @@
 
18387
        Backport from mainline
 
18388
        2013-04-18  Jakub Jelinek  <jakub@redhat.com>
 
18389
 
 
18390
-        PR rtl-optimization/56999
 
18391
-        * g++.dg/opt/pr56999.C: New test.
 
18392
+       PR rtl-optimization/56999
 
18393
+       * g++.dg/opt/pr56999.C: New test.
 
18394
 
 
18395
 2013-05-02  Vladimir Makarov  <vmakarov@redhat.com>
 
18396
 
 
18397
@@ -751,8 +1814,8 @@
 
18398
        Backport from mainline
 
18399
        2013-04-19  Vladimir Makarov  <vmakarov@redhat.com>
 
18400
 
 
18401
-        PR rtl-optimization/56847
 
18402
-        * gcc.dg/pr56847.c: New test.
 
18403
+       PR rtl-optimization/56847
 
18404
+       * gcc.dg/pr56847.c: New test.
 
18405
 
 
18406
 2013-05-02  Ian Bolton  <ian.bolton@arm.com>
 
18407
 
 
18408
@@ -1102,7 +2165,7 @@
 
18409
        2013-03-29  Tobias Burnus  <burnus@net-b.de>
 
18410
 
 
18411
        PR fortran/56737
 
18412
-       * testsuite/gfortran.dg/fmt_cache_3.f90: New.
 
18413
+       * gfortran.dg/fmt_cache_3.f90: New.
 
18414
 
 
18415
 2013-04-02  Richard Biener  <rguenther@suse.de>
 
18416
 
 
18417
@@ -1636,7 +2699,7 @@
 
18418
 2013-02-20  Jan Hubicka  <jh@suse.cz>
 
18419
 
 
18420
        PR tree-optimization/56265
 
18421
-       * testsuite/g++.dg/ipa/devirt-11.C: New testcase.
 
18422
+       * g++.dg/ipa/devirt-11.C: New testcase.
 
18423
 
 
18424
 2013-02-20  Richard Biener  <rguenther@suse.de>
 
18425
 
 
18426
@@ -1823,11 +2886,9 @@
 
18427
 
 
18428
        Avoid instrumenting duplicated memory access in the same basic block
 
18429
        * c-c++-common/asan/no-redundant-instrumentation-1.c: New test.
 
18430
-       * testsuite/c-c++-common/asan/no-redundant-instrumentation-2.c:
 
18431
-       Likewise.
 
18432
-       * testsuite/c-c++-common/asan/no-redundant-instrumentation-3.c:
 
18433
-       Likewise.
 
18434
-       * testsuite/c-c++-common/asan/inc.c: Likewise.
 
18435
+       * c-c++-common/asan/no-redundant-instrumentation-2.c: Likewise.
 
18436
+       * c-c++-common/asan/no-redundant-instrumentation-3.c: Likewise.
 
18437
+       * c-c++-common/asan/inc.c: Likewise.
 
18438
 
 
18439
 2013-02-12  Vladimir Makarov  <vmakarov@redhat.com>
 
18440
 
 
18441
Index: gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90
 
18442
===================================================================
 
18443
--- a/src/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90    (.../tags/gcc_4_8_2_release)
 
18444
+++ b/src/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90    (.../branches/gcc-4_8-branch)
 
18445
@@ -0,0 +1,13 @@
 
18446
+SUBROUTINE cal_helicity (uh, ph, phb, wavg, ims, ime, its, ite)
 
18447
+  INTEGER, INTENT( IN ) :: ims, ime, its, ite
 
18448
+  REAL, DIMENSION( ims:ime), INTENT( IN ) :: ph, phb, wavg
 
18449
+  REAL, DIMENSION( ims:ime), INTENT( INOUT ) :: uh
 
18450
+  INTEGER :: i
 
18451
+  REAL :: zu
 
18452
+  DO i = its, ite
 
18453
+    zu =  (ph(i ) + phb(i)) + (ph(i-1) + phb(i-1))
 
18454
+    IF (wavg(i) .GT. 0) THEN
 
18455
+      uh(i) = uh(i) + zu 
 
18456
+    ENDIF
 
18457
+  END DO
 
18458
+END SUBROUTINE cal_helicity
 
18459
Index: gcc/testsuite/g++.dg/ext/attribute-test-2.C
 
18460
===================================================================
 
18461
--- a/src/gcc/testsuite/g++.dg/ext/attribute-test-2.C   (.../tags/gcc_4_8_2_release)
 
18462
+++ b/src/gcc/testsuite/g++.dg/ext/attribute-test-2.C   (.../branches/gcc-4_8-branch)
 
18463
@@ -50,3 +50,4 @@
 
18464
 
 
18465
 /* Ignore a warning that is irrelevant to the purpose of this test.  */
 
18466
 /* { dg-prune-output ".*GCC vector returned by reference.*" } */
 
18467
+/* { dg-prune-output "changes the ABI" } */
 
18468
Index: gcc/testsuite/g++.dg/ext/attribute-test-3.C
 
18469
===================================================================
 
18470
--- a/src/gcc/testsuite/g++.dg/ext/attribute-test-3.C   (.../tags/gcc_4_8_2_release)
 
18471
+++ b/src/gcc/testsuite/g++.dg/ext/attribute-test-3.C   (.../branches/gcc-4_8-branch)
 
18472
@@ -52,3 +52,4 @@
 
18473
 
 
18474
 /* Ignore a warning that is irrelevant to the purpose of this test.  */
 
18475
 /* { dg-prune-output ".*GCC vector returned by reference.*" } */
 
18476
+/* { dg-prune-output "changes the ABI" } */
 
18477
Index: gcc/testsuite/g++.dg/ext/traits1.C
 
18478
===================================================================
 
18479
--- a/src/gcc/testsuite/g++.dg/ext/traits1.C    (.../tags/gcc_4_8_2_release)
 
18480
+++ b/src/gcc/testsuite/g++.dg/ext/traits1.C    (.../branches/gcc-4_8-branch)
 
18481
@@ -0,0 +1,4 @@
 
18482
+// PR c++/58504
 
18483
+
 
18484
+template<bool = __has_nothrow_assign(void)> struct A {};
 
18485
+A<> a;
 
18486
Index: gcc/testsuite/g++.dg/ext/attribute-test-4.C
 
18487
===================================================================
 
18488
--- a/src/gcc/testsuite/g++.dg/ext/attribute-test-4.C   (.../tags/gcc_4_8_2_release)
 
18489
+++ b/src/gcc/testsuite/g++.dg/ext/attribute-test-4.C   (.../branches/gcc-4_8-branch)
 
18490
@@ -49,3 +49,4 @@
 
18491
 
 
18492
 /* Ignore a warning that is irrelevant to the purpose of this test.  */
 
18493
 /* { dg-prune-output ".*GCC vector returned by reference.*" } */
 
18494
+/* { dg-prune-output "changes the ABI" } */
 
18495
Index: gcc/testsuite/g++.dg/ext/stmtexpr15.C
 
18496
===================================================================
 
18497
--- a/src/gcc/testsuite/g++.dg/ext/stmtexpr15.C (.../tags/gcc_4_8_2_release)
 
18498
+++ b/src/gcc/testsuite/g++.dg/ext/stmtexpr15.C (.../branches/gcc-4_8-branch)
 
18499
@@ -0,0 +1,7 @@
 
18500
+// PR c++/59097
 
18501
+// { dg-options "" }
 
18502
+
 
18503
+void foo()
 
18504
+{
 
18505
+  int x[({ return; })];                // { dg-error "non-integral" }
 
18506
+}
 
18507
Index: gcc/testsuite/g++.dg/ext/vector25.C
 
18508
===================================================================
 
18509
--- a/src/gcc/testsuite/g++.dg/ext/vector25.C   (.../tags/gcc_4_8_2_release)
 
18510
+++ b/src/gcc/testsuite/g++.dg/ext/vector25.C   (.../branches/gcc-4_8-branch)
 
18511
@@ -0,0 +1,6 @@
 
18512
+volatile int i __attribute__((vector_size(8)));
 
18513
+
 
18514
+void foo()
 
18515
+{
 
18516
+  i += i;
 
18517
+}
 
18518
Index: gcc/testsuite/g++.dg/ext/builtin-bswap1.C
 
18519
===================================================================
 
18520
--- a/src/gcc/testsuite/g++.dg/ext/builtin-bswap1.C     (.../tags/gcc_4_8_2_release)
 
18521
+++ b/src/gcc/testsuite/g++.dg/ext/builtin-bswap1.C     (.../branches/gcc-4_8-branch)
 
18522
@@ -0,0 +1,22 @@
 
18523
+// PR c/37743
 
18524
+// { dg-do compile }
 
18525
+
 
18526
+#if defined(__UINT32_TYPE__) && defined(__INT32_TYPE__)
 
18527
+
 
18528
+void foo (__UINT32_TYPE__);
 
18529
+void foo (__INT32_TYPE__);
 
18530
+
 
18531
+void
 
18532
+bar (__UINT32_TYPE__ x)
 
18533
+{
 
18534
+  foo (__builtin_bswap32 (x));
 
18535
+}
 
18536
+
 
18537
+#else
 
18538
+
 
18539
+void
 
18540
+bar ()
 
18541
+{
 
18542
+}
 
18543
+
 
18544
+#endif
 
18545
Index: gcc/testsuite/g++.dg/ext/attrib48.C
 
18546
===================================================================
 
18547
--- a/src/gcc/testsuite/g++.dg/ext/attrib48.C   (.../tags/gcc_4_8_2_release)
 
18548
+++ b/src/gcc/testsuite/g++.dg/ext/attrib48.C   (.../branches/gcc-4_8-branch)
 
18549
@@ -0,0 +1,6 @@
 
18550
+// PR c++/54652
 
18551
+
 
18552
+typedef unsigned L __attribute__ ((aligned));
 
18553
+typedef unsigned L __attribute__ ((aligned));
 
18554
+
 
18555
+L l;
 
18556
Index: gcc/testsuite/g++.dg/ext/vector27.C
 
18557
===================================================================
 
18558
--- a/src/gcc/testsuite/g++.dg/ext/vector27.C   (.../tags/gcc_4_8_2_release)
 
18559
+++ b/src/gcc/testsuite/g++.dg/ext/vector27.C   (.../branches/gcc-4_8-branch)
 
18560
@@ -0,0 +1,7 @@
 
18561
+// PR c++/58845
 
18562
+
 
18563
+void foo()
 
18564
+{
 
18565
+  int v __attribute__((vector_size(8)));
 
18566
+  v = v || v;                  // { dg-bogus "" "" { xfail *-*-* } }
 
18567
+}
 
18568
Index: gcc/testsuite/g++.dg/ext/timevar2.C
 
18569
===================================================================
 
18570
--- a/src/gcc/testsuite/g++.dg/ext/timevar2.C   (.../tags/gcc_4_8_2_release)
 
18571
+++ b/src/gcc/testsuite/g++.dg/ext/timevar2.C   (.../branches/gcc-4_8-branch)
 
18572
@@ -0,0 +1,14 @@
 
18573
+// PR c++/57524
 
18574
+// { dg-options "-ftime-report" }
 
18575
+// { dg-prune-output "wall" }
 
18576
+// { dg-prune-output "times" }
 
18577
+// { dg-prune-output "TOTAL" }
 
18578
+// { dg-prune-output "checks" }
 
18579
+
 
18580
+namespace detail {
 
18581
+namespace indirect_traits {}
 
18582
+using namespace indirect_traits;
 
18583
+void fn1() {
 
18584
+using namespace detail;
 
18585
+}
 
18586
+}
 
18587
Index: gcc/testsuite/g++.dg/ext/attribute-test-1.C
 
18588
===================================================================
 
18589
--- a/src/gcc/testsuite/g++.dg/ext/attribute-test-1.C   (.../tags/gcc_4_8_2_release)
 
18590
+++ b/src/gcc/testsuite/g++.dg/ext/attribute-test-1.C   (.../branches/gcc-4_8-branch)
 
18591
@@ -36,3 +36,4 @@
 
18592
 
 
18593
 /* Ignore a warning that is irrelevant to the purpose of this test.  */
 
18594
 /* { dg-prune-output ".*GCC vector returned by reference.*" } */
 
18595
+/* { dg-prune-output "changes the ABI" } */
 
18596
Index: gcc/testsuite/g++.dg/opt/pr59647.C
 
18597
===================================================================
 
18598
--- a/src/gcc/testsuite/g++.dg/opt/pr59647.C    (.../tags/gcc_4_8_2_release)
 
18599
+++ b/src/gcc/testsuite/g++.dg/opt/pr59647.C    (.../branches/gcc-4_8-branch)
 
18600
@@ -0,0 +1,32 @@
 
18601
+// PR rtl-optimization/59647
 
18602
+// { dg-do compile }
 
18603
+// { dg-options "-O2 -fno-tree-vrp" }
 
18604
+// { dg-additional-options "-msse2 -mfpmath=sse" { target { { i?86-*-* x86_64-*-* } && ia32 } } }
 
18605
+
 
18606
+void f1 (int);
 
18607
+void f2 ();
 
18608
+double f3 (int);
 
18609
+
 
18610
+struct A
 
18611
+{
 
18612
+  int f4 () const
 
18613
+  {
 
18614
+    if (a == 0)
 
18615
+      return 1;
 
18616
+    return 0;
 
18617
+  }
 
18618
+  unsigned f5 ()
 
18619
+  {
 
18620
+    if (!f4 ())
 
18621
+      f2 ();
 
18622
+    return a;
 
18623
+  }
 
18624
+  int a;
 
18625
+};
 
18626
+
 
18627
+void
 
18628
+f6 (A *x)
 
18629
+{
 
18630
+  unsigned b = x->f5 ();
 
18631
+  f1 (b - 1 - f3 (x->f5 () - 1U));
 
18632
+}
 
18633
Index: gcc/testsuite/g++.dg/opt/pr59470.C
 
18634
===================================================================
 
18635
--- a/src/gcc/testsuite/g++.dg/opt/pr59470.C    (.../tags/gcc_4_8_2_release)
 
18636
+++ b/src/gcc/testsuite/g++.dg/opt/pr59470.C    (.../branches/gcc-4_8-branch)
 
18637
@@ -0,0 +1,188 @@
 
18638
+// PR middle-end/59470
 
18639
+// { dg-do run }
 
18640
+// { dg-options "-O2 -fstack-protector" }
 
18641
+// { dg-additional-options "-fPIC" { target fpic } }
 
18642
+// { dg-require-effective-target fstack_protector }
 
18643
+
 
18644
+struct A
 
18645
+{
 
18646
+  int a1;
 
18647
+  A () throw () : a1 (0) {}
 
18648
+};
 
18649
+
 
18650
+struct B
 
18651
+{
 
18652
+  unsigned int b1 () throw ();
 
18653
+};
 
18654
+
 
18655
+__attribute__((noinline, noclone)) unsigned int
 
18656
+B::b1 () throw ()
 
18657
+{
 
18658
+  asm volatile ("" : : : "memory");
 
18659
+  return 0;
 
18660
+}
 
18661
+
 
18662
+struct C
 
18663
+{
 
18664
+  const A **c1;
 
18665
+  void c2 (const A *, unsigned int);
 
18666
+};
 
18667
+
 
18668
+__attribute__((noinline, noclone)) void
 
18669
+C::c2 (const A *, unsigned int)
 
18670
+{
 
18671
+  asm volatile ("" : : : "memory");
 
18672
+}
 
18673
+
 
18674
+struct D
 
18675
+{
 
18676
+  C *d1;
 
18677
+};
 
18678
+
 
18679
+struct E
 
18680
+{
 
18681
+  int e1;
 
18682
+  int e2;
 
18683
+  D e3;
 
18684
+};
 
18685
+
 
18686
+struct F
 
18687
+{
 
18688
+  virtual int f1 (const char * s, int n);
 
18689
+};
 
18690
+
 
18691
+struct G
 
18692
+{
 
18693
+  F *g1;
 
18694
+  bool g2;
 
18695
+  G & g3 (const char * ws, int len)
 
18696
+  {
 
18697
+    if (__builtin_expect (!g2, true)
 
18698
+       && __builtin_expect (this->g1->f1 (ws, len) != len, false))
 
18699
+      g2 = true;
 
18700
+    return *this;
 
18701
+  }
 
18702
+};
 
18703
+
 
18704
+struct H : public A
 
18705
+{
 
18706
+  const char *h1;
 
18707
+  unsigned int h2;
 
18708
+  bool h3;
 
18709
+  const char *h4;
 
18710
+  char h5;
 
18711
+  char h6;
 
18712
+  char h7[31];
 
18713
+  bool h8;
 
18714
+  H () : h1 (0), h2 (0), h4 (0), h5 (0), h6 (0), h8 (false) {}
 
18715
+  void h9 (const D &) __attribute__((noinline, noclone));
 
18716
+};
 
18717
+
 
18718
+void
 
18719
+H::h9 (const D &)
 
18720
+{
 
18721
+  h3 = true;
 
18722
+  __builtin_memset (h7, 0, sizeof (h7));
 
18723
+  asm volatile ("" : : : "memory");
 
18724
+};
 
18725
+
 
18726
+B b;
 
18727
+
 
18728
+inline const H *
 
18729
+foo (const D &x)
 
18730
+{
 
18731
+  const unsigned int i = b.b1 ();
 
18732
+  const A **j = x.d1->c1;
 
18733
+  if (!j[i])
 
18734
+    {
 
18735
+      H *k = 0;
 
18736
+      try
 
18737
+       {
 
18738
+         k = new H;
 
18739
+         k->h9 (x);
 
18740
+       }
 
18741
+      catch (...)
 
18742
+       {
 
18743
+       }
 
18744
+      x.d1->c2 (k, i);
 
18745
+    }
 
18746
+    return static_cast <const H *>(j[i]);
 
18747
+}
 
18748
+
 
18749
+__attribute__((noinline, noclone)) int
 
18750
+bar (char *x, unsigned long v, const char *y, int z, bool w)
 
18751
+{
 
18752
+  asm volatile ("" : : "r" (x), "r" (v), "r" (y) : "memory");
 
18753
+  asm volatile ("" : : "r" (z), "r" (w) : "memory");
 
18754
+  return 8;
 
18755
+}
 
18756
+
 
18757
+__attribute__((noinline, noclone)) void
 
18758
+baz (void *z, const char *g, unsigned int h, char s, E &e, char *n, char *c, int &l)
 
18759
+{
 
18760
+  asm volatile ("" : : "r" (z), "r" (g), "r" (h) : "memory");
 
18761
+  asm volatile ("" : : "r" (s), "r" (&e), "r" (n) : "memory");
 
18762
+  asm volatile ("" : : "r" (c), "r" (&l) : "memory");
 
18763
+  if (n == c)
 
18764
+    __builtin_abort ();
 
18765
+  int i = 0;
 
18766
+  asm ("" : "+r" (i));
 
18767
+  if (i == 0)
 
18768
+    __builtin_exit (0);
 
18769
+}
 
18770
+
 
18771
+__attribute__((noinline, noclone)) G
 
18772
+test (void *z, G s, E &x, char, long v)
 
18773
+{
 
18774
+  const D &d = x.e3;
 
18775
+  const H *h = foo (d);
 
18776
+  const char *q = h->h7;
 
18777
+  const int f = x.e2;
 
18778
+  const int i = 5 * sizeof (long);
 
18779
+  char *c = static_cast <char *>(__builtin_alloca (i));
 
18780
+  const int b = f & 74;
 
18781
+  const bool e = (b != 64 && b != 8);
 
18782
+  const unsigned long u = ((v > 0 || !e) ? (unsigned long) v : -(unsigned long) v);
 
18783
+  int l = bar (c + i, u, q, f, e);
 
18784
+  c += i - l;
 
18785
+  if (h->h3)
 
18786
+    {
 
18787
+      char *c2 = static_cast <char *>(__builtin_alloca ((l + 1) * 2));
 
18788
+      baz (z, h->h1, h->h2, h->h6, x, c2 + 2, c, l);
 
18789
+      c = c2 + 2;
 
18790
+    }
 
18791
+  if (__builtin_expect (e, true))
 
18792
+    {
 
18793
+    }
 
18794
+  else if ((f & 4096) && v)
 
18795
+    {
 
18796
+      {
 
18797
+       const bool m = f & 176;
 
18798
+       *--c = q[m];
 
18799
+       *--c = q[1];
 
18800
+      }
 
18801
+    }
 
18802
+  const int w = x.e1;
 
18803
+  if (w > l)
 
18804
+    {
 
18805
+      char * c3 = static_cast <char *>(__builtin_alloca (w));
 
18806
+      c = c3;
 
18807
+    }
 
18808
+  return s.g3 (c, l);
 
18809
+}
 
18810
+
 
18811
+int
 
18812
+main ()
 
18813
+{
 
18814
+  H h;
 
18815
+  const A *j[1];
 
18816
+  C c;
 
18817
+  G g;
 
18818
+  E e;
 
18819
+  h.h9 (e.e3);
 
18820
+  j[0] = &h;
 
18821
+  c.c1 = j;
 
18822
+  e.e3.d1 = &c;
 
18823
+  test (0, g, e, 0, 0);
 
18824
+  __builtin_abort ();
 
18825
+}
 
18826
Index: gcc/testsuite/g++.dg/opt/pr58864.C
 
18827
===================================================================
 
18828
--- a/src/gcc/testsuite/g++.dg/opt/pr58864.C    (.../tags/gcc_4_8_2_release)
 
18829
+++ b/src/gcc/testsuite/g++.dg/opt/pr58864.C    (.../branches/gcc-4_8-branch)
 
18830
@@ -0,0 +1,21 @@
 
18831
+// PR target/58864
 
18832
+// { dg-do compile }
 
18833
+// { dg-options "-Os" }
 
18834
+// { dg-additional-options "-march=i686" { target { { i?86-*-* x86_64-*-* } && ia32 } } }
 
18835
+
 
18836
+struct A { A (); ~A (); };
 
18837
+struct B { B (); };
 
18838
+
 
18839
+float d, e;
 
18840
+
 
18841
+void
 
18842
+foo ()
 
18843
+{
 
18844
+  A a;
 
18845
+  float c = d;
 
18846
+  while (1)
 
18847
+    {
 
18848
+      B b;
 
18849
+      e = c ? -c : 0;
 
18850
+    }
 
18851
+}
 
18852
Index: gcc/testsuite/g++.dg/tree-prof/pr59255.C
 
18853
===================================================================
 
18854
--- a/src/gcc/testsuite/g++.dg/tree-prof/pr59255.C      (.../tags/gcc_4_8_2_release)
 
18855
+++ b/src/gcc/testsuite/g++.dg/tree-prof/pr59255.C      (.../branches/gcc-4_8-branch)
 
18856
@@ -0,0 +1,29 @@
 
18857
+// PR c++/59255
 
18858
+// { dg-options "-O2 -std=c++11" }
 
18859
+
 
18860
+struct S
 
18861
+{
 
18862
+  __attribute__((noinline, noclone)) ~S () noexcept (true)
 
18863
+  {
 
18864
+    if (fn)
 
18865
+      fn (1);
 
18866
+  }
 
18867
+  void (*fn) (int);
 
18868
+};
 
18869
+
 
18870
+__attribute__((noinline, noclone)) void
 
18871
+foo (int x)
 
18872
+{
 
18873
+  if (x != 1)
 
18874
+    throw 1;
 
18875
+}
 
18876
+
 
18877
+int
 
18878
+main ()
 
18879
+{
 
18880
+  for (int i = 0; i < 100; i++)
 
18881
+    {
 
18882
+      S s;
 
18883
+      s.fn = foo;
 
18884
+    }
 
18885
+}
 
18886
Index: gcc/testsuite/g++.dg/gomp/for-20.C
 
18887
===================================================================
 
18888
--- a/src/gcc/testsuite/g++.dg/gomp/for-20.C    (.../tags/gcc_4_8_2_release)
 
18889
+++ b/src/gcc/testsuite/g++.dg/gomp/for-20.C    (.../branches/gcc-4_8-branch)
 
18890
@@ -0,0 +1,16 @@
 
18891
+// PR c++/60146
 
18892
+// { dg-do compile }
 
18893
+// { dg-options -fopenmp }
 
18894
+
 
18895
+int foo() { return 0; }
 
18896
+
 
18897
+template<typename T> void bar()
 
18898
+{
 
18899
+#pragma omp parallel for
 
18900
+  for (T i = foo(); i < 8; ++i) {}
 
18901
+}
 
18902
+
 
18903
+void baz()
 
18904
+{
 
18905
+  bar<int>();
 
18906
+}
 
18907
Index: gcc/testsuite/g++.dg/gomp/pr59297.C
 
18908
===================================================================
 
18909
--- a/src/gcc/testsuite/g++.dg/gomp/pr59297.C   (.../tags/gcc_4_8_2_release)
 
18910
+++ b/src/gcc/testsuite/g++.dg/gomp/pr59297.C   (.../branches/gcc-4_8-branch)
 
18911
@@ -0,0 +1,25 @@
 
18912
+// PR c++/59297
 
18913
+// { dg-do compile }
 
18914
+// { dg-options "-fopenmp" }
 
18915
+
 
18916
+template <typename T>
 
18917
+struct A
 
18918
+{
 
18919
+  ~A ();
 
18920
+  const T &operator[] (int) const;
 
18921
+};
 
18922
+
 
18923
+struct B
 
18924
+{
 
18925
+  int &operator () (A <int>);
 
18926
+};
 
18927
+
 
18928
+void
 
18929
+foo (B &x, int &z)
 
18930
+{
 
18931
+  A<A<int> > y;
 
18932
+  #pragma omp atomic
 
18933
+  x (y[0]) += 1;
 
18934
+  #pragma omp atomic
 
18935
+  z += x(y[1]);
 
18936
+}
 
18937
Index: gcc/testsuite/g++.dg/diagnostic/pr59838.C
 
18938
===================================================================
 
18939
--- a/src/gcc/testsuite/g++.dg/diagnostic/pr59838.C     (.../tags/gcc_4_8_2_release)
 
18940
+++ b/src/gcc/testsuite/g++.dg/diagnostic/pr59838.C     (.../branches/gcc-4_8-branch)
 
18941
@@ -0,0 +1,4 @@
 
18942
+// PR c++/59838
 
18943
+// { dg-do compile }
 
18944
+
 
18945
+enum E { a, b = (E) a }; // { dg-error "conversion to incomplete type" }
 
18946
Index: gcc/testsuite/g++.dg/diagnostic/pr58979.C
 
18947
===================================================================
 
18948
--- a/src/gcc/testsuite/g++.dg/diagnostic/pr58979.C     (.../tags/gcc_4_8_2_release)
 
18949
+++ b/src/gcc/testsuite/g++.dg/diagnostic/pr58979.C     (.../branches/gcc-4_8-branch)
 
18950
@@ -0,0 +1,4 @@
 
18951
+// PR c++/58979
 
18952
+// { dg-do compile }
 
18953
+
 
18954
+int i = 0->*0; // { dg-error "invalid type argument of" }
 
18955
Index: gcc/testsuite/g++.dg/conversion/simd1.C
 
18956
===================================================================
 
18957
--- a/src/gcc/testsuite/g++.dg/conversion/simd1.C       (.../tags/gcc_4_8_2_release)
 
18958
+++ b/src/gcc/testsuite/g++.dg/conversion/simd1.C       (.../branches/gcc-4_8-branch)
 
18959
@@ -1,4 +1,5 @@
 
18960
 /* { dg-do compile } */
 
18961
+/* { dg-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
 
18962
 
 
18963
 /* Test overload resolution of vector types.
 
18964
    From Janis Johnson and Paolo Bonzini, based on PR/16882 */
 
18965
@@ -17,7 +18,7 @@
 
18966
 void foo ()
 
18967
 {
 
18968
   vss = vld(i, vscp);        /* { dg-error "no matching function for call" } */
 
18969
-  // { dg-message "candidate" "candidate note" { target *-*-* } 19 }
 
18970
+  // { dg-message "candidate" "candidate note" { target *-*-* } 20 }
 
18971
   vss = vld(i, vssp);
 
18972
   vss = vld(i, cvssp);
 
18973
 }
 
18974
Index: gcc/testsuite/g++.dg/tls/thread_local8.C
 
18975
===================================================================
 
18976
--- a/src/gcc/testsuite/g++.dg/tls/thread_local8.C      (.../tags/gcc_4_8_2_release)
 
18977
+++ b/src/gcc/testsuite/g++.dg/tls/thread_local8.C      (.../branches/gcc-4_8-branch)
 
18978
@@ -0,0 +1,12 @@
 
18979
+// PR c++/55800
 
18980
+// { dg-options "-std=c++11" }
 
18981
+// { dg-require-alias "" }
 
18982
+// { dg-require-effective-target tls }
 
18983
+// { dg-final { scan-assembler "_ZTH12foo_instance" { target tls_native } } }
 
18984
+
 
18985
+struct foo
 
18986
+{
 
18987
+  foo();
 
18988
+};
 
18989
+
 
18990
+thread_local foo foo_instance;
 
18991
Index: gcc/testsuite/g++.dg/tls/thread_local-ice2.C
 
18992
===================================================================
 
18993
--- a/src/gcc/testsuite/g++.dg/tls/thread_local-ice2.C  (.../tags/gcc_4_8_2_release)
 
18994
+++ b/src/gcc/testsuite/g++.dg/tls/thread_local-ice2.C  (.../branches/gcc-4_8-branch)
 
18995
@@ -0,0 +1,11 @@
 
18996
+// PR c++/58672
 
18997
+// { dg-options "-std=c++11" }
 
18998
+// { dg-require-effective-target tls }
 
18999
+
 
19000
+struct A
 
19001
+{
 
19002
+  A(int);
 
19003
+  i;                           // { dg-error "" }
 
19004
+};
 
19005
+
 
19006
+thread_local A a(0);
 
19007
Index: gcc/testsuite/g++.dg/tm/pr60004.C
 
19008
===================================================================
 
19009
--- a/src/gcc/testsuite/g++.dg/tm/pr60004.C     (.../tags/gcc_4_8_2_release)
 
19010
+++ b/src/gcc/testsuite/g++.dg/tm/pr60004.C     (.../branches/gcc-4_8-branch)
 
19011
@@ -0,0 +1,10 @@
 
19012
+// { dg-do compile }
 
19013
+// { dg-options "-fgnu-tm" }
 
19014
+
 
19015
+int a;
 
19016
+int f() {
 
19017
+    __transaction_atomic {
 
19018
+        if (a == 5)
 
19019
+            return 1;
 
19020
+    }
 
19021
+}
 
19022
Index: gcc/testsuite/g++.dg/tm/noexcept-6.C
 
19023
===================================================================
 
19024
--- a/src/gcc/testsuite/g++.dg/tm/noexcept-6.C  (.../tags/gcc_4_8_2_release)
 
19025
+++ b/src/gcc/testsuite/g++.dg/tm/noexcept-6.C  (.../branches/gcc-4_8-branch)
 
19026
@@ -0,0 +1,23 @@
 
19027
+// { dg-do compile }
 
19028
+// { dg-options "-fno-exceptions -fgnu-tm -O -std=c++0x -fdump-tree-tmlower" }
 
19029
+
 
19030
+struct TrueFalse
 
19031
+{
 
19032
+  static constexpr bool v() { return true; }
 
19033
+};
 
19034
+
 
19035
+int global;
 
19036
+
 
19037
+template<typename T> int foo()
 
19038
+{
 
19039
+  return __transaction_atomic noexcept(T::v()) (global + 1);
 
19040
+}
 
19041
+
 
19042
+int f1()
 
19043
+{
 
19044
+  return foo<TrueFalse>();
 
19045
+}
 
19046
+
 
19047
+/* { dg-final { scan-tree-dump-times "eh_must_not_throw" 0 "tmlower" } } */
 
19048
+/* { dg-final { scan-tree-dump-times "__transaction_atomic" 1 "tmlower" } } */
 
19049
+/* { dg-final { cleanup-tree-dump "tmlower" } } */
 
19050
Index: gcc/testsuite/g++.dg/pr59695.C
 
19051
===================================================================
 
19052
--- a/src/gcc/testsuite/g++.dg/pr59695.C        (.../tags/gcc_4_8_2_release)
 
19053
+++ b/src/gcc/testsuite/g++.dg/pr59695.C        (.../branches/gcc-4_8-branch)
 
19054
@@ -0,0 +1,125 @@
 
19055
+
 
19056
+/* PR target/59695 */
 
19057
+/* { dg-do run } */
 
19058
+/* { dg-options "-O0" } */
 
19059
+
 
19060
+#define  DEFINE_VIRTUALS_FNS(i)        virtual void  xxx##i () {} \
 
19061
+  virtual void  foo1_##i ()    {}\
 
19062
+  virtual void  foo2_##i ()    {}\
 
19063
+  virtual void  foo3_##i ()    {}\
 
19064
+  virtual void  foo4_##i ()    {}\
 
19065
+  virtual void  foo5_##i ()    {}\
 
19066
+  virtual void  foo6_##i ()    {}\
 
19067
+  virtual void  foo7_##i ()    {}\
 
19068
+  virtual void  foo8_##i ()    {}\
 
19069
+  virtual void  foo9_##i ()    {}\
 
19070
+  virtual void  foo10_##i ()   {}\
 
19071
+  virtual void  foo11_##i ()   {}\
 
19072
+  virtual void  foo12_##i ()   {}\
 
19073
+  virtual void  foo13_##i ()   {}\
 
19074
+  virtual void  foo14_##i ()   {}\
 
19075
+  virtual void  foo15_##i ()   {}\
 
19076
+  virtual void  foo16_##i ()   {}\
 
19077
+  virtual void  foo17_##i ()   {}\
 
19078
+  virtual void  foo18_##i ()   {}\
 
19079
+  virtual void  foo19_##i ()   {}\
 
19080
+  virtual void  foo20_##i ()   {}\
 
19081
+  virtual void  foo21_##i ()   {}\
 
19082
+  virtual void  foo22_##i ()   {}\
 
19083
+
 
19084
+class base_class_2
 
19085
+{
 
19086
+
 
19087
+public:
 
19088
+  /* Define lots of virtual functions */
 
19089
+  DEFINE_VIRTUALS_FNS (1)
 
19090
+  DEFINE_VIRTUALS_FNS (2)
 
19091
+  DEFINE_VIRTUALS_FNS (3)
 
19092
+  DEFINE_VIRTUALS_FNS (4)
 
19093
+  DEFINE_VIRTUALS_FNS (5)
 
19094
+  DEFINE_VIRTUALS_FNS (6)
 
19095
+  DEFINE_VIRTUALS_FNS (7)
 
19096
+  DEFINE_VIRTUALS_FNS (8)
 
19097
+  DEFINE_VIRTUALS_FNS (9)
 
19098
+  DEFINE_VIRTUALS_FNS (10)
 
19099
+  DEFINE_VIRTUALS_FNS (11)
 
19100
+  DEFINE_VIRTUALS_FNS (12)
 
19101
+  DEFINE_VIRTUALS_FNS (13)
 
19102
+  DEFINE_VIRTUALS_FNS (14)
 
19103
+  DEFINE_VIRTUALS_FNS (15)
 
19104
+  DEFINE_VIRTUALS_FNS (16)
 
19105
+  DEFINE_VIRTUALS_FNS (17)
 
19106
+  DEFINE_VIRTUALS_FNS (18)
 
19107
+  DEFINE_VIRTUALS_FNS (19)
 
19108
+  DEFINE_VIRTUALS_FNS (20)
 
19109
+
 
19110
+  base_class_2();
 
19111
+  virtual ~base_class_2 ();
 
19112
+};
 
19113
+
 
19114
+base_class_2::base_class_2()
 
19115
+{
 
19116
+}
 
19117
+
 
19118
+base_class_2::~base_class_2 ()
 
19119
+{
 
19120
+}
 
19121
+
 
19122
+class base_class_1
 
19123
+{
 
19124
+public:
 
19125
+  virtual ~base_class_1();
 
19126
+  base_class_1();
 
19127
+};
 
19128
+
 
19129
+base_class_1::base_class_1()
 
19130
+{
 
19131
+}
 
19132
+
 
19133
+base_class_1::~base_class_1()
 
19134
+{
 
19135
+}
 
19136
+
 
19137
+class base_Impl_class :
 
19138
+  virtual public base_class_2, public base_class_1
 
19139
+{
 
19140
+public:
 
19141
+  base_Impl_class ();
 
19142
+  virtual ~base_Impl_class ();
 
19143
+};
 
19144
+
 
19145
+base_Impl_class::base_Impl_class ()
 
19146
+{
 
19147
+}
 
19148
+
 
19149
+base_Impl_class::~base_Impl_class ()
 
19150
+{
 
19151
+}
 
19152
+
 
19153
+
 
19154
+class test_cls : public base_Impl_class
 
19155
+{
 
19156
+public:
 
19157
+  test_cls();
 
19158
+  virtual ~test_cls();
 
19159
+};
 
19160
+
 
19161
+test_cls::test_cls()
 
19162
+{
 
19163
+}
 
19164
+
 
19165
+test_cls::~test_cls()
 
19166
+{
 
19167
+}
 
19168
+
 
19169
+int main()
 
19170
+{
 
19171
+  test_cls *test = new test_cls;
 
19172
+  base_class_2 *p1 = test;
 
19173
+
 
19174
+  /* PR59695  destructor thunk offsets are not setup
 
19175
+   correctly resulting in crash.  */
 
19176
+  delete p1;
 
19177
+  return 0;
 
19178
+}
 
19179
+
 
19180
Index: gcc/testsuite/g++.dg/cpp0x/initlist79.C
 
19181
===================================================================
 
19182
--- a/src/gcc/testsuite/g++.dg/cpp0x/initlist79.C       (.../tags/gcc_4_8_2_release)
 
19183
+++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist79.C       (.../branches/gcc-4_8-branch)
 
19184
@@ -0,0 +1,8 @@
 
19185
+// PR c++/59646
 
19186
+// { dg-require-effective-target c++11 }
 
19187
+
 
19188
+#include <initializer_list>
 
19189
+
 
19190
+struct A {};
 
19191
+
 
19192
+std::initializer_list<volatile A> x = {{}};
 
19193
Index: gcc/testsuite/g++.dg/cpp0x/enum_base2.C
 
19194
===================================================================
 
19195
--- a/src/gcc/testsuite/g++.dg/cpp0x/enum_base2.C       (.../tags/gcc_4_8_2_release)
 
19196
+++ b/src/gcc/testsuite/g++.dg/cpp0x/enum_base2.C       (.../branches/gcc-4_8-branch)
 
19197
@@ -0,0 +1,9 @@
 
19198
+// PR c++/60187
 
19199
+// { dg-require-effective-target c++11 }
 
19200
+
 
19201
+template<typename... T> struct A
 
19202
+{
 
19203
+  enum E : T {};               // { dg-error "parameter pack" }
 
19204
+};
 
19205
+
 
19206
+A<int> a;
 
19207
Index: gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C
 
19208
===================================================================
 
19209
--- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C     (.../tags/gcc_4_8_2_release)
 
19210
+++ b/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C     (.../branches/gcc-4_8-branch)
 
19211
@@ -0,0 +1,7 @@
 
19212
+// PR c++/58596
 
19213
+// { dg-do compile { target c++11 } }
 
19214
+
 
19215
+struct A
 
19216
+{
 
19217
+  int i = [] { return decltype(i)(); }();
 
19218
+};
 
19219
Index: gcc/testsuite/g++.dg/cpp0x/variadic149.C
 
19220
===================================================================
 
19221
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic149.C      (.../tags/gcc_4_8_2_release)
 
19222
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic149.C      (.../branches/gcc-4_8-branch)
 
19223
@@ -0,0 +1,11 @@
 
19224
+// PR c++/60248
 
19225
+// { dg-options "-std=c++11 -g -fabi-version=2" }
 
19226
+
 
19227
+template<int...> struct A {};
 
19228
+
 
19229
+template<> struct A<0>
 
19230
+{
 
19231
+  typedef enum { e } B;
 
19232
+};
 
19233
+
 
19234
+A<0> a;
 
19235
Index: gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C
 
19236
===================================================================
 
19237
--- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C        (.../tags/gcc_4_8_2_release)
 
19238
+++ b/src/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C        (.../branches/gcc-4_8-branch)
 
19239
@@ -2,6 +2,7 @@
 
19240
 // { dg-options "-std=gnu++11" }
 
19241
 // Ignore warning on some powerpc-ibm-aix configurations.
 
19242
 // { dg-prune-output "non-standard ABI extension" }
 
19243
+// { dg-prune-output "changes the ABI" }
 
19244
 
 
19245
 typedef float __attribute__ ((vector_size (4 * sizeof (float)))) V4;
 
19246
 constexpr V4 build (float x, float y, float z) { return (V4){ x, y, z, 0 };}
 
19247
Index: gcc/testsuite/g++.dg/cpp0x/defaulted48.C
 
19248
===================================================================
 
19249
--- a/src/gcc/testsuite/g++.dg/cpp0x/defaulted48.C      (.../tags/gcc_4_8_2_release)
 
19250
+++ b/src/gcc/testsuite/g++.dg/cpp0x/defaulted48.C      (.../branches/gcc-4_8-branch)
 
19251
@@ -0,0 +1,17 @@
 
19252
+// PR c++/60108
 
19253
+// { dg-require-effective-target c++11 }
 
19254
+
 
19255
+template<int> struct A
 
19256
+{
 
19257
+  virtual ~A();
 
19258
+};
 
19259
+
 
19260
+template<typename> struct B : A<0>, A<1>
 
19261
+{
 
19262
+  ~B() = default;
 
19263
+};
 
19264
+
 
19265
+struct C : B<bool>
 
19266
+{
 
19267
+  C() {}
 
19268
+};
 
19269
Index: gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C
 
19270
===================================================================
 
19271
--- a/src/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C    (.../tags/gcc_4_8_2_release)
 
19272
+++ b/src/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C    (.../branches/gcc-4_8-branch)
 
19273
@@ -0,0 +1,18 @@
 
19274
+// PR c++/60182
 
19275
+// { dg-require-effective-target c++11 }
 
19276
+
 
19277
+class B {};
 
19278
+template <typename> using __allocator_base = B;
 
19279
+template <typename> class F : __allocator_base<int> {};
 
19280
+class C {};
 
19281
+template <typename, typename = F<int> > class G : C {};
 
19282
+template <typename> class D;
 
19283
+class A {
 
19284
+  using Container = G<D<char>>;
 
19285
+  A();
 
19286
+  A(D<char> const &);
 
19287
+  Container m_elements;
 
19288
+};
 
19289
+template <template <class, class> class C, class A = F<D<int>>>
 
19290
+void doSomething(C<D<char>, A> &);
 
19291
+A::A(D<char> const &) : A() { doSomething(m_elements); }
 
19292
Index: gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C
 
19293
===================================================================
 
19294
--- a/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C     (.../tags/gcc_4_8_2_release)
 
19295
+++ b/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C     (.../branches/gcc-4_8-branch)
 
19296
@@ -0,0 +1,10 @@
 
19297
+// PR c++/58965
 
19298
+// { dg-require-effective-target c++11 }
 
19299
+
 
19300
+void foo()
 
19301
+{
 
19302
+  static union
 
19303
+  {
 
19304
+    int i = i;
 
19305
+  };
 
19306
+}
 
19307
Index: gcc/testsuite/g++.dg/cpp0x/variadic144.C
 
19308
===================================================================
 
19309
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic144.C      (.../tags/gcc_4_8_2_release)
 
19310
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic144.C      (.../branches/gcc-4_8-branch)
 
19311
@@ -0,0 +1,15 @@
 
19312
+// PR c++/56060
 
19313
+// { dg-do compile { target c++11 } }
 
19314
+
 
19315
+template<typename T> struct baz { };
 
19316
+template<typename T> T bar();
 
19317
+
 
19318
+template<typename T, typename ... U>
 
19319
+baz<decltype(bar<T>()(bar<U> ...))>  // { dg-error "cannot be used" }
 
19320
+foo();
 
19321
+
 
19322
+int main()
 
19323
+{
 
19324
+  foo<int>();     // { dg-error "no matching" }
 
19325
+  return 0;
 
19326
+}
 
19327
Index: gcc/testsuite/g++.dg/cpp0x/enum18.C
 
19328
===================================================================
 
19329
--- a/src/gcc/testsuite/g++.dg/cpp0x/enum18.C   (.../tags/gcc_4_8_2_release)
 
19330
+++ b/src/gcc/testsuite/g++.dg/cpp0x/enum18.C   (.../branches/gcc-4_8-branch)
 
19331
@@ -4,5 +4,5 @@
 
19332
 int main(void) {
 
19333
   enum e {};
 
19334
   e ev;
 
19335
-  ev.e::~e_u();        // { dg-error "e_u. has not been declared" }
 
19336
+  ev.e::~e_u();        // { dg-error "" }
 
19337
 }
 
19338
Index: gcc/testsuite/g++.dg/cpp0x/noexcept22.C
 
19339
===================================================================
 
19340
--- a/src/gcc/testsuite/g++.dg/cpp0x/noexcept22.C       (.../tags/gcc_4_8_2_release)
 
19341
+++ b/src/gcc/testsuite/g++.dg/cpp0x/noexcept22.C       (.../branches/gcc-4_8-branch)
 
19342
@@ -0,0 +1,21 @@
 
19343
+// PR c++/60046
 
19344
+// { dg-require-effective-target c++11 }
 
19345
+
 
19346
+constexpr bool foo () { return noexcept (true); }
 
19347
+template <typename T>
 
19348
+struct V
 
19349
+{
 
19350
+  void bar (V &) noexcept (foo ()) {}
 
19351
+};
 
19352
+template <typename T>
 
19353
+struct W : public V <int>
 
19354
+{
 
19355
+  void bar (W &x) { V <int>::bar (x); }
 
19356
+};
 
19357
+
 
19358
+int
 
19359
+main ()
 
19360
+{
 
19361
+  W <int> a, b;
 
19362
+  a.bar (b);
 
19363
+}
 
19364
Index: gcc/testsuite/g++.dg/cpp0x/initlist76.C
 
19365
===================================================================
 
19366
--- a/src/gcc/testsuite/g++.dg/cpp0x/initlist76.C       (.../tags/gcc_4_8_2_release)
 
19367
+++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist76.C       (.../branches/gcc-4_8-branch)
 
19368
@@ -0,0 +1,5 @@
 
19369
+// PR c++/58812
 
19370
+// { dg-require-effective-target c++11 }
 
19371
+
 
19372
+int i;
 
19373
+int&& j{{ i }};                        // { dg-error "too many braces" }
 
19374
Index: gcc/testsuite/g++.dg/cpp0x/access02.C
 
19375
===================================================================
 
19376
--- a/src/gcc/testsuite/g++.dg/cpp0x/access02.C (.../tags/gcc_4_8_2_release)
 
19377
+++ b/src/gcc/testsuite/g++.dg/cpp0x/access02.C (.../branches/gcc-4_8-branch)
 
19378
@@ -0,0 +1,39 @@
 
19379
+// PR c++/58954
 
19380
+// { dg-require-effective-target c++11 }
 
19381
+
 
19382
+template<class T>
 
19383
+T&& declval();
 
19384
+
 
19385
+template<class T>
 
19386
+struct foo_argument
 
19387
+{
 
19388
+  template<class Ret, class C, class Arg>
 
19389
+  static Arg test(Ret (C::*)(Arg));
 
19390
+
 
19391
+  typedef decltype(test(&T::template foo<>)) type;
 
19392
+};
 
19393
+
 
19394
+template<class T, class>
 
19395
+struct dependent { typedef T type; };
 
19396
+
 
19397
+template<class T>
 
19398
+struct base
 
19399
+{
 
19400
+  template<class Ignore = void>
 
19401
+  auto foo(int i) -> decltype(declval<
 
19402
+    typename dependent<T&, Ignore>::type
 
19403
+  >().foo_impl(i));
 
19404
+};
 
19405
+
 
19406
+struct derived : base<derived>
 
19407
+{
 
19408
+  friend struct base<derived>;
 
19409
+private:
 
19410
+  int foo_impl(int i);
 
19411
+};
 
19412
+
 
19413
+int main()
 
19414
+{
 
19415
+  foo_argument<derived>::type var = 0;
 
19416
+  return var;
 
19417
+}
 
19418
Index: gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C
 
19419
===================================================================
 
19420
--- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C      (.../tags/gcc_4_8_2_release)
 
19421
+++ b/src/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C      (.../branches/gcc-4_8-branch)
 
19422
@@ -0,0 +1,20 @@
 
19423
+// PR c++/59268
 
19424
+// { dg-do compile }
 
19425
+// { dg-options "-std=c++11" }
 
19426
+
 
19427
+template <typename>
 
19428
+struct A
 
19429
+{
 
19430
+  constexpr A (int) {}
 
19431
+  virtual void foo ()
 
19432
+  {
 
19433
+    constexpr A<void> a (0);
 
19434
+  }
 
19435
+};
 
19436
+
 
19437
+void
 
19438
+bar ()
 
19439
+{
 
19440
+  A<int> a (3);
 
19441
+  a.foo ();
 
19442
+}
 
19443
Index: gcc/testsuite/g++.dg/cpp0x/initlist78.C
 
19444
===================================================================
 
19445
--- a/src/gcc/testsuite/g++.dg/cpp0x/initlist78.C       (.../tags/gcc_4_8_2_release)
 
19446
+++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist78.C       (.../branches/gcc-4_8-branch)
 
19447
@@ -0,0 +1,12 @@
 
19448
+// PR c++/58639
 
19449
+// { dg-require-effective-target c++11 }
 
19450
+
 
19451
+struct node {
 
19452
+  node &parent;
 
19453
+};
 
19454
+
 
19455
+struct vector {
 
19456
+  node n;
 
19457
+};
 
19458
+
 
19459
+vector v({});                  // { dg-error "" }
 
19460
Index: gcc/testsuite/g++.dg/cpp0x/variadic148.C
 
19461
===================================================================
 
19462
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic148.C      (.../tags/gcc_4_8_2_release)
 
19463
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic148.C      (.../branches/gcc-4_8-branch)
 
19464
@@ -0,0 +1,6 @@
 
19465
+// PR c++/59989
 
19466
+// { dg-require-effective-target c++11 }
 
19467
+
 
19468
+template<typename T> struct X {};
 
19469
+template<template<typename...> class D, typename ...U> int test(D<U...>*);
 
19470
+int n = test<X, int>(0);       // { dg-error "no match" }
 
19471
Index: gcc/testsuite/g++.dg/cpp0x/nsdmi9.C
 
19472
===================================================================
 
19473
--- a/src/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C   (.../tags/gcc_4_8_2_release)
 
19474
+++ b/src/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C   (.../branches/gcc-4_8-branch)
 
19475
@@ -0,0 +1,13 @@
 
19476
+// PR c++/58162
 
19477
+// { dg-require-effective-target c++11 }
 
19478
+
 
19479
+struct A {
 
19480
+ A();
 
19481
+ A(A&&);
 
19482
+};
 
19483
+
 
19484
+struct B {
 
19485
+ A const a = A();
 
19486
+};
 
19487
+
 
19488
+B b;
 
19489
Index: gcc/testsuite/g++.dg/cpp0x/deleted3.C
 
19490
===================================================================
 
19491
--- a/src/gcc/testsuite/g++.dg/cpp0x/deleted3.C (.../tags/gcc_4_8_2_release)
 
19492
+++ b/src/gcc/testsuite/g++.dg/cpp0x/deleted3.C (.../branches/gcc-4_8-branch)
 
19493
@@ -0,0 +1,11 @@
 
19494
+// PR c++/60216
 
19495
+// { dg-require-effective-target c++11 }
 
19496
+
 
19497
+struct A
 
19498
+{
 
19499
+  template<typename T> A(T) = delete;
 
19500
+};
 
19501
+
 
19502
+template<> A::A<int>(int) {}
 
19503
+
 
19504
+A a(0);
 
19505
Index: gcc/testsuite/g++.dg/cpp0x/variadic150.C
 
19506
===================================================================
 
19507
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic150.C      (.../tags/gcc_4_8_2_release)
 
19508
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic150.C      (.../branches/gcc-4_8-branch)
 
19509
@@ -0,0 +1,9 @@
 
19510
+// PR c++/60219
 
19511
+// { dg-require-effective-target c++11 }
 
19512
+
 
19513
+template<typename..., int> void foo();
 
19514
+
 
19515
+void bar()
 
19516
+{
 
19517
+  foo<0>;                      // { dg-error "" }
 
19518
+}
 
19519
Index: gcc/testsuite/g++.dg/cpp0x/static_assert9.C
 
19520
===================================================================
 
19521
--- a/src/gcc/testsuite/g++.dg/cpp0x/static_assert9.C   (.../tags/gcc_4_8_2_release)
 
19522
+++ b/src/gcc/testsuite/g++.dg/cpp0x/static_assert9.C   (.../branches/gcc-4_8-branch)
 
19523
@@ -0,0 +1,7 @@
 
19524
+// PR c++/58837
 
19525
+// { dg-require-effective-target c++11 }
 
19526
+
 
19527
+void f();
 
19528
+static_assert(f, "");
 
19529
+struct A {};
 
19530
+static_assert(A::~A, "");      // { dg-error "non-static member function" }
 
19531
Index: gcc/testsuite/g++.dg/cpp0x/variadic145.C
 
19532
===================================================================
 
19533
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic145.C      (.../tags/gcc_4_8_2_release)
 
19534
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic145.C      (.../branches/gcc-4_8-branch)
 
19535
@@ -0,0 +1,13 @@
 
19536
+// PR c++/59730
 
19537
+// { dg-do compile { target c++11 } }
 
19538
+
 
19539
+template <typename> void declval();
 
19540
+template <typename> void forward();
 
19541
+template <typename> class D;
 
19542
+template <typename _Functor, typename... _Bound_args>
 
19543
+class D <_Functor(_Bound_args...)> {
 
19544
+  template <typename... _Args, decltype(declval<_Functor>)>
 
19545
+  void operator()(...) {
 
19546
+    0(forward<_Args>...);
 
19547
+  }
 
19548
+};
 
19549
Index: gcc/testsuite/g++.dg/cpp0x/decltype57.C
 
19550
===================================================================
 
19551
--- a/src/gcc/testsuite/g++.dg/cpp0x/decltype57.C       (.../tags/gcc_4_8_2_release)
 
19552
+++ b/src/gcc/testsuite/g++.dg/cpp0x/decltype57.C       (.../branches/gcc-4_8-branch)
 
19553
@@ -0,0 +1,8 @@
 
19554
+// PR c++/58633
 
19555
+// { dg-do compile { target c++11 } }
 
19556
+
 
19557
+void foo(int i)
 
19558
+{
 
19559
+  typedef int I;
 
19560
+  decltype(i.I::~I())* p;
 
19561
+}
 
19562
Index: gcc/testsuite/g++.dg/cpp0x/variadic147.C
 
19563
===================================================================
 
19564
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic147.C      (.../tags/gcc_4_8_2_release)
 
19565
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic147.C      (.../branches/gcc-4_8-branch)
 
19566
@@ -0,0 +1,10 @@
 
19567
+// PR c++/58466
 
19568
+// { dg-require-effective-target c++11 }
 
19569
+
 
19570
+template<char, char...> struct A;
 
19571
+
 
19572
+template<typename> struct B;
 
19573
+
 
19574
+template<char... C> struct B<A<C...>> {};
 
19575
+
 
19576
+B<A<'X'>> b;
 
19577
Index: gcc/testsuite/g++.dg/eh/uncaught1.C
 
19578
===================================================================
 
19579
--- a/src/gcc/testsuite/g++.dg/eh/uncaught1.C   (.../tags/gcc_4_8_2_release)
 
19580
+++ b/src/gcc/testsuite/g++.dg/eh/uncaught1.C   (.../branches/gcc-4_8-branch)
 
19581
@@ -13,7 +13,7 @@
 
19582
 
 
19583
 static Check const data[] = {
 
19584
   { 0, 0, false },     // construct [0]
 
19585
-  { 1, 0, true  },     // [1] = [0]
 
19586
+  { 1, 0, false  },    // [1] = [0]
 
19587
   { 0, 0, true  },     // destruct [0]
 
19588
   { 2, 1, true  },     // [2] = [1]
 
19589
   { 2, 2, true  },      // destruct [2]
 
19590
Index: gcc/testsuite/g++.dg/eh/uncaught4.C
 
19591
===================================================================
 
19592
--- a/src/gcc/testsuite/g++.dg/eh/uncaught4.C   (.../tags/gcc_4_8_2_release)
 
19593
+++ b/src/gcc/testsuite/g++.dg/eh/uncaught4.C   (.../branches/gcc-4_8-branch)
 
19594
@@ -0,0 +1,29 @@
 
19595
+// PR c++/41174
 
19596
+// { dg-do run }
 
19597
+
 
19598
+#include <exception>
 
19599
+
 
19600
+#define assert(E) if (!(E)) __builtin_abort();
 
19601
+
 
19602
+struct e {
 
19603
+  e()
 
19604
+  {
 
19605
+    assert( !std::uncaught_exception() );
 
19606
+    try {
 
19607
+      throw 1;
 
19608
+    } catch (int i) {
 
19609
+      assert( !std::uncaught_exception() );
 
19610
+      throw;
 
19611
+    }
 
19612
+  }
 
19613
+};
 
19614
+
 
19615
+int main()
 
19616
+{
 
19617
+  try {
 
19618
+    throw e();
 
19619
+  } catch (int i) {
 
19620
+    assert( !std::uncaught_exception() );
 
19621
+  }
 
19622
+  assert( !std::uncaught_exception() );
 
19623
+}
 
19624
Index: gcc/testsuite/g++.dg/inherit/virtual11.C
 
19625
===================================================================
 
19626
--- a/src/gcc/testsuite/g++.dg/inherit/virtual11.C      (.../tags/gcc_4_8_2_release)
 
19627
+++ b/src/gcc/testsuite/g++.dg/inherit/virtual11.C      (.../branches/gcc-4_8-branch)
 
19628
@@ -0,0 +1,17 @@
 
19629
+// PR c++/59031
 
19630
+// { dg-do compile }
 
19631
+// { dg-options "-fdump-tree-gimple " }
 
19632
+class B {
 
19633
+ public:
 
19634
+  virtual int add (int a, int b) {return a+ b;}
 
19635
+};
 
19636
+
 
19637
+class D : public B {
 
19638
+};
 
19639
+
 
19640
+int foo (int a, int b) {
 
19641
+  D d;
 
19642
+  return d.add(a, b);
 
19643
+}
 
19644
+// { dg-final { scan-tree-dump-not "OBJ_TYPE_REF" "gimple" } }
 
19645
+// { dg-final { cleanup-tree-dump "gimple" } }
 
19646
Index: gcc/testsuite/g++.dg/torture/pr38565.C
 
19647
===================================================================
 
19648
--- a/src/gcc/testsuite/g++.dg/torture/pr38565.C        (.../tags/gcc_4_8_2_release)
 
19649
+++ b/src/gcc/testsuite/g++.dg/torture/pr38565.C        (.../branches/gcc-4_8-branch)
 
19650
@@ -1,6 +1,7 @@
 
19651
 // { dg-do compile }
 
19652
 // Ignore warning on some powerpc-linux configurations.
 
19653
 // { dg-prune-output "non-standard ABI extension" }
 
19654
+// { dg-prune-output "changes the ABI" }
 
19655
 #define vector __attribute__((vector_size(16) ))
 
19656
 vector unsigned int f(int a)
 
19657
 {
 
19658
Index: gcc/testsuite/g++.dg/torture/pr57499.C
 
19659
===================================================================
 
19660
--- a/src/gcc/testsuite/g++.dg/torture/pr57499.C        (.../tags/gcc_4_8_2_release)
 
19661
+++ b/src/gcc/testsuite/g++.dg/torture/pr57499.C        (.../branches/gcc-4_8-branch)
 
19662
@@ -0,0 +1,14 @@
 
19663
+// PR middle-end/57499
 
19664
+// { dg-do compile }
 
19665
+
 
19666
+struct S
 
19667
+{
 
19668
+  ~S () __attribute__ ((noreturn)) {} // { dg-warning "function does return" }
 
19669
+};
 
19670
+
 
19671
+void
 
19672
+foo ()
 
19673
+{
 
19674
+  S s;
 
19675
+  throw 1;
 
19676
+}
 
19677
Index: gcc/testsuite/g++.dg/torture/pr59163.C
 
19678
===================================================================
 
19679
--- a/src/gcc/testsuite/g++.dg/torture/pr59163.C        (.../tags/gcc_4_8_2_release)
 
19680
+++ b/src/gcc/testsuite/g++.dg/torture/pr59163.C        (.../branches/gcc-4_8-branch)
 
19681
@@ -0,0 +1,30 @@
 
19682
+// PR target/59163
 
19683
+// { dg-do run }
 
19684
+
 
19685
+struct A { float a[4]; };
 
19686
+struct B { int b; A a; };
 
19687
+
 
19688
+__attribute__((noinline, noclone)) void
 
19689
+bar (A &a)
 
19690
+{
 
19691
+  if (a.a[0] != 36.0f || a.a[1] != 42.0f || a.a[2] != 48.0f || a.a[3] != 54.0f)
 
19692
+    __builtin_abort ();
 
19693
+}
 
19694
+
 
19695
+__attribute__((noinline, noclone)) void
 
19696
+foo (A &a)
 
19697
+{
 
19698
+  int i;
 
19699
+  A c = a;
 
19700
+  for (i = 0; i < 4; i++)
 
19701
+    c.a[i] *= 6.0f;
 
19702
+  a = c;
 
19703
+  bar (a);
 
19704
+}
 
19705
+
 
19706
+int
 
19707
+main ()
 
19708
+{
 
19709
+  B b = { 5, { 6, 7, 8, 9 } };
 
19710
+  foo (b.a);
 
19711
+}
 
19712
Index: gcc/testsuite/g++.dg/ipa/pr60419.C
 
19713
===================================================================
 
19714
--- a/src/gcc/testsuite/g++.dg/ipa/pr60419.C    (.../tags/gcc_4_8_2_release)
 
19715
+++ b/src/gcc/testsuite/g++.dg/ipa/pr60419.C    (.../branches/gcc-4_8-branch)
 
19716
@@ -0,0 +1,80 @@
 
19717
+// PR middle-end/60419
 
19718
+// { dg-do compile }
 
19719
+// { dg-options "-O2" }
 
19720
+
 
19721
+struct C
 
19722
+{
 
19723
+};
 
19724
+
 
19725
+struct I : C
 
19726
+{
 
19727
+  I ();
 
19728
+};
 
19729
+
 
19730
+struct J
 
19731
+{
 
19732
+  void foo ();
 
19733
+  J ();
 
19734
+  virtual void foo (int &, int);
 
19735
+};
 
19736
+
 
19737
+template <class>
 
19738
+struct D
 
19739
+{
 
19740
+  virtual void foo (I &) const;
 
19741
+  void bar ()
 
19742
+  {
 
19743
+    I p;
 
19744
+    foo (p);
 
19745
+  }
 
19746
+};
 
19747
+
 
19748
+struct K : J, public D<int>
 
19749
+{
 
19750
+};
 
19751
+
 
19752
+struct F
 
19753
+{
 
19754
+  K *operator->();
 
19755
+};
 
19756
+
 
19757
+struct N : public K
 
19758
+{
 
19759
+  void foo (int &, int);
 
19760
+  I n;
 
19761
+  void foo (I &) const {}
 
19762
+};
 
19763
+
 
19764
+struct L : J
 
19765
+{
 
19766
+  F l;
 
19767
+};
 
19768
+
 
19769
+struct M : F
 
19770
+{
 
19771
+  L *operator->();
 
19772
+};
 
19773
+
 
19774
+struct G
 
19775
+{
 
19776
+  G ();
 
19777
+};
 
19778
+
 
19779
+M h;
 
19780
+
 
19781
+G::G ()
 
19782
+try
 
19783
+{
 
19784
+  N f;
 
19785
+  f.bar ();
 
19786
+  throw;
 
19787
+}
 
19788
+catch (int)
 
19789
+{
 
19790
+}
 
19791
+
 
19792
+void
 
19793
+baz ()
 
19794
+{
 
19795
+  h->l->bar ();
 
19796
+}
 
19797
Index: gcc/testsuite/g++.dg/template/ref7.C
 
19798
===================================================================
 
19799
--- a/src/gcc/testsuite/g++.dg/template/ref7.C  (.../tags/gcc_4_8_2_release)
 
19800
+++ b/src/gcc/testsuite/g++.dg/template/ref7.C  (.../branches/gcc-4_8-branch)
 
19801
@@ -0,0 +1,16 @@
 
19802
+// PR c++/60274
 
19803
+
 
19804
+typedef const char *const&  ProtocolIdType;
 
19805
+
 
19806
+template <ProtocolIdType protocolId>
 
19807
+struct C {
 
19808
+  typedef int ProtocolVersion;
 
19809
+  struct D {
 
19810
+    ProtocolVersion GetProtocolVersion();
 
19811
+  };
 
19812
+};
 
19813
+template <ProtocolIdType protocolId>
 
19814
+typename C<protocolId>::ProtocolVersion C<protocolId>::D::GetProtocolVersion()
 
19815
+{
 
19816
+    return 1;
 
19817
+}
 
19818
Index: gcc/testsuite/g++.dg/template/using28.C
 
19819
===================================================================
 
19820
--- a/src/gcc/testsuite/g++.dg/template/using28.C       (.../tags/gcc_4_8_2_release)
 
19821
+++ b/src/gcc/testsuite/g++.dg/template/using28.C       (.../branches/gcc-4_8-branch)
 
19822
@@ -0,0 +1,17 @@
 
19823
+// PR c++/37140
 
19824
+
 
19825
+struct C
 
19826
+{
 
19827
+  static const int block_size = 1;
 
19828
+};
 
19829
+
 
19830
+template <typename T> struct A {
 
19831
+  typedef C type;
 
19832
+};
 
19833
+
 
19834
+template <typename T> struct B : public A<T> {
 
19835
+  using typename A<T>::type;
 
19836
+  static const int block_size = type::block_size;
 
19837
+};
 
19838
+
 
19839
+template class B<int>;
 
19840
Index: gcc/testsuite/g++.dg/template/shadow1.C
 
19841
===================================================================
 
19842
--- a/src/gcc/testsuite/g++.dg/template/shadow1.C       (.../tags/gcc_4_8_2_release)
 
19843
+++ b/src/gcc/testsuite/g++.dg/template/shadow1.C       (.../branches/gcc-4_8-branch)
 
19844
@@ -0,0 +1,4 @@
 
19845
+// PR c++/58632
 
19846
+
 
19847
+template<template<int I> class A> // { dg-message "shadows" }
 
19848
+class A {};                    // { dg-error "declaration" }
 
19849
Index: gcc/testsuite/g++.dg/template/partial14.C
 
19850
===================================================================
 
19851
--- a/src/gcc/testsuite/g++.dg/template/partial14.C     (.../tags/gcc_4_8_2_release)
 
19852
+++ b/src/gcc/testsuite/g++.dg/template/partial14.C     (.../branches/gcc-4_8-branch)
 
19853
@@ -0,0 +1,16 @@
 
19854
+// PR c++/59044
 
19855
+
 
19856
+template <class T>
 
19857
+class C {
 
19858
+private:
 
19859
+  template <T a, T b>
 
19860
+  struct Implementation {};
 
19861
+public:
 
19862
+  typedef typename Implementation<0, 0>::Typedef Type;
 
19863
+};
 
19864
+
 
19865
+template <class T>
 
19866
+template <T b>
 
19867
+struct C<T>::Implementation<0, b> { typedef void Typedef; };
 
19868
+
 
19869
+template class C<unsigned>;
 
19870
Index: gcc/testsuite/g++.dg/template/using27.C
 
19871
===================================================================
 
19872
--- a/src/gcc/testsuite/g++.dg/template/using27.C       (.../tags/gcc_4_8_2_release)
 
19873
+++ b/src/gcc/testsuite/g++.dg/template/using27.C       (.../branches/gcc-4_8-branch)
 
19874
@@ -0,0 +1,33 @@
 
19875
+// PR c++/37140
 
19876
+
 
19877
+struct X
 
19878
+{
 
19879
+  typedef int nested_type;
 
19880
+};
 
19881
+
 
19882
+template <class T>
 
19883
+struct A
 
19884
+{
 
19885
+  typedef X type;
 
19886
+};
 
19887
+
 
19888
+template <class T>
 
19889
+struct B : A<T>
 
19890
+{
 
19891
+  using typename A<T>::type;
 
19892
+  typename type::nested_type x;
 
19893
+};
 
19894
+
 
19895
+template <class T> 
 
19896
+struct C : B<T>
 
19897
+{
 
19898
+  using typename B<T>::type;
 
19899
+  typename type::nested_type y;
 
19900
+};
 
19901
+
 
19902
+struct D : C<int>
 
19903
+{
 
19904
+  using C<int>::type;
 
19905
+  type::nested_type z;
 
19906
+};
 
19907
+
 
19908
Index: gcc/testsuite/g++.dg/template/using29.C
 
19909
===================================================================
 
19910
--- a/src/gcc/testsuite/g++.dg/template/using29.C       (.../tags/gcc_4_8_2_release)
 
19911
+++ b/src/gcc/testsuite/g++.dg/template/using29.C       (.../branches/gcc-4_8-branch)
 
19912
@@ -0,0 +1,21 @@
 
19913
+// PR c++/58047
 
19914
+
 
19915
+template <int N>
 
19916
+struct print_arg { };
 
19917
+
 
19918
+struct const_holder {
 
19919
+  static const int CONSTANT = 42;
 
19920
+};
 
19921
+
 
19922
+template <typename T>
 
19923
+struct identity {
 
19924
+  typedef T type;
 
19925
+};
 
19926
+
 
19927
+template <class T>
 
19928
+struct test_case : public identity<T> {
 
19929
+  using typename identity<T>::type;
 
19930
+  print_arg<type::CONSTANT> printer;
 
19931
+};
 
19932
+
 
19933
+template struct test_case<const_holder>;
 
19934
Index: gcc/testsuite/g++.dg/template/partial15.C
 
19935
===================================================================
 
19936
--- a/src/gcc/testsuite/g++.dg/template/partial15.C     (.../tags/gcc_4_8_2_release)
 
19937
+++ b/src/gcc/testsuite/g++.dg/template/partial15.C     (.../branches/gcc-4_8-branch)
 
19938
@@ -0,0 +1,19 @@
 
19939
+// PR c++/57043
 
19940
+// { dg-do link }
 
19941
+
 
19942
+template<typename D> struct complex { };
 
19943
+
 
19944
+template<typename Tp>
 
19945
+complex<Tp>
 
19946
+pow(const complex<Tp>& x, const complex<Tp>& y) { return complex<Tp>(); }
 
19947
+
 
19948
+template<typename T, typename U>
 
19949
+struct promote_2 { typedef T type; };
 
19950
+
 
19951
+template<typename Tp, typename Up>
 
19952
+complex<typename promote_2<Tp, Up>::type>
 
19953
+pow(const complex<Tp>& x, const complex<Up>& y);
 
19954
+
 
19955
+complex<double> (*powcc)(const complex<double>&, const complex<double>&) = pow;
 
19956
+
 
19957
+int main() {}
 
19958
Index: gcc/testsuite/c-c++-common/cpp/pr60400-1.h
 
19959
===================================================================
 
19960
--- a/src/gcc/testsuite/c-c++-common/cpp/pr60400-1.h    (.../tags/gcc_4_8_2_release)
 
19961
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr60400-1.h    (.../branches/gcc-4_8-branch)
 
19962
@@ -0,0 +1,3 @@
 
19963
+??=ifndef PR60400_1_H
 
19964
+??=define PR60400_1_H
 
19965
+??=endif
 
19966
Index: gcc/testsuite/c-c++-common/cpp/pr60400-2.h
 
19967
===================================================================
 
19968
--- a/src/gcc/testsuite/c-c++-common/cpp/pr60400-2.h    (.../tags/gcc_4_8_2_release)
 
19969
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr60400-2.h    (.../branches/gcc-4_8-branch)
 
19970
@@ -0,0 +1,4 @@
 
19971
+??=ifndef PR60400_2_H
 
19972
+??=define PR60400_2_H
 
19973
+??=include "pr60400-1.h"
 
19974
+??=endif
 
19975
Index: gcc/testsuite/c-c++-common/cpp/pr60400.c
 
19976
===================================================================
 
19977
--- a/src/gcc/testsuite/c-c++-common/cpp/pr60400.c      (.../tags/gcc_4_8_2_release)
 
19978
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr60400.c      (.../branches/gcc-4_8-branch)
 
19979
@@ -0,0 +1,13 @@
 
19980
+/* PR preprocessor/60400 */
 
19981
+/* { dg-do compile } */
 
19982
+/* { dg-options "-trigraphs -Wtrigraphs" } */
 
19983
+
 
19984
+??=include "pr60400-1.h"
 
19985
+??=include "pr60400-2.h"
 
19986
+
 
19987
+/* { dg-warning "trigraph" "" { target *-*-* } 1 } */
 
19988
+/* { dg-warning "trigraph" "" { target *-*-* } 2 } */
 
19989
+/* { dg-warning "trigraph" "" { target *-*-* } 3 } */
 
19990
+/* { dg-warning "trigraph" "" { target *-*-* } 4 } */
 
19991
+/* { dg-warning "trigraph" "" { target *-*-* } 5 } */
 
19992
+/* { dg-warning "trigraph" "" { target *-*-* } 6 } */
 
19993
Index: gcc/testsuite/c-c++-common/cpp/pr58844-1.c
 
19994
===================================================================
 
19995
--- a/src/gcc/testsuite/c-c++-common/cpp/pr58844-1.c    (.../tags/gcc_4_8_2_release)
 
19996
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr58844-1.c    (.../branches/gcc-4_8-branch)
 
19997
@@ -0,0 +1,8 @@
 
19998
+/* PR preprocessor/58844 */
 
19999
+/* { dg-do compile } */
 
20000
+/* { dg-options "-ftrack-macro-expansion=0" } */
 
20001
+
 
20002
+#define A x######x
 
20003
+int A = 1;
 
20004
+#define A x######x     /* { dg-message "previous definition" } */
 
20005
+#define A x##x         /* { dg-warning "redefined" } */
 
20006
Index: gcc/testsuite/c-c++-common/cpp/pr58844-2.c
 
20007
===================================================================
 
20008
--- a/src/gcc/testsuite/c-c++-common/cpp/pr58844-2.c    (.../tags/gcc_4_8_2_release)
 
20009
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr58844-2.c    (.../branches/gcc-4_8-branch)
 
20010
@@ -0,0 +1,8 @@
 
20011
+/* PR preprocessor/58844 */
 
20012
+/* { dg-do compile } */
 
20013
+/* { dg-options "-ftrack-macro-expansion=2" } */
 
20014
+
 
20015
+#define A x######x
 
20016
+int A = 1;
 
20017
+#define A x######x     /* { dg-message "previous definition" } */
 
20018
+#define A x##x         /* { dg-warning "redefined" } */
 
20019
Index: gcc/testsuite/c-c++-common/convert-vec-1.c
 
20020
===================================================================
 
20021
--- a/src/gcc/testsuite/c-c++-common/convert-vec-1.c    (.../tags/gcc_4_8_2_release)
 
20022
+++ b/src/gcc/testsuite/c-c++-common/convert-vec-1.c    (.../branches/gcc-4_8-branch)
 
20023
@@ -1,3 +1,4 @@
 
20024
 /* { dg-do compile } */
 
20025
+/* { dg-prune-output "changes the ABI" } */
 
20026
 typedef float v2sf __attribute__ ((vector_size (8)));
 
20027
 v2sf sub (void) { return (v2sf) 0.0; } /* { dg-error "can't convert" } */
 
20028
Index: gcc/testsuite/c-c++-common/pr60101.c
 
20029
===================================================================
 
20030
--- a/src/gcc/testsuite/c-c++-common/pr60101.c  (.../tags/gcc_4_8_2_release)
 
20031
+++ b/src/gcc/testsuite/c-c++-common/pr60101.c  (.../branches/gcc-4_8-branch)
 
20032
@@ -0,0 +1,112 @@
 
20033
+/* PR c/60101 */
 
20034
+/* { dg-do compile } */
 
20035
+/* { dg-options "-O2 -Wall" } */
 
20036
+
 
20037
+extern int *a, b, *c, *d;
 
20038
+
 
20039
+void
 
20040
+foo (double _Complex *x, double _Complex *y, double _Complex *z, unsigned int l, int w)
 
20041
+{
 
20042
+  unsigned int e = (unsigned int) a[3];
 
20043
+  double _Complex (*v)[l][4][e][l][4] = (double _Complex (*)[l][4][e][l][4]) z;
 
20044
+  double _Complex (*f)[l][b][l] = (double _Complex (*)[l][b][l]) y;
 
20045
+  unsigned int g = c[0] * c[1] * c[2];
 
20046
+  unsigned int h = d[0] + c[0] * (d[1] + c[1] * d[2]);
 
20047
+  unsigned int i;
 
20048
+
 
20049
+  for (i = 0; i < e; i++)
 
20050
+    {
 
20051
+      int j = e * d[3] + i;
 
20052
+
 
20053
+      unsigned int n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11;
 
20054
+      float _Complex s = 0.;
 
20055
+      unsigned int t = 0;
 
20056
+
 
20057
+      for (n0 = 0; n0 < l; n0++)
 
20058
+       for (n1 = 0; n1 < l; n1++)
 
20059
+         for (n2 = 0; n2 < l; n2++)
 
20060
+           for (n3 = 0; n3 < l; n3++)
 
20061
+             for (n4 = 0; n4 < l; n4++)
 
20062
+               for (n5 = 0; n5 < l; n5++)
 
20063
+                 for (n6 = 0; n6 < l; n6++)
 
20064
+                   for (n7 = 0; n7 < l; n7++)
 
20065
+                     for (n8 = 0; n8 < l; n8++)
 
20066
+                       for (n9 = 0; n9 < l; n9++)
 
20067
+                         for (n10 = 0; n10 < l; n10++)
 
20068
+                           for (n11 = 0; n11 < l; n11++)
 
20069
+                             {
 
20070
+                               if (t % g == h)
 
20071
+                                 s
 
20072
+                                   += f[n0][n4][j][n8] * f[n1][n5][j][n9] * ~(f[n2][n6][w][n10]) * ~(f[n3][n7][w][n11])
 
20073
+                                      * (+0.25 * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n10][0][i][n4][1]
 
20074
+                                         * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n6][1][i][n0][0]
 
20075
+                                         + 0.25 * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n10][0][i][n4][1]
 
20076
+                                         * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
 
20077
+                                         - 0.5 * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n10][0][i][n4][1]
 
20078
+                                         * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
 
20079
+                                         + 0.25 * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n3][0][i][n4][1]
 
20080
+                                         * v[0][n7][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n11][1][i][n0][0]
 
20081
+                                         - 0.5 * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n3][0][i][n4][1]
 
20082
+                                         * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
 
20083
+                                         + 0.25 * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n3][0][i][n4][1]
 
20084
+                                         * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
 
20085
+                                         + 0.25 * v[0][n3][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n10][0][i][n4][1]
 
20086
+                                         * v[0][n6][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0]
 
20087
+                                         - 0.5 * v[0][n3][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n10][0][i][n4][1]
 
20088
+                                         * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
 
20089
+                                         + 0.25 * v[0][n3][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n10][0][i][n4][1]
 
20090
+                                         * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
 
20091
+                                         + 0.25 * v[0][n3][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n2][0][i][n4][1]
 
20092
+                                         * v[0][n6][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0]
 
20093
+                                         + 0.25 * v[0][n3][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n2][0][i][n4][1]
 
20094
+                                         * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
 
20095
+                                         - 0.5 * v[0][n3][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n2][0][i][n4][1]
 
20096
+                                         * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
 
20097
+                                         + 0.25 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
 
20098
+                                         * v[0][n6][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0]
 
20099
+                                         - 0.5 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
 
20100
+                                         * v[0][n6][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0]
 
20101
+                                         - 0.5 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
 
20102
+                                         * v[0][n7][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n11][1][i][n0][0]
 
20103
+                                         + 0.25 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
 
20104
+                                         * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n6][1][i][n0][0]
 
20105
+                                         + 1. * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
 
20106
+                                         * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
 
20107
+                                         - 0.5 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
 
20108
+                                         * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
 
20109
+                                         - 0.5 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
 
20110
+                                         * v[0][n6][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0]
 
20111
+                                         + 0.25 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
 
20112
+                                         * v[0][n6][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0]
 
20113
+                                         + 0.25 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
 
20114
+                                         * v[0][n7][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n11][1][i][n0][0]
 
20115
+                                         - 0.5 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
 
20116
+                                         * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n6][1][i][n0][0]
 
20117
+                                         - 0.5 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
 
20118
+                                         * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
 
20119
+                                         + 1. * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
 
20120
+                                         * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
 
20121
+                                         + 0.5 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
 
20122
+                                         * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0] * v[0][n10][0][i][n8][0]
 
20123
+                                         - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
 
20124
+                                         * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0] * v[0][n10][0][i][n8][0]
 
20125
+                                         - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
 
20126
+                                         * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n0][0] * v[0][n10][0][i][n1][0]
 
20127
+                                         + 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
 
20128
+                                         * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n10][0][i][n0][0]
 
20129
+                                         + 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
 
20130
+                                         * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n0][0] * v[0][n10][0][i][n1][0]
 
20131
+                                         - 0.5 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
 
20132
+                                         * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n10][0][i][n0][0]
 
20133
+                                         - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1]
 
20134
+                                         * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0] * v[0][n3][0][i][n8][0]
 
20135
+                                         - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1]
 
20136
+                                         * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n0][0] * v[0][n3][0][i][n1][0]);
 
20137
+                               t++;
 
20138
+                             }
 
20139
+      int u = (j - w + b) % b;
 
20140
+      int q = (j >= w ? +1 : -1);
 
20141
+      int r = q;
 
20142
+      x[u] += r * s;
 
20143
+    }
 
20144
+}
 
20145
Index: gcc/testsuite/c-c++-common/pr59037.c
 
20146
===================================================================
 
20147
--- a/src/gcc/testsuite/c-c++-common/pr59037.c  (.../tags/gcc_4_8_2_release)
 
20148
+++ b/src/gcc/testsuite/c-c++-common/pr59037.c  (.../branches/gcc-4_8-branch)
 
20149
@@ -0,0 +1,12 @@
 
20150
+/* { dg-do compile } */
 
20151
+/* { dg-options "-O3" } */
 
20152
+
 
20153
+typedef int v4si __attribute__ ((vector_size (16)));
 
20154
+
 
20155
+int
 
20156
+main (int argc, char** argv)
 
20157
+{
 
20158
+  v4si x = {0,1,2,3};
 
20159
+  x = (v4si) {(x)[3], (x)[2], (x)[1], (x)[0]};
 
20160
+  return x[4];
 
20161
+}
 
20162
Index: gcc/testsuite/c-c++-common/pr59280.c
 
20163
===================================================================
 
20164
--- a/src/gcc/testsuite/c-c++-common/pr59280.c  (.../tags/gcc_4_8_2_release)
 
20165
+++ b/src/gcc/testsuite/c-c++-common/pr59280.c  (.../branches/gcc-4_8-branch)
 
20166
@@ -0,0 +1,4 @@
 
20167
+/* PR c/59280 */
 
20168
+/* { dg-do compile } */
 
20169
+
 
20170
+void bar (char *) __attribute__((constructor(foo))); /* { dg-error "constructor priorities must be integers|was not declared|constructor priorities are not supported" } */
 
20171
Index: gcc/testsuite/c-c++-common/pr37743.c
 
20172
===================================================================
 
20173
--- a/src/gcc/testsuite/c-c++-common/pr37743.c  (.../tags/gcc_4_8_2_release)
 
20174
+++ b/src/gcc/testsuite/c-c++-common/pr37743.c  (.../branches/gcc-4_8-branch)
 
20175
@@ -0,0 +1,13 @@
 
20176
+/* PR c/37743 */
 
20177
+/* This needs to be run only on targets where __UINT32_TYPE__ is defined
 
20178
+   to unsigned int.  */
 
20179
+/* { dg-do compile { target *-*-linux-gnu* } } */
 
20180
+/* { dg-options "-Wformat" } */
 
20181
+
 
20182
+int foo (const char *, ...) __attribute__ ((format (printf, 1, 2)));
 
20183
+
 
20184
+void
 
20185
+bar (unsigned int x)
 
20186
+{
 
20187
+  foo ("%x", __builtin_bswap32 (x));
 
20188
+}
 
20189
Index: gcc/testsuite/c-c++-common/fold-divmul-1.c
 
20190
===================================================================
 
20191
--- a/src/gcc/testsuite/c-c++-common/fold-divmul-1.c    (.../tags/gcc_4_8_2_release)
 
20192
+++ b/src/gcc/testsuite/c-c++-common/fold-divmul-1.c    (.../branches/gcc-4_8-branch)
 
20193
@@ -0,0 +1,11 @@
 
20194
+/* { dg-do compile } */
 
20195
+/* { dg-options "-fdump-tree-original" } */
 
20196
+
 
20197
+int *
 
20198
+fx (int *b, int *e)
 
20199
+{
 
20200
+  return b + (e - b);
 
20201
+}
 
20202
+
 
20203
+/* { dg-final { scan-tree-dump-not "/\\\[ex\\\]" "original" } } */
 
20204
+/* { dg-final { cleanup-tree-dump "original" } } */
 
20205
Index: gcc/testsuite/c-c++-common/torture/pr58794-1.c
 
20206
===================================================================
 
20207
--- a/src/gcc/testsuite/c-c++-common/torture/pr58794-1.c        (.../tags/gcc_4_8_2_release)
 
20208
+++ b/src/gcc/testsuite/c-c++-common/torture/pr58794-1.c        (.../branches/gcc-4_8-branch)
 
20209
@@ -0,0 +1,29 @@
 
20210
+/* { dg-do compile } */
 
20211
+
 
20212
+struct S0
 
20213
+{
 
20214
+  int f;
 
20215
+};
 
20216
+
 
20217
+struct S1
 
20218
+{
 
20219
+  struct S0 f1;
 
20220
+  volatile int f2;
 
20221
+};
 
20222
+
 
20223
+struct S2
 
20224
+{
 
20225
+  struct S1 g;
 
20226
+} a, b; 
 
20227
+
 
20228
+static int *c[1][2] = {{0, (int *)&a.g.f2}};
 
20229
+static int d; 
 
20230
+
 
20231
+int
 
20232
+main ()
 
20233
+{
 
20234
+  for (d = 0; d < 1; d++)
 
20235
+    for (b.g.f1.f = 0; b.g.f1.f < 1; b.g.f1.f++)
 
20236
+      *c[b.g.f1.f][d + 1] = 0;
 
20237
+  return 0;
 
20238
+}
 
20239
Index: gcc/testsuite/c-c++-common/torture/pr58794-2.c
 
20240
===================================================================
 
20241
--- a/src/gcc/testsuite/c-c++-common/torture/pr58794-2.c        (.../tags/gcc_4_8_2_release)
 
20242
+++ b/src/gcc/testsuite/c-c++-common/torture/pr58794-2.c        (.../branches/gcc-4_8-branch)
 
20243
@@ -0,0 +1,21 @@
 
20244
+/* { dg-do compile } */
 
20245
+
 
20246
+struct S 
 
20247
+{
 
20248
+  volatile int f;
 
20249
+} a;
 
20250
+
 
20251
+unsigned int b;
 
20252
+
 
20253
+static int *c[1][2] = {{0, (int *)&a.f}};
 
20254
+static unsigned int d;
 
20255
+
 
20256
+int 
 
20257
+main ()
 
20258
+{
 
20259
+  for (; d < 1; d++)
 
20260
+    for (; b < 1; b++)
 
20261
+      *c[b][d + 1] = 0;
 
20262
+
 
20263
+  return 0;
 
20264
+}
 
20265
Index: gcc/testsuite/c-c++-common/torture/pr60026.c
 
20266
===================================================================
 
20267
--- a/src/gcc/testsuite/c-c++-common/torture/pr60026.c  (.../tags/gcc_4_8_2_release)
 
20268
+++ b/src/gcc/testsuite/c-c++-common/torture/pr60026.c  (.../branches/gcc-4_8-branch)
 
20269
@@ -0,0 +1,28 @@
 
20270
+/* PR ipa/60026 */
 
20271
+/* { dg-do compile } */
 
20272
+
 
20273
+struct S { int f; } a;
 
20274
+
 
20275
+__attribute__((optimize (0)))
 
20276
+struct S foo (int x, struct S y)
 
20277
+{
 
20278
+  int b = y.f;
 
20279
+  return a; 
 
20280
+}
 
20281
+
 
20282
+void
 
20283
+bar ()
 
20284
+{
 
20285
+  while (a.f)
 
20286
+    {
 
20287
+      struct S c = {0};
 
20288
+      foo (0, c);
 
20289
+    }
 
20290
+}
 
20291
+
 
20292
+int
 
20293
+main ()
 
20294
+{
 
20295
+  bar (); 
 
20296
+  return 0;
 
20297
+}
 
20298
Index: gcc/testsuite/c-c++-common/vector-compare-2.c
 
20299
===================================================================
 
20300
--- a/src/gcc/testsuite/c-c++-common/vector-compare-2.c (.../tags/gcc_4_8_2_release)
 
20301
+++ b/src/gcc/testsuite/c-c++-common/vector-compare-2.c (.../branches/gcc-4_8-branch)
 
20302
@@ -1,6 +1,7 @@
 
20303
 /* { dg-do compile } */   
 
20304
 /* { dg-options "-fno-common" { target hppa*-*-hpux* } } */
 
20305
 /* { dg-options "-mabi=altivec" { target { { powerpc*-*-linux* } && ilp32 } } } */
 
20306
+/* { dg-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
 
20307
 /* Ignore warning on some powerpc-ibm-aix configurations. */
 
20308
 /* { dg-prune-output "non-standard ABI extension" } */
 
20309
 
 
20310
Index: gcc/testsuite/c-c++-common/gomp/pr58809.c
 
20311
===================================================================
 
20312
--- a/src/gcc/testsuite/c-c++-common/gomp/pr58809.c     (.../tags/gcc_4_8_2_release)
 
20313
+++ b/src/gcc/testsuite/c-c++-common/gomp/pr58809.c     (.../branches/gcc-4_8-branch)
 
20314
@@ -0,0 +1,31 @@
 
20315
+/* PR middle-end/58809 */
 
20316
+/* { dg-do compile } */
 
20317
+/* { dg-options "-fopenmp" } */
 
20318
+
 
20319
+_Complex int j;
 
20320
+_Complex double d;
 
20321
+
 
20322
+void
 
20323
+foo (void)
 
20324
+{
 
20325
+  #pragma omp parallel reduction (&:j) /* { dg-error "has invalid type for" } */
 
20326
+    ;
 
20327
+  #pragma omp parallel reduction (|:j) /* { dg-error "has invalid type for" } */
 
20328
+    ;
 
20329
+  #pragma omp parallel reduction (^:j) /* { dg-error "has invalid type for" } */
 
20330
+    ;
 
20331
+  #pragma omp parallel reduction (min:j) /* { dg-error "has invalid type for" } */
 
20332
+    ;
 
20333
+  #pragma omp parallel reduction (max:j) /* { dg-error "has invalid type for" } */
 
20334
+    ;
 
20335
+  #pragma omp parallel reduction (&:d) /* { dg-error "has invalid type for" } */
 
20336
+    ;
 
20337
+  #pragma omp parallel reduction (|:d) /* { dg-error "has invalid type for" } */
 
20338
+    ;
 
20339
+  #pragma omp parallel reduction (^:d) /* { dg-error "has invalid type for" } */
 
20340
+    ;
 
20341
+  #pragma omp parallel reduction (min:d) /* { dg-error "has invalid type for" } */
 
20342
+    ;
 
20343
+  #pragma omp parallel reduction (max:d) /* { dg-error "has invalid type for" } */
 
20344
+    ;
 
20345
+}
 
20346
Index: gcc/testsuite/c-c++-common/gomp/pr59467.c
 
20347
===================================================================
 
20348
--- a/src/gcc/testsuite/c-c++-common/gomp/pr59467.c     (.../tags/gcc_4_8_2_release)
 
20349
+++ b/src/gcc/testsuite/c-c++-common/gomp/pr59467.c     (.../branches/gcc-4_8-branch)
 
20350
@@ -0,0 +1,68 @@
 
20351
+/* PR libgomp/59467 */
 
20352
+
 
20353
+int v;
 
20354
+
 
20355
+void
 
20356
+foo (void)
 
20357
+{
 
20358
+  int x = 0, y = 0;
 
20359
+  #pragma omp parallel
 
20360
+  {
 
20361
+    int z;
 
20362
+    #pragma omp single copyprivate (x) /* { dg-error "is not threadprivate or private in outer context" } */
 
20363
+    {
 
20364
+      #pragma omp atomic write
 
20365
+       x = 6;
 
20366
+    }
 
20367
+    #pragma omp atomic read
 
20368
+    z = x;
 
20369
+    #pragma omp atomic
 
20370
+    y += z;
 
20371
+  }
 
20372
+  #pragma omp parallel
 
20373
+  {
 
20374
+    int z;
 
20375
+    #pragma omp single copyprivate (v) /* { dg-error "is not threadprivate or private in outer context" } */
 
20376
+    {
 
20377
+      #pragma omp atomic write
 
20378
+       v = 6;
 
20379
+    }
 
20380
+    #pragma omp atomic read
 
20381
+    z = v;
 
20382
+    #pragma omp atomic
 
20383
+    y += z;
 
20384
+  }
 
20385
+  #pragma omp parallel private (x)
 
20386
+  {
 
20387
+    int z;
 
20388
+    #pragma omp single copyprivate (x)
 
20389
+    {
 
20390
+      #pragma omp atomic write
 
20391
+       x = 6;
 
20392
+    }
 
20393
+    #pragma omp atomic read
 
20394
+    z = x;
 
20395
+    #pragma omp atomic
 
20396
+    y += z;
 
20397
+  }
 
20398
+  x = 0;
 
20399
+  #pragma omp parallel reduction (+:x)
 
20400
+  {
 
20401
+    #pragma omp single copyprivate (x)
 
20402
+    {
 
20403
+      #pragma omp atomic write
 
20404
+       x = 6;
 
20405
+    }
 
20406
+    #pragma omp atomic
 
20407
+    y += x;
 
20408
+  }
 
20409
+  #pragma omp single copyprivate (x)
 
20410
+  {
 
20411
+    x = 7;
 
20412
+  }
 
20413
+  #pragma omp single copyprivate (v)   /* { dg-error "is not threadprivate or private in outer context" } */
 
20414
+  {
 
20415
+    #pragma omp atomic write
 
20416
+      v = 6;
 
20417
+  }
 
20418
+}
 
20419
Index: gcc/testsuite/c-c++-common/scal-to-vec2.c
 
20420
===================================================================
 
20421
--- a/src/gcc/testsuite/c-c++-common/scal-to-vec2.c     (.../tags/gcc_4_8_2_release)
 
20422
+++ b/src/gcc/testsuite/c-c++-common/scal-to-vec2.c     (.../branches/gcc-4_8-branch)
 
20423
@@ -1,6 +1,7 @@
 
20424
 /* { dg-do compile } */   
 
20425
 /* { dg-options "-fno-common" { target hppa*-*-hpux* } } */
 
20426
 /* { dg-options "-mabi=altivec" { target { { powerpc*-*-linux* } && ilp32 } } } */
 
20427
+/* { dg-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
 
20428
 /* Ignore warning on some powerpc-ibm-aix configurations. */
 
20429
 /* { dg-prune-output "non-standard ABI extension" } */
 
20430
 
 
20431
Index: gcc/testsuite/c-c++-common/pr59032.c
 
20432
===================================================================
 
20433
--- a/src/gcc/testsuite/c-c++-common/pr59032.c  (.../tags/gcc_4_8_2_release)
 
20434
+++ b/src/gcc/testsuite/c-c++-common/pr59032.c  (.../branches/gcc-4_8-branch)
 
20435
@@ -0,0 +1,30 @@
 
20436
+/* { dg-do compile } */
 
20437
+/* { dg-options "-O2" } */
 
20438
+
 
20439
+void
 
20440
+foo()
 
20441
+{
 
20442
+  float v __attribute__((vector_size(8)));
 
20443
+  v++;
 
20444
+}
 
20445
+
 
20446
+void
 
20447
+foo2 ()
 
20448
+{
 
20449
+  float v __attribute__((vector_size(8)));
 
20450
+  ++v;
 
20451
+}
 
20452
+
 
20453
+void
 
20454
+foo3 ()
 
20455
+{
 
20456
+  float v __attribute__((vector_size(8)));
 
20457
+  v--;
 
20458
+}
 
20459
+
 
20460
+void
 
20461
+foo4 ()
 
20462
+{
 
20463
+  float v __attribute__((vector_size(8)));
 
20464
+  --v;
 
20465
+}
 
20466
Index: gcc/cp/typeck.c
 
20467
===================================================================
 
20468
--- a/src/gcc/cp/typeck.c       (.../tags/gcc_4_8_2_release)
 
20469
+++ b/src/gcc/cp/typeck.c       (.../branches/gcc-4_8-branch)
 
20470
@@ -4103,6 +4103,11 @@
 
20471
     case TRUTH_ORIF_EXPR:
 
20472
     case TRUTH_AND_EXPR:
 
20473
     case TRUTH_OR_EXPR:
 
20474
+      if (TREE_CODE (type0) == VECTOR_TYPE || TREE_CODE (type1) == VECTOR_TYPE)
 
20475
+       {
 
20476
+         sorry ("logical operation on vector type");
 
20477
+         return error_mark_node;
 
20478
+       }
 
20479
       result_type = boolean_type_node;
 
20480
       break;
 
20481
 
 
20482
@@ -5010,7 +5015,10 @@
 
20483
 cp_truthvalue_conversion (tree expr)
 
20484
 {
 
20485
   tree type = TREE_TYPE (expr);
 
20486
-  if (TYPE_PTRDATAMEM_P (type))
 
20487
+  if (TYPE_PTRDATAMEM_P (type)
 
20488
+      /* Avoid ICE on invalid use of non-static member function.  */
 
20489
+      || (TREE_CODE (expr) == FUNCTION_DECL
 
20490
+         && DECL_NONSTATIC_MEMBER_FUNCTION_P (expr)))
 
20491
     return build_binary_op (EXPR_LOCATION (expr),
 
20492
                            NE_EXPR, expr, nullptr_node, 1);
 
20493
   else if (TYPE_PTR_P (type) || TYPE_PTRMEMFUNC_P (type))
 
20494
@@ -5588,7 +5596,9 @@
 
20495
            inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
 
20496
          }
 
20497
        else
 
20498
-         inc = integer_one_node;
 
20499
+         inc = (TREE_CODE (argtype) == VECTOR_TYPE
 
20500
+                ? build_one_cst (argtype)
 
20501
+                : integer_one_node);
 
20502
 
 
20503
        inc = cp_convert (argtype, inc, complain);
 
20504
 
 
20505
@@ -7194,8 +7204,7 @@
 
20506
             side effect associated with any single compound assignment
 
20507
             operator. -- end note ]  */
 
20508
          lhs = stabilize_reference (lhs);
 
20509
-         if (TREE_SIDE_EFFECTS (rhs))
 
20510
-           rhs = mark_rvalue_use (rhs);
 
20511
+         rhs = rvalue (rhs);
 
20512
          rhs = stabilize_expr (rhs, &init);
 
20513
          newrhs = cp_build_binary_op (input_location,
 
20514
                                       modifycode, lhs, rhs,
 
20515
@@ -7611,7 +7620,7 @@
 
20516
   /* Handle null pointer to member function conversions.  */
 
20517
   if (null_ptr_cst_p (pfn))
 
20518
     {
 
20519
-      pfn = build_c_cast (input_location, type, pfn);
 
20520
+      pfn = cp_build_c_cast (type, pfn, complain);
 
20521
       return build_ptrmemfunc1 (to_type,
 
20522
                                integer_zero_node,
 
20523
                                pfn);
 
20524
Index: gcc/cp/decl.c
 
20525
===================================================================
 
20526
--- a/src/gcc/cp/decl.c (.../tags/gcc_4_8_2_release)
 
20527
+++ b/src/gcc/cp/decl.c (.../branches/gcc-4_8-branch)
 
20528
@@ -1867,9 +1867,9 @@
 
20529
       /* Merge the data types specified in the two decls.  */
 
20530
       newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
 
20531
 
 
20532
-      /* If merge_types produces a non-typedef type, just use the old type.  */
 
20533
-      if (TREE_CODE (newdecl) == TYPE_DECL
 
20534
-         && newtype == DECL_ORIGINAL_TYPE (newdecl))
 
20535
+      /* For typedefs use the old type, as the new type's DECL_NAME points
 
20536
+        at newdecl, which will be ggc_freed.  */
 
20537
+      if (TREE_CODE (newdecl) == TYPE_DECL)
 
20538
        newtype = oldtype;
 
20539
 
 
20540
       if (TREE_CODE (newdecl) == VAR_DECL)
 
20541
@@ -8193,7 +8193,9 @@
 
20542
              abi_1_itype = error_mark_node;
 
20543
            }
 
20544
 
 
20545
-         size = maybe_constant_value (size);
 
20546
+         if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
 
20547
+           size = maybe_constant_value (size);
 
20548
+
 
20549
          if (!TREE_CONSTANT (size))
 
20550
            size = osize;
 
20551
        }
 
20552
@@ -11891,7 +11893,10 @@
 
20553
 
 
20554
   if (decl
 
20555
       && (DECL_CLASS_TEMPLATE_P (decl)
 
20556
-         || DECL_TEMPLATE_TEMPLATE_PARM_P (decl)))
 
20557
+         /* If scope is ts_current we're defining a class, so ignore a
 
20558
+            template template parameter.  */
 
20559
+         || (scope != ts_current
 
20560
+             && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
 
20561
     decl = DECL_TEMPLATE_RESULT (decl);
 
20562
 
 
20563
   if (decl && TREE_CODE (decl) == TYPE_DECL)
 
20564
Index: gcc/cp/except.c
 
20565
===================================================================
 
20566
--- a/src/gcc/cp/except.c       (.../tags/gcc_4_8_2_release)
 
20567
+++ b/src/gcc/cp/except.c       (.../branches/gcc-4_8-branch)
 
20568
@@ -380,6 +380,9 @@
 
20569
 {
 
20570
   tree type = body ? TREE_TYPE (body) : void_type_node;
 
20571
 
 
20572
+  if (!flag_exceptions)
 
20573
+    return body;
 
20574
+
 
20575
   if (cond && !value_dependent_expression_p (cond))
 
20576
     {
 
20577
       cond = cxx_constant_value (cond);
 
20578
Index: gcc/cp/ChangeLog
 
20579
===================================================================
 
20580
--- a/src/gcc/cp/ChangeLog      (.../tags/gcc_4_8_2_release)
 
20581
+++ b/src/gcc/cp/ChangeLog      (.../branches/gcc-4_8-branch)
 
20582
@@ -1,3 +1,246 @@
 
20583
+2014-02-28  Jason Merrill  <jason@redhat.com>
 
20584
+
 
20585
+       PR c++/58845
 
20586
+       * typeck.c (cp_build_binary_op): Sorry on vector&&vector.
 
20587
+
 
20588
+2014-02-26  Jason Merrill  <jason@redhat.com>
 
20589
+
 
20590
+       PR c++/60182
 
20591
+       * pt.c (unify): Ignore alias templates when deducing a template
 
20592
+       template parameter.
 
20593
+
 
20594
+2014-02-24  Jason Merrill  <jason@redhat.com>
 
20595
+
 
20596
+       PR c++/60146
 
20597
+       * pt.c (tsubst_omp_for_iterator): Don't let substitution of the
 
20598
+       DECL_EXPR initialize a non-class iterator.
 
20599
+
 
20600
+2014-02-24  Fabien Chêne  <fabien@gcc.gnu.org>
 
20601
+        PR c++/37140
 
20602
+        * parser.c (cp_parser_nonclass_name): Call strip_using_decl and
 
20603
+       move the code handling dependent USING_DECLs...
 
20604
+        * name-lookup.c (strip_using_decl): ...Here.
 
20605
+
 
20606
+2014-02-21  Jason Merrill  <jason@redhat.com>
 
20607
+
 
20608
+       PR c++/60108
 
20609
+       * semantics.c (expand_or_defer_fn_1): Check DECL_DEFAULTED_FN.
 
20610
+
 
20611
+       PR c++/60187
 
20612
+       * parser.c (cp_parser_enum_specifier): Call
 
20613
+       check_for_bare_parameter_packs.
 
20614
+
 
20615
+       PR c++/60216
 
20616
+       * pt.c (register_specialization): Copy DECL_DELETED_FN to clones.
 
20617
+
 
20618
+       PR c++/60219
 
20619
+       * pt.c (coerce_template_parms): Bail if argument packing fails.
 
20620
+
 
20621
+       PR c++/60248
 
20622
+       * mangle.c (mangle_decl): Don't make an alias for a TYPE_DECL.
 
20623
+
 
20624
+2014-02-20  Jason Merrill  <jason@redhat.com>
 
20625
+
 
20626
+       PR c++/60274
 
20627
+       Revert:
 
20628
+       PR c++/58606
 
20629
+       * pt.c (template_parm_to_arg): Call convert_from_reference.
 
20630
+       (tsubst_template_arg): Don't strip reference refs.
 
20631
+
 
20632
+2014-02-20  Kai Tietz  <ktietz@redhat.com>
 
20633
+
 
20634
+       PR c++/58873
 
20635
+       * parser.c (cp_parser_functional_cast): Treat NULL_TREE
 
20636
+       valued type argument as error_mark_node.
 
20637
+
 
20638
+       PR c++/58835
 
20639
+       * semantics.c (finish_fname): Handle error_mark_node.
 
20640
+
 
20641
+2014-02-19  Jason Merrill  <jason@redhat.com>
 
20642
+
 
20643
+       PR c++/60046
 
20644
+       * pt.c (maybe_instantiate_noexcept): Don't instantiate exception
 
20645
+       spec from template context.
 
20646
+
 
20647
+2014-01-31  Jason Merrill  <jason@redhat.com>
 
20648
+
 
20649
+       PR c++/58672
 
20650
+       * decl2.c (handle_tls_init): Handle null init fn.
 
20651
+
 
20652
+       PR c++/55800
 
20653
+       * decl2.c (get_tls_init_fn): Copy DECL_EXTERNAL from the variable.
 
20654
+
 
20655
+       PR c++/59646
 
20656
+       * call.c (convert_like_real) [ck_aggr]: Set TARGET_EXPR_LIST_INIT_P.
 
20657
+       [ck_list]: Check for error_mark_node.
 
20658
+
 
20659
+       PR c++/57043
 
20660
+       * pt.c (fn_type_unification): Don't do DEDUCE_EXACT check
 
20661
+       during partial ordering.
 
20662
+
 
20663
+2014-01-30  Jason Merrill  <jason@redhat.com>
 
20664
+
 
20665
+       PR c++/57899
 
20666
+       * pt.c (instantiate_template_1): Save/restore local_specializations.
 
20667
+
 
20668
+2014-01-29  Jason Merrill  <jason@redhat.com>
 
20669
+
 
20670
+       PR c++/59989
 
20671
+       * pt.c (expand_template_argument_pack): Correct
 
20672
+       non_default_args_count calculation.
 
20673
+
 
20674
+       PR c++/58466
 
20675
+       * pt.c (unify_pack_expansion): Call expand_template_argument_pack.
 
20676
+
 
20677
+2014-01-28  Jason Merrill  <jason@redhat.com>
 
20678
+
 
20679
+       PR c++/58632
 
20680
+       * decl.c (lookup_and_check_tag): Ignore template parameters if
 
20681
+       scope == ts_current.
 
20682
+       * pt.c (check_template_shadow): Don't complain about the injected
 
20683
+       class name.
 
20684
+
 
20685
+2014-01-27  Jason Merrill  <jason@redhat.com>
 
20686
+
 
20687
+       PR c++/54652
 
20688
+       * decl.c (duplicate_decls): Always use oldtype for TYPE_DECL.
 
20689
+
 
20690
+       PR c++/58504
 
20691
+       * pt.c (tsubst_copy_and_build) [TRAIT_EXPR]: Use tsubst for
 
20692
+       types.
 
20693
+
 
20694
+       PR c++/58606
 
20695
+       * pt.c (template_parm_to_arg): Call convert_from_reference.
 
20696
+       (tsubst_template_arg): Don't strip reference refs.
 
20697
+
 
20698
+       PR c++/58639
 
20699
+       * call.c (build_aggr_conv): Reject value-initialization of reference.
 
20700
+
 
20701
+       PR c++/58812
 
20702
+       * call.c (convert_like_real): Give helpful error about excess braces
 
20703
+       for reference binding, too.
 
20704
+
 
20705
+       PR c++/58814
 
20706
+       * typeck.c (cp_build_modify_expr): Make the RHS an rvalue before
 
20707
+       stabilizing.
 
20708
+
 
20709
+       PR c++/58837
 
20710
+       * typeck.c (cp_truthvalue_conversion): Use explicit comparison for
 
20711
+       FUNCTION_DECL.
 
20712
+
 
20713
+       PR c++/59097
 
20714
+       * decl.c (compute_array_index_type): Don't call
 
20715
+       maybe_constant_value for a non-integral expression.
 
20716
+
 
20717
+       PR c++/58965
 
20718
+       * mangle.c (write_guarded_var_name): Handle null DECL_NAME.
 
20719
+
 
20720
+2014-01-24  Paolo Carlini  <paolo.carlini@oracle.com>
 
20721
+
 
20722
+       PR c++/57524
 
20723
+       * name-lookup.c (push_using_directive): Use timevar_cond_start.
 
20724
+
 
20725
+2014-01-23  Jakub Jelinek  <jakub@redhat.com>
 
20726
+
 
20727
+       PR middle-end/58809
 
20728
+       * semantics.c (finish_omp_clauses): Reject MIN_EXPR, MAX_EXPR,
 
20729
+       BIT_AND_EXPR, BIT_IOR_EXPR and BIT_XOR_EXPR on COMPLEX_TYPEs.
 
20730
+
 
20731
+2014-01-20  Marek Polacek  <polacek@redhat.com>
 
20732
+
 
20733
+       Backported from mainline
 
20734
+       2014-01-17  Marek Polacek  <polacek@redhat.com>
 
20735
+
 
20736
+       PR c++/59838
 
20737
+       * cvt.c (ocp_convert): Don't segfault on non-existing
 
20738
+       ENUM_UNDERLYING_TYPE.
 
20739
+
 
20740
+2014-01-10  Paolo Carlini  <paolo.carlini@oracle.com>
 
20741
+
 
20742
+       PR c++/56060
 
20743
+       PR c++/59730
 
20744
+       * pt.c (type_dependent_expression_p): Handle EXPR_PACK_EXPANSION.
 
20745
+
 
20746
+2013-12-12  Jason Merrill  <jason@redhat.com>
 
20747
+
 
20748
+       PR c++/58954
 
20749
+       * pt.c (resolve_overloaded_unification): Discard access checks.
 
20750
+
 
20751
+2013-12-05  Jason Merrill  <jason@redhat.com>
 
20752
+
 
20753
+       PR c++/59044
 
20754
+       PR c++/59052
 
20755
+       * pt.c (most_specialized_class): Use the partially instantiated
 
20756
+       template for deduction.  Drop the TMPL parameter.
 
20757
+
 
20758
+2013-12-04  Jakub Jelinek  <jakub@redhat.com>
 
20759
+
 
20760
+       PR c++/59268
 
20761
+       * pt.c (tsubst_copy_and_build): Handle POINTER_PLUS_EXPR.
 
20762
+
 
20763
+2013-11-27  Tom de Vries  <tom@codesourcery.com>
 
20764
+           Marc Glisse  <marc.glisse@inria.fr>
 
20765
+
 
20766
+       PR c++/59032
 
20767
+       * typeck.c (cp_build_unary_op): Allow vector increment and decrement.
 
20768
+
 
20769
+2013-11-27  Tom de Vries  <tom@codesourcery.com>
 
20770
+           Marc Glisse  <marc.glisse@inria.fr>
 
20771
+
 
20772
+       PR middle-end/59037
 
20773
+       * semantics.c (cxx_fold_indirect_ref): Don't create out-of-bounds
 
20774
+       BIT_FIELD_REF.
 
20775
+
 
20776
+2013-11-28  Jakub Jelinek  <jakub@redhat.com>
 
20777
+
 
20778
+       PR c++/59297
 
20779
+       * semantics.c (finish_omp_atomic): Call finish_expr_stmt
 
20780
+       rather than add_stmt.
 
20781
+
 
20782
+2013-11-23  Easwaran Raman  <eraman@google.com>
 
20783
+
 
20784
+       PR c++/59031
 
20785
+       * call.c (build_new_method_call_1): Comnpare function context
 
20786
+       with BASELINK_BINFO type rather than instance type before
 
20787
+       marking the call with LOOKUP_NONVIRTUAL.
 
20788
+
 
20789
+2013-10-31  Jason Merrill  <jason@redhat.com>
 
20790
+
 
20791
+       PR c++/58162
 
20792
+       * parser.c (cp_parser_late_parse_one_default_arg): Set
 
20793
+       TARGET_EXPR_DIRECT_INIT_P.
 
20794
+
 
20795
+2013-11-11  Paolo Carlini  <paolo.carlini@oracle.com>
 
20796
+
 
20797
+       * cvt.c (cp_convert_to_pointer): Call build_ptrmemfunc before
 
20798
+       maybe_warn_zero_as_null_pointer_constant to avoid duplicate
 
20799
+       -Wzero-as-null-pointer-constant diagnostics.
 
20800
+
 
20801
+       * typeck.c (build_ptrmemfunc): Use cp_build_c_cast.
 
20802
+
 
20803
+2013-10-25  Tom de Vries  <tom@codesourcery.com>
 
20804
+
 
20805
+       PR c++/58282
 
20806
+       * except.c (build_must_not_throw_expr): Handle
 
20807
+       flag_exceptions.
 
20808
+
 
20809
+2013-10-17  Paolo Carlini  <paolo.carlini@oracle.com>
 
20810
+
 
20811
+       PR c++/58596
 
20812
+       * semantics.c (lambda_expr_this_capture): Handle NSDMIs in the
 
20813
+       cp_unevaluated_operand case.
 
20814
+
 
20815
+2013-10-16  Paolo Carlini  <paolo.carlini@oracle.com>
 
20816
+
 
20817
+       PR c++/58633
 
20818
+       * parser.c (cp_parser_pseudo_destructor_name): Revert r174385 changes.
 
20819
+
 
20820
+2013-10-16  Jason Merrill  <jason@redhat.com>
 
20821
+
 
20822
+       PR c++/57850
 
20823
+       * decl2.c (dump_tu): Split out from...
 
20824
+       (cp_write_global_declarations): ...here.  Call it in PCH mode.
 
20825
+
 
20826
 2013-10-16  Release Manager
 
20827
 
 
20828
        * GCC 4.8.2 released.
 
20829
Index: gcc/cp/pt.c
 
20830
===================================================================
 
20831
--- a/src/gcc/cp/pt.c   (.../tags/gcc_4_8_2_release)
 
20832
+++ b/src/gcc/cp/pt.c   (.../branches/gcc-4_8-branch)
 
20833
@@ -170,7 +170,7 @@
 
20834
 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
 
20835
 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
 
20836
 static void regenerate_decl_from_template (tree, tree);
 
20837
-static tree most_specialized_class (tree, tree, tsubst_flags_t);
 
20838
+static tree most_specialized_class (tree, tsubst_flags_t);
 
20839
 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
 
20840
 static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree);
 
20841
 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
 
20842
@@ -1419,6 +1419,8 @@
 
20843
                    = DECL_DECLARED_INLINE_P (fn);
 
20844
                  DECL_SOURCE_LOCATION (clone)
 
20845
                    = DECL_SOURCE_LOCATION (fn);
 
20846
+                 DECL_DELETED_FN (clone)
 
20847
+                   = DECL_DELETED_FN (fn);
 
20848
                }
 
20849
              check_specialization_namespace (tmpl);
 
20850
 
 
20851
@@ -3436,7 +3438,7 @@
 
20852
           for (i = 0; i < num_packed; ++i, ++out_arg)
 
20853
             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
 
20854
          if (non_default_args_count > 0)
 
20855
-           non_default_args_count += num_packed;
 
20856
+           non_default_args_count += num_packed - 1;
 
20857
         }
 
20858
       else
 
20859
         {
 
20860
@@ -3491,6 +3493,11 @@
 
20861
       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
 
20862
     return true;
 
20863
 
 
20864
+  /* Don't complain about the injected class name, as we've already
 
20865
+     complained about the class itself.  */
 
20866
+  if (DECL_SELF_REFERENCE_P (decl))
 
20867
+    return false;
 
20868
+
 
20869
   error ("declaration of %q+#D", decl);
 
20870
   error (" shadows template parm %q+#D", olddecl);
 
20871
   return false;
 
20872
@@ -4261,7 +4268,7 @@
 
20873
       if (COMPLETE_TYPE_P (inst_type)
 
20874
          && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
 
20875
        {
 
20876
-         tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
 
20877
+         tree spec = most_specialized_class (inst_type, tf_none);
 
20878
          if (spec && TREE_TYPE (spec) == type)
 
20879
            permerror (input_location,
 
20880
                       "partial specialization of %qT after instantiation "
 
20881
@@ -6672,6 +6679,8 @@
 
20882
           /* Store this argument.  */
 
20883
           if (arg == error_mark_node)
 
20884
             lost++;
 
20885
+         if (lost)
 
20886
+           break;
 
20887
           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
 
20888
 
 
20889
          /* We are done with all of the arguments.  */
 
20890
@@ -8572,7 +8581,7 @@
 
20891
 
 
20892
   /* Determine what specialization of the original template to
 
20893
      instantiate.  */
 
20894
-  t = most_specialized_class (type, templ, tf_warning_or_error);
 
20895
+  t = most_specialized_class (type, tf_warning_or_error);
 
20896
   if (t == error_mark_node)
 
20897
     {
 
20898
       TYPE_BEING_DEFINED (type) = 1;
 
20899
@@ -12694,27 +12703,43 @@
 
20900
   tsubst_expr ((NODE), args, complain, in_decl,        \
 
20901
               integral_constant_expression_p)
 
20902
   tree decl, init, cond, incr;
 
20903
-  bool init_decl;
 
20904
 
 
20905
   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
 
20906
   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
 
20907
   decl = TREE_OPERAND (init, 0);
 
20908
   init = TREE_OPERAND (init, 1);
 
20909
-  /* Do this before substituting into decl to handle 'auto'.  */
 
20910
-  init_decl = (init && TREE_CODE (init) == DECL_EXPR);
 
20911
-  init = RECUR (init);
 
20912
-  decl = RECUR (decl);
 
20913
-  if (init_decl)
 
20914
+  tree decl_expr = NULL_TREE;
 
20915
+  if (init && TREE_CODE (init) == DECL_EXPR)
 
20916
     {
 
20917
-      gcc_assert (!processing_template_decl);
 
20918
-      init = DECL_INITIAL (decl);
 
20919
-      DECL_INITIAL (decl) = NULL_TREE;
 
20920
+      /* We need to jump through some hoops to handle declarations in the
 
20921
+        for-init-statement, since we might need to handle auto deduction,
 
20922
+        but we need to keep control of initialization.  */
 
20923
+      decl_expr = init;
 
20924
+      init = DECL_INITIAL (DECL_EXPR_DECL (init));
 
20925
+      decl = tsubst_decl (decl, args, complain);
 
20926
     }
 
20927
+  else
 
20928
+    decl = RECUR (decl);
 
20929
+  init = RECUR (init);
 
20930
 
 
20931
+  tree auto_node = type_uses_auto (TREE_TYPE (decl));
 
20932
+  if (auto_node && init)
 
20933
+    TREE_TYPE (decl)
 
20934
+      = do_auto_deduction (TREE_TYPE (decl), init, auto_node);
 
20935
+
 
20936
   gcc_assert (!type_dependent_expression_p (decl));
 
20937
 
 
20938
   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
 
20939
     {
 
20940
+      if (decl_expr)
 
20941
+       {
 
20942
+         /* Declare the variable, but don't let that initialize it.  */
 
20943
+         tree init_sav = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
 
20944
+         DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL_TREE;
 
20945
+         RECUR (decl_expr);
 
20946
+         DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init_sav;
 
20947
+       }
 
20948
+
 
20949
       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
 
20950
       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
 
20951
       if (TREE_CODE (incr) == MODIFY_EXPR)
 
20952
@@ -12731,8 +12756,14 @@
 
20953
       return;
 
20954
     }
 
20955
 
 
20956
-  if (init && !init_decl)
 
20957
+  if (decl_expr)
 
20958
     {
 
20959
+      /* Declare and initialize the variable.  */
 
20960
+      RECUR (decl_expr);
 
20961
+      init = NULL_TREE;
 
20962
+    }
 
20963
+  else if (init)
 
20964
+    {
 
20965
       tree c;
 
20966
       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
 
20967
        {
 
20968
@@ -13710,6 +13741,10 @@
 
20969
        RETURN (r);
 
20970
       }
 
20971
 
 
20972
+    case POINTER_PLUS_EXPR:
 
20973
+      return fold_build_pointer_plus (RECUR (TREE_OPERAND (t, 0)),
 
20974
+                                     RECUR (TREE_OPERAND (t, 1)));
 
20975
+
 
20976
     case SCOPE_REF:
 
20977
       RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
 
20978
                                  /*address_p=*/false));
 
20979
@@ -14471,12 +14506,12 @@
 
20980
 
 
20981
     case TRAIT_EXPR:
 
20982
       {
 
20983
-       tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
 
20984
-                                 complain, in_decl);
 
20985
+       tree type1 = tsubst (TRAIT_EXPR_TYPE1 (t), args,
 
20986
+                            complain, in_decl);
 
20987
 
 
20988
        tree type2 = TRAIT_EXPR_TYPE2 (t);
 
20989
        if (type2)
 
20990
-         type2 = tsubst_copy (type2, args, complain, in_decl);
 
20991
+         type2 = tsubst (type2, args, complain, in_decl);
 
20992
        
 
20993
        RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
 
20994
       }
 
20995
@@ -14778,6 +14813,8 @@
 
20996
   /* Instantiation of the function happens in the context of the function
 
20997
      template, not the context of the overload resolution we're doing.  */
 
20998
   push_to_top_level ();
 
20999
+  struct pointer_map_t *saved_local_specializations = local_specializations;
 
21000
+  local_specializations = NULL;
 
21001
   /* If there are dependent arguments, e.g. because we're doing partial
 
21002
      ordering, make sure processing_template_decl stays set.  */
 
21003
   if (uses_template_parms (targ_ptr))
 
21004
@@ -14793,6 +14830,7 @@
 
21005
                   targ_ptr, complain, gen_tmpl);
 
21006
   if (DECL_CLASS_SCOPE_P (gen_tmpl))
 
21007
     pop_nested_class ();
 
21008
+  local_specializations = saved_local_specializations;
 
21009
   pop_from_top_level ();
 
21010
 
 
21011
   if (fndecl == error_mark_node)
 
21012
@@ -15192,8 +15230,11 @@
 
21013
 
 
21014
   /* If we're looking for an exact match, check that what we got
 
21015
      is indeed an exact match.  It might not be if some template
 
21016
-     parameters are used in non-deduced contexts.  */
 
21017
-  if (strict == DEDUCE_EXACT)
 
21018
+     parameters are used in non-deduced contexts.  But don't check
 
21019
+     for an exact match if we have dependent template arguments;
 
21020
+     in that case we're doing partial ordering, and we already know
 
21021
+     that we have two candidates that will provide the actual type.  */
 
21022
+  if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
 
21023
     {
 
21024
       tree substed = TREE_TYPE (decl);
 
21025
       unsigned int i;
 
21026
@@ -15749,7 +15790,7 @@
 
21027
          if (subargs != error_mark_node
 
21028
              && !any_dependent_template_arguments_p (subargs))
 
21029
            {
 
21030
-             elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
 
21031
+             elem = TREE_TYPE (instantiate_template (fn, subargs, tf_none));
 
21032
              if (try_one_overload (tparms, targs, tempargs, parm,
 
21033
                                    elem, strict, sub_strict, addr_p, explain_p)
 
21034
                  && (!goodfn || !same_type_p (goodfn, elem)))
 
21035
@@ -16207,6 +16248,9 @@
 
21036
   tree pattern = PACK_EXPANSION_PATTERN (parm);
 
21037
   tree pack, packs = NULL_TREE;
 
21038
   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
 
21039
+
 
21040
+  packed_args = expand_template_argument_pack (packed_args);
 
21041
+
 
21042
   int len = TREE_VEC_LENGTH (packed_args);
 
21043
 
 
21044
   /* Determine the parameter packs we will be deducing from the
 
21045
@@ -16574,9 +16618,11 @@
 
21046
          if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
 
21047
              && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
 
21048
            return unify_template_deduction_failure (explain_p, parm, arg);
 
21049
-
 
21050
          {
 
21051
            tree parmvec = TYPE_TI_ARGS (parm);
 
21052
+           /* An alias template name is never deduced.  */
 
21053
+           if (TYPE_ALIAS_P (arg))
 
21054
+             arg = strip_typedefs (arg);
 
21055
            tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
 
21056
            tree full_argvec = add_to_template_args (targs, argvec);
 
21057
            tree parm_parms 
 
21058
@@ -17553,7 +17599,7 @@
 
21059
     return -1;
 
21060
 }
 
21061
 
 
21062
-/* Determine which of two partial specializations of MAIN_TMPL is more
 
21063
+/* Determine which of two partial specializations of TMPL is more
 
21064
    specialized.
 
21065
 
 
21066
    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
 
21067
@@ -17569,7 +17615,7 @@
 
21068
    two templates is more specialized.  */
 
21069
 
 
21070
 static int
 
21071
-more_specialized_class (tree main_tmpl, tree pat1, tree pat2)
 
21072
+more_specialized_class (tree tmpl, tree pat1, tree pat2)
 
21073
 {
 
21074
   tree targs;
 
21075
   tree tmpl1, tmpl2;
 
21076
@@ -17584,7 +17630,7 @@
 
21077
      types in the arguments, and we need our dependency check functions
 
21078
      to behave correctly.  */
 
21079
   ++processing_template_decl;
 
21080
-  targs = get_class_bindings (main_tmpl, TREE_VALUE (pat1),
 
21081
+  targs = get_class_bindings (tmpl, TREE_VALUE (pat1),
 
21082
                              CLASSTYPE_TI_ARGS (tmpl1),
 
21083
                              CLASSTYPE_TI_ARGS (tmpl2));
 
21084
   if (targs)
 
21085
@@ -17593,7 +17639,7 @@
 
21086
       any_deductions = true;
 
21087
     }
 
21088
 
 
21089
-  targs = get_class_bindings (main_tmpl, TREE_VALUE (pat2),
 
21090
+  targs = get_class_bindings (tmpl, TREE_VALUE (pat2),
 
21091
                              CLASSTYPE_TI_ARGS (tmpl2),
 
21092
                              CLASSTYPE_TI_ARGS (tmpl1));
 
21093
   if (targs)
 
21094
@@ -17673,7 +17719,7 @@
 
21095
 }
 
21096
 
 
21097
 /* Return the innermost template arguments that, when applied to a partial
 
21098
-   specialization of MAIN_TMPL whose innermost template parameters are
 
21099
+   specialization of TMPL whose innermost template parameters are
 
21100
    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
 
21101
    ARGS.
 
21102
 
 
21103
@@ -17688,7 +17734,7 @@
 
21104
    is bound to `double'.  */
 
21105
 
 
21106
 static tree
 
21107
-get_class_bindings (tree main_tmpl, tree tparms, tree spec_args, tree args)
 
21108
+get_class_bindings (tree tmpl, tree tparms, tree spec_args, tree args)
 
21109
 {
 
21110
   int i, ntparms = TREE_VEC_LENGTH (tparms);
 
21111
   tree deduced_args;
 
21112
@@ -17728,8 +17774,8 @@
 
21113
      `T' is `A' but unify () does not check whether `typename T::X'
 
21114
      is `int'.  */
 
21115
   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
 
21116
-  spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (main_tmpl),
 
21117
-                                    spec_args, main_tmpl,
 
21118
+  spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
 
21119
+                                    spec_args, tmpl,
 
21120
                                     tf_none, false, false);
 
21121
   if (spec_args == error_mark_node
 
21122
       /* We only need to check the innermost arguments; the other
 
21123
@@ -17877,8 +17923,8 @@
 
21124
 }
 
21125
 
 
21126
 /* Return the most specialized of the class template partial
 
21127
-   specializations of TMPL which can produce TYPE, a specialization of
 
21128
-   TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
 
21129
+   specializations which can produce TYPE, a specialization of some class
 
21130
+   template.  The value returned is actually a TREE_LIST; the TREE_TYPE is
 
21131
    a _TYPE node corresponding to the partial specialization, while the
 
21132
    TREE_PURPOSE is the set of template arguments that must be
 
21133
    substituted into the TREE_TYPE in order to generate TYPE.
 
21134
@@ -17885,11 +17931,11 @@
 
21135
 
 
21136
    If the choice of partial specialization is ambiguous, a diagnostic
 
21137
    is issued, and the error_mark_node is returned.  If there are no
 
21138
-   partial specializations of TMPL matching TYPE, then NULL_TREE is
 
21139
-   returned.  */
 
21140
+   partial specializations matching TYPE, then NULL_TREE is
 
21141
+   returned, indicating that the primary template should be used.  */
 
21142
 
 
21143
 static tree
 
21144
-most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
 
21145
+most_specialized_class (tree type, tsubst_flags_t complain)
 
21146
 {
 
21147
   tree list = NULL_TREE;
 
21148
   tree t;
 
21149
@@ -17896,11 +17942,11 @@
 
21150
   tree champ;
 
21151
   int fate;
 
21152
   bool ambiguous_p;
 
21153
-  tree args;
 
21154
   tree outer_args = NULL_TREE;
 
21155
 
 
21156
-  tmpl = most_general_template (tmpl);
 
21157
-  args = CLASSTYPE_TI_ARGS (type);
 
21158
+  tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
 
21159
+  tree main_tmpl = most_general_template (tmpl);
 
21160
+  tree args = CLASSTYPE_TI_ARGS (type);
 
21161
 
 
21162
   /* For determining which partial specialization to use, only the
 
21163
      innermost args are interesting.  */
 
21164
@@ -17910,7 +17956,7 @@
 
21165
       args = INNERMOST_TEMPLATE_ARGS (args);
 
21166
     }
 
21167
 
 
21168
-  for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
 
21169
+  for (t = DECL_TEMPLATE_SPECIALIZATIONS (main_tmpl); t; t = TREE_CHAIN (t))
 
21170
     {
 
21171
       tree partial_spec_args;
 
21172
       tree spec_args;
 
21173
@@ -17944,8 +17990,7 @@
 
21174
 
 
21175
       partial_spec_args =
 
21176
          coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
 
21177
-                                add_to_template_args (outer_args,
 
21178
-                                                      partial_spec_args),
 
21179
+                                partial_spec_args,
 
21180
                                 tmpl, tf_none,
 
21181
                                 /*require_all_args=*/true,
 
21182
                                 /*use_default_args=*/true);
 
21183
@@ -18553,6 +18598,10 @@
 
21184
 {
 
21185
   tree fntype, spec, noex, clone;
 
21186
 
 
21187
+  /* Don't instantiate a noexcept-specification from template context.  */
 
21188
+  if (processing_template_decl)
 
21189
+    return;
 
21190
+
 
21191
   if (DECL_CLONED_FUNCTION_P (fn))
 
21192
     fn = DECL_CLONED_FUNCTION (fn);
 
21193
   fntype = TREE_TYPE (fn);
 
21194
@@ -19955,6 +20004,10 @@
 
21195
       if (TREE_CODE (expression) == SCOPE_REF)
 
21196
        return false;
 
21197
 
 
21198
+      /* Always dependent, on the number of arguments if nothing else.  */
 
21199
+      if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
 
21200
+       return true;
 
21201
+
 
21202
       if (BASELINK_P (expression))
 
21203
        expression = BASELINK_FUNCTIONS (expression);
 
21204
 
 
21205
Index: gcc/cp/semantics.c
 
21206
===================================================================
 
21207
--- a/src/gcc/cp/semantics.c    (.../tags/gcc_4_8_2_release)
 
21208
+++ b/src/gcc/cp/semantics.c    (.../branches/gcc-4_8-branch)
 
21209
@@ -2501,7 +2501,8 @@
 
21210
   tree decl;
 
21211
 
 
21212
   decl = fname_decl (input_location, C_RID_CODE (id), id);
 
21213
-  if (processing_template_decl && current_function_decl)
 
21214
+  if (processing_template_decl && current_function_decl
 
21215
+      && decl != error_mark_node)
 
21216
     decl = DECL_NAME (decl);
 
21217
   return decl;
 
21218
 }
 
21219
@@ -3853,7 +3854,7 @@
 
21220
             linkage of all functions, and as that causes writes to
 
21221
             the data mapped in from the PCH file, it's advantageous
 
21222
             to mark the functions at this point.  */
 
21223
-         if (!DECL_IMPLICIT_INSTANTIATION (fn))
 
21224
+         if (!DECL_IMPLICIT_INSTANTIATION (fn) || DECL_DEFAULTED_FN (fn))
 
21225
            {
 
21226
              /* This function must have external linkage, as
 
21227
                 otherwise DECL_INTERFACE_KNOWN would have been
 
21228
@@ -4291,7 +4292,8 @@
 
21229
              error ("%qE has invalid type for %<reduction%>", t);
 
21230
              remove = true;
 
21231
            }
 
21232
-         else if (FLOAT_TYPE_P (TREE_TYPE (t)))
 
21233
+         else if (FLOAT_TYPE_P (TREE_TYPE (t))
 
21234
+                  || TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
 
21235
            {
 
21236
              enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
 
21237
              switch (r_code)
 
21238
@@ -4299,10 +4301,26 @@
 
21239
                case PLUS_EXPR:
 
21240
                case MULT_EXPR:
 
21241
                case MINUS_EXPR:
 
21242
+                 break;
 
21243
                case MIN_EXPR:
 
21244
                case MAX_EXPR:
 
21245
+                 if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
 
21246
+                   r_code = ERROR_MARK;
 
21247
                  break;
 
21248
+               case BIT_AND_EXPR:
 
21249
+               case BIT_XOR_EXPR:
 
21250
+               case BIT_IOR_EXPR:
 
21251
                default:
 
21252
+                 r_code = ERROR_MARK;
 
21253
+                 break;
 
21254
+               case TRUTH_ANDIF_EXPR:
 
21255
+               case TRUTH_ORIF_EXPR:
 
21256
+                 if (FLOAT_TYPE_P (TREE_TYPE (t)))
 
21257
+                   r_code = ERROR_MARK;
 
21258
+                 break;
 
21259
+               }
 
21260
+             if (r_code == ERROR_MARK)
 
21261
+               {
 
21262
                  error ("%qE has invalid type for %<reduction(%s)%>",
 
21263
                         t, operator_name_info[r_code].name);
 
21264
                  remove = true;
 
21265
@@ -5059,7 +5077,7 @@
 
21266
        }
 
21267
       stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node, stmt);
 
21268
     }
 
21269
-  add_stmt (stmt);
 
21270
+  finish_expr_stmt (stmt);
 
21271
 }
 
21272
 
 
21273
 void
 
21274
@@ -7543,7 +7561,7 @@
 
21275
              unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
 
21276
              tree index = bitsize_int (indexi);
 
21277
 
 
21278
-             if (offset/part_widthi <= TYPE_VECTOR_SUBPARTS (op00type))
 
21279
+             if (offset / part_widthi < TYPE_VECTOR_SUBPARTS (op00type))
 
21280
                return fold_build3_loc (loc,
 
21281
                                        BIT_FIELD_REF, type, op00,
 
21282
                                        part_width, index);
 
21283
@@ -9481,7 +9499,14 @@
 
21284
   /* In unevaluated context this isn't an odr-use, so just return the
 
21285
      nearest 'this'.  */
 
21286
   if (cp_unevaluated_operand)
 
21287
-    return lookup_name (this_identifier);
 
21288
+    {
 
21289
+      /* In an NSDMI the fake 'this' pointer that we're using for
 
21290
+        parsing is in scope_chain.  */
 
21291
+      if (LAMBDA_EXPR_EXTRA_SCOPE (lambda)
 
21292
+         && TREE_CODE (LAMBDA_EXPR_EXTRA_SCOPE (lambda)) == FIELD_DECL)
 
21293
+       return scope_chain->x_current_class_ptr;
 
21294
+      return lookup_name (this_identifier);
 
21295
+    }
 
21296
 
 
21297
   /* Try to default capture 'this' if we can.  */
 
21298
   if (!this_capture
 
21299
Index: gcc/cp/decl2.c
 
21300
===================================================================
 
21301
--- a/src/gcc/cp/decl2.c        (.../tags/gcc_4_8_2_release)
 
21302
+++ b/src/gcc/cp/decl2.c        (.../branches/gcc-4_8-branch)
 
21303
@@ -2884,7 +2884,7 @@
 
21304
       TREE_PUBLIC (fn) = TREE_PUBLIC (var);
 
21305
       DECL_ARTIFICIAL (fn) = true;
 
21306
       DECL_COMDAT (fn) = DECL_COMDAT (var);
 
21307
-      DECL_EXTERNAL (fn) = true;
 
21308
+      DECL_EXTERNAL (fn) = DECL_EXTERNAL (var);
 
21309
       if (DECL_ONE_ONLY (var))
 
21310
        make_decl_one_only (fn, cxx_comdat_group (fn));
 
21311
       if (TREE_PUBLIC (var))
 
21312
@@ -3946,6 +3946,8 @@
 
21313
       if (TREE_PUBLIC (var))
 
21314
        {
 
21315
           tree single_init_fn = get_tls_init_fn (var);
 
21316
+         if (single_init_fn == NULL_TREE)
 
21317
+           continue;
 
21318
          cgraph_node *alias
 
21319
            = cgraph_same_body_alias (cgraph_get_create_node (fn),
 
21320
                                      single_init_fn, fn);
 
21321
@@ -3960,6 +3962,22 @@
 
21322
   expand_or_defer_fn (finish_function (0));
 
21323
 }
 
21324
 
 
21325
+/* The entire file is now complete.  If requested, dump everything
 
21326
+   to a file.  */
 
21327
+
 
21328
+static void
 
21329
+dump_tu (void)
 
21330
+{
 
21331
+  int flags;
 
21332
+  FILE *stream = dump_begin (TDI_tu, &flags);
 
21333
+
 
21334
+  if (stream)
 
21335
+    {
 
21336
+      dump_node (global_namespace, flags & ~TDF_SLIM, stream);
 
21337
+      dump_end (TDI_tu, stream);
 
21338
+    }
 
21339
+}
 
21340
+
 
21341
 /* This routine is called at the end of compilation.
 
21342
    Its job is to create all the code needed to initialize and
 
21343
    destroy the global aggregates.  We do the destruction
 
21344
@@ -3990,6 +4008,7 @@
 
21345
   if (pch_file)
 
21346
     {
 
21347
       c_common_write_pch ();
 
21348
+      dump_tu ();
 
21349
       return;
 
21350
     }
 
21351
 
 
21352
@@ -4359,17 +4378,8 @@
 
21353
 
 
21354
   /* The entire file is now complete.  If requested, dump everything
 
21355
      to a file.  */
 
21356
-  {
 
21357
-    int flags;
 
21358
-    FILE *stream = dump_begin (TDI_tu, &flags);
 
21359
+  dump_tu ();
 
21360
 
 
21361
-    if (stream)
 
21362
-      {
 
21363
-       dump_node (global_namespace, flags & ~TDF_SLIM, stream);
 
21364
-       dump_end (TDI_tu, stream);
 
21365
-      }
 
21366
-  }
 
21367
-
 
21368
   if (flag_detailed_statistics)
 
21369
     {
 
21370
       dump_tree_statistics ();
 
21371
Index: gcc/cp/parser.c
 
21372
===================================================================
 
21373
--- a/src/gcc/cp/parser.c       (.../tags/gcc_4_8_2_release)
 
21374
+++ b/src/gcc/cp/parser.c       (.../branches/gcc-4_8-branch)
 
21375
@@ -6421,10 +6421,6 @@
 
21376
   /* Look for the `~'.  */
 
21377
   cp_parser_require (parser, CPP_COMPL, RT_COMPL);
 
21378
 
 
21379
-  /* Once we see the ~, this has to be a pseudo-destructor.  */
 
21380
-  if (!processing_template_decl && !cp_parser_error_occurred (parser))
 
21381
-    cp_parser_commit_to_tentative_parse (parser);
 
21382
-
 
21383
   /* Look for the type-name again.  We are not responsible for
 
21384
      checking that it matches the first type-name.  */
 
21385
   *type = cp_parser_nonclass_name (parser);
 
21386
@@ -14168,25 +14164,7 @@
 
21387
   /* Look up the type-name.  */
 
21388
   type_decl = cp_parser_lookup_name_simple (parser, identifier, token->location);
 
21389
 
 
21390
-  if (TREE_CODE (type_decl) == USING_DECL)
 
21391
-    {
 
21392
-      if (!DECL_DEPENDENT_P (type_decl))
 
21393
-       type_decl = strip_using_decl (type_decl);
 
21394
-      else if (USING_DECL_TYPENAME_P (type_decl))
 
21395
-       {
 
21396
-         /* We have found a type introduced by a using
 
21397
-            declaration at class scope that refers to a dependent
 
21398
-            type.
 
21399
-            
 
21400
-            using typename :: [opt] nested-name-specifier unqualified-id ;
 
21401
-         */
 
21402
-         type_decl = make_typename_type (TREE_TYPE (type_decl),
 
21403
-                                         DECL_NAME (type_decl),
 
21404
-                                         typename_type, tf_error);
 
21405
-         if (type_decl != error_mark_node)
 
21406
-           type_decl = TYPE_NAME (type_decl);
 
21407
-       }
 
21408
-    }
 
21409
+  type_decl = strip_using_decl (type_decl);
 
21410
   
 
21411
   if (TREE_CODE (type_decl) != TYPE_DECL
 
21412
       && (objc_is_id (identifier) || objc_is_class_name (identifier)))
 
21413
@@ -14742,7 +14720,8 @@
 
21414
         {
 
21415
           underlying_type = grokdeclarator (NULL, &type_specifiers, TYPENAME,
 
21416
                                             /*initialized=*/0, NULL);
 
21417
-          if (underlying_type == error_mark_node)
 
21418
+          if (underlying_type == error_mark_node
 
21419
+             || check_for_bare_parameter_packs (underlying_type))
 
21420
             underlying_type = NULL_TREE;
 
21421
         }
 
21422
     }
 
21423
@@ -22209,6 +22188,9 @@
 
21424
   tree cast;
 
21425
   bool nonconst_p;
 
21426
 
 
21427
+  if (!type)
 
21428
+    type = error_mark_node;
 
21429
+
 
21430
   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
 
21431
     {
 
21432
       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
 
21433
@@ -22576,6 +22558,9 @@
 
21434
              && CONSTRUCTOR_IS_DIRECT_INIT (parsed_arg))
 
21435
            flags = LOOKUP_NORMAL;
 
21436
          parsed_arg = digest_init_flags (TREE_TYPE (decl), parsed_arg, flags);
 
21437
+         if (TREE_CODE (parsed_arg) == TARGET_EXPR)
 
21438
+           /* This represents the whole initialization.  */
 
21439
+           TARGET_EXPR_DIRECT_INIT_P (parsed_arg) = true;
 
21440
        }
 
21441
     }
 
21442
 
 
21443
Index: gcc/cp/call.c
 
21444
===================================================================
 
21445
--- a/src/gcc/cp/call.c (.../tags/gcc_4_8_2_release)
 
21446
+++ b/src/gcc/cp/call.c (.../branches/gcc-4_8-branch)
 
21447
@@ -892,6 +892,9 @@
 
21448
 
 
21449
       if (i < CONSTRUCTOR_NELTS (ctor))
 
21450
        val = CONSTRUCTOR_ELT (ctor, i)->value;
 
21451
+      else if (TREE_CODE (ftype) == REFERENCE_TYPE)
 
21452
+       /* Value-initialization of reference is ill-formed.  */
 
21453
+       return NULL;
 
21454
       else
 
21455
        {
 
21456
          if (empty_ctor == NULL_TREE)
 
21457
@@ -5806,9 +5809,11 @@
 
21458
       && convs->kind != ck_ambig
 
21459
       && (convs->kind != ck_ref_bind
 
21460
          || convs->user_conv_p)
 
21461
-      && convs->kind != ck_rvalue
 
21462
+      && (convs->kind != ck_rvalue
 
21463
+         || SCALAR_TYPE_P (totype))
 
21464
       && convs->kind != ck_base)
 
21465
     {
 
21466
+      bool complained = false;
 
21467
       conversion *t = convs;
 
21468
 
 
21469
       /* Give a helpful error if this is bad because of excess braces.  */
 
21470
@@ -5816,7 +5821,14 @@
 
21471
          && SCALAR_TYPE_P (totype)
 
21472
          && CONSTRUCTOR_NELTS (expr) > 0
 
21473
          && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
 
21474
-       permerror (loc, "too many braces around initializer for %qT", totype);
 
21475
+       {
 
21476
+         complained = true;
 
21477
+         permerror (loc, "too many braces around initializer "
 
21478
+                    "for %qT", totype);
 
21479
+         while (BRACE_ENCLOSED_INITIALIZER_P (expr)
 
21480
+                && CONSTRUCTOR_NELTS (expr) == 1)
 
21481
+           expr = CONSTRUCTOR_ELT (expr, 0)->value;
 
21482
+       }
 
21483
 
 
21484
       for (; t ; t = next_conversion (t))
 
21485
        {
 
21486
@@ -5853,8 +5865,9 @@
 
21487
            break;
 
21488
        }
 
21489
 
 
21490
-      permerror (loc, "invalid conversion from %qT to %qT",
 
21491
-                TREE_TYPE (expr), totype);
 
21492
+      if (!complained)
 
21493
+       permerror (loc, "invalid conversion from %qT to %qT",
 
21494
+                  TREE_TYPE (expr), totype);
 
21495
       if (fn)
 
21496
        permerror (DECL_SOURCE_LOCATION (fn),
 
21497
                   "  initializing argument %P of %qD", argnum, fn);
 
21498
@@ -5999,6 +6012,8 @@
 
21499
           to avoid the error about taking the address of a temporary.  */
 
21500
        array = cp_build_addr_expr (array, complain);
 
21501
        array = cp_convert (build_pointer_type (elttype), array, complain);
 
21502
+       if (array == error_mark_node)
 
21503
+         return error_mark_node;
 
21504
 
 
21505
        /* Build up the initializer_list object.  */
 
21506
        totype = complete_type (totype);
 
21507
@@ -6023,8 +6038,11 @@
 
21508
          return fold_if_not_in_template (expr);
 
21509
        }
 
21510
       expr = reshape_init (totype, expr, complain);
 
21511
-      return get_target_expr_sfinae (digest_init (totype, expr, complain),
 
21512
+      expr = get_target_expr_sfinae (digest_init (totype, expr, complain),
 
21513
                                     complain);
 
21514
+      if (expr != error_mark_node)
 
21515
+       TARGET_EXPR_LIST_INIT_P (expr) = true;
 
21516
+      return expr;
 
21517
 
 
21518
     default:
 
21519
       break;
 
21520
@@ -7414,7 +7432,7 @@
 
21521
   struct z_candidate *candidates = 0, *cand;
 
21522
   tree explicit_targs = NULL_TREE;
 
21523
   tree basetype = NULL_TREE;
 
21524
-  tree access_binfo;
 
21525
+  tree access_binfo, binfo;
 
21526
   tree optype;
 
21527
   tree first_mem_arg = NULL_TREE;
 
21528
   tree instance_ptr;
 
21529
@@ -7454,6 +7472,7 @@
 
21530
   if (!conversion_path)
 
21531
     conversion_path = BASELINK_BINFO (fns);
 
21532
   access_binfo = BASELINK_ACCESS_BINFO (fns);
 
21533
+  binfo = BASELINK_BINFO (fns);
 
21534
   optype = BASELINK_OPTYPE (fns);
 
21535
   fns = BASELINK_FUNCTIONS (fns);
 
21536
   if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
 
21537
@@ -7697,13 +7716,13 @@
 
21538
            {
 
21539
              /* Optimize away vtable lookup if we know that this
 
21540
                 function can't be overridden.  We need to check if
 
21541
-                the context and the instance type are the same,
 
21542
+                the context and the type where we found fn are the same,
 
21543
                 actually FN might be defined in a different class
 
21544
                 type because of a using-declaration. In this case, we
 
21545
                 do not want to perform a non-virtual call.  */
 
21546
              if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
 
21547
                  && same_type_ignoring_top_level_qualifiers_p
 
21548
-                 (DECL_CONTEXT (fn), TREE_TYPE (instance))
 
21549
+                 (DECL_CONTEXT (fn), BINFO_TYPE (binfo))
 
21550
                  && resolves_to_fixed_type_p (instance, 0))
 
21551
                flags |= LOOKUP_NONVIRTUAL;
 
21552
               if (explicit_targs)
 
21553
Index: gcc/cp/cvt.c
 
21554
===================================================================
 
21555
--- a/src/gcc/cp/cvt.c  (.../tags/gcc_4_8_2_release)
 
21556
+++ b/src/gcc/cp/cvt.c  (.../branches/gcc-4_8-branch)
 
21557
@@ -203,13 +203,13 @@
 
21558
 
 
21559
   if (null_ptr_cst_p (expr))
 
21560
     {
 
21561
-      if (complain & tf_warning)
 
21562
-       maybe_warn_zero_as_null_pointer_constant (expr, loc);
 
21563
-
 
21564
       if (TYPE_PTRMEMFUNC_P (type))
 
21565
        return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 0,
 
21566
                                 /*c_cast_p=*/false, complain);
 
21567
 
 
21568
+      if (complain & tf_warning)
 
21569
+       maybe_warn_zero_as_null_pointer_constant (expr, loc);
 
21570
+
 
21571
       /* A NULL pointer-to-data-member is represented by -1, not by
 
21572
         zero.  */
 
21573
       tree val = (TYPE_PTRDATAMEM_P (type)
 
21574
@@ -743,6 +743,7 @@
 
21575
             unspecified.  */
 
21576
          if ((complain & tf_warning)
 
21577
              && TREE_CODE (e) == INTEGER_CST
 
21578
+             && ENUM_UNDERLYING_TYPE (type)
 
21579
              && !int_fits_type_p (e, ENUM_UNDERLYING_TYPE (type)))
 
21580
            warning_at (loc, OPT_Wconversion, 
 
21581
                        "the result of the conversion is unspecified because "
 
21582
Index: gcc/cp/mangle.c
 
21583
===================================================================
 
21584
--- a/src/gcc/cp/mangle.c       (.../tags/gcc_4_8_2_release)
 
21585
+++ b/src/gcc/cp/mangle.c       (.../branches/gcc-4_8-branch)
 
21586
@@ -3478,6 +3478,7 @@
 
21587
 
 
21588
   if (G.need_abi_warning
 
21589
       /* Don't do this for a fake symbol we aren't going to emit anyway.  */
 
21590
+      && TREE_CODE (decl) != TYPE_DECL
 
21591
       && !DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
 
21592
       && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
 
21593
     {
 
21594
@@ -3773,7 +3774,8 @@
 
21595
 static void
 
21596
 write_guarded_var_name (const tree variable)
 
21597
 {
 
21598
-  if (strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
 
21599
+  if (DECL_NAME (variable)
 
21600
+      && strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
 
21601
     /* The name of a guard variable for a reference temporary should refer
 
21602
        to the reference, not the temporary.  */
 
21603
     write_string (IDENTIFIER_POINTER (DECL_NAME (variable)) + 4);
 
21604
Index: gcc/cp/cp-tree.h
 
21605
===================================================================
 
21606
--- a/src/gcc/cp/cp-tree.h      (.../tags/gcc_4_8_2_release)
 
21607
+++ b/src/gcc/cp/cp-tree.h      (.../branches/gcc-4_8-branch)
 
21608
@@ -344,7 +344,8 @@
 
21609
 /* Returns true iff NODE is a BASELINK.  */
 
21610
 #define BASELINK_P(NODE) \
 
21611
   (TREE_CODE (NODE) == BASELINK)
 
21612
-/* The BINFO indicating the base from which the BASELINK_FUNCTIONS came.  */
 
21613
+/* The BINFO indicating the base in which lookup found the
 
21614
+   BASELINK_FUNCTIONS.  */
 
21615
 #define BASELINK_BINFO(NODE) \
 
21616
   (((struct tree_baselink*) BASELINK_CHECK (NODE))->binfo)
 
21617
 /* The functions referred to by the BASELINK; either a FUNCTION_DECL,
 
21618
Index: gcc/cp/name-lookup.c
 
21619
===================================================================
 
21620
--- a/src/gcc/cp/name-lookup.c  (.../tags/gcc_4_8_2_release)
 
21621
+++ b/src/gcc/cp/name-lookup.c  (.../branches/gcc-4_8-branch)
 
21622
@@ -394,7 +394,8 @@
 
21623
     }
 
21624
 }
 
21625
 
 
21626
-/* Strip non dependent using declarations.  */
 
21627
+/* Strip non dependent using declarations. If DECL is dependent,
 
21628
+   surreptitiously create a typename_type and return it.  */
 
21629
 
 
21630
 tree
 
21631
 strip_using_decl (tree decl)
 
21632
@@ -404,6 +405,23 @@
 
21633
 
 
21634
   while (TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
 
21635
     decl = USING_DECL_DECLS (decl);
 
21636
+
 
21637
+  if (TREE_CODE (decl) == USING_DECL && DECL_DEPENDENT_P (decl)
 
21638
+      && USING_DECL_TYPENAME_P (decl))
 
21639
+    {
 
21640
+      /* We have found a type introduced by a using
 
21641
+        declaration at class scope that refers to a dependent
 
21642
+        type.
 
21643
+            
 
21644
+        using typename :: [opt] nested-name-specifier unqualified-id ;
 
21645
+      */
 
21646
+      decl = make_typename_type (TREE_TYPE (decl),
 
21647
+                                DECL_NAME (decl),
 
21648
+                                typename_type, tf_error);
 
21649
+      if (decl != error_mark_node)
 
21650
+       decl = TYPE_NAME (decl);
 
21651
+    }
 
21652
+
 
21653
   return decl;
 
21654
 }
 
21655
 
 
21656
@@ -5605,9 +5623,9 @@
 
21657
 push_using_directive (tree used)
 
21658
 {
 
21659
   tree ret;
 
21660
-  timevar_start (TV_NAME_LOOKUP);
 
21661
+  bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
 
21662
   ret = push_using_directive_1 (used);
 
21663
-  timevar_stop (TV_NAME_LOOKUP);
 
21664
+  timevar_cond_stop (TV_NAME_LOOKUP, subtime);
 
21665
   return ret;
 
21666
 }
 
21667
 
 
21668
Index: gcc/mode-switching.c
 
21669
===================================================================
 
21670
--- a/src/gcc/mode-switching.c  (.../tags/gcc_4_8_2_release)
 
21671
+++ b/src/gcc/mode-switching.c  (.../branches/gcc-4_8-branch)
 
21672
@@ -568,12 +568,15 @@
 
21673
 
 
21674
          info[bb->index].computing = last_mode;
 
21675
          /* Check for blocks without ANY mode requirements.
 
21676
-            N.B. because of MODE_AFTER, last_mode might still be different
 
21677
-            from no_mode.  */
 
21678
+            N.B. because of MODE_AFTER, last_mode might still
 
21679
+            be different from no_mode, in which case we need to
 
21680
+            mark the block as nontransparent.  */
 
21681
          if (!any_set_required)
 
21682
            {
 
21683
              ptr = new_seginfo (no_mode, BB_END (bb), bb->index, live_now);
 
21684
              add_seginfo (info + bb->index, ptr);
 
21685
+             if (last_mode != no_mode)
 
21686
+               bitmap_clear_bit (transp[bb->index], j);
 
21687
            }
 
21688
        }
 
21689
 #if defined (MODE_ENTRY) && defined (MODE_EXIT)
 
21690
Index: gcc/ipa-pure-const.c
 
21691
===================================================================
 
21692
--- a/src/gcc/ipa-pure-const.c  (.../tags/gcc_4_8_2_release)
 
21693
+++ b/src/gcc/ipa-pure-const.c  (.../branches/gcc-4_8-branch)
 
21694
@@ -588,7 +588,7 @@
 
21695
 /* Wrapper around check_decl for loads in local more.  */
 
21696
 
 
21697
 static bool
 
21698
-check_load (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
 
21699
+check_load (gimple, tree op, tree, void *data)
 
21700
 {
 
21701
   if (DECL_P (op))
 
21702
     check_decl ((funct_state)data, op, false, false);
 
21703
@@ -600,7 +600,7 @@
 
21704
 /* Wrapper around check_decl for stores in local more.  */
 
21705
 
 
21706
 static bool
 
21707
-check_store (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
 
21708
+check_store (gimple, tree op, tree, void *data)
 
21709
 {
 
21710
   if (DECL_P (op))
 
21711
     check_decl ((funct_state)data, op, true, false);
 
21712
@@ -612,7 +612,7 @@
 
21713
 /* Wrapper around check_decl for loads in ipa mode.  */
 
21714
 
 
21715
 static bool
 
21716
-check_ipa_load (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
 
21717
+check_ipa_load (gimple, tree op, tree, void *data)
 
21718
 {
 
21719
   if (DECL_P (op))
 
21720
     check_decl ((funct_state)data, op, false, true);
 
21721
@@ -624,7 +624,7 @@
 
21722
 /* Wrapper around check_decl for stores in ipa mode.  */
 
21723
 
 
21724
 static bool
 
21725
-check_ipa_store (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
 
21726
+check_ipa_store (gimple, tree op, tree, void *data)
 
21727
 {
 
21728
   if (DECL_P (op))
 
21729
     check_decl ((funct_state)data, op, true, true);
 
21730
Index: gcc/cse.c
 
21731
===================================================================
 
21732
--- a/src/gcc/cse.c     (.../tags/gcc_4_8_2_release)
 
21733
+++ b/src/gcc/cse.c     (.../branches/gcc-4_8-branch)
 
21734
@@ -1824,7 +1824,7 @@
 
21735
       }
 
21736
 }
 
21737
 
 
21738
-/* Function called for each rtx to check whether true dependence exist.  */
 
21739
+/* Function called for each rtx to check whether an anti dependence exist.  */
 
21740
 struct check_dependence_data
 
21741
 {
 
21742
   enum machine_mode mode;
 
21743
@@ -1837,7 +1837,7 @@
 
21744
 {
 
21745
   struct check_dependence_data *d = (struct check_dependence_data *) data;
 
21746
   if (*x && MEM_P (*x))
 
21747
-    return canon_true_dependence (d->exp, d->mode, d->addr, *x, NULL_RTX);
 
21748
+    return canon_anti_dependence (*x, true, d->exp, d->mode, d->addr);
 
21749
   else
 
21750
     return 0;
 
21751
 }
 
21752
@@ -6082,6 +6082,18 @@
 
21753
        return x;
 
21754
       }
 
21755
 
 
21756
+    case UNSIGNED_FLOAT:
 
21757
+      {
 
21758
+       rtx new_rtx = cse_process_notes (XEXP (x, 0), object, changed);
 
21759
+       /* We don't substitute negative VOIDmode constants into these rtx,
 
21760
+          since they would impede folding.  */
 
21761
+       if (GET_MODE (new_rtx) != VOIDmode
 
21762
+           || (CONST_INT_P (new_rtx) && INTVAL (new_rtx) >= 0)
 
21763
+           || (CONST_DOUBLE_P (new_rtx) && CONST_DOUBLE_HIGH (new_rtx) >= 0))
 
21764
+         validate_change (object, &XEXP (x, 0), new_rtx, 0);
 
21765
+       return x;
 
21766
+      }
 
21767
+
 
21768
     case REG:
 
21769
       i = REG_QTY (REGNO (x));
 
21770
 
 
21771
Index: gcc/tree-ssa-math-opts.c
 
21772
===================================================================
 
21773
--- a/src/gcc/tree-ssa-math-opts.c      (.../tags/gcc_4_8_2_release)
 
21774
+++ b/src/gcc/tree-ssa-math-opts.c      (.../branches/gcc-4_8-branch)
 
21775
@@ -1718,7 +1718,9 @@
 
21776
 
 
21777
   if (rhs_class == GIMPLE_BINARY_RHS)
 
21778
     {
 
21779
+      int i;
 
21780
       struct symbolic_number n1, n2;
 
21781
+      unsigned HOST_WIDEST_INT mask;
 
21782
       tree source_expr2;
 
21783
 
 
21784
       if (code != BIT_IOR_EXPR)
 
21785
@@ -1744,6 +1746,15 @@
 
21786
            return NULL_TREE;
 
21787
 
 
21788
          n->size = n1.size;
 
21789
+         for (i = 0, mask = 0xff; i < n->size; i++, mask <<= BITS_PER_UNIT)
 
21790
+           {
 
21791
+             unsigned HOST_WIDEST_INT masked1, masked2;
 
21792
+
 
21793
+             masked1 = n1.n & mask;
 
21794
+             masked2 = n2.n & mask;
 
21795
+             if (masked1 && masked2 && masked1 != masked2)
 
21796
+               return NULL_TREE;
 
21797
+           }
 
21798
          n->n = n1.n | n2.n;
 
21799
 
 
21800
          if (!verify_symbolic_number_p (n, stmt))
 
21801
Index: gcc/sel-sched.c
 
21802
===================================================================
 
21803
--- a/src/gcc/sel-sched.c       (.../tags/gcc_4_8_2_release)
 
21804
+++ b/src/gcc/sel-sched.c       (.../branches/gcc-4_8-branch)
 
21805
@@ -1253,7 +1253,7 @@
 
21806
 
 
21807
       if (!HARD_FRAME_POINTER_IS_FRAME_POINTER)
 
21808
         add_to_hard_reg_set (&reg_rename_p->unavailable_hard_regs, 
 
21809
-                            Pmode, HARD_FRAME_POINTER_IS_FRAME_POINTER);
 
21810
+                            Pmode, HARD_FRAME_POINTER_REGNUM);
 
21811
     }
 
21812
 
 
21813
 #ifdef STACK_REGS
 
21814
Index: gcc/gimple-low.c
 
21815
===================================================================
 
21816
--- a/src/gcc/gimple-low.c      (.../tags/gcc_4_8_2_release)
 
21817
+++ b/src/gcc/gimple-low.c      (.../branches/gcc-4_8-branch)
 
21818
@@ -238,6 +238,7 @@
 
21819
            break;
 
21820
          arg = gimple_call_arg (stmt, i);
 
21821
          if (p == error_mark_node
 
21822
+             || DECL_ARG_TYPE (p) == error_mark_node
 
21823
              || arg == error_mark_node
 
21824
              || (!types_compatible_p (DECL_ARG_TYPE (p), TREE_TYPE (arg))
 
21825
                  && !fold_convertible_p (DECL_ARG_TYPE (p), arg)))
 
21826
Index: gcc/tree-ssa-sink.c
 
21827
===================================================================
 
21828
--- a/src/gcc/tree-ssa-sink.c   (.../tags/gcc_4_8_2_release)
 
21829
+++ b/src/gcc/tree-ssa-sink.c   (.../branches/gcc-4_8-branch)
 
21830
@@ -559,7 +559,7 @@
 
21831
 execute_sink_code (void)
 
21832
 {
 
21833
   loop_optimizer_init (LOOPS_NORMAL);
 
21834
-
 
21835
+  split_critical_edges ();
 
21836
   connect_infinite_loops_to_exit ();
 
21837
   memset (&sink_stats, 0, sizeof (sink_stats));
 
21838
   calculate_dominance_info (CDI_DOMINATORS);
 
21839
Index: gcc/config.in
 
21840
===================================================================
 
21841
--- a/src/gcc/config.in (.../tags/gcc_4_8_2_release)
 
21842
+++ b/src/gcc/config.in (.../branches/gcc-4_8-branch)
 
21843
@@ -363,6 +363,12 @@
 
21844
 #endif
 
21845
 
 
21846
 
 
21847
+/* Define if your assembler supports the 'ud2' mnemonic. */
 
21848
+#ifndef USED_FOR_TARGET
 
21849
+#undef HAVE_AS_IX86_UD2
 
21850
+#endif
 
21851
+
 
21852
+
 
21853
 /* Define if your assembler supports the lituse_jsrdirect relocation. */
 
21854
 #ifndef USED_FOR_TARGET
 
21855
 #undef HAVE_AS_JSRDIRECT_RELOCS
 
21856
@@ -375,6 +381,12 @@
 
21857
 #endif
 
21858
 
 
21859
 
 
21860
+/* Define if your assembler supports LEON instructions. */
 
21861
+#ifndef USED_FOR_TARGET
 
21862
+#undef HAVE_AS_LEON
 
21863
+#endif
 
21864
+
 
21865
+
 
21866
 /* Define if the assembler won't complain about a line such as # 0 "" 2. */
 
21867
 #ifndef USED_FOR_TARGET
 
21868
 #undef HAVE_AS_LINE_ZERO
 
21869
Index: gcc/ifcvt.c
 
21870
===================================================================
 
21871
--- a/src/gcc/ifcvt.c   (.../tags/gcc_4_8_2_release)
 
21872
+++ b/src/gcc/ifcvt.c   (.../branches/gcc-4_8-branch)
 
21873
@@ -115,7 +115,11 @@
 
21874
 
 
21875
   while (1)
 
21876
     {
 
21877
-      if (CALL_P (insn) || NONJUMP_INSN_P (insn))
 
21878
+      if ((CALL_P (insn) || NONJUMP_INSN_P (insn))
 
21879
+         /* Don't count USE/CLOBBER insns, flow_find_cross_jump etc.
 
21880
+            don't count them either and we need consistency.  */
 
21881
+         && GET_CODE (PATTERN (insn)) != USE
 
21882
+         && GET_CODE (PATTERN (insn)) != CLOBBER)
 
21883
        count++;
 
21884
 
 
21885
       if (insn == BB_END (bb))
 
21886
@@ -505,7 +509,10 @@
 
21887
          n_insns -= 2 * n_matching;
 
21888
        }
 
21889
 
 
21890
-      if (then_start && else_start)
 
21891
+      if (then_start
 
21892
+         && else_start
 
21893
+         && then_n_insns > n_matching
 
21894
+         && else_n_insns > n_matching)
 
21895
        {
 
21896
          int longest_match = MIN (then_n_insns - n_matching,
 
21897
                                   else_n_insns - n_matching);
 
21898
Index: gcc/expr.c
 
21899
===================================================================
 
21900
--- a/src/gcc/expr.c    (.../tags/gcc_4_8_2_release)
 
21901
+++ b/src/gcc/expr.c    (.../branches/gcc-4_8-branch)
 
21902
@@ -1994,12 +1994,14 @@
 
21903
       HOST_WIDE_INT bytepos = INTVAL (XEXP (XVECEXP (src, 0, i), 1));
 
21904
       enum machine_mode mode = GET_MODE (tmps[i]);
 
21905
       unsigned int bytelen = GET_MODE_SIZE (mode);
 
21906
-      unsigned int adj_bytelen = bytelen;
 
21907
+      unsigned int adj_bytelen;
 
21908
       rtx dest = dst;
 
21909
 
 
21910
       /* Handle trailing fragments that run over the size of the struct.  */
 
21911
       if (ssize >= 0 && bytepos + (HOST_WIDE_INT) bytelen > ssize)
 
21912
        adj_bytelen = ssize - bytepos;
 
21913
+      else
 
21914
+       adj_bytelen = bytelen;
 
21915
 
 
21916
       if (GET_CODE (dst) == CONCAT)
 
21917
        {
 
21918
@@ -2040,6 +2042,7 @@
 
21919
            }
 
21920
        }
 
21921
 
 
21922
+      /* Handle trailing fragments that run over the size of the struct.  */
 
21923
       if (ssize >= 0 && bytepos + (HOST_WIDE_INT) bytelen > ssize)
 
21924
        {
 
21925
          /* store_bit_field always takes its value from the lsb.
 
21926
@@ -2057,16 +2060,22 @@
 
21927
              tmps[i] = expand_shift (RSHIFT_EXPR, mode, tmps[i],
 
21928
                                      shift, tmps[i], 0);
 
21929
            }
 
21930
-         bytelen = adj_bytelen;
 
21931
+
 
21932
+         /* Make sure not to write past the end of the struct.  */
 
21933
+         store_bit_field (dest,
 
21934
+                          adj_bytelen * BITS_PER_UNIT, bytepos * BITS_PER_UNIT,
 
21935
+                          bytepos * BITS_PER_UNIT, ssize * BITS_PER_UNIT - 1,
 
21936
+                          VOIDmode, tmps[i]);
 
21937
        }
 
21938
 
 
21939
       /* Optimize the access just a bit.  */
 
21940
-      if (MEM_P (dest)
 
21941
-         && (! SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (dest))
 
21942
-             || MEM_ALIGN (dest) >= GET_MODE_ALIGNMENT (mode))
 
21943
-         && bytepos * BITS_PER_UNIT % GET_MODE_ALIGNMENT (mode) == 0
 
21944
-         && bytelen == GET_MODE_SIZE (mode))
 
21945
+      else if (MEM_P (dest)
 
21946
+              && (!SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (dest))
 
21947
+                  || MEM_ALIGN (dest) >= GET_MODE_ALIGNMENT (mode))
 
21948
+              && bytepos * BITS_PER_UNIT % GET_MODE_ALIGNMENT (mode) == 0
 
21949
+              && bytelen == GET_MODE_SIZE (mode))
 
21950
        emit_move_insn (adjust_address (dest, mode, bytepos), tmps[i]);
 
21951
+
 
21952
       else
 
21953
        store_bit_field (dest, bytelen * BITS_PER_UNIT, bytepos * BITS_PER_UNIT,
 
21954
                         0, 0, mode, tmps[i]);
 
21955
@@ -3602,12 +3611,21 @@
 
21956
         into a new pseudo.  This constant may be used in different modes,
 
21957
         and if not, combine will put things back together for us.  */
 
21958
       trunc_y = force_reg (srcmode, trunc_y);
 
21959
-      emit_unop_insn (ic, x, trunc_y, UNKNOWN);
 
21960
+
 
21961
+      /* If x is a hard register, perform the extension into a pseudo,
 
21962
+        so that e.g. stack realignment code is aware of it.  */
 
21963
+      rtx target = x;
 
21964
+      if (REG_P (x) && HARD_REGISTER_P (x))
 
21965
+       target = gen_reg_rtx (dstmode);
 
21966
+
 
21967
+      emit_unop_insn (ic, target, trunc_y, UNKNOWN);
 
21968
       last_insn = get_last_insn ();
 
21969
 
 
21970
-      if (REG_P (x))
 
21971
+      if (REG_P (target))
 
21972
        set_unique_reg_note (last_insn, REG_EQUAL, y);
 
21973
 
 
21974
+      if (target != x)
 
21975
+       return emit_move_insn (x, target);
 
21976
       return last_insn;
 
21977
     }
 
21978
 
 
21979
@@ -4551,19 +4569,19 @@
 
21980
                - tree_low_cst (DECL_FIELD_BIT_OFFSET (repr), 1));
 
21981
 
 
21982
   /* If the adjustment is larger than bitpos, we would have a negative bit
 
21983
-     position for the lower bound and this may wreak havoc later.  This can
 
21984
-     occur only if we have a non-null offset, so adjust offset and bitpos
 
21985
-     to make the lower bound non-negative.  */
 
21986
+     position for the lower bound and this may wreak havoc later.  Adjust
 
21987
+     offset and bitpos to make the lower bound non-negative in that case.  */
 
21988
   if (bitoffset > *bitpos)
 
21989
     {
 
21990
       HOST_WIDE_INT adjust = bitoffset - *bitpos;
 
21991
-
 
21992
       gcc_assert ((adjust % BITS_PER_UNIT) == 0);
 
21993
-      gcc_assert (*offset != NULL_TREE);
 
21994
 
 
21995
       *bitpos += adjust;
 
21996
-      *offset
 
21997
-       = size_binop (MINUS_EXPR, *offset, size_int (adjust / BITS_PER_UNIT));
 
21998
+      if (*offset == NULL_TREE)
 
21999
+       *offset = size_int (-adjust / BITS_PER_UNIT);
 
22000
+      else
 
22001
+       *offset
 
22002
+         = size_binop (MINUS_EXPR, *offset, size_int (adjust / BITS_PER_UNIT));
 
22003
       *bitstart = 0;
 
22004
     }
 
22005
   else
 
22006
@@ -4668,8 +4686,7 @@
 
22007
          expand_insn (icode, 2, ops);
 
22008
        }
 
22009
       else
 
22010
-       store_bit_field (mem, GET_MODE_BITSIZE (mode),
 
22011
-                        0, 0, 0, mode, reg);
 
22012
+       store_bit_field (mem, GET_MODE_BITSIZE (mode), 0, 0, 0, mode, reg);
 
22013
       return;
 
22014
     }
 
22015
 
 
22016
@@ -4698,6 +4715,15 @@
 
22017
       tem = get_inner_reference (to, &bitsize, &bitpos, &offset, &mode1,
 
22018
                                 &unsignedp, &volatilep, true);
 
22019
 
 
22020
+      /* Make sure bitpos is not negative, it can wreak havoc later.  */
 
22021
+      if (bitpos < 0)
 
22022
+       {
 
22023
+         gcc_assert (offset == NULL_TREE);
 
22024
+         offset = size_int (bitpos >> (BITS_PER_UNIT == 8
 
22025
+                                       ? 3 : exact_log2 (BITS_PER_UNIT)));
 
22026
+         bitpos &= BITS_PER_UNIT - 1;
 
22027
+       }
 
22028
+
 
22029
       if (TREE_CODE (to) == COMPONENT_REF
 
22030
          && DECL_BIT_FIELD_TYPE (TREE_OPERAND (to, 1)))
 
22031
        get_bit_range (&bitregion_start, &bitregion_end, to, &bitpos, &offset);
 
22032
Index: gcc/go/go-gcc.cc
 
22033
===================================================================
 
22034
--- a/src/gcc/go/go-gcc.cc      (.../tags/gcc_4_8_2_release)
 
22035
+++ b/src/gcc/go/go-gcc.cc      (.../branches/gcc-4_8-branch)
 
22036
@@ -232,6 +232,9 @@
 
22037
   Bexpression*
 
22038
   convert_expression(Btype* type, Bexpression* expr, Location);
 
22039
 
 
22040
+  Bexpression*
 
22041
+  function_code_expression(Bfunction*, Location);
 
22042
+
 
22043
   // Statements.
 
22044
 
 
22045
   Bstatement*
 
22046
@@ -334,6 +337,17 @@
 
22047
   Bexpression*
 
22048
   label_address(Blabel*, Location);
 
22049
 
 
22050
+  // Functions.
 
22051
+
 
22052
+  Bfunction*
 
22053
+  error_function()
 
22054
+  { return this->make_function(error_mark_node); }
 
22055
+
 
22056
+  Bfunction*
 
22057
+  function(Btype* fntype, const std::string& name, const std::string& asm_name,
 
22058
+           bool is_visible, bool is_declaration, bool is_inlinable,
 
22059
+           bool disable_split_stack, bool in_unique_section, Location);
 
22060
+
 
22061
  private:
 
22062
   // Make a Bexpression from a tree.
 
22063
   Bexpression*
 
22064
@@ -350,6 +364,10 @@
 
22065
   make_type(tree t)
 
22066
   { return new Btype(t); }
 
22067
 
 
22068
+  Bfunction*
 
22069
+  make_function(tree t)
 
22070
+  { return new Bfunction(t); }
 
22071
+
 
22072
   Btype*
 
22073
   fill_in_struct(Btype*, const std::vector<Btyped_identifier>&);
 
22074
 
 
22075
@@ -966,6 +984,19 @@
 
22076
   return tree_to_expr(ret);
 
22077
 }
 
22078
 
 
22079
+// Get the address of a function.
 
22080
+
 
22081
+Bexpression*
 
22082
+Gcc_backend::function_code_expression(Bfunction* bfunc, Location location)
 
22083
+{
 
22084
+  tree func = bfunc->get_tree();
 
22085
+  if (func == error_mark_node)
 
22086
+    return this->error_expression();
 
22087
+
 
22088
+  tree ret = build_fold_addr_expr_loc(location.gcc_location(), func);
 
22089
+  return this->make_expression(ret);
 
22090
+}
 
22091
+
 
22092
 // An expression as a statement.
 
22093
 
 
22094
 Bstatement*
 
22095
@@ -1724,6 +1755,56 @@
 
22096
   return this->make_expression(ret);
 
22097
 }
 
22098
 
 
22099
+// Declare or define a new function.
 
22100
+
 
22101
+Bfunction*
 
22102
+Gcc_backend::function(Btype* fntype, const std::string& name,
 
22103
+                      const std::string& asm_name, bool is_visible,
 
22104
+                      bool is_declaration, bool is_inlinable,
 
22105
+                      bool disable_split_stack, bool in_unique_section,
 
22106
+                      Location location)
 
22107
+{
 
22108
+  tree functype = fntype->get_tree();
 
22109
+  if (functype != error_mark_node)
 
22110
+    {
 
22111
+      gcc_assert(FUNCTION_POINTER_TYPE_P(functype));
 
22112
+      functype = TREE_TYPE(functype);
 
22113
+    }
 
22114
+  tree id = get_identifier_from_string(name);
 
22115
+  if (functype == error_mark_node || id == error_mark_node)
 
22116
+    return this->error_function();
 
22117
+
 
22118
+  tree decl = build_decl(location.gcc_location(), FUNCTION_DECL, id, functype);
 
22119
+  if (!asm_name.empty())
 
22120
+    SET_DECL_ASSEMBLER_NAME(decl, get_identifier_from_string(asm_name));
 
22121
+  if (is_visible)
 
22122
+    TREE_PUBLIC(decl) = 1;
 
22123
+  if (is_declaration)
 
22124
+    DECL_EXTERNAL(decl) = 1;
 
22125
+  else
 
22126
+    {
 
22127
+      tree restype = TREE_TYPE(functype);
 
22128
+      tree resdecl =
 
22129
+          build_decl(location.gcc_location(), RESULT_DECL, NULL_TREE, restype);
 
22130
+      DECL_ARTIFICIAL(resdecl) = 1;
 
22131
+      DECL_IGNORED_P(resdecl) = 1;
 
22132
+      DECL_CONTEXT(resdecl) = decl;
 
22133
+      DECL_RESULT(decl) = resdecl;
 
22134
+    }
 
22135
+  if (!is_inlinable)
 
22136
+    DECL_UNINLINABLE(decl) = 1;
 
22137
+  if (disable_split_stack)
 
22138
+    {
 
22139
+      tree attr = get_identifier("__no_split_stack__");
 
22140
+      DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
 
22141
+    }
 
22142
+  if (in_unique_section)
 
22143
+    resolve_unique_section(decl, 0, 1);
 
22144
+
 
22145
+  go_preserve_from_gc(decl);
 
22146
+  return new Bfunction(decl);
 
22147
+}
 
22148
+
 
22149
 // The single backend.
 
22150
 
 
22151
 static Gcc_backend gcc_backend;
 
22152
@@ -1799,3 +1880,9 @@
 
22153
 {
 
22154
   return bv->get_tree();
 
22155
 }
 
22156
+
 
22157
+tree
 
22158
+function_to_tree(Bfunction* bf)
 
22159
+{
 
22160
+  return bf->get_tree();
 
22161
+}
 
22162
Index: gcc/go/ChangeLog
 
22163
===================================================================
 
22164
--- a/src/gcc/go/ChangeLog      (.../tags/gcc_4_8_2_release)
 
22165
+++ b/src/gcc/go/ChangeLog      (.../branches/gcc-4_8-branch)
 
22166
@@ -1,3 +1,22 @@
 
22167
+2013-12-11  Ian Lance Taylor  <iant@google.com>
 
22168
+
 
22169
+       * go-lang.c (go_langhook_post_options): Disable sibling calls by
 
22170
+       default.
 
22171
+
 
22172
+2013-10-16  Ian Lance Taylor  <iant@google.com>
 
22173
+
 
22174
+       Bring in from mainline:
 
22175
+
 
22176
+       2013-10-11  Chris Manghane  <cmang@google.com>
 
22177
+       * go-gcc.cc (Gcc_backend::function_code_expression): New
 
22178
+       function.
 
22179
+
 
22180
+       2013-10-10  Chris Manghane  <cmang@google.com>
 
22181
+       * go-gcc.cc (Backend::error_function): New function.
 
22182
+       (Backend::function): New function.
 
22183
+       (Backend::make_function): New function.
 
22184
+       (function_to_tree): New function.
 
22185
+
 
22186
 2013-10-16  Release Manager
 
22187
 
 
22188
        * GCC 4.8.2 released.
 
22189
Index: gcc/go/go-lang.c
 
22190
===================================================================
 
22191
--- a/src/gcc/go/go-lang.c      (.../tags/gcc_4_8_2_release)
 
22192
+++ b/src/gcc/go/go-lang.c      (.../branches/gcc-4_8-branch)
 
22193
@@ -269,6 +269,10 @@
 
22194
   if (flag_excess_precision_cmdline == EXCESS_PRECISION_DEFAULT)
 
22195
     flag_excess_precision_cmdline = EXCESS_PRECISION_STANDARD;
 
22196
 
 
22197
+  /* Tail call optimizations can confuse uses of runtime.Callers.  */
 
22198
+  if (!global_options_set.x_flag_optimize_sibling_calls)
 
22199
+    global_options.x_flag_optimize_sibling_calls = 0;
 
22200
+
 
22201
   /* Returning false means that the backend should be used.  */
 
22202
   return false;
 
22203
 }
 
22204
Index: gcc/go/gofrontend/gogo.cc
 
22205
===================================================================
 
22206
--- a/src/gcc/go/gofrontend/gogo.cc     (.../tags/gcc_4_8_2_release)
 
22207
+++ b/src/gcc/go/gofrontend/gogo.cc     (.../branches/gcc-4_8-branch)
 
22208
@@ -2822,7 +2822,10 @@
 
22209
   if (orig_fntype->is_varargs())
 
22210
     new_fntype->set_is_varargs();
 
22211
 
 
22212
-  std::string name = orig_no->name() + "$recover";
 
22213
+  std::string name = orig_no->name();
 
22214
+  if (orig_fntype->is_method())
 
22215
+    name += "$" + orig_fntype->receiver()->type()->mangled_name(gogo);
 
22216
+  name += "$recover";
 
22217
   Named_object *new_no = gogo->start_function(name, new_fntype, false,
 
22218
                                              location);
 
22219
   Function *new_func = new_no->func_value();
 
22220
@@ -2916,7 +2919,25 @@
 
22221
                 && !orig_rec_no->var_value()->is_receiver());
 
22222
       orig_rec_no->var_value()->set_is_receiver();
 
22223
 
 
22224
-      const std::string& new_receiver_name(orig_fntype->receiver()->name());
 
22225
+      std::string new_receiver_name(orig_fntype->receiver()->name());
 
22226
+      if (new_receiver_name.empty())
 
22227
+       {
 
22228
+         // Find the receiver.  It was named "r.NNN" in
 
22229
+         // Gogo::start_function.
 
22230
+         for (Bindings::const_definitions_iterator p =
 
22231
+                new_bindings->begin_definitions();
 
22232
+              p != new_bindings->end_definitions();
 
22233
+              ++p)
 
22234
+           {
 
22235
+             const std::string& pname((*p)->name());
 
22236
+             if (pname[0] == 'r' && pname[1] == '.')
 
22237
+               {
 
22238
+                 new_receiver_name = pname;
 
22239
+                 break;
 
22240
+               }
 
22241
+           }
 
22242
+         go_assert(!new_receiver_name.empty());
 
22243
+       }
 
22244
       Named_object* new_rec_no = new_bindings->lookup_local(new_receiver_name);
 
22245
       if (new_rec_no == NULL)
 
22246
        go_assert(saw_errors());
 
22247
@@ -3320,7 +3341,8 @@
 
22248
     closure_var_(NULL), block_(block), location_(location), labels_(),
 
22249
     local_type_count_(0), descriptor_(NULL), fndecl_(NULL), defer_stack_(NULL),
 
22250
     is_sink_(false), results_are_named_(false), nointerface_(false),
 
22251
-    calls_recover_(false), is_recover_thunk_(false), has_recover_thunk_(false),
 
22252
+    is_unnamed_type_stub_method_(false), calls_recover_(false),
 
22253
+    is_recover_thunk_(false), has_recover_thunk_(false),
 
22254
     in_unique_section_(false)
 
22255
 {
 
22256
 }
 
22257
@@ -3819,6 +3841,81 @@
 
22258
   *presults = results;
 
22259
 }
 
22260
 
 
22261
+// Get the backend representation.
 
22262
+
 
22263
+Bfunction*
 
22264
+Function::get_or_make_decl(Gogo* gogo, Named_object* no)
 
22265
+{
 
22266
+  if (this->fndecl_ == NULL)
 
22267
+    {
 
22268
+      std::string asm_name;
 
22269
+      bool is_visible = false;
 
22270
+      if (no->package() != NULL)
 
22271
+        ;
 
22272
+      else if (this->enclosing_ != NULL || Gogo::is_thunk(no))
 
22273
+        ;
 
22274
+      else if (Gogo::unpack_hidden_name(no->name()) == "init"
 
22275
+               && !this->type_->is_method())
 
22276
+        ;
 
22277
+      else if (Gogo::unpack_hidden_name(no->name()) == "main"
 
22278
+               && gogo->is_main_package())
 
22279
+        is_visible = true;
 
22280
+      // Methods have to be public even if they are hidden because
 
22281
+      // they can be pulled into type descriptors when using
 
22282
+      // anonymous fields.
 
22283
+      else if (!Gogo::is_hidden_name(no->name())
 
22284
+               || this->type_->is_method())
 
22285
+        {
 
22286
+         if (!this->is_unnamed_type_stub_method_)
 
22287
+           is_visible = true;
 
22288
+          std::string pkgpath = gogo->pkgpath_symbol();
 
22289
+          if (this->type_->is_method()
 
22290
+              && Gogo::is_hidden_name(no->name())
 
22291
+              && Gogo::hidden_name_pkgpath(no->name()) != gogo->pkgpath())
 
22292
+            {
 
22293
+              // This is a method we created for an unexported
 
22294
+              // method of an imported embedded type.  We need to
 
22295
+              // use the pkgpath of the imported package to avoid
 
22296
+              // a possible name collision.  See bug478 for a test
 
22297
+              // case.
 
22298
+              pkgpath = Gogo::hidden_name_pkgpath(no->name());
 
22299
+              pkgpath = Gogo::pkgpath_for_symbol(pkgpath);
 
22300
+            }
 
22301
+
 
22302
+          asm_name = pkgpath;
 
22303
+          asm_name.append(1, '.');
 
22304
+          asm_name.append(Gogo::unpack_hidden_name(no->name()));
 
22305
+          if (this->type_->is_method())
 
22306
+            {
 
22307
+              asm_name.append(1, '.');
 
22308
+              Type* rtype = this->type_->receiver()->type();
 
22309
+              asm_name.append(rtype->mangled_name(gogo));
 
22310
+            }
 
22311
+        }
 
22312
+
 
22313
+      // If a function calls the predeclared recover function, we
 
22314
+      // can't inline it, because recover behaves differently in a
 
22315
+      // function passed directly to defer.  If this is a recover
 
22316
+      // thunk that we built to test whether a function can be
 
22317
+      // recovered, we can't inline it, because that will mess up
 
22318
+      // our return address comparison.
 
22319
+      bool is_inlinable = !(this->calls_recover_ || this->is_recover_thunk_);
 
22320
+
 
22321
+      // If this is a thunk created to call a function which calls
 
22322
+      // the predeclared recover function, we need to disable
 
22323
+      // stack splitting for the thunk.
 
22324
+      bool disable_split_stack = this->is_recover_thunk_;
 
22325
+
 
22326
+      Btype* functype = this->type_->get_backend_fntype(gogo);
 
22327
+      this->fndecl_ =
 
22328
+          gogo->backend()->function(functype, no->get_id(gogo), asm_name,
 
22329
+                                    is_visible, false, is_inlinable,
 
22330
+                                    disable_split_stack,
 
22331
+                                    this->in_unique_section_, this->location());
 
22332
+    }
 
22333
+  return this->fndecl_;
 
22334
+}
 
22335
+
 
22336
 // Class Block.
 
22337
 
 
22338
 Block::Block(Block* enclosing, Location location)
 
22339
@@ -5110,6 +5207,75 @@
 
22340
     go_unreachable();
 
22341
 }
 
22342
 
 
22343
+
 
22344
+// Return the external identifier for this object.
 
22345
+
 
22346
+std::string
 
22347
+Named_object::get_id(Gogo* gogo)
 
22348
+{
 
22349
+  go_assert(!this->is_variable() && !this->is_result_variable());
 
22350
+  std::string decl_name;
 
22351
+  if (this->is_function_declaration()
 
22352
+      && !this->func_declaration_value()->asm_name().empty())
 
22353
+    decl_name = this->func_declaration_value()->asm_name();
 
22354
+  else if (this->is_type()
 
22355
+          && Linemap::is_predeclared_location(this->type_value()->location()))
 
22356
+    {
 
22357
+      // We don't need the package name for builtin types.
 
22358
+      decl_name = Gogo::unpack_hidden_name(this->name_);
 
22359
+    }
 
22360
+  else
 
22361
+    {
 
22362
+      std::string package_name;
 
22363
+      if (this->package_ == NULL)
 
22364
+       package_name = gogo->package_name();
 
22365
+      else
 
22366
+       package_name = this->package_->package_name();
 
22367
+
 
22368
+      // Note that this will be misleading if this is an unexported
 
22369
+      // method generated for an embedded imported type.  In that case
 
22370
+      // the unexported method should have the package name of the
 
22371
+      // package from which it is imported, but we are going to give
 
22372
+      // it our package name.  Fixing this would require knowing the
 
22373
+      // package name, but we only know the package path.  It might be
 
22374
+      // better to use package paths here anyhow.  This doesn't affect
 
22375
+      // the assembler code, because we always set that name in
 
22376
+      // Function::get_or_make_decl anyhow.  FIXME.
 
22377
+
 
22378
+      decl_name = package_name + '.' + Gogo::unpack_hidden_name(this->name_);
 
22379
+
 
22380
+      Function_type* fntype;
 
22381
+      if (this->is_function())
 
22382
+       fntype = this->func_value()->type();
 
22383
+      else if (this->is_function_declaration())
 
22384
+       fntype = this->func_declaration_value()->type();
 
22385
+      else
 
22386
+       fntype = NULL;
 
22387
+      if (fntype != NULL && fntype->is_method())
 
22388
+       {
 
22389
+         decl_name.push_back('.');
 
22390
+         decl_name.append(fntype->receiver()->type()->mangled_name(gogo));
 
22391
+       }
 
22392
+    }
 
22393
+  if (this->is_type())
 
22394
+    {
 
22395
+      unsigned int index;
 
22396
+      const Named_object* in_function = this->type_value()->in_function(&index);
 
22397
+      if (in_function != NULL)
 
22398
+       {
 
22399
+         decl_name += '$' + Gogo::unpack_hidden_name(in_function->name());
 
22400
+         if (index > 0)
 
22401
+           {
 
22402
+             char buf[30];
 
22403
+             snprintf(buf, sizeof buf, "%u", index);
 
22404
+             decl_name += '$';
 
22405
+             decl_name += buf;
 
22406
+           }
 
22407
+       }
 
22408
+    }
 
22409
+  return decl_name;
 
22410
+}
 
22411
+
 
22412
 // Class Bindings.
 
22413
 
 
22414
 Bindings::Bindings(Bindings* enclosing)
 
22415
Index: gcc/go/gofrontend/runtime.def
 
22416
===================================================================
 
22417
--- a/src/gcc/go/gofrontend/runtime.def (.../tags/gcc_4_8_2_release)
 
22418
+++ b/src/gcc/go/gofrontend/runtime.def (.../branches/gcc-4_8-branch)
 
22419
@@ -68,6 +68,12 @@
 
22420
               P1(STRING), R1(SLICE))
 
22421
 
 
22422
 
 
22423
+// Complex division.
 
22424
+DEF_GO_RUNTIME(COMPLEX64_DIV, "__go_complex64_div",
 
22425
+              P2(COMPLEX64, COMPLEX64), R1(COMPLEX64))
 
22426
+DEF_GO_RUNTIME(COMPLEX128_DIV, "__go_complex128_div",
 
22427
+              P2(COMPLEX128, COMPLEX128), R1(COMPLEX128))
 
22428
+
 
22429
 // Make a slice.
 
22430
 DEF_GO_RUNTIME(MAKESLICE1, "__go_make_slice1", P2(TYPE, UINTPTR), R1(SLICE))
 
22431
 DEF_GO_RUNTIME(MAKESLICE2, "__go_make_slice2", P3(TYPE, UINTPTR, UINTPTR),
 
22432
Index: gcc/go/gofrontend/gogo.h
 
22433
===================================================================
 
22434
--- a/src/gcc/go/gofrontend/gogo.h      (.../tags/gcc_4_8_2_release)
 
22435
+++ b/src/gcc/go/gofrontend/gogo.h      (.../branches/gcc-4_8-branch)
 
22436
@@ -48,6 +48,7 @@
 
22437
 class Bblock;
 
22438
 class Bvariable;
 
22439
 class Blabel;
 
22440
+class Bfunction;
 
22441
 
 
22442
 // This file declares the basic classes used to hold the internal
 
22443
 // representation of Go which is built by the parser.
 
22444
@@ -952,6 +953,15 @@
 
22445
     this->nointerface_ = true;
 
22446
   }
 
22447
 
 
22448
+  // Record that this function is a stub method created for an unnamed
 
22449
+  // type.
 
22450
+  void
 
22451
+  set_is_unnamed_type_stub_method()
 
22452
+  {
 
22453
+    go_assert(this->is_method());
 
22454
+    this->is_unnamed_type_stub_method_ = true;
 
22455
+  }
 
22456
+
 
22457
   // Add a new field to the closure variable.
 
22458
   void
 
22459
   add_closure_field(Named_object* var, Location loc)
 
22460
@@ -1089,17 +1099,13 @@
 
22461
     this->descriptor_ = descriptor;
 
22462
   }
 
22463
 
 
22464
-  // Return the function's decl given an identifier.
 
22465
-  tree
 
22466
-  get_or_make_decl(Gogo*, Named_object*, tree id);
 
22467
+  // Return the backend representation.
 
22468
+  Bfunction*
 
22469
+  get_or_make_decl(Gogo*, Named_object*);
 
22470
 
 
22471
   // Return the function's decl after it has been built.
 
22472
   tree
 
22473
-  get_decl() const
 
22474
-  {
 
22475
-    go_assert(this->fndecl_ != NULL);
 
22476
-    return this->fndecl_;
 
22477
-  }
 
22478
+  get_decl() const;
 
22479
 
 
22480
   // Set the function decl to hold a tree of the function code.
 
22481
   void
 
22482
@@ -1170,7 +1176,7 @@
 
22483
   // The function descriptor, if any.
 
22484
   Expression* descriptor_;
 
22485
   // The function decl.
 
22486
-  tree fndecl_;
 
22487
+  Bfunction* fndecl_;
 
22488
   // The defer stack variable.  A pointer to this variable is used to
 
22489
   // distinguish the defer stack for one function from another.  This
 
22490
   // is NULL unless we actually need a defer stack.
 
22491
@@ -1181,6 +1187,9 @@
 
22492
   bool results_are_named_ : 1;
 
22493
   // True if this method should not be included in the type descriptor.
 
22494
   bool nointerface_ : 1;
 
22495
+  // True if this function is a stub method created for an unnamed
 
22496
+  // type.
 
22497
+  bool is_unnamed_type_stub_method_ : 1;
 
22498
   // True if this function calls the predeclared recover function.
 
22499
   bool calls_recover_ : 1;
 
22500
   // True if this a thunk built for a function which calls recover.
 
22501
@@ -1265,9 +1274,9 @@
 
22502
   has_descriptor() const
 
22503
   { return this->descriptor_ != NULL; }
 
22504
 
 
22505
-  // Return a decl for the function given an identifier.
 
22506
-  tree
 
22507
-  get_or_make_decl(Gogo*, Named_object*, tree id);
 
22508
+  // Return a backend representation.
 
22509
+  Bfunction*
 
22510
+  get_or_make_decl(Gogo*, Named_object*);
 
22511
 
 
22512
   // If there is a descriptor, build it into the backend
 
22513
   // representation.
 
22514
@@ -1290,7 +1299,7 @@
 
22515
   // The function descriptor, if any.
 
22516
   Expression* descriptor_;
 
22517
   // The function decl if needed.
 
22518
-  tree fndecl_;
 
22519
+  Bfunction* fndecl_;
 
22520
 };
 
22521
 
 
22522
 // A variable.
 
22523
@@ -2181,8 +2190,8 @@
 
22524
   Bvariable*
 
22525
   get_backend_variable(Gogo*, Named_object* function);
 
22526
 
 
22527
-  // Return a tree for the external identifier for this object.
 
22528
-  tree
 
22529
+  // Return the external identifier for this object.
 
22530
+  std::string
 
22531
   get_id(Gogo*);
 
22532
 
 
22533
   // Return a tree representing this object.
 
22534
Index: gcc/go/gofrontend/types.h
 
22535
===================================================================
 
22536
--- a/src/gcc/go/gofrontend/types.h     (.../tags/gcc_4_8_2_release)
 
22537
+++ b/src/gcc/go/gofrontend/types.h     (.../branches/gcc-4_8-branch)
 
22538
@@ -1138,6 +1138,13 @@
 
22539
                          Function_type* equal_fntype, Named_object** hash_fn,
 
22540
                          Named_object** equal_fn);
 
22541
 
 
22542
+  void
 
22543
+  write_named_hash(Gogo*, Named_type*, Function_type* hash_fntype,
 
22544
+                  Function_type* equal_fntype);
 
22545
+
 
22546
+  void
 
22547
+  write_named_equal(Gogo*, Named_type*);
 
22548
+
 
22549
   // Build a composite literal for the uncommon type information.
 
22550
   Expression*
 
22551
   uncommon_type_constructor(Gogo*, Type* uncommon_type,
 
22552
@@ -1717,7 +1724,8 @@
 
22553
                Typed_identifier_list* results, Location location)
 
22554
     : Type(TYPE_FUNCTION),
 
22555
       receiver_(receiver), parameters_(parameters), results_(results),
 
22556
-      location_(location), is_varargs_(false), is_builtin_(false)
 
22557
+      location_(location), is_varargs_(false), is_builtin_(false),
 
22558
+      fnbtype_(NULL)
 
22559
   { }
 
22560
 
 
22561
   // Get the receiver.
 
22562
@@ -1789,6 +1797,12 @@
 
22563
   Function_type*
 
22564
   copy_with_receiver(Type*) const;
 
22565
 
 
22566
+  // Return a copy of this type with the receiver treated as the first
 
22567
+  // parameter.  If WANT_POINTER_RECEIVER is true, the receiver is
 
22568
+  // forced to be a pointer.
 
22569
+  Function_type*
 
22570
+  copy_with_receiver_as_param(bool want_pointer_receiver) const;
 
22571
+
 
22572
   // Return a copy of this type ignoring any receiver and using dummy
 
22573
   // names for all parameters.  This is used for thunks for method
 
22574
   // values.
 
22575
@@ -1798,6 +1812,11 @@
 
22576
   static Type*
 
22577
   make_function_type_descriptor_type();
 
22578
 
 
22579
+  // Return the backend representation of this function type. This is used
 
22580
+  // as the real type of a backend function declaration or defintion.
 
22581
+  Btype*
 
22582
+  get_backend_fntype(Gogo*);
 
22583
+
 
22584
  protected:
 
22585
   int
 
22586
   do_traverse(Traverse*);
 
22587
@@ -1851,6 +1870,9 @@
 
22588
   // Whether this is a special builtin function which can not simply
 
22589
   // be called.  This is used for len, cap, etc.
 
22590
   bool is_builtin_;
 
22591
+  // The backend representation of this type for backend function
 
22592
+  // declarations and definitions.
 
22593
+  Btype* fnbtype_;
 
22594
 };
 
22595
 
 
22596
 // The type of a pointer.
 
22597
@@ -1915,7 +1937,7 @@
 
22598
 {
 
22599
  public:
 
22600
   explicit Struct_field(const Typed_identifier& typed_identifier)
 
22601
-    : typed_identifier_(typed_identifier), tag_(NULL)
 
22602
+    : typed_identifier_(typed_identifier), tag_(NULL), is_imported_(false)
 
22603
   { }
 
22604
 
 
22605
   // The field name.
 
22606
@@ -1926,6 +1948,10 @@
 
22607
   bool
 
22608
   is_field_name(const std::string& name) const;
 
22609
 
 
22610
+  // Return whether this struct field is an unexported field named NAME.
 
22611
+  bool
 
22612
+  is_unexported_field_name(Gogo*, const std::string& name) const;
 
22613
+
 
22614
   // Return whether this struct field is an embedded built-in type.
 
22615
   bool
 
22616
   is_embedded_builtin(Gogo*) const;
 
22617
@@ -1963,6 +1989,11 @@
 
22618
   set_tag(const std::string& tag)
 
22619
   { this->tag_ = new std::string(tag); }
 
22620
 
 
22621
+  // Record that this field is defined in an imported struct.
 
22622
+  void
 
22623
+  set_is_imported()
 
22624
+  { this->is_imported_ = true; }
 
22625
+
 
22626
   // Set the type.  This is only used in error cases.
 
22627
   void
 
22628
   set_type(Type* type)
 
22629
@@ -1973,6 +2004,8 @@
 
22630
   Typed_identifier typed_identifier_;
 
22631
   // The field tag.  This is NULL if the field has no tag.
 
22632
   std::string* tag_;
 
22633
+  // Whether this field is defined in an imported struct.
 
22634
+  bool is_imported_;
 
22635
 };
 
22636
 
 
22637
 // A list of struct fields.
 
22638
Index: gcc/go/gofrontend/parse.cc
 
22639
===================================================================
 
22640
--- a/src/gcc/go/gofrontend/parse.cc    (.../tags/gcc_4_8_2_release)
 
22641
+++ b/src/gcc/go/gofrontend/parse.cc    (.../branches/gcc-4_8-branch)
 
22642
@@ -744,6 +744,8 @@
 
22643
     return NULL;
 
22644
 
 
22645
   Parse::Names names;
 
22646
+  if (receiver != NULL)
 
22647
+    names[receiver->name()] = receiver;
 
22648
   if (params != NULL)
 
22649
     this->check_signature_names(params, &names);
 
22650
   if (results != NULL)
 
22651
Index: gcc/go/gofrontend/import.h
 
22652
===================================================================
 
22653
--- a/src/gcc/go/gofrontend/import.h    (.../tags/gcc_4_8_2_release)
 
22654
+++ b/src/gcc/go/gofrontend/import.h    (.../branches/gcc-4_8-branch)
 
22655
@@ -149,6 +149,11 @@
 
22656
   location() const
 
22657
   { return this->location_; }
 
22658
 
 
22659
+  // Return the package we are importing.
 
22660
+  Package*
 
22661
+  package() const
 
22662
+  { return this->package_; }
 
22663
+
 
22664
   // Return the next character.
 
22665
   int
 
22666
   peek_char()
 
22667
Index: gcc/go/gofrontend/runtime.cc
 
22668
===================================================================
 
22669
--- a/src/gcc/go/gofrontend/runtime.cc  (.../tags/gcc_4_8_2_release)
 
22670
+++ b/src/gcc/go/gofrontend/runtime.cc  (.../branches/gcc-4_8-branch)
 
22671
@@ -42,6 +42,8 @@
 
22672
   RFT_RUNE,
 
22673
   // Go type float64, C type double.
 
22674
   RFT_FLOAT64,
 
22675
+  // Go type complex64, C type __complex float.
 
22676
+  RFT_COMPLEX64,
 
22677
   // Go type complex128, C type __complex double.
 
22678
   RFT_COMPLEX128,
 
22679
   // Go type string, C type struct __go_string.
 
22680
@@ -126,6 +128,10 @@
 
22681
          t = Type::lookup_float_type("float64");
 
22682
          break;
 
22683
 
 
22684
+       case RFT_COMPLEX64:
 
22685
+         t = Type::lookup_complex_type("complex64");
 
22686
+         break;
 
22687
+
 
22688
        case RFT_COMPLEX128:
 
22689
          t = Type::lookup_complex_type("complex128");
 
22690
          break;
 
22691
@@ -216,6 +222,7 @@
 
22692
     case RFT_UINTPTR:
 
22693
     case RFT_RUNE:
 
22694
     case RFT_FLOAT64:
 
22695
+    case RFT_COMPLEX64:
 
22696
     case RFT_COMPLEX128:
 
22697
     case RFT_STRING:
 
22698
     case RFT_POINTER:
 
22699
Index: gcc/go/gofrontend/expressions.h
 
22700
===================================================================
 
22701
--- a/src/gcc/go/gofrontend/expressions.h       (.../tags/gcc_4_8_2_release)
 
22702
+++ b/src/gcc/go/gofrontend/expressions.h       (.../branches/gcc-4_8-branch)
 
22703
@@ -1514,8 +1514,8 @@
 
22704
   closure()
 
22705
   { return this->closure_; }
 
22706
 
 
22707
-  // Return a tree for the code for a function.
 
22708
-  static tree
 
22709
+  // Return a backend expression for the code of a function.
 
22710
+  static Bexpression*
 
22711
   get_code_pointer(Gogo*, Named_object* function, Location loc);
 
22712
 
 
22713
  protected:
 
22714
Index: gcc/go/gofrontend/gogo-tree.cc
 
22715
===================================================================
 
22716
--- a/src/gcc/go/gofrontend/gogo-tree.cc        (.../tags/gcc_4_8_2_release)
 
22717
+++ b/src/gcc/go/gofrontend/gogo-tree.cc        (.../branches/gcc-4_8-branch)
 
22718
@@ -985,74 +985,6 @@
 
22719
   delete[] vec;
 
22720
 }
 
22721
 
 
22722
-// Get a tree for the identifier for a named object.
 
22723
-
 
22724
-tree
 
22725
-Named_object::get_id(Gogo* gogo)
 
22726
-{
 
22727
-  go_assert(!this->is_variable() && !this->is_result_variable());
 
22728
-  std::string decl_name;
 
22729
-  if (this->is_function_declaration()
 
22730
-      && !this->func_declaration_value()->asm_name().empty())
 
22731
-    decl_name = this->func_declaration_value()->asm_name();
 
22732
-  else if (this->is_type()
 
22733
-          && Linemap::is_predeclared_location(this->type_value()->location()))
 
22734
-    {
 
22735
-      // We don't need the package name for builtin types.
 
22736
-      decl_name = Gogo::unpack_hidden_name(this->name_);
 
22737
-    }
 
22738
-  else
 
22739
-    {
 
22740
-      std::string package_name;
 
22741
-      if (this->package_ == NULL)
 
22742
-       package_name = gogo->package_name();
 
22743
-      else
 
22744
-       package_name = this->package_->package_name();
 
22745
-
 
22746
-      // Note that this will be misleading if this is an unexported
 
22747
-      // method generated for an embedded imported type.  In that case
 
22748
-      // the unexported method should have the package name of the
 
22749
-      // package from which it is imported, but we are going to give
 
22750
-      // it our package name.  Fixing this would require knowing the
 
22751
-      // package name, but we only know the package path.  It might be
 
22752
-      // better to use package paths here anyhow.  This doesn't affect
 
22753
-      // the assembler code, because we always set that name in
 
22754
-      // Function::get_or_make_decl anyhow.  FIXME.
 
22755
-
 
22756
-      decl_name = package_name + '.' + Gogo::unpack_hidden_name(this->name_);
 
22757
-
 
22758
-      Function_type* fntype;
 
22759
-      if (this->is_function())
 
22760
-       fntype = this->func_value()->type();
 
22761
-      else if (this->is_function_declaration())
 
22762
-       fntype = this->func_declaration_value()->type();
 
22763
-      else
 
22764
-       fntype = NULL;
 
22765
-      if (fntype != NULL && fntype->is_method())
 
22766
-       {
 
22767
-         decl_name.push_back('.');
 
22768
-         decl_name.append(fntype->receiver()->type()->mangled_name(gogo));
 
22769
-       }
 
22770
-    }
 
22771
-  if (this->is_type())
 
22772
-    {
 
22773
-      unsigned int index;
 
22774
-      const Named_object* in_function = this->type_value()->in_function(&index);
 
22775
-      if (in_function != NULL)
 
22776
-       {
 
22777
-         decl_name += '$' + Gogo::unpack_hidden_name(in_function->name());
 
22778
-         if (index > 0)
 
22779
-           {
 
22780
-             char buf[30];
 
22781
-             snprintf(buf, sizeof buf, "%u", index);
 
22782
-             decl_name += '$';
 
22783
-             decl_name += buf;
 
22784
-           }
 
22785
-       }
 
22786
-    }
 
22787
-  return get_identifier_from_string(decl_name);
 
22788
-}
 
22789
-
 
22790
 // Get a tree for a named object.
 
22791
 
 
22792
 tree
 
22793
@@ -1067,11 +999,6 @@
 
22794
       return error_mark_node;
 
22795
     }
 
22796
 
 
22797
-  tree name;
 
22798
-  if (this->classification_ == NAMED_OBJECT_TYPE)
 
22799
-    name = NULL_TREE;
 
22800
-  else
 
22801
-    name = this->get_id(gogo);
 
22802
   tree decl;
 
22803
   switch (this->classification_)
 
22804
     {
 
22805
@@ -1099,6 +1026,7 @@
 
22806
              decl = error_mark_node;
 
22807
            else if (INTEGRAL_TYPE_P(TREE_TYPE(expr_tree)))
 
22808
              {
 
22809
+                tree name = get_identifier_from_string(this->get_id(gogo));
 
22810
                decl = build_decl(named_constant->location().gcc_location(),
 
22811
                                   CONST_DECL, name, TREE_TYPE(expr_tree));
 
22812
                DECL_INITIAL(decl) = expr_tree;
 
22813
@@ -1161,7 +1089,7 @@
 
22814
     case NAMED_OBJECT_FUNC:
 
22815
       {
 
22816
        Function* func = this->u_.func_value;
 
22817
-       decl = func->get_or_make_decl(gogo, this, name);
 
22818
+       decl = function_to_tree(func->get_or_make_decl(gogo, this));
 
22819
        if (decl != error_mark_node)
 
22820
          {
 
22821
            if (func->block() != NULL)
 
22822
@@ -1286,124 +1214,13 @@
 
22823
   return block_tree;
 
22824
 }
 
22825
 
 
22826
-// Get a tree for a function decl.
 
22827
+// Get the backend representation.
 
22828
 
 
22829
-tree
 
22830
-Function::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
 
22831
+Bfunction*
 
22832
+Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no)
 
22833
 {
 
22834
-  if (this->fndecl_ == NULL_TREE)
 
22835
+  if (this->fndecl_ == NULL)
 
22836
     {
 
22837
-      tree functype = type_to_tree(this->type_->get_backend(gogo));
 
22838
-
 
22839
-      if (functype != error_mark_node)
 
22840
-       {
 
22841
-         // The type of a function comes back as a pointer to a
 
22842
-         // struct whose first field is the function, but we want the
 
22843
-         // real function type for a function declaration.
 
22844
-         go_assert(POINTER_TYPE_P(functype)
 
22845
-                   && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE);
 
22846
-         functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype)));
 
22847
-         go_assert(FUNCTION_POINTER_TYPE_P(functype));
 
22848
-         functype = TREE_TYPE(functype);
 
22849
-       }
 
22850
-
 
22851
-      if (functype == error_mark_node)
 
22852
-       this->fndecl_ = error_mark_node;
 
22853
-      else
 
22854
-       {
 
22855
-         tree decl = build_decl(this->location().gcc_location(), FUNCTION_DECL,
 
22856
-                                 id, functype);
 
22857
-
 
22858
-         this->fndecl_ = decl;
 
22859
-
 
22860
-         if (no->package() != NULL)
 
22861
-           ;
 
22862
-         else if (this->enclosing_ != NULL || Gogo::is_thunk(no))
 
22863
-           ;
 
22864
-         else if (Gogo::unpack_hidden_name(no->name()) == "init"
 
22865
-                  && !this->type_->is_method())
 
22866
-           ;
 
22867
-         else if (Gogo::unpack_hidden_name(no->name()) == "main"
 
22868
-                  && gogo->is_main_package())
 
22869
-           TREE_PUBLIC(decl) = 1;
 
22870
-         // Methods have to be public even if they are hidden because
 
22871
-         // they can be pulled into type descriptors when using
 
22872
-         // anonymous fields.
 
22873
-         else if (!Gogo::is_hidden_name(no->name())
 
22874
-                  || this->type_->is_method())
 
22875
-           {
 
22876
-             TREE_PUBLIC(decl) = 1;
 
22877
-             std::string pkgpath = gogo->pkgpath_symbol();
 
22878
-             if (this->type_->is_method()
 
22879
-                 && Gogo::is_hidden_name(no->name())
 
22880
-                 && Gogo::hidden_name_pkgpath(no->name()) != gogo->pkgpath())
 
22881
-               {
 
22882
-                 // This is a method we created for an unexported
 
22883
-                 // method of an imported embedded type.  We need to
 
22884
-                 // use the pkgpath of the imported package to avoid
 
22885
-                 // a possible name collision.  See bug478 for a test
 
22886
-                 // case.
 
22887
-                 pkgpath = Gogo::hidden_name_pkgpath(no->name());
 
22888
-                 pkgpath = Gogo::pkgpath_for_symbol(pkgpath);
 
22889
-               }
 
22890
-
 
22891
-             std::string asm_name = pkgpath;
 
22892
-             asm_name.append(1, '.');
 
22893
-             asm_name.append(Gogo::unpack_hidden_name(no->name()));
 
22894
-             if (this->type_->is_method())
 
22895
-               {
 
22896
-                 asm_name.append(1, '.');
 
22897
-                 Type* rtype = this->type_->receiver()->type();
 
22898
-                 asm_name.append(rtype->mangled_name(gogo));
 
22899
-               }
 
22900
-             SET_DECL_ASSEMBLER_NAME(decl,
 
22901
-                                     get_identifier_from_string(asm_name));
 
22902
-           }
 
22903
-
 
22904
-         // Why do we have to do this in the frontend?
 
22905
-         tree restype = TREE_TYPE(functype);
 
22906
-         tree resdecl =
 
22907
-            build_decl(this->location().gcc_location(), RESULT_DECL, NULL_TREE,
 
22908
-                       restype);
 
22909
-         DECL_ARTIFICIAL(resdecl) = 1;
 
22910
-         DECL_IGNORED_P(resdecl) = 1;
 
22911
-         DECL_CONTEXT(resdecl) = decl;
 
22912
-         DECL_RESULT(decl) = resdecl;
 
22913
-
 
22914
-         // If a function calls the predeclared recover function, we
 
22915
-         // can't inline it, because recover behaves differently in a
 
22916
-         // function passed directly to defer.  If this is a recover
 
22917
-         // thunk that we built to test whether a function can be
 
22918
-         // recovered, we can't inline it, because that will mess up
 
22919
-         // our return address comparison.
 
22920
-         if (this->calls_recover_ || this->is_recover_thunk_)
 
22921
-           DECL_UNINLINABLE(decl) = 1;
 
22922
-
 
22923
-         // If this is a thunk created to call a function which calls
 
22924
-         // the predeclared recover function, we need to disable
 
22925
-         // stack splitting for the thunk.
 
22926
-         if (this->is_recover_thunk_)
 
22927
-           {
 
22928
-             tree attr = get_identifier("__no_split_stack__");
 
22929
-             DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
 
22930
-           }
 
22931
-
 
22932
-         if (this->in_unique_section_)
 
22933
-           resolve_unique_section (decl, 0, 1);
 
22934
-
 
22935
-         go_preserve_from_gc(decl);
 
22936
-       }
 
22937
-    }
 
22938
-  return this->fndecl_;
 
22939
-}
 
22940
-
 
22941
-// Get a tree for a function declaration.
 
22942
-
 
22943
-tree
 
22944
-Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
 
22945
-{
 
22946
-  if (this->fndecl_ == NULL_TREE)
 
22947
-    {
 
22948
       // Let Go code use an asm declaration to pick up a builtin
 
22949
       // function.
 
22950
       if (!this->asm_name_.empty())
 
22951
@@ -1412,58 +1229,46 @@
 
22952
            builtin_functions.find(this->asm_name_);
 
22953
          if (p != builtin_functions.end())
 
22954
            {
 
22955
-             this->fndecl_ = p->second;
 
22956
+             this->fndecl_ = tree_to_function(p->second);
 
22957
              return this->fndecl_;
 
22958
            }
 
22959
        }
 
22960
 
 
22961
-      tree functype = type_to_tree(this->fntype_->get_backend(gogo));
 
22962
+      std::string asm_name;
 
22963
+      if (this->asm_name_.empty())
 
22964
+        {
 
22965
+          asm_name = (no->package() == NULL
 
22966
+                                  ? gogo->pkgpath_symbol()
 
22967
+                                  : no->package()->pkgpath_symbol());
 
22968
+          asm_name.append(1, '.');
 
22969
+          asm_name.append(Gogo::unpack_hidden_name(no->name()));
 
22970
+          if (this->fntype_->is_method())
 
22971
+            {
 
22972
+              asm_name.append(1, '.');
 
22973
+              Type* rtype = this->fntype_->receiver()->type();
 
22974
+              asm_name.append(rtype->mangled_name(gogo));
 
22975
+            }
 
22976
+        }
 
22977
 
 
22978
-      if (functype != error_mark_node)
 
22979
-       {
 
22980
-         // The type of a function comes back as a pointer to a
 
22981
-         // struct whose first field is the function, but we want the
 
22982
-         // real function type for a function declaration.
 
22983
-         go_assert(POINTER_TYPE_P(functype)
 
22984
-                   && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE);
 
22985
-         functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype)));
 
22986
-         go_assert(FUNCTION_POINTER_TYPE_P(functype));
 
22987
-         functype = TREE_TYPE(functype);
 
22988
-       }
 
22989
+      Btype* functype = this->fntype_->get_backend_fntype(gogo);
 
22990
+      this->fndecl_ =
 
22991
+          gogo->backend()->function(functype, no->get_id(gogo), asm_name,
 
22992
+                                    true, true, true, false, false,
 
22993
+                                    this->location());
 
22994
+    }
 
22995
 
 
22996
-      tree decl;
 
22997
-      if (functype == error_mark_node)
 
22998
-       decl = error_mark_node;
 
22999
-      else
 
23000
-       {
 
23001
-         decl = build_decl(this->location().gcc_location(), FUNCTION_DECL, id,
 
23002
-                            functype);
 
23003
-         TREE_PUBLIC(decl) = 1;
 
23004
-         DECL_EXTERNAL(decl) = 1;
 
23005
-
 
23006
-         if (this->asm_name_.empty())
 
23007
-           {
 
23008
-             std::string asm_name = (no->package() == NULL
 
23009
-                                     ? gogo->pkgpath_symbol()
 
23010
-                                     : no->package()->pkgpath_symbol());
 
23011
-             asm_name.append(1, '.');
 
23012
-             asm_name.append(Gogo::unpack_hidden_name(no->name()));
 
23013
-             if (this->fntype_->is_method())
 
23014
-               {
 
23015
-                 asm_name.append(1, '.');
 
23016
-                 Type* rtype = this->fntype_->receiver()->type();
 
23017
-                 asm_name.append(rtype->mangled_name(gogo));
 
23018
-               }
 
23019
-             SET_DECL_ASSEMBLER_NAME(decl,
 
23020
-                                     get_identifier_from_string(asm_name));
 
23021
-           }
 
23022
-       }
 
23023
-      this->fndecl_ = decl;
 
23024
-      go_preserve_from_gc(decl);
 
23025
-    }
 
23026
   return this->fndecl_;
 
23027
 }
 
23028
 
 
23029
+// Return the function's decl after it has been built.
 
23030
+
 
23031
+tree
 
23032
+Function::get_decl() const
 
23033
+{
 
23034
+  go_assert(this->fndecl_ != NULL);
 
23035
+  return function_to_tree(this->fndecl_);
 
23036
+}
 
23037
+
 
23038
 // We always pass the receiver to a method as a pointer.  If the
 
23039
 // receiver is actually declared as a non-pointer type, then we copy
 
23040
 // the value into a local variable, so that it has the right type.  In
 
23041
@@ -1558,7 +1363,7 @@
 
23042
 void
 
23043
 Function::build_tree(Gogo* gogo, Named_object* named_function)
 
23044
 {
 
23045
-  tree fndecl = this->fndecl_;
 
23046
+  tree fndecl = this->get_decl();
 
23047
   go_assert(fndecl != NULL_TREE);
 
23048
 
 
23049
   tree params = NULL_TREE;
 
23050
@@ -1796,7 +1601,7 @@
 
23051
     set = NULL_TREE;
 
23052
   else
 
23053
     set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node,
 
23054
-                         DECL_RESULT(this->fndecl_), retval);
 
23055
+                         DECL_RESULT(this->get_decl()), retval);
 
23056
   tree ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR,
 
23057
                                   void_type_node, set);
 
23058
   append_to_statement_list(ret_stmt, &stmt_list);
 
23059
@@ -1851,7 +1656,7 @@
 
23060
       retval = this->return_value(gogo, named_function, end_loc,
 
23061
                                  &stmt_list);
 
23062
       set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node,
 
23063
-                           DECL_RESULT(this->fndecl_), retval);
 
23064
+                           DECL_RESULT(this->get_decl()), retval);
 
23065
       ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR,
 
23066
                                  void_type_node, set);
 
23067
 
 
23068
@@ -1869,7 +1674,7 @@
 
23069
   *fini = stmt_list;
 
23070
 }
 
23071
 
 
23072
-// Return the value to assign to DECL_RESULT(this->fndecl_).  This may
 
23073
+// Return the value to assign to DECL_RESULT(this->get_decl()).  This may
 
23074
 // also add statements to STMT_LIST, which need to be executed before
 
23075
 // the assignment.  This is used for a return statement with no
 
23076
 // explicit values.
 
23077
@@ -1902,7 +1707,7 @@
 
23078
     }
 
23079
   else
 
23080
     {
 
23081
-      tree rettype = TREE_TYPE(DECL_RESULT(this->fndecl_));
 
23082
+      tree rettype = TREE_TYPE(DECL_RESULT(this->get_decl()));
 
23083
       retval = create_tmp_var(rettype, "RESULT");
 
23084
       tree field = TYPE_FIELDS(rettype);
 
23085
       int index = 0;
 
23086
@@ -2323,18 +2128,14 @@
 
23087
       go_assert(m != NULL);
 
23088
 
 
23089
       Named_object* no = m->named_object();
 
23090
-
 
23091
-      tree fnid = no->get_id(this);
 
23092
-
 
23093
-      tree fndecl;
 
23094
+      Bfunction* bf;
 
23095
       if (no->is_function())
 
23096
-       fndecl = no->func_value()->get_or_make_decl(this, no, fnid);
 
23097
+       bf = no->func_value()->get_or_make_decl(this, no);
 
23098
       else if (no->is_function_declaration())
 
23099
-       fndecl = no->func_declaration_value()->get_or_make_decl(this, no,
 
23100
-                                                               fnid);
 
23101
+       bf = no->func_declaration_value()->get_or_make_decl(this, no);
 
23102
       else
 
23103
        go_unreachable();
 
23104
-      fndecl = build_fold_addr_expr(fndecl);
 
23105
+      tree fndecl = build_fold_addr_expr(function_to_tree(bf));
 
23106
 
 
23107
       elt = pointers->quick_push(empty);
 
23108
       elt->index = size_int(i);
 
23109
@@ -2353,10 +2154,11 @@
 
23110
   TREE_CONSTANT(decl) = 1;
 
23111
   DECL_INITIAL(decl) = constructor;
 
23112
 
 
23113
-  // If the interface type has hidden methods, then this is the only
 
23114
-  // definition of the table.  Otherwise it is a comdat table which
 
23115
-  // may be defined in multiple packages.
 
23116
-  if (has_hidden_methods)
 
23117
+  // If the interface type has hidden methods, and the table is for a
 
23118
+  // named type, then this is the only definition of the table.
 
23119
+  // Otherwise it is a comdat table which may be defined in multiple
 
23120
+  // packages.
 
23121
+  if (has_hidden_methods && type->named_type() != NULL)
 
23122
     TREE_PUBLIC(decl) = 1;
 
23123
   else
 
23124
     {
 
23125
Index: gcc/go/gofrontend/lex.cc
 
23126
===================================================================
 
23127
--- a/src/gcc/go/gofrontend/lex.cc      (.../tags/gcc_4_8_2_release)
 
23128
+++ b/src/gcc/go/gofrontend/lex.cc      (.../branches/gcc-4_8-branch)
 
23129
@@ -873,7 +873,28 @@
 
23130
              && (cc < 'a' || cc > 'z')
 
23131
              && cc != '_'
 
23132
              && (cc < '0' || cc > '9'))
 
23133
-           break;
 
23134
+           {
 
23135
+             // Check for an invalid character here, as we get better
 
23136
+             // error behaviour if we swallow them as part of the
 
23137
+             // identifier we are building.
 
23138
+             if ((cc >= ' ' && cc < 0x7f)
 
23139
+                 || cc == '\t'
 
23140
+                 || cc == '\r'
 
23141
+                 || cc == '\n')
 
23142
+               break;
 
23143
+
 
23144
+             this->lineoff_ = p - this->linebuf_;
 
23145
+             error_at(this->location(),
 
23146
+                      "invalid character 0x%x in identifier",
 
23147
+                      cc);
 
23148
+             if (!has_non_ascii_char)
 
23149
+               {
 
23150
+                 buf.assign(pstart, p - pstart);
 
23151
+                 has_non_ascii_char = true;
 
23152
+               }
 
23153
+             if (!Lex::is_invalid_identifier(buf))
 
23154
+               buf.append("$INVALID$");
 
23155
+           }
 
23156
          ++p;
 
23157
          if (is_first)
 
23158
            {
 
23159
Index: gcc/go/gofrontend/backend.h
 
23160
===================================================================
 
23161
--- a/src/gcc/go/gofrontend/backend.h   (.../tags/gcc_4_8_2_release)
 
23162
+++ b/src/gcc/go/gofrontend/backend.h   (.../branches/gcc-4_8-branch)
 
23163
@@ -23,7 +23,7 @@
 
23164
 // The backend representation of a statement.
 
23165
 class Bstatement;
 
23166
 
 
23167
-// The backend representation of a function definition.
 
23168
+// The backend representation of a function definition or declaration.
 
23169
 class Bfunction;
 
23170
 
 
23171
 // The backend representation of a block.
 
23172
@@ -266,6 +266,11 @@
 
23173
   virtual Bexpression*
 
23174
   convert_expression(Btype* type, Bexpression* expr, Location) = 0;
 
23175
 
 
23176
+  // Create an expression for the address of a function.  This is used to
 
23177
+  // get the address of the code for a function.
 
23178
+  virtual Bexpression*
 
23179
+  function_code_expression(Bfunction*, Location) = 0;
 
23180
+
 
23181
   // Statements.
 
23182
 
 
23183
   // Create an error statement.  This is used for cases which should
 
23184
@@ -498,6 +503,32 @@
 
23185
   // recover.
 
23186
   virtual Bexpression*
 
23187
   label_address(Blabel*, Location) = 0;
 
23188
+
 
23189
+  // Functions.
 
23190
+
 
23191
+  // Create an error function.  This is used for cases which should
 
23192
+  // not occur in a correct program, in order to keep the compilation
 
23193
+  // going without crashing.
 
23194
+  virtual Bfunction*
 
23195
+  error_function() = 0;
 
23196
+
 
23197
+  // Declare or define a function of FNTYPE.
 
23198
+  // NAME is the Go name of the function. ASM_NAME, if not the empty string, is
 
23199
+  // the name that should be used in the symbol table; this will be non-empty if
 
23200
+  // a magic extern comment is used.
 
23201
+  // IS_VISIBLE is true if this function should be visible outside of the
 
23202
+  // current compilation unit. IS_DECLARATION is true if this is a function
 
23203
+  // declaration rather than a definition; the function definition will be in
 
23204
+  // another compilation unit.
 
23205
+  // IS_INLINABLE is true if the function can be inlined.
 
23206
+  // DISABLE_SPLIT_STACK is true if this function may not split the stack; this
 
23207
+  // is used for the implementation of recover.
 
23208
+  // IN_UNIQUE_SECTION is true if this function should be put into a unique
 
23209
+  // location if possible; this is used for field tracking.
 
23210
+  virtual Bfunction*
 
23211
+  function(Btype* fntype, const std::string& name, const std::string& asm_name,
 
23212
+           bool is_visible, bool is_declaration, bool is_inlinable,
 
23213
+           bool disable_split_stack, bool in_unique_section, Location) = 0;
 
23214
 };
 
23215
 
 
23216
 // The backend interface has to define this function.
 
23217
@@ -517,5 +548,6 @@
 
23218
 extern tree stat_to_tree(Bstatement*);
 
23219
 extern tree block_to_tree(Bblock*);
 
23220
 extern tree var_to_tree(Bvariable*);
 
23221
+extern tree function_to_tree(Bfunction*);
 
23222
 
 
23223
 #endif // !defined(GO_BACKEND_H)
 
23224
Index: gcc/go/gofrontend/types.cc
 
23225
===================================================================
 
23226
--- a/src/gcc/go/gofrontend/types.cc    (.../tags/gcc_4_8_2_release)
 
23227
+++ b/src/gcc/go/gofrontend/types.cc    (.../branches/gcc-4_8-branch)
 
23228
@@ -1834,7 +1834,9 @@
 
23229
                                               bloc);
 
23230
   gogo->start_block(bloc);
 
23231
 
 
23232
-  if (this->struct_type() != NULL)
 
23233
+  if (name != NULL && name->real_type()->named_type() != NULL)
 
23234
+    this->write_named_hash(gogo, name, hash_fntype, equal_fntype);
 
23235
+  else if (this->struct_type() != NULL)
 
23236
     this->struct_type()->write_hash_function(gogo, name, hash_fntype,
 
23237
                                             equal_fntype);
 
23238
   else if (this->array_type() != NULL)
 
23239
@@ -1852,7 +1854,9 @@
 
23240
                                                false, bloc);
 
23241
   gogo->start_block(bloc);
 
23242
 
 
23243
-  if (this->struct_type() != NULL)
 
23244
+  if (name != NULL && name->real_type()->named_type() != NULL)
 
23245
+    this->write_named_equal(gogo, name);
 
23246
+  else if (this->struct_type() != NULL)
 
23247
     this->struct_type()->write_equal_function(gogo, name);
 
23248
   else if (this->array_type() != NULL)
 
23249
     this->array_type()->write_equal_function(gogo, name);
 
23250
@@ -1865,6 +1869,100 @@
 
23251
   gogo->finish_function(bloc);
 
23252
 }
 
23253
 
 
23254
+// Write a hash function that simply calls the hash function for a
 
23255
+// named type.  This is used when one named type is defined as
 
23256
+// another.  This ensures that this case works when the other named
 
23257
+// type is defined in another package and relies on calling hash
 
23258
+// functions defined only in that package.
 
23259
+
 
23260
+void
 
23261
+Type::write_named_hash(Gogo* gogo, Named_type* name,
 
23262
+                      Function_type* hash_fntype, Function_type* equal_fntype)
 
23263
+{
 
23264
+  Location bloc = Linemap::predeclared_location();
 
23265
+
 
23266
+  Named_type* base_type = name->real_type()->named_type();
 
23267
+  go_assert(base_type != NULL);
 
23268
+
 
23269
+  // The pointer to the type we are going to hash.  This is an
 
23270
+  // unsafe.Pointer.
 
23271
+  Named_object* key_arg = gogo->lookup("key", NULL);
 
23272
+  go_assert(key_arg != NULL);
 
23273
+
 
23274
+  // The size of the type we are going to hash.
 
23275
+  Named_object* keysz_arg = gogo->lookup("key_size", NULL);
 
23276
+  go_assert(keysz_arg != NULL);
 
23277
+
 
23278
+  Named_object* hash_fn;
 
23279
+  Named_object* equal_fn;
 
23280
+  name->real_type()->type_functions(gogo, base_type, hash_fntype, equal_fntype,
 
23281
+                                   &hash_fn, &equal_fn);
 
23282
+
 
23283
+  // Call the hash function for the base type.
 
23284
+  Expression* key_ref = Expression::make_var_reference(key_arg, bloc);
 
23285
+  Expression* keysz_ref = Expression::make_var_reference(keysz_arg, bloc);
 
23286
+  Expression_list* args = new Expression_list();
 
23287
+  args->push_back(key_ref);
 
23288
+  args->push_back(keysz_ref);
 
23289
+  Expression* func = Expression::make_func_reference(hash_fn, NULL, bloc);
 
23290
+  Expression* call = Expression::make_call(func, args, false, bloc);
 
23291
+
 
23292
+  // Return the hash of the base type.
 
23293
+  Expression_list* vals = new Expression_list();
 
23294
+  vals->push_back(call);
 
23295
+  Statement* s = Statement::make_return_statement(vals, bloc);
 
23296
+  gogo->add_statement(s);
 
23297
+}
 
23298
+
 
23299
+// Write an equality function that simply calls the equality function
 
23300
+// for a named type.  This is used when one named type is defined as
 
23301
+// another.  This ensures that this case works when the other named
 
23302
+// type is defined in another package and relies on calling equality
 
23303
+// functions defined only in that package.
 
23304
+
 
23305
+void
 
23306
+Type::write_named_equal(Gogo* gogo, Named_type* name)
 
23307
+{
 
23308
+  Location bloc = Linemap::predeclared_location();
 
23309
+
 
23310
+  // The pointers to the types we are going to compare.  These have
 
23311
+  // type unsafe.Pointer.
 
23312
+  Named_object* key1_arg = gogo->lookup("key1", NULL);
 
23313
+  Named_object* key2_arg = gogo->lookup("key2", NULL);
 
23314
+  go_assert(key1_arg != NULL && key2_arg != NULL);
 
23315
+
 
23316
+  Named_type* base_type = name->real_type()->named_type();
 
23317
+  go_assert(base_type != NULL);
 
23318
+
 
23319
+  // Build temporaries with the base type.
 
23320
+  Type* pt = Type::make_pointer_type(base_type);
 
23321
+
 
23322
+  Expression* ref = Expression::make_var_reference(key1_arg, bloc);
 
23323
+  ref = Expression::make_cast(pt, ref, bloc);
 
23324
+  Temporary_statement* p1 = Statement::make_temporary(pt, ref, bloc);
 
23325
+  gogo->add_statement(p1);
 
23326
+
 
23327
+  ref = Expression::make_var_reference(key2_arg, bloc);
 
23328
+  ref = Expression::make_cast(pt, ref, bloc);
 
23329
+  Temporary_statement* p2 = Statement::make_temporary(pt, ref, bloc);
 
23330
+  gogo->add_statement(p2);
 
23331
+
 
23332
+  // Compare the values for equality.
 
23333
+  Expression* t1 = Expression::make_temporary_reference(p1, bloc);
 
23334
+  t1 = Expression::make_unary(OPERATOR_MULT, t1, bloc);
 
23335
+
 
23336
+  Expression* t2 = Expression::make_temporary_reference(p2, bloc);
 
23337
+  t2 = Expression::make_unary(OPERATOR_MULT, t2, bloc);
 
23338
+
 
23339
+  Expression* cond = Expression::make_binary(OPERATOR_EQEQ, t1, t2, bloc);
 
23340
+
 
23341
+  // Return the equality comparison.
 
23342
+  Expression_list* vals = new Expression_list();
 
23343
+  vals->push_back(cond);
 
23344
+  Statement* s = Statement::make_return_statement(vals, bloc);
 
23345
+  gogo->add_statement(s);
 
23346
+}
 
23347
+
 
23348
 // Return a composite literal for the type descriptor for a plain type
 
23349
 // of kind RUNTIME_TYPE_KIND named NAME.
 
23350
 
 
23351
@@ -2164,26 +2262,9 @@
 
23352
 
 
23353
   ++p;
 
23354
   go_assert(p->is_field_name("typ"));
 
23355
-  if (!only_value_methods && m->is_value_method())
 
23356
-    {
 
23357
-      // This is a value method on a pointer type.  Change the type of
 
23358
-      // the method to use a pointer receiver.  The implementation
 
23359
-      // always uses a pointer receiver anyhow.
 
23360
-      Type* rtype = mtype->receiver()->type();
 
23361
-      Type* prtype = Type::make_pointer_type(rtype);
 
23362
-      Typed_identifier* receiver =
 
23363
-       new Typed_identifier(mtype->receiver()->name(), prtype,
 
23364
-                            mtype->receiver()->location());
 
23365
-      mtype = Type::make_function_type(receiver,
 
23366
-                                      (mtype->parameters() == NULL
 
23367
-                                       ? NULL
 
23368
-                                       : mtype->parameters()->copy()),
 
23369
-                                      (mtype->results() == NULL
 
23370
-                                       ? NULL
 
23371
-                                       : mtype->results()->copy()),
 
23372
-                                      mtype->location());
 
23373
-    }
 
23374
-  vals->push_back(Expression::make_type_descriptor(mtype, bloc));
 
23375
+  bool want_pointer_receiver = !only_value_methods && m->is_value_method();
 
23376
+  nonmethod_type = mtype->copy_with_receiver_as_param(want_pointer_receiver);
 
23377
+  vals->push_back(Expression::make_type_descriptor(nonmethod_type, bloc));
 
23378
 
 
23379
   ++p;
 
23380
   go_assert(p->is_field_name("tfn"));
 
23381
@@ -3383,6 +3464,68 @@
 
23382
 // Get the backend representation for a function type.
 
23383
 
 
23384
 Btype*
 
23385
+Function_type::get_backend_fntype(Gogo* gogo)
 
23386
+{
 
23387
+  if (this->fnbtype_ == NULL)
 
23388
+    {
 
23389
+      Backend::Btyped_identifier breceiver;
 
23390
+      if (this->receiver_ != NULL)
 
23391
+        {
 
23392
+          breceiver.name = Gogo::unpack_hidden_name(this->receiver_->name());
 
23393
+
 
23394
+          // We always pass the address of the receiver parameter, in
 
23395
+          // order to make interface calls work with unknown types.
 
23396
+          Type* rtype = this->receiver_->type();
 
23397
+          if (rtype->points_to() == NULL)
 
23398
+            rtype = Type::make_pointer_type(rtype);
 
23399
+          breceiver.btype = rtype->get_backend(gogo);
 
23400
+          breceiver.location = this->receiver_->location();
 
23401
+        }
 
23402
+
 
23403
+      std::vector<Backend::Btyped_identifier> bparameters;
 
23404
+      if (this->parameters_ != NULL)
 
23405
+        {
 
23406
+          bparameters.resize(this->parameters_->size());
 
23407
+          size_t i = 0;
 
23408
+          for (Typed_identifier_list::const_iterator p =
 
23409
+                   this->parameters_->begin(); p != this->parameters_->end();
 
23410
+               ++p, ++i)
 
23411
+           {
 
23412
+              bparameters[i].name = Gogo::unpack_hidden_name(p->name());
 
23413
+              bparameters[i].btype = p->type()->get_backend(gogo);
 
23414
+              bparameters[i].location = p->location();
 
23415
+            }
 
23416
+          go_assert(i == bparameters.size());
 
23417
+        }
 
23418
+
 
23419
+      std::vector<Backend::Btyped_identifier> bresults;
 
23420
+      if (this->results_ != NULL)
 
23421
+        {
 
23422
+          bresults.resize(this->results_->size());
 
23423
+          size_t i = 0;
 
23424
+          for (Typed_identifier_list::const_iterator p =
 
23425
+                   this->results_->begin(); p != this->results_->end();
 
23426
+               ++p, ++i)
 
23427
+           {
 
23428
+              bresults[i].name = Gogo::unpack_hidden_name(p->name());
 
23429
+              bresults[i].btype = p->type()->get_backend(gogo);
 
23430
+              bresults[i].location = p->location();
 
23431
+            }
 
23432
+          go_assert(i == bresults.size());
 
23433
+        }
 
23434
+
 
23435
+      this->fnbtype_ = gogo->backend()->function_type(breceiver, bparameters,
 
23436
+                                                      bresults,
 
23437
+                                                      this->location());
 
23438
+
 
23439
+    }
 
23440
+
 
23441
+  return this->fnbtype_;
 
23442
+}
 
23443
+
 
23444
+// Get the backend representation for a Go function type.
 
23445
+
 
23446
+Btype*
 
23447
 Function_type::do_get_backend(Gogo* gogo)
 
23448
 {
 
23449
   // When we do anything with a function value other than call it, it
 
23450
@@ -3395,57 +3538,9 @@
 
23451
     gogo->backend()->placeholder_struct_type("__go_descriptor", loc);
 
23452
   Btype* ptr_struct_type = gogo->backend()->pointer_type(struct_type);
 
23453
 
 
23454
-  Backend::Btyped_identifier breceiver;
 
23455
-  if (this->receiver_ != NULL)
 
23456
-    {
 
23457
-      breceiver.name = Gogo::unpack_hidden_name(this->receiver_->name());
 
23458
-
 
23459
-      // We always pass the address of the receiver parameter, in
 
23460
-      // order to make interface calls work with unknown types.
 
23461
-      Type* rtype = this->receiver_->type();
 
23462
-      if (rtype->points_to() == NULL)
 
23463
-       rtype = Type::make_pointer_type(rtype);
 
23464
-      breceiver.btype = rtype->get_backend(gogo);
 
23465
-      breceiver.location = this->receiver_->location();
 
23466
-    }
 
23467
-
 
23468
-  std::vector<Backend::Btyped_identifier> bparameters;
 
23469
-  if (this->parameters_ != NULL)
 
23470
-    {
 
23471
-      bparameters.resize(this->parameters_->size());
 
23472
-      size_t i = 0;
 
23473
-      for (Typed_identifier_list::const_iterator p = this->parameters_->begin();
 
23474
-          p != this->parameters_->end();
 
23475
-          ++p, ++i)
 
23476
-       {
 
23477
-         bparameters[i].name = Gogo::unpack_hidden_name(p->name());
 
23478
-         bparameters[i].btype = p->type()->get_backend(gogo);
 
23479
-         bparameters[i].location = p->location();
 
23480
-       }
 
23481
-      go_assert(i == bparameters.size());
 
23482
-    }
 
23483
-
 
23484
-  std::vector<Backend::Btyped_identifier> bresults;
 
23485
-  if (this->results_ != NULL)
 
23486
-    {
 
23487
-      bresults.resize(this->results_->size());
 
23488
-      size_t i = 0;
 
23489
-      for (Typed_identifier_list::const_iterator p = this->results_->begin();
 
23490
-          p != this->results_->end();
 
23491
-          ++p, ++i)
 
23492
-       {
 
23493
-         bresults[i].name = Gogo::unpack_hidden_name(p->name());
 
23494
-         bresults[i].btype = p->type()->get_backend(gogo);
 
23495
-         bresults[i].location = p->location();
 
23496
-       }
 
23497
-      go_assert(i == bresults.size());
 
23498
-    }
 
23499
-
 
23500
-  Btype* fntype = gogo->backend()->function_type(breceiver, bparameters,
 
23501
-                                                bresults, loc);
 
23502
   std::vector<Backend::Btyped_identifier> fields(1);
 
23503
   fields[0].name = "code";
 
23504
-  fields[0].btype = fntype;
 
23505
+  fields[0].btype = this->get_backend_fntype(gogo);
 
23506
   fields[0].location = loc;
 
23507
   if (!gogo->backend()->set_placeholder_struct_type(struct_type, fields))
 
23508
     return gogo->backend()->error_type();
 
23509
@@ -3821,6 +3916,32 @@
 
23510
   return ret;
 
23511
 }
 
23512
 
 
23513
+// Make a copy of a function type with the receiver as the first
 
23514
+// parameter.
 
23515
+
 
23516
+Function_type*
 
23517
+Function_type::copy_with_receiver_as_param(bool want_pointer_receiver) const
 
23518
+{
 
23519
+  go_assert(this->is_method());
 
23520
+  Typed_identifier_list* new_params = new Typed_identifier_list();
 
23521
+  Type* rtype = this->receiver_->type();
 
23522
+  if (want_pointer_receiver)
 
23523
+    rtype = Type::make_pointer_type(rtype);
 
23524
+  Typed_identifier receiver(this->receiver_->name(), rtype,
 
23525
+                           this->receiver_->location());
 
23526
+  new_params->push_back(receiver);
 
23527
+  const Typed_identifier_list* orig_params = this->parameters_;
 
23528
+  if (orig_params != NULL && !orig_params->empty())
 
23529
+    {
 
23530
+      for (Typed_identifier_list::const_iterator p = orig_params->begin();
 
23531
+          p != orig_params->end();
 
23532
+          ++p)
 
23533
+       new_params->push_back(*p);
 
23534
+    }
 
23535
+  return Type::make_function_type(NULL, new_params, this->results_,
 
23536
+                                 this->location_);
 
23537
+}
 
23538
+
 
23539
 // Make a copy of a function type ignoring any receiver and adding a
 
23540
 // closure parameter.
 
23541
 
 
23542
@@ -4195,7 +4316,8 @@
 
23543
 
 
23544
       // This is a horrible hack caused by the fact that we don't pack
 
23545
       // the names of builtin types.  FIXME.
 
23546
-      if (nt != NULL
 
23547
+      if (!this->is_imported_
 
23548
+         && nt != NULL
 
23549
          && nt->is_builtin()
 
23550
          && nt->name() == Gogo::unpack_hidden_name(name))
 
23551
        return true;
 
23552
@@ -4204,6 +4326,36 @@
 
23553
     }
 
23554
 }
 
23555
 
 
23556
+// Return whether this field is an unexported field named NAME.
 
23557
+
 
23558
+bool
 
23559
+Struct_field::is_unexported_field_name(Gogo* gogo,
 
23560
+                                      const std::string& name) const
 
23561
+{
 
23562
+  const std::string& field_name(this->field_name());
 
23563
+  if (Gogo::is_hidden_name(field_name)
 
23564
+      && name == Gogo::unpack_hidden_name(field_name)
 
23565
+      && gogo->pack_hidden_name(name, false) != field_name)
 
23566
+    return true;
 
23567
+
 
23568
+  // Check for the name of a builtin type.  This is like the test in
 
23569
+  // is_field_name, only there we return false if this->is_imported_,
 
23570
+  // and here we return true.
 
23571
+  if (this->is_imported_ && this->is_anonymous())
 
23572
+    {
 
23573
+      Type* t = this->typed_identifier_.type();
 
23574
+      if (t->points_to() != NULL)
 
23575
+       t = t->points_to();
 
23576
+      Named_type* nt = t->named_type();
 
23577
+      if (nt != NULL
 
23578
+         && nt->is_builtin()
 
23579
+         && nt->name() == Gogo::unpack_hidden_name(name))
 
23580
+       return true;
 
23581
+    }
 
23582
+
 
23583
+  return false;
 
23584
+}
 
23585
+
 
23586
 // Return whether this field is an embedded built-in type.
 
23587
 
 
23588
 bool
 
23589
@@ -4264,13 +4416,8 @@
 
23590
        ++p)
 
23591
     {
 
23592
       Type* t = p->type();
 
23593
-      if (t->is_undefined())
 
23594
+      if (p->is_anonymous())
 
23595
        {
 
23596
-         error_at(p->location(), "struct field type is incomplete");
 
23597
-         p->set_type(Type::make_error_type());
 
23598
-       }
 
23599
-      else if (p->is_anonymous())
 
23600
-       {
 
23601
          if (t->named_type() != NULL && t->points_to() != NULL)
 
23602
            {
 
23603
              error_at(p->location(), "embedded type may not be a pointer");
 
23604
@@ -4641,13 +4788,8 @@
 
23605
       for (Struct_field_list::const_iterator pf = fields->begin();
 
23606
           pf != fields->end();
 
23607
           ++pf)
 
23608
-       {
 
23609
-         const std::string& field_name(pf->field_name());
 
23610
-         if (Gogo::is_hidden_name(field_name)
 
23611
-             && name == Gogo::unpack_hidden_name(field_name)
 
23612
-             && gogo->pack_hidden_name(name, false) != field_name)
 
23613
-           return true;
 
23614
-       }
 
23615
+       if (pf->is_unexported_field_name(gogo, name))
 
23616
+         return true;
 
23617
     }
 
23618
   return false;
 
23619
 }
 
23620
@@ -5250,6 +5392,7 @@
 
23621
          Type* ftype = imp->read_type();
 
23622
 
 
23623
          Struct_field sf(Typed_identifier(name, ftype, imp->location()));
 
23624
+         sf.set_is_imported();
 
23625
 
 
23626
          if (imp->peek_char() == ' ')
 
23627
            {
 
23628
@@ -9022,6 +9165,8 @@
 
23629
                                      fntype->is_varargs(), location);
 
23630
          gogo->finish_function(fntype->location());
 
23631
 
 
23632
+         if (type->named_type() == NULL && stub->is_function())
 
23633
+           stub->func_value()->set_is_unnamed_type_stub_method();
 
23634
          if (m->nointerface() && stub->is_function())
 
23635
            stub->func_value()->set_nointerface();
 
23636
        }
 
23637
@@ -9289,7 +9434,9 @@
 
23638
       else
 
23639
        {
 
23640
          bool is_unexported;
 
23641
-         if (!Gogo::is_hidden_name(name))
 
23642
+         // The test for 'a' and 'z' is to handle builtin names,
 
23643
+         // which are not hidden.
 
23644
+         if (!Gogo::is_hidden_name(name) && (name[0] < 'a' || name[0] > 'z'))
 
23645
            is_unexported = false;
 
23646
          else
 
23647
            {
 
23648
Index: gcc/go/gofrontend/expressions.cc
 
23649
===================================================================
 
23650
--- a/src/gcc/go/gofrontend/expressions.cc      (.../tags/gcc_4_8_2_release)
 
23651
+++ b/src/gcc/go/gofrontend/expressions.cc      (.../branches/gcc-4_8-branch)
 
23652
@@ -1219,7 +1219,7 @@
 
23653
 
 
23654
 // Get the tree for the code of a function expression.
 
23655
 
 
23656
-tree
 
23657
+Bexpression*
 
23658
 Func_expression::get_code_pointer(Gogo* gogo, Named_object* no, Location loc)
 
23659
 {
 
23660
   Function_type* fntype;
 
23661
@@ -1237,25 +1237,18 @@
 
23662
       error_at(loc,
 
23663
               "invalid use of special builtin function %qs; must be called",
 
23664
               no->message_name().c_str());
 
23665
-      return error_mark_node;
 
23666
+      return gogo->backend()->error_expression();
 
23667
     }
 
23668
 
 
23669
-  tree id = no->get_id(gogo);
 
23670
-  if (id == error_mark_node)
 
23671
-    return error_mark_node;
 
23672
-
 
23673
-  tree fndecl;
 
23674
+  Bfunction* fndecl;
 
23675
   if (no->is_function())
 
23676
-    fndecl = no->func_value()->get_or_make_decl(gogo, no, id);
 
23677
+    fndecl = no->func_value()->get_or_make_decl(gogo, no);
 
23678
   else if (no->is_function_declaration())
 
23679
-    fndecl = no->func_declaration_value()->get_or_make_decl(gogo, no, id);
 
23680
+    fndecl = no->func_declaration_value()->get_or_make_decl(gogo, no);
 
23681
   else
 
23682
     go_unreachable();
 
23683
 
 
23684
-  if (fndecl == error_mark_node)
 
23685
-    return error_mark_node;
 
23686
-
 
23687
-  return build_fold_addr_expr_loc(loc.gcc_location(), fndecl);
 
23688
+  return gogo->backend()->function_code_expression(fndecl, loc);
 
23689
 }
 
23690
 
 
23691
 // Get the tree for a function expression.  This is used when we take
 
23692
@@ -1492,8 +1485,10 @@
 
23693
 tree
 
23694
 Func_code_reference_expression::do_get_tree(Translate_context* context)
 
23695
 {
 
23696
-  return Func_expression::get_code_pointer(context->gogo(), this->function_,
 
23697
-                                          this->location());
 
23698
+  Bexpression* ret =
 
23699
+      Func_expression::get_code_pointer(context->gogo(), this->function_,
 
23700
+                                        this->location());
 
23701
+  return expr_to_tree(ret);
 
23702
 }
 
23703
 
 
23704
 // Make a reference to the code of a function.
 
23705
@@ -3055,8 +3050,7 @@
 
23706
   do_lower(Gogo*, Named_object*, Statement_inserter*, int);
 
23707
 
 
23708
   bool
 
23709
-  do_is_constant() const
 
23710
-  { return this->expr_->is_constant(); }
 
23711
+  do_is_constant() const;
 
23712
 
 
23713
   bool
 
23714
   do_numeric_constant_value(Numeric_constant*) const;
 
23715
@@ -3198,6 +3192,27 @@
 
23716
   return this;
 
23717
 }
 
23718
 
 
23719
+// Return whether a type conversion is a constant.
 
23720
+
 
23721
+bool
 
23722
+Type_conversion_expression::do_is_constant() const
 
23723
+{
 
23724
+  if (!this->expr_->is_constant())
 
23725
+    return false;
 
23726
+
 
23727
+  // A conversion to a type that may not be used as a constant is not
 
23728
+  // a constant.  For example, []byte(nil).
 
23729
+  Type* type = this->type_;
 
23730
+  if (type->integer_type() == NULL
 
23731
+      && type->float_type() == NULL
 
23732
+      && type->complex_type() == NULL
 
23733
+      && !type->is_boolean_type()
 
23734
+      && !type->is_string_type())
 
23735
+    return false;
 
23736
+
 
23737
+  return true;
 
23738
+}
 
23739
+
 
23740
 // Return the constant numeric value if there is one.
 
23741
 
 
23742
 bool
 
23743
@@ -5586,6 +5601,15 @@
 
23744
       subcontext.type = NULL;
 
23745
     }
 
23746
 
 
23747
+  if (this->op_ == OPERATOR_ANDAND || this->op_ == OPERATOR_OROR)
 
23748
+    {
 
23749
+      // For a logical operation, the context does not determine the
 
23750
+      // types of the operands.  The operands must be some boolean
 
23751
+      // type but if the context has a boolean type they do not
 
23752
+      // inherit it.  See http://golang.org/issue/3924.
 
23753
+      subcontext.type = NULL;
 
23754
+    }
 
23755
+
 
23756
   // Set the context for the left hand operand.
 
23757
   if (is_shift_op)
 
23758
     {
 
23759
@@ -5967,6 +5991,43 @@
 
23760
                                right);
 
23761
     }
 
23762
 
 
23763
+  // For complex division Go wants slightly different results than the
 
23764
+  // GCC library provides, so we have our own runtime routine.
 
23765
+  if (this->op_ == OPERATOR_DIV && this->left_->type()->complex_type() != NULL)
 
23766
+    {
 
23767
+      const char *name;
 
23768
+      tree *pdecl;
 
23769
+      Type* ctype;
 
23770
+      static tree complex64_div_decl;
 
23771
+      static tree complex128_div_decl;
 
23772
+      switch (this->left_->type()->complex_type()->bits())
 
23773
+       {
 
23774
+       case 64:
 
23775
+         name = "__go_complex64_div";
 
23776
+         pdecl = &complex64_div_decl;
 
23777
+         ctype = Type::lookup_complex_type("complex64");
 
23778
+         break;
 
23779
+       case 128:
 
23780
+         name = "__go_complex128_div";
 
23781
+         pdecl = &complex128_div_decl;
 
23782
+         ctype = Type::lookup_complex_type("complex128");
 
23783
+         break;
 
23784
+       default:
 
23785
+         go_unreachable();
 
23786
+       }
 
23787
+      Btype* cbtype = ctype->get_backend(gogo);
 
23788
+      tree ctype_tree = type_to_tree(cbtype);
 
23789
+      return Gogo::call_builtin(pdecl,
 
23790
+                               this->location(),
 
23791
+                               name,
 
23792
+                               2,
 
23793
+                               ctype_tree,
 
23794
+                               ctype_tree,
 
23795
+                               fold_convert_loc(gccloc, ctype_tree, left),
 
23796
+                               type,
 
23797
+                               fold_convert_loc(gccloc, ctype_tree, right));
 
23798
+    }
 
23799
+
 
23800
   tree compute_type = excess_precision_type(type);
 
23801
   if (compute_type != NULL_TREE)
 
23802
     {
 
23803
@@ -7191,6 +7252,15 @@
 
23804
   if (this->code_ == BUILTIN_OFFSETOF)
 
23805
     {
 
23806
       Expression* arg = this->one_arg();
 
23807
+
 
23808
+      if (arg->bound_method_expression() != NULL
 
23809
+         || arg->interface_field_reference_expression() != NULL)
 
23810
+       {
 
23811
+         this->report_error(_("invalid use of method value as argument "
 
23812
+                              "of Offsetof"));
 
23813
+         return this;
 
23814
+       }
 
23815
+
 
23816
       Field_reference_expression* farg = arg->field_reference_expression();
 
23817
       while (farg != NULL)
 
23818
        {
 
23819
@@ -7200,7 +7270,8 @@
 
23820
          // it must not be reached through pointer indirections.
 
23821
          if (farg->expr()->deref() != farg->expr())
 
23822
            {
 
23823
-             this->report_error(_("argument of Offsetof implies indirection of an embedded field"));
 
23824
+             this->report_error(_("argument of Offsetof implies "
 
23825
+                                  "indirection of an embedded field"));
 
23826
              return this;
 
23827
            }
 
23828
          // Go up until we reach the original base.
 
23829
@@ -7476,7 +7547,7 @@
 
23830
       switch (nc.to_unsigned_long(&v))
 
23831
        {
 
23832
        case Numeric_constant::NC_UL_VALID:
 
23833
-         return true;
 
23834
+         break;
 
23835
        case Numeric_constant::NC_UL_NOTINT:
 
23836
          error_at(e->location(), "non-integer %s argument to make",
 
23837
                   is_length ? "len" : "cap");
 
23838
@@ -7488,8 +7559,23 @@
 
23839
        case Numeric_constant::NC_UL_BIG:
 
23840
          // We don't want to give a compile-time error for a 64-bit
 
23841
          // value on a 32-bit target.
 
23842
-         return true;
 
23843
+         break;
 
23844
        }
 
23845
+
 
23846
+      mpz_t val;
 
23847
+      if (!nc.to_int(&val))
 
23848
+       go_unreachable();
 
23849
+      int bits = mpz_sizeinbase(val, 2);
 
23850
+      mpz_clear(val);
 
23851
+      Type* int_type = Type::lookup_integer_type("int");
 
23852
+      if (bits >= int_type->integer_type()->bits())
 
23853
+       {
 
23854
+         error_at(e->location(), "%s argument too large for make",
 
23855
+                  is_length ? "len" : "cap");
 
23856
+         return false;
 
23857
+       }
 
23858
+
 
23859
+      return true;
 
23860
     }
 
23861
 
 
23862
   if (e->type()->integer_type() != NULL)
 
23863
@@ -7595,6 +7681,8 @@
 
23864
 bool
 
23865
 Builtin_call_expression::do_is_constant() const
 
23866
 {
 
23867
+  if (this->is_error_expression())
 
23868
+    return true;
 
23869
   switch (this->code_)
 
23870
     {
 
23871
     case BUILTIN_LEN:
 
23872
@@ -9744,15 +9832,9 @@
 
23873
     }
 
23874
 
 
23875
   tree fntype_tree = type_to_tree(fntype->get_backend(gogo));
 
23876
-  if (fntype_tree == error_mark_node)
 
23877
+  tree fnfield_type = type_to_tree(fntype->get_backend_fntype(gogo));
 
23878
+  if (fntype_tree == error_mark_node || fnfield_type == error_mark_node)
 
23879
     return error_mark_node;
 
23880
-  go_assert(POINTER_TYPE_P(fntype_tree));
 
23881
-  if (TREE_TYPE(fntype_tree) == error_mark_node)
 
23882
-    return error_mark_node;
 
23883
-  go_assert(TREE_CODE(TREE_TYPE(fntype_tree)) == RECORD_TYPE);
 
23884
-  tree fnfield_type = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(fntype_tree)));
 
23885
-  if (fnfield_type == error_mark_node)
 
23886
-    return error_mark_node;
 
23887
   go_assert(FUNCTION_POINTER_TYPE_P(fnfield_type));
 
23888
   tree rettype = TREE_TYPE(TREE_TYPE(fnfield_type));
 
23889
   if (rettype == error_mark_node)
 
23890
@@ -9763,7 +9845,7 @@
 
23891
   if (func != NULL)
 
23892
     {
 
23893
       Named_object* no = func->named_object();
 
23894
-      fn = Func_expression::get_code_pointer(gogo, no, location);
 
23895
+      fn = expr_to_tree(Func_expression::get_code_pointer(gogo, no, location));
 
23896
       if (!has_closure)
 
23897
        closure_tree = NULL_TREE;
 
23898
       else
 
23899
@@ -10817,11 +10899,20 @@
 
23900
 void
 
23901
 String_index_expression::do_check_types(Gogo*)
 
23902
 {
 
23903
-  if (this->start_->type()->integer_type() == NULL)
 
23904
+  Numeric_constant nc;
 
23905
+  unsigned long v;
 
23906
+  if (this->start_->type()->integer_type() == NULL
 
23907
+      && !this->start_->type()->is_error()
 
23908
+      && (!this->start_->numeric_constant_value(&nc)
 
23909
+         || nc.to_unsigned_long(&v) == Numeric_constant::NC_UL_NOTINT))
 
23910
     this->report_error(_("index must be integer"));
 
23911
   if (this->end_ != NULL
 
23912
       && this->end_->type()->integer_type() == NULL
 
23913
-      && !this->end_->is_nil_expression())
 
23914
+      && !this->end_->type()->is_error()
 
23915
+      && !this->end_->is_nil_expression()
 
23916
+      && !this->end_->is_error_expression()
 
23917
+      && (!this->end_->numeric_constant_value(&nc)
 
23918
+         || nc.to_unsigned_long(&v) == Numeric_constant::NC_UL_NOTINT))
 
23919
     this->report_error(_("slice end must be integer"));
 
23920
 
 
23921
   std::string sval;
 
23922
Index: gcc/recog.c
 
23923
===================================================================
 
23924
--- a/src/gcc/recog.c   (.../tags/gcc_4_8_2_release)
 
23925
+++ b/src/gcc/recog.c   (.../branches/gcc-4_8-branch)
 
23926
@@ -3061,6 +3061,9 @@
 
23927
   return 1;
 
23928
 }
 
23929
 
 
23930
+/* Regno offset to be used in the register search.  */
 
23931
+static int search_ofs;
 
23932
+
 
23933
 /* Try to find a hard register of mode MODE, matching the register class in
 
23934
    CLASS_STR, which is available at the beginning of insn CURRENT_INSN and
 
23935
    remains available until the end of LAST_INSN.  LAST_INSN may be NULL_RTX,
 
23936
@@ -3076,7 +3079,6 @@
 
23937
 peep2_find_free_register (int from, int to, const char *class_str,
 
23938
                          enum machine_mode mode, HARD_REG_SET *reg_set)
 
23939
 {
 
23940
-  static int search_ofs;
 
23941
   enum reg_class cl;
 
23942
   HARD_REG_SET live;
 
23943
   df_ref *def_rec;
 
23944
@@ -3541,6 +3543,7 @@
 
23945
   /* Initialize the regsets we're going to use.  */
 
23946
   for (i = 0; i < MAX_INSNS_PER_PEEP2 + 1; ++i)
 
23947
     peep2_insn_data[i].live_before = BITMAP_ALLOC (&reg_obstack);
 
23948
+  search_ofs = 0;
 
23949
   live = BITMAP_ALLOC (&reg_obstack);
 
23950
 
 
23951
   FOR_EACH_BB_REVERSE (bb)
 
23952
Index: gcc/ada/system-linux-s390x.ads
 
23953
===================================================================
 
23954
--- a/src/gcc/ada/system-linux-s390x.ads        (.../tags/gcc_4_8_2_release)
 
23955
+++ b/src/gcc/ada/system-linux-s390x.ads        (.../branches/gcc-4_8-branch)
 
23956
@@ -7,7 +7,7 @@
 
23957
 --                                 S p e c                                  --
 
23958
 --                          (GNU-Linux/s390x Version)                       --
 
23959
 --                                                                          --
 
23960
---          Copyright (C) 1992-2012, Free Software Foundation, Inc.         --
 
23961
+--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
 
23962
 --                                                                          --
 
23963
 -- This specification is derived from the Ada Reference Manual for use with --
 
23964
 -- GNAT. The copyright notice above, and the license provisions that follow --
 
23965
@@ -35,9 +35,10 @@
 
23966
 ------------------------------------------------------------------------------
 
23967
 
 
23968
 package System is
 
23969
-pragma Pure (System);
 
23970
---  Note that we take advantage of the implementation permission to
 
23971
---  make this unit Pure instead of Preelaborable, see RM 13.7(36)
 
23972
+   pragma Pure;
 
23973
+   --  Note that we take advantage of the implementation permission to make
 
23974
+   --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
 
23975
+   --  2005, this is Pure in any case (AI-362).
 
23976
 
 
23977
    type Name is (SYSTEM_NAME_GNAT);
 
23978
    System_Name : constant Name := SYSTEM_NAME_GNAT;
 
23979
@@ -61,6 +62,7 @@
 
23980
    --  Storage-related Declarations
 
23981
 
 
23982
    type Address is private;
 
23983
+   pragma Preelaborable_Initialization (Address);
 
23984
    Null_Address : constant Address;
 
23985
 
 
23986
    Storage_Unit : constant := 8;
 
23987
Index: gcc/ada/system-linux-alpha.ads
 
23988
===================================================================
 
23989
--- a/src/gcc/ada/system-linux-alpha.ads        (.../tags/gcc_4_8_2_release)
 
23990
+++ b/src/gcc/ada/system-linux-alpha.ads        (.../branches/gcc-4_8-branch)
 
23991
@@ -7,7 +7,7 @@
 
23992
 --                                 S p e c                                  --
 
23993
 --                        (GNU-Linux/alpha Version)                         --
 
23994
 --                                                                          --
 
23995
---          Copyright (C) 1992-2012, Free Software Foundation, Inc.         --
 
23996
+--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
 
23997
 --                                                                          --
 
23998
 -- This specification is derived from the Ada Reference Manual for use with --
 
23999
 -- GNAT. The copyright notice above, and the license provisions that follow --
 
24000
@@ -35,9 +35,10 @@
 
24001
 ------------------------------------------------------------------------------
 
24002
 
 
24003
 package System is
 
24004
-pragma Pure (System);
 
24005
---  Note that we take advantage of the implementation permission to
 
24006
---  make this unit Pure instead of Preelaborable, see RM 13.7(36)
 
24007
+   pragma Pure;
 
24008
+   --  Note that we take advantage of the implementation permission to make
 
24009
+   --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
 
24010
+   --  2005, this is Pure in any case (AI-362).
 
24011
 
 
24012
    type Name is (SYSTEM_NAME_GNAT);
 
24013
    System_Name : constant Name := SYSTEM_NAME_GNAT;
 
24014
@@ -61,6 +62,7 @@
 
24015
    --  Storage-related Declarations
 
24016
 
 
24017
    type Address is private;
 
24018
+   pragma Preelaborable_Initialization (Address);
 
24019
    Null_Address : constant Address;
 
24020
 
 
24021
    Storage_Unit : constant := 8;
 
24022
Index: gcc/ada/system-vxworks-arm.ads
 
24023
===================================================================
 
24024
--- a/src/gcc/ada/system-vxworks-arm.ads        (.../tags/gcc_4_8_2_release)
 
24025
+++ b/src/gcc/ada/system-vxworks-arm.ads        (.../branches/gcc-4_8-branch)
 
24026
@@ -7,7 +7,7 @@
 
24027
 --                                 S p e c                                  --
 
24028
 --                          (VxWorks Version ARM)                           --
 
24029
 --                                                                          --
 
24030
---          Copyright (C) 1992-2012, Free Software Foundation, Inc.         --
 
24031
+--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
 
24032
 --                                                                          --
 
24033
 -- This specification is derived from the Ada Reference Manual for use with --
 
24034
 -- GNAT. The copyright notice above, and the license provisions that follow --
 
24035
@@ -35,10 +35,10 @@
 
24036
 ------------------------------------------------------------------------------
 
24037
 
 
24038
 package System is
 
24039
-pragma Pure (System);
 
24040
---  Note that we take advantage of the implementation permission to make this
 
24041
---  unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada 2005, this is
 
24042
---  Pure in any case (AI-362).
 
24043
+   pragma Pure;
 
24044
+   --  Note that we take advantage of the implementation permission to make
 
24045
+   --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
 
24046
+   --  2005, this is Pure in any case (AI-362).
 
24047
 
 
24048
    type Name is (SYSTEM_NAME_GNAT);
 
24049
    System_Name : constant Name := SYSTEM_NAME_GNAT;
 
24050
Index: gcc/ada/system-linux-s390.ads
 
24051
===================================================================
 
24052
--- a/src/gcc/ada/system-linux-s390.ads (.../tags/gcc_4_8_2_release)
 
24053
+++ b/src/gcc/ada/system-linux-s390.ads (.../branches/gcc-4_8-branch)
 
24054
@@ -7,7 +7,7 @@
 
24055
 --                                 S p e c                                  --
 
24056
 --                          (GNU-Linux/s390 Version)                        --
 
24057
 --                                                                          --
 
24058
---          Copyright (C) 1992-2012, Free Software Foundation, Inc.         --
 
24059
+--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
 
24060
 --                                                                          --
 
24061
 -- This specification is derived from the Ada Reference Manual for use with --
 
24062
 -- GNAT. The copyright notice above, and the license provisions that follow --
 
24063
@@ -35,9 +35,10 @@
 
24064
 ------------------------------------------------------------------------------
 
24065
 
 
24066
 package System is
 
24067
-pragma Pure (System);
 
24068
---  Note that we take advantage of the implementation permission to
 
24069
---  make this unit Pure instead of Preelaborable, see RM 13.7(36)
 
24070
+   pragma Pure;
 
24071
+   --  Note that we take advantage of the implementation permission to make
 
24072
+   --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
 
24073
+   --  2005, this is Pure in any case (AI-362).
 
24074
 
 
24075
    type Name is (SYSTEM_NAME_GNAT);
 
24076
    System_Name : constant Name := SYSTEM_NAME_GNAT;
 
24077
@@ -61,6 +62,7 @@
 
24078
    --  Storage-related Declarations
 
24079
 
 
24080
    type Address is private;
 
24081
+   pragma Preelaborable_Initialization (Address);
 
24082
    Null_Address : constant Address;
 
24083
 
 
24084
    Storage_Unit : constant := 8;
 
24085
Index: gcc/ada/indepsw-darwin.adb
 
24086
===================================================================
 
24087
--- a/src/gcc/ada/indepsw-darwin.adb    (.../tags/gcc_4_8_2_release)
 
24088
+++ b/src/gcc/ada/indepsw-darwin.adb    (.../branches/gcc-4_8-branch)
 
24089
@@ -0,0 +1,67 @@
 
24090
+------------------------------------------------------------------------------
 
24091
+--                                                                          --
 
24092
+--                         GNAT COMPILER COMPONENTS                         --
 
24093
+--                                                                          --
 
24094
+--                              I N D E P S W                               --
 
24095
+--                                                                          --
 
24096
+--                                 B o d y                                  --
 
24097
+--                            (Darwin version)                              --
 
24098
+--                                                                          --
 
24099
+--            Copyright (C) 2013, Free Software Foundation, Inc.            --
 
24100
+--                                                                          --
 
24101
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
 
24102
+-- terms of the  GNU General Public License as published  by the Free Soft- --
 
24103
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
 
24104
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
 
24105
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
 
24106
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
 
24107
+--                                                                          --
 
24108
+-- As a special exception under Section 7 of GPL version 3, you are granted --
 
24109
+-- additional permissions described in the GCC Runtime Library Exception,   --
 
24110
+-- version 3.1, as published by the Free Software Foundation.               --
 
24111
+--                                                                          --
 
24112
+-- You should have received a copy of the GNU General Public License and    --
 
24113
+-- a copy of the GCC Runtime Library Exception along with this program;     --
 
24114
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
 
24115
+-- <http://www.gnu.org/licenses/>.                                          --
 
24116
+--                                                                          --
 
24117
+-- GNAT was originally developed  by the GNAT team at  New York University. --
 
24118
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
 
24119
+--                                                                          --
 
24120
+------------------------------------------------------------------------------
 
24121
+
 
24122
+--  This is the Darwin version
 
24123
+
 
24124
+package body Indepsw is
 
24125
+
 
24126
+   Map_Switch : aliased constant String := "-Wl,-map,";
 
24127
+
 
24128
+   -------------
 
24129
+   -- Convert --
 
24130
+   -------------
 
24131
+
 
24132
+   procedure Convert
 
24133
+     (Switch   : Switch_Kind;
 
24134
+      Argument : String;
 
24135
+      To       : out String_List_Access)
 
24136
+   is
 
24137
+   begin
 
24138
+      case Switch is
 
24139
+         when Map_File =>
 
24140
+            To := new Argument_List'(1 => new String'(Map_Switch & Argument));
 
24141
+      end case;
 
24142
+   end Convert;
 
24143
+
 
24144
+   ------------------
 
24145
+   -- Is_Supported --
 
24146
+   ------------------
 
24147
+
 
24148
+   function Is_Supported (Switch : Switch_Kind) return Boolean is
 
24149
+   begin
 
24150
+      case Switch is
 
24151
+         when Map_File =>
 
24152
+            return True;
 
24153
+      end case;
 
24154
+   end Is_Supported;
 
24155
+
 
24156
+end Indepsw;
 
24157
Index: gcc/ada/system-linux-sparcv9.ads
 
24158
===================================================================
 
24159
--- a/src/gcc/ada/system-linux-sparcv9.ads      (.../tags/gcc_4_8_2_release)
 
24160
+++ b/src/gcc/ada/system-linux-sparcv9.ads      (.../branches/gcc-4_8-branch)
 
24161
@@ -7,7 +7,7 @@
 
24162
 --                                 S p e c                                  --
 
24163
 --                         (GNU/Linux-SPARCV9 Version)                      --
 
24164
 --                                                                          --
 
24165
---          Copyright (C) 1992-2011, Free Software Foundation, Inc.         --
 
24166
+--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
 
24167
 --                                                                          --
 
24168
 -- This specification is derived from the Ada Reference Manual for use with --
 
24169
 -- GNAT. The copyright notice above, and the license provisions that follow --
 
24170
@@ -35,9 +35,10 @@
 
24171
 ------------------------------------------------------------------------------
 
24172
 
 
24173
 package System is
 
24174
-pragma Pure (System);
 
24175
---  Note that we take advantage of the implementation permission to
 
24176
---  make this unit Pure instead of Preelaborable, see RM 13.7(36)
 
24177
+   pragma Pure;
 
24178
+   --  Note that we take advantage of the implementation permission to make
 
24179
+   --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
 
24180
+   --  2005, this is Pure in any case (AI-362).
 
24181
 
 
24182
    type Name is (SYSTEM_NAME_GNAT);
 
24183
    System_Name : constant Name := SYSTEM_NAME_GNAT;
 
24184
@@ -61,6 +62,7 @@
 
24185
    --  Storage-related Declarations
 
24186
 
 
24187
    type Address is private;
 
24188
+   pragma Preelaborable_Initialization (Address);
 
24189
    Null_Address : constant Address;
 
24190
 
 
24191
    Storage_Unit : constant := 8;
 
24192
Index: gcc/ada/ChangeLog
 
24193
===================================================================
 
24194
--- a/src/gcc/ada/ChangeLog     (.../tags/gcc_4_8_2_release)
 
24195
+++ b/src/gcc/ada/ChangeLog     (.../branches/gcc-4_8-branch)
 
24196
@@ -1,3 +1,60 @@
 
24197
+2014-03-30  Eric Botcazou  <ebotcazou@adacore.com>
 
24198
+
 
24199
+       PR ada/60703
 
24200
+       * system-linux-alpha.ads: Adjust for Ada 2005.
 
24201
+       * system-linux-mips.ads: Likewise.
 
24202
+       * system-linux-mips64el.ads: Likewise.
 
24203
+       * system-linux-mipsel.ads: Likewise.
 
24204
+       * system-linux-s390.ads: Likewise.
 
24205
+       * system-linux-s390x.ads: Likewise.
 
24206
+       * system-linux-sparc.ads: Likewise.
 
24207
+       * system-linux-sparcv9.ads: Likewise.
 
24208
+       * system-rtems.ads: Likewise.
 
24209
+       * system-vxworks-arm.ads: Likewise.
 
24210
+
 
24211
+2014-03-13  Eric Botcazou  <ebotcazou@adacore.com>
 
24212
+
 
24213
+       PR ada/51483
 
24214
+       * back_end.ads (Register_Type_Proc): Add 'precision' parameter.
 
24215
+       * cstand.adb (Register_Float_Type): Add 'precision' parameter and use
 
24216
+       it to set the RM size.  Use directly 'size' for the Esize.
 
24217
+       * gcc-interface/gigi.h (enumerate_modes): Add integer parameter.
 
24218
+       * gcc-interface/misc.c (enumerate_modes): Likewise.  Do not register
 
24219
+       types for vector modes, pass the size in addition to the precision.
 
24220
+
 
24221
+2014-01-12  Eric Botcazou  <ebotcazou@adacore.com>
 
24222
+
 
24223
+       PR ada/59772
 
24224
+       * gcc-interface/cuintp.c (build_cst_from_int): Use 32-bit integer type
 
24225
+       as intermediate type.
 
24226
+       (UI_To_gnu): Likewise.
 
24227
+
 
24228
+2013-12-12  Eric Botcazou  <ebotcazou@adacore.com>
 
24229
+           Iain Sandoe  <iain@codesourcery.com>
 
24230
+
 
24231
+       PR ada/55946
 
24232
+       * gcc-interface/Make-lang.in (ada/doctools/xgnatugn): Use gnatmake.
 
24233
+       * gcc-interface/Makefile.in (GCC_LINK): Add LDFLAGS.
 
24234
+       (../../gnatmake): Remove LDFLAGS.
 
24235
+       (../../gnatlink): Likewise.
 
24236
+
 
24237
+2013-12-04  Eric Botcazou  <ebotcazou@adacore.com>
 
24238
+
 
24239
+       PR ada/59382
 
24240
+       * indepsw-darwin.adb: New file.
 
24241
+
 
24242
+2013-10-19  Eric Botcazou  <ebotcazou@adacore.com>
 
24243
+
 
24244
+       * gcc-interface/utils.c (scale_by_factor_of): New function.
 
24245
+       (rest_of_record_type_compilation): Use scale_by_factor_of in order to
 
24246
+       scale the original offset for both rounding cases; in the second case,
 
24247
+       take into accout the addend to compute the alignment.  Tidy up.
 
24248
+
 
24249
+2013-10-19  Eric Botcazou  <ebotcazou@adacore.com>
 
24250
+
 
24251
+       * gcc-interface/utils.c (gnat_set_type_context): New function.
 
24252
+       (gnat_pushdecl): Use it to set the context of the type.
 
24253
+
 
24254
 2013-10-16  Release Manager
 
24255
 
 
24256
        * GCC 4.8.2 released.
 
24257
Index: gcc/ada/cstand.adb
 
24258
===================================================================
 
24259
--- a/src/gcc/ada/cstand.adb    (.../tags/gcc_4_8_2_release)
 
24260
+++ b/src/gcc/ada/cstand.adb    (.../branches/gcc-4_8-branch)
 
24261
@@ -151,6 +151,7 @@
 
24262
       Complex   : Boolean;  -- True iff type has real and imaginary parts
 
24263
       Count     : Natural;  -- Number of elements in vector, 0 otherwise
 
24264
       Float_Rep : Float_Rep_Kind; -- Representation used for fpt type
 
24265
+      Precision : Positive; -- Precision of representation in bits
 
24266
       Size      : Positive; -- Size of representation in bits
 
24267
       Alignment : Natural); -- Required alignment in bits
 
24268
    pragma Convention (C, Register_Float_Type);
 
24269
@@ -2014,6 +2015,7 @@
 
24270
       Complex   : Boolean;
 
24271
       Count     : Natural;
 
24272
       Float_Rep : Float_Rep_Kind;
 
24273
+      Precision : Positive;
 
24274
       Size      : Positive;
 
24275
       Alignment : Natural)
 
24276
    is
 
24277
@@ -2063,14 +2065,25 @@
 
24278
 
 
24279
          else
 
24280
             Write_Str ("mod 2**");
 
24281
-            Write_Int (Int (Size / Positive'Max (1, Count)));
 
24282
+            Write_Int (Int (Precision / Positive'Max (1, Count)));
 
24283
             Write_Line (";");
 
24284
          end if;
 
24285
 
 
24286
-         Write_Str ("for " & T & "'Size use ");
 
24287
-         Write_Int (Int (Size));
 
24288
-         Write_Line (";");
 
24289
+         if Precision = Size then
 
24290
+            Write_Str ("for " & T (1 .. Last) & "'Size use ");
 
24291
+            Write_Int (Int (Size));
 
24292
+            Write_Line (";");
 
24293
 
 
24294
+         else
 
24295
+            Write_Str ("for " & T (1 .. Last) & "'Value_Size use ");
 
24296
+            Write_Int (Int (Precision));
 
24297
+            Write_Line (";");
 
24298
+
 
24299
+            Write_Str ("for " & T (1 .. Last) & "'Object_Size use ");
 
24300
+            Write_Int (Int (Size));
 
24301
+            Write_Line (";");
 
24302
+         end if;
 
24303
+
 
24304
          Write_Str ("for " & T & "'Alignment use ");
 
24305
          Write_Int (Int (Alignment / 8));
 
24306
          Write_Line (";");
 
24307
@@ -2092,15 +2105,13 @@
 
24308
       if Digs > 0 and then not Complex and then Count = 0 then
 
24309
          declare
 
24310
             Ent   : constant Entity_Id := New_Standard_Entity;
 
24311
-            Esize : constant Pos := Pos ((Size + Alignment - 1)
 
24312
-                                           / Alignment * Alignment);
 
24313
          begin
 
24314
             Set_Defining_Identifier
 
24315
               (New_Node (N_Full_Type_Declaration, Stloc), Ent);
 
24316
             Make_Name (Ent, T (1 .. Last));
 
24317
             Set_Scope (Ent, Standard_Standard);
 
24318
-            Build_Float_Type (Ent, Esize, Float_Rep, Pos (Digs));
 
24319
-            Set_RM_Size (Ent, UI_From_Int (Int (Size)));
 
24320
+            Build_Float_Type (Ent, Int (Size), Float_Rep, Pos (Digs));
 
24321
+            Set_RM_Size (Ent, UI_From_Int (Int (Precision)));
 
24322
             Set_Alignment (Ent, UI_From_Int (Int (Alignment / 8)));
 
24323
 
 
24324
             if No (Back_End_Float_Types) then
 
24325
Index: gcc/ada/back_end.ads
 
24326
===================================================================
 
24327
--- a/src/gcc/ada/back_end.ads  (.../tags/gcc_4_8_2_release)
 
24328
+++ b/src/gcc/ada/back_end.ads  (.../branches/gcc-4_8-branch)
 
24329
@@ -55,6 +55,7 @@
 
24330
       Complex   : Boolean;  -- True iff type has real and imaginary parts
 
24331
       Count     : Natural;  -- Number of elements in vector, 0 otherwise
 
24332
       Float_Rep : Float_Rep_Kind; -- Representation used for fpt type
 
24333
+      Precision : Positive; -- Precision of representation in bits
 
24334
       Size      : Positive; -- Size of representation in bits
 
24335
       Alignment : Natural); -- Required alignment in bits
 
24336
    pragma Convention (C, Register_Type_Proc);
 
24337
Index: gcc/ada/system-linux-mipsel.ads
 
24338
===================================================================
 
24339
--- a/src/gcc/ada/system-linux-mipsel.ads       (.../tags/gcc_4_8_2_release)
 
24340
+++ b/src/gcc/ada/system-linux-mipsel.ads       (.../branches/gcc-4_8-branch)
 
24341
@@ -7,7 +7,7 @@
 
24342
 --                                 S p e c                                  --
 
24343
 --                        (GNU-Linux/MIPSEL Version)                        --
 
24344
 --                                                                          --
 
24345
---          Copyright (C) 1992-2012, Free Software Foundation, Inc.         --
 
24346
+--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
 
24347
 --                                                                          --
 
24348
 -- This specification is derived from the Ada Reference Manual for use with --
 
24349
 -- GNAT. The copyright notice above, and the license provisions that follow --
 
24350
@@ -62,6 +62,7 @@
 
24351
    --  Storage-related Declarations
 
24352
 
 
24353
    type Address is private;
 
24354
+   pragma Preelaborable_Initialization (Address);
 
24355
    Null_Address : constant Address;
 
24356
 
 
24357
    Storage_Unit : constant := 8;
 
24358
Index: gcc/ada/system-linux-mips.ads
 
24359
===================================================================
 
24360
--- a/src/gcc/ada/system-linux-mips.ads (.../tags/gcc_4_8_2_release)
 
24361
+++ b/src/gcc/ada/system-linux-mips.ads (.../branches/gcc-4_8-branch)
 
24362
@@ -7,7 +7,7 @@
 
24363
 --                                 S p e c                                  --
 
24364
 --                          (GNU-Linux/MIPS Version)                        --
 
24365
 --                                                                          --
 
24366
---          Copyright (C) 1992-2012, Free Software Foundation, Inc.         --
 
24367
+--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
 
24368
 --                                                                          --
 
24369
 -- This specification is derived from the Ada Reference Manual for use with --
 
24370
 -- GNAT. The copyright notice above, and the license provisions that follow --
 
24371
@@ -62,6 +62,7 @@
 
24372
    --  Storage-related Declarations
 
24373
 
 
24374
    type Address is private;
 
24375
+   pragma Preelaborable_Initialization (Address);
 
24376
    Null_Address : constant Address;
 
24377
 
 
24378
    Storage_Unit : constant := 8;
 
24379
Index: gcc/ada/system-linux-mips64el.ads
 
24380
===================================================================
 
24381
--- a/src/gcc/ada/system-linux-mips64el.ads     (.../tags/gcc_4_8_2_release)
 
24382
+++ b/src/gcc/ada/system-linux-mips64el.ads     (.../branches/gcc-4_8-branch)
 
24383
@@ -7,7 +7,7 @@
 
24384
 --                                 S p e c                                  --
 
24385
 --                       (GNU-Linux/MIPS64EL Version)                       --
 
24386
 --                                                                          --
 
24387
---          Copyright (C) 1992-2012, Free Software Foundation, Inc.         --
 
24388
+--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
 
24389
 --                                                                          --
 
24390
 -- This specification is derived from the Ada Reference Manual for use with --
 
24391
 -- GNAT. The copyright notice above, and the license provisions that follow --
 
24392
@@ -62,6 +62,7 @@
 
24393
    --  Storage-related Declarations
 
24394
 
 
24395
    type Address is private;
 
24396
+   pragma Preelaborable_Initialization (Address);
 
24397
    Null_Address : constant Address;
 
24398
 
 
24399
    Storage_Unit : constant := 8;
 
24400
Index: gcc/ada/gcc-interface/utils.c
 
24401
===================================================================
 
24402
--- a/src/gcc/ada/gcc-interface/utils.c (.../tags/gcc_4_8_2_release)
 
24403
+++ b/src/gcc/ada/gcc-interface/utils.c (.../branches/gcc-4_8-branch)
 
24404
@@ -232,6 +232,7 @@
 
24405
 static tree split_plus (tree, tree *);
 
24406
 static tree float_type_for_precision (int, enum machine_mode);
 
24407
 static tree convert_to_fat_pointer (tree, tree);
 
24408
+static unsigned int scale_by_factor_of (tree, unsigned int);
 
24409
 static bool potential_alignment_gap (tree, tree, tree);
 
24410
 static void process_attributes (tree, struct attrib *);
 
24411
 
 
24412
@@ -532,6 +533,22 @@
 
24413
   free_binding_level = level;
 
24414
 }
 
24415
 
 
24416
+/* Set the context of TYPE and its parallel types (if any) to CONTEXT.  */
 
24417
+
 
24418
+static void
 
24419
+gnat_set_type_context (tree type, tree context)
 
24420
+{
 
24421
+  tree decl = TYPE_STUB_DECL (type);
 
24422
+
 
24423
+  TYPE_CONTEXT (type) = context;
 
24424
+
 
24425
+  while (decl && DECL_PARALLEL_TYPE (decl))
 
24426
+    {
 
24427
+      TYPE_CONTEXT (DECL_PARALLEL_TYPE (decl)) = context;
 
24428
+      decl = TYPE_STUB_DECL (DECL_PARALLEL_TYPE (decl));
 
24429
+    }
 
24430
+}
 
24431
+
 
24432
 /* Record DECL as belonging to the current lexical scope and use GNAT_NODE
 
24433
    for location information and flag propagation.  */
 
24434
 
 
24435
@@ -613,7 +630,7 @@
 
24436
              if (TREE_CODE (t) == POINTER_TYPE)
 
24437
                TYPE_NEXT_PTR_TO (t) = tt;
 
24438
              TYPE_NAME (tt) = DECL_NAME (decl);
 
24439
-             TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
 
24440
+             gnat_set_type_context (tt, DECL_CONTEXT (decl));
 
24441
              TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (t);
 
24442
              DECL_ORIGINAL_TYPE (decl) = tt;
 
24443
            }
 
24444
@@ -623,7 +640,7 @@
 
24445
          /* We need a variant for the placeholder machinery to work.  */
 
24446
          tree tt = build_variant_type_copy (t);
 
24447
          TYPE_NAME (tt) = decl;
 
24448
-         TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
 
24449
+         gnat_set_type_context (tt, DECL_CONTEXT (decl));
 
24450
          TREE_USED (tt) = TREE_USED (t);
 
24451
          TREE_TYPE (decl) = tt;
 
24452
          if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
 
24453
@@ -645,7 +662,7 @@
 
24454
          if (!(TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL))
 
24455
            {
 
24456
              TYPE_NAME (t) = decl;
 
24457
-             TYPE_CONTEXT (t) = DECL_CONTEXT (decl);
 
24458
+             gnat_set_type_context (t, DECL_CONTEXT (decl));
 
24459
            }
 
24460
     }
 
24461
 }
 
24462
@@ -1692,93 +1709,74 @@
 
24463
       TYPE_SIZE_UNIT (new_record_type)
 
24464
        = size_int (TYPE_ALIGN (record_type) / BITS_PER_UNIT);
 
24465
 
 
24466
-      /* Now scan all the fields, replacing each field with a new
 
24467
-        field corresponding to the new encoding.  */
 
24468
+      /* Now scan all the fields, replacing each field with a new field
 
24469
+        corresponding to the new encoding.  */
 
24470
       for (old_field = TYPE_FIELDS (record_type); old_field;
 
24471
           old_field = DECL_CHAIN (old_field))
 
24472
        {
 
24473
          tree field_type = TREE_TYPE (old_field);
 
24474
          tree field_name = DECL_NAME (old_field);
 
24475
-         tree new_field;
 
24476
          tree curpos = bit_position (old_field);
 
24477
+         tree pos, new_field;
 
24478
          bool var = false;
 
24479
          unsigned int align = 0;
 
24480
-         tree pos;
 
24481
 
 
24482
+         /* We're going to do some pattern matching below so remove as many
 
24483
+            conversions as possible.  */
 
24484
+         curpos = remove_conversions (curpos, true);
 
24485
+
 
24486
          /* See how the position was modified from the last position.
 
24487
 
 
24488
-         There are two basic cases we support: a value was added
 
24489
-         to the last position or the last position was rounded to
 
24490
-         a boundary and they something was added.  Check for the
 
24491
-         first case first.  If not, see if there is any evidence
 
24492
-         of rounding.  If so, round the last position and try
 
24493
-         again.
 
24494
+            There are two basic cases we support: a value was added
 
24495
+            to the last position or the last position was rounded to
 
24496
+            a boundary and they something was added.  Check for the
 
24497
+            first case first.  If not, see if there is any evidence
 
24498
+            of rounding.  If so, round the last position and retry.
 
24499
 
 
24500
-         If this is a union, the position can be taken as zero. */
 
24501
-
 
24502
-         /* Some computations depend on the shape of the position expression,
 
24503
-            so strip conversions to make sure it's exposed.  */
 
24504
-         curpos = remove_conversions (curpos, true);
 
24505
-
 
24506
+            If this is a union, the position can be taken as zero.  */
 
24507
          if (TREE_CODE (new_record_type) == UNION_TYPE)
 
24508
-           pos = bitsize_zero_node, align = 0;
 
24509
+           pos = bitsize_zero_node;
 
24510
          else
 
24511
            pos = compute_related_constant (curpos, last_pos);
 
24512
 
 
24513
-         if (!pos && TREE_CODE (curpos) == MULT_EXPR
 
24514
+         if (!pos
 
24515
+             && TREE_CODE (curpos) == MULT_EXPR
 
24516
              && host_integerp (TREE_OPERAND (curpos, 1), 1))
 
24517
            {
 
24518
              tree offset = TREE_OPERAND (curpos, 0);
 
24519
              align = tree_low_cst (TREE_OPERAND (curpos, 1), 1);
 
24520
-
 
24521
-             /* An offset which is a bitwise AND with a mask increases the
 
24522
-                alignment according to the number of trailing zeros.  */
 
24523
-             offset = remove_conversions (offset, true);
 
24524
-             if (TREE_CODE (offset) == BIT_AND_EXPR
 
24525
-                 && TREE_CODE (TREE_OPERAND (offset, 1)) == INTEGER_CST)
 
24526
-               {
 
24527
-                 unsigned HOST_WIDE_INT mask
 
24528
-                   = TREE_INT_CST_LOW (TREE_OPERAND (offset, 1));
 
24529
-                 unsigned int i;
 
24530
-
 
24531
-                 for (i = 0; i < HOST_BITS_PER_WIDE_INT; i++)
 
24532
-                   {
 
24533
-                     if (mask & 1)
 
24534
-                       break;
 
24535
-                     mask >>= 1;
 
24536
-                     align *= 2;
 
24537
-                   }
 
24538
-               }
 
24539
-
 
24540
-             pos = compute_related_constant (curpos,
 
24541
-                                             round_up (last_pos, align));
 
24542
+             align = scale_by_factor_of (offset, align);
 
24543
+             last_pos = round_up (last_pos, align);
 
24544
+             pos = compute_related_constant (curpos, last_pos);
 
24545
            }
 
24546
-         else if (!pos && TREE_CODE (curpos) == PLUS_EXPR
 
24547
-                  && TREE_CODE (TREE_OPERAND (curpos, 1)) == INTEGER_CST
 
24548
+         else if (!pos
 
24549
+                  && TREE_CODE (curpos) == PLUS_EXPR
 
24550
+                  && host_integerp (TREE_OPERAND (curpos, 1), 1)
 
24551
                   && TREE_CODE (TREE_OPERAND (curpos, 0)) == MULT_EXPR
 
24552
-                  && host_integerp (TREE_OPERAND
 
24553
-                                    (TREE_OPERAND (curpos, 0), 1),
 
24554
-                                    1))
 
24555
+                  && host_integerp
 
24556
+                     (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1))
 
24557
            {
 
24558
+             tree offset = TREE_OPERAND (TREE_OPERAND (curpos, 0), 0);
 
24559
+             unsigned HOST_WIDE_INT addend
 
24560
+               = tree_low_cst (TREE_OPERAND (curpos, 1), 1);
 
24561
              align
 
24562
-               = tree_low_cst
 
24563
-               (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1);
 
24564
-             pos = compute_related_constant (curpos,
 
24565
-                                             round_up (last_pos, align));
 
24566
+               = tree_low_cst (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1);
 
24567
+             align = scale_by_factor_of (offset, align);
 
24568
+             align = MIN (align, addend & -addend);
 
24569
+             last_pos = round_up (last_pos, align);
 
24570
+             pos = compute_related_constant (curpos, last_pos);
 
24571
            }
 
24572
-         else if (potential_alignment_gap (prev_old_field, old_field,
 
24573
-                                           pos))
 
24574
+         else if (potential_alignment_gap (prev_old_field, old_field, pos))
 
24575
            {
 
24576
              align = TYPE_ALIGN (field_type);
 
24577
-             pos = compute_related_constant (curpos,
 
24578
-                                             round_up (last_pos, align));
 
24579
+             last_pos = round_up (last_pos, align);
 
24580
+             pos = compute_related_constant (curpos, last_pos);
 
24581
            }
 
24582
 
 
24583
          /* If we can't compute a position, set it to zero.
 
24584
 
 
24585
-         ??? We really should abort here, but it's too much work
 
24586
-         to get this correct for all cases.  */
 
24587
-
 
24588
+            ??? We really should abort here, but it's too much work
 
24589
+            to get this correct for all cases.  */
 
24590
          if (!pos)
 
24591
            pos = bitsize_zero_node;
 
24592
 
 
24593
@@ -2553,6 +2551,32 @@
 
24594
   return false;
 
24595
 }
 
24596
 
 
24597
+/* Return VALUE scaled by the biggest power-of-2 factor of EXPR.  */
 
24598
+
 
24599
+static unsigned int
 
24600
+scale_by_factor_of (tree expr, unsigned int value)
 
24601
+{
 
24602
+  expr = remove_conversions (expr, true);
 
24603
+
 
24604
+  /* An expression which is a bitwise AND with a mask has a power-of-2 factor
 
24605
+     corresponding to the number of trailing zeros of the mask.  */
 
24606
+  if (TREE_CODE (expr) == BIT_AND_EXPR
 
24607
+      && TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST)
 
24608
+    {
 
24609
+      unsigned HOST_WIDE_INT mask = TREE_INT_CST_LOW (TREE_OPERAND (expr, 1));
 
24610
+      unsigned int i = 0;
 
24611
+
 
24612
+      while ((mask & 1) == 0 && i < HOST_BITS_PER_WIDE_INT)
 
24613
+       {
 
24614
+         mask >>= 1;
 
24615
+         value *= 2;
 
24616
+         i++;
 
24617
+       }
 
24618
+    }
 
24619
+
 
24620
+  return value;
 
24621
+}
 
24622
+
 
24623
 /* Given two consecutive field decls PREV_FIELD and CURR_FIELD, return true
 
24624
    unless we can prove these 2 fields are laid out in such a way that no gap
 
24625
    exist between the end of PREV_FIELD and the beginning of CURR_FIELD.  OFFSET
 
24626
Index: gcc/ada/gcc-interface/Makefile.in
 
24627
===================================================================
 
24628
--- a/src/gcc/ada/gcc-interface/Makefile.in     (.../tags/gcc_4_8_2_release)
 
24629
+++ b/src/gcc/ada/gcc-interface/Makefile.in     (.../branches/gcc-4_8-branch)
 
24630
@@ -2397,7 +2397,7 @@
 
24631
        "GNATLINK=$(GNATLINK)"  \
 
24632
        "GNATBIND=$(GNATBIND)"
 
24633
 
 
24634
-GCC_LINK=$(CC) $(GCC_LINK_FLAGS) $(ADA_INCLUDES)
 
24635
+GCC_LINK=$(CC) $(GCC_LINK_FLAGS) $(ADA_INCLUDES) $(LDFLAGS)
 
24636
 
 
24637
 # Build directory for the tools. Let's copy the target-dependent
 
24638
 # sources using the same mechanism as for gnatlib. The other sources are
 
24639
@@ -2519,12 +2519,10 @@
 
24640
 
 
24641
 # Likewise for the tools
 
24642
 ../../gnatmake$(exeext): $(P) b_gnatm.o link.o targext.o $(GNATMAKE_OBJS)
 
24643
-       $(GCC_LINK) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) \
 
24644
-                   $(TOOLS_LIBS)
 
24645
+       +$(GCC_LINK) $(ALL_CFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) $(TOOLS_LIBS)
 
24646
 
 
24647
 ../../gnatlink$(exeext): $(P) b_gnatl.o link.o targext.o $(GNATLINK_OBJS)
 
24648
-       $(GCC_LINK) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) \
 
24649
-                   $(TOOLS_LIBS)
 
24650
+       +$(GCC_LINK) $(ALL_CFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) $(TOOLS_LIBS)
 
24651
 
 
24652
 ../stamp-gnatlib-$(RTSDIR):
 
24653
        @if [ ! -f stamp-gnatlib-$(RTSDIR) ] ; \
 
24654
Index: gcc/ada/gcc-interface/cuintp.c
 
24655
===================================================================
 
24656
--- a/src/gcc/ada/gcc-interface/cuintp.c        (.../tags/gcc_4_8_2_release)
 
24657
+++ b/src/gcc/ada/gcc-interface/cuintp.c        (.../branches/gcc-4_8-branch)
 
24658
@@ -6,7 +6,7 @@
 
24659
  *                                                                          *
 
24660
  *                          C Implementation File                           *
 
24661
  *                                                                          *
 
24662
- *          Copyright (C) 1992-2012, Free Software Foundation, Inc.         *
 
24663
+ *          Copyright (C) 1992-2014, Free Software Foundation, Inc.         *
 
24664
  *                                                                          *
 
24665
  * GNAT is free software;  you can  redistribute it  and/or modify it under *
 
24666
  * terms of the  GNU General Public License as published  by the Free Soft- *
 
24667
@@ -59,8 +59,8 @@
 
24668
 static tree
 
24669
 build_cst_from_int (tree type, HOST_WIDE_INT low)
 
24670
 {
 
24671
-  if (TREE_CODE (type) == REAL_TYPE)
 
24672
-    return convert (type, build_int_cst (NULL_TREE, low));
 
24673
+  if (SCALAR_FLOAT_TYPE_P (type))
 
24674
+    return convert (type, build_int_cst (gnat_type_for_size (32, 0), low));
 
24675
   else
 
24676
     return build_int_cst_type (type, low);
 
24677
 }
 
24678
@@ -99,20 +99,13 @@
 
24679
       gcc_assert (Length > 0);
 
24680
 
 
24681
       /* The computations we perform below always require a type at least as
 
24682
-        large as an integer not to overflow.  REAL types are always fine, but
 
24683
+        large as an integer not to overflow.  FP types are always fine, but
 
24684
         INTEGER or ENUMERAL types we are handed may be too short.  We use a
 
24685
         base integer type node for the computations in this case and will
 
24686
-        convert the final result back to the incoming type later on.
 
24687
-        The base integer precision must be superior than 16.  */
 
24688
+        convert the final result back to the incoming type later on.  */
 
24689
+      if (!SCALAR_FLOAT_TYPE_P (comp_type) && TYPE_PRECISION (comp_type) < 32)
 
24690
+       comp_type = gnat_type_for_size (32, 0);
 
24691
 
 
24692
-      if (TREE_CODE (comp_type) != REAL_TYPE
 
24693
-         && TYPE_PRECISION (comp_type)
 
24694
-            < TYPE_PRECISION (long_integer_type_node))
 
24695
-       {
 
24696
-         comp_type = long_integer_type_node;
 
24697
-         gcc_assert (TYPE_PRECISION (comp_type) > 16);
 
24698
-       }
 
24699
-
 
24700
       gnu_base = build_cst_from_int (comp_type, Base);
 
24701
 
 
24702
       gnu_ret = build_cst_from_int (comp_type, First);
 
24703
Index: gcc/ada/gcc-interface/Make-lang.in
 
24704
===================================================================
 
24705
--- a/src/gcc/ada/gcc-interface/Make-lang.in    (.../tags/gcc_4_8_2_release)
 
24706
+++ b/src/gcc/ada/gcc-interface/Make-lang.in    (.../branches/gcc-4_8-branch)
 
24707
@@ -625,7 +625,7 @@
 
24708
 ada/doctools/xgnatugn$(build_exeext): ada/xgnatugn.adb
 
24709
        -$(MKDIR) ada/doctools
 
24710
        $(CP) $^ ada/doctools
 
24711
-       cd ada/doctools && $(GNATMAKE) -q xgnatugn
 
24712
+       cd ada/doctools && gnatmake -q xgnatugn
 
24713
 
 
24714
 # Note that doc/gnat_ugn.texi and doc/projects.texi do not depend on
 
24715
 # xgnatugn being built so we can distribute a pregenerated doc/gnat_ugn.info
 
24716
Index: gcc/ada/gcc-interface/gigi.h
 
24717
===================================================================
 
24718
--- a/src/gcc/ada/gcc-interface/gigi.h  (.../tags/gcc_4_8_2_release)
 
24719
+++ b/src/gcc/ada/gcc-interface/gigi.h  (.../branches/gcc-4_8-branch)
 
24720
@@ -1014,7 +1014,7 @@
 
24721
 /* This function is called by the front-end to enumerate all the supported
 
24722
    modes for the machine, as well as some predefined C types.  */
 
24723
 extern void enumerate_modes (void (*f) (const char *, int, int, int, int, int,
 
24724
-                                       int));
 
24725
+                                       int, int));
 
24726
 
 
24727
 #ifdef __cplusplus
 
24728
 }
 
24729
Index: gcc/ada/gcc-interface/misc.c
 
24730
===================================================================
 
24731
--- a/src/gcc/ada/gcc-interface/misc.c  (.../tags/gcc_4_8_2_release)
 
24732
+++ b/src/gcc/ada/gcc-interface/misc.c  (.../branches/gcc-4_8-branch)
 
24733
@@ -648,7 +648,7 @@
 
24734
 /* This function is called by the front-end to enumerate all the supported
 
24735
    modes for the machine, as well as some predefined C types.  F is a function
 
24736
    which is called back with the parameters as listed below, first a string,
 
24737
-   then six ints.  The name is any arbitrary null-terminated string and has
 
24738
+   then seven ints.  The name is any arbitrary null-terminated string and has
 
24739
    no particular significance, except for the case of predefined C types, where
 
24740
    it should be the name of the C type.  For integer types, only signed types
 
24741
    should be listed, unsigned versions are assumed.  The order of types should
 
24742
@@ -664,11 +664,12 @@
 
24743
    COMPLEX_P   nonzero is this represents a complex mode
 
24744
    COUNT       count of number of items, nonzero for vector mode
 
24745
    FLOAT_REP   Float_Rep_Kind for FP, otherwise undefined
 
24746
-   SIZE                number of bits used to store data
 
24747
+   PRECISION   number of bits used to store data
 
24748
+   SIZE                number of bits occupied by the mode
 
24749
    ALIGN       number of bits to which mode is aligned.  */
 
24750
 
 
24751
 void
 
24752
-enumerate_modes (void (*f) (const char *, int, int, int, int, int, int))
 
24753
+enumerate_modes (void (*f) (const char *, int, int, int, int, int, int, int))
 
24754
 {
 
24755
   const tree c_types[]
 
24756
     = { float_type_node, double_type_node, long_double_type_node };
 
24757
@@ -742,28 +743,26 @@
 
24758
 
 
24759
       /* First register any C types for this mode that the front end
 
24760
         may need to know about, unless the mode should be skipped.  */
 
24761
-
 
24762
-      if (!skip_p)
 
24763
+      if (!skip_p && !vector_p)
 
24764
        for (nameloop = 0; nameloop < ARRAY_SIZE (c_types); nameloop++)
 
24765
          {
 
24766
-           tree typ = c_types[nameloop];
 
24767
-           const char *nam = c_names[nameloop];
 
24768
+           tree type = c_types[nameloop];
 
24769
+           const char *name = c_names[nameloop];
 
24770
 
 
24771
-           if (TYPE_MODE (typ) == i)
 
24772
+           if (TYPE_MODE (type) == i)
 
24773
              {
 
24774
-               f (nam, digs, complex_p,
 
24775
-                  vector_p ? GET_MODE_NUNITS (i) : 0, float_rep,
 
24776
-                  TYPE_PRECISION (typ), TYPE_ALIGN (typ));
 
24777
+               f (name, digs, complex_p, 0, float_rep, TYPE_PRECISION (type),
 
24778
+                  TREE_INT_CST_LOW (TYPE_SIZE (type)), TYPE_ALIGN (type));
 
24779
                skip_p = true;
 
24780
              }
 
24781
          }
 
24782
 
 
24783
       /* If no predefined C types were found, register the mode itself.  */
 
24784
-
 
24785
       if (!skip_p)
 
24786
        f (GET_MODE_NAME (i), digs, complex_p,
 
24787
           vector_p ? GET_MODE_NUNITS (i) : 0, float_rep,
 
24788
-          GET_MODE_PRECISION (i), GET_MODE_ALIGNMENT (i));
 
24789
+          GET_MODE_PRECISION (i), GET_MODE_BITSIZE (i),
 
24790
+          GET_MODE_ALIGNMENT (i));
 
24791
     }
 
24792
 }
 
24793
 
 
24794
Index: gcc/ada/system-linux-sparc.ads
 
24795
===================================================================
 
24796
--- a/src/gcc/ada/system-linux-sparc.ads        (.../tags/gcc_4_8_2_release)
 
24797
+++ b/src/gcc/ada/system-linux-sparc.ads        (.../branches/gcc-4_8-branch)
 
24798
@@ -7,7 +7,7 @@
 
24799
 --                                 S p e c                                  --
 
24800
 --                          (GNU/Linux-SPARC Version)                       --
 
24801
 --                                                                          --
 
24802
---          Copyright (C) 1992-2012, Free Software Foundation, Inc.         --
 
24803
+--          Copyright (C) 1992-2014, Free Software Foundation, Inc.         --
 
24804
 --                                                                          --
 
24805
 -- This specification is derived from the Ada Reference Manual for use with --
 
24806
 -- GNAT. The copyright notice above, and the license provisions that follow --
 
24807
@@ -35,9 +35,10 @@
 
24808
 ------------------------------------------------------------------------------
 
24809
 
 
24810
 package System is
 
24811
-pragma Pure (System);
 
24812
---  Note that we take advantage of the implementation permission to
 
24813
---  make this unit Pure instead of Preelaborable, see RM 13.7(36)
 
24814
+   pragma Pure;
 
24815
+   --  Note that we take advantage of the implementation permission to make
 
24816
+   --  this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada
 
24817
+   --  2005, this is Pure in any case (AI-362).
 
24818
 
 
24819
    type Name is (SYSTEM_NAME_GNAT);
 
24820
    System_Name : constant Name := SYSTEM_NAME_GNAT;
 
24821
@@ -61,6 +62,7 @@
 
24822
    --  Storage-related Declarations
 
24823
 
 
24824
    type Address is private;
 
24825
+   pragma Preelaborable_Initialization (Address);
 
24826
    Null_Address : constant Address;
 
24827
 
 
24828
    Storage_Unit : constant := 8;
 
24829
Index: gcc/ada/system-rtems.ads
 
24830
===================================================================
 
24831
--- a/src/gcc/ada/system-rtems.ads      (.../tags/gcc_4_8_2_release)
 
24832
+++ b/src/gcc/ada/system-rtems.ads      (.../branches/gcc-4_8-branch)
 
24833
@@ -7,7 +7,7 @@
 
24834
 --                                 S p e c                                  --
 
24835
 --                            (Compiler Version)                            --
 
24836
 --                                                                          --
 
24837
---          Copyright (C) 1992-2011 Free Software Foundation, Inc.          --
 
24838
+--          Copyright (C) 1992-2014 Free Software Foundation, Inc.          --
 
24839
 --                                                                          --
 
24840
 -- This specification is derived from the Ada Reference Manual for use with --
 
24841
 -- GNAT. The copyright notice above, and the license provisions that follow --
 
24842
@@ -34,9 +34,8 @@
 
24843
 --                                                                          --
 
24844
 ------------------------------------------------------------------------------
 
24845
 
 
24846
---  This version of System is a RTEMS version that is used in building
 
24847
---  the compiler.  This is based as closely as possible on the generic
 
24848
---  version with the following exceptions:
 
24849
+--  This version is for RTEMS.  It is based as closely as possible on the
 
24850
+--  generic version with the following exceptions:
 
24851
 --      + priority definitions
 
24852
 
 
24853
 package System is
 
24854
@@ -67,6 +66,7 @@
 
24855
    --  Storage-related Declarations
 
24856
 
 
24857
    type Address is private;
 
24858
+   pragma Preelaborable_Initialization (Address);
 
24859
    Null_Address : constant Address;
 
24860
 
 
24861
    Storage_Unit : constant := Standard'Storage_Unit;
 
24862
Index: gcc/tree-eh.c
 
24863
===================================================================
 
24864
--- a/src/gcc/tree-eh.c (.../tags/gcc_4_8_2_release)
 
24865
+++ b/src/gcc/tree-eh.c (.../branches/gcc-4_8-branch)
 
24866
@@ -1357,9 +1357,6 @@
 
24867
   x = gimple_seq_last_stmt (finally);
 
24868
   finally_loc = x ? gimple_location (x) : tf_loc;
 
24869
 
 
24870
-  /* Lower the finally block itself.  */
 
24871
-  lower_eh_constructs_1 (state, &finally);
 
24872
-
 
24873
   /* Prepare for switch statement generation.  */
 
24874
   nlabels = tf->dest_array.length ();
 
24875
   return_index = nlabels;
 
24876
@@ -1445,6 +1442,7 @@
 
24877
   x = gimple_build_label (finally_label);
 
24878
   gimple_seq_add_stmt (&tf->top_p_seq, x);
 
24879
 
 
24880
+  lower_eh_constructs_1 (state, &finally);
 
24881
   gimple_seq_add_seq (&tf->top_p_seq, finally);
 
24882
 
 
24883
   /* Redirect each incoming goto edge.  */
 
24884
@@ -2502,12 +2500,6 @@
 
24885
  restart:
 
24886
   switch (code)
 
24887
     {
 
24888
-    case TARGET_MEM_REF:
 
24889
-      if (TREE_CODE (TMR_BASE (expr)) == ADDR_EXPR
 
24890
-         && !TMR_INDEX (expr) && !TMR_INDEX2 (expr))
 
24891
-       return false;
 
24892
-      return !TREE_THIS_NOTRAP (expr);
 
24893
-
 
24894
     case COMPONENT_REF:
 
24895
     case REALPART_EXPR:
 
24896
     case IMAGPART_EXPR:
 
24897
@@ -2534,10 +2526,36 @@
 
24898
        return false;
 
24899
       return !in_array_bounds_p (expr);
 
24900
 
 
24901
+    case TARGET_MEM_REF:
 
24902
     case MEM_REF:
 
24903
+      if (TREE_CODE (TREE_OPERAND (expr, 0)) == ADDR_EXPR
 
24904
+         && tree_could_trap_p (TREE_OPERAND (TREE_OPERAND (expr, 0), 0)))
 
24905
+       return true;
 
24906
+      if (TREE_THIS_NOTRAP (expr))
 
24907
+       return false;
 
24908
+      /* We cannot prove that the access is in-bounds when we have
 
24909
+         variable-index TARGET_MEM_REFs.  */
 
24910
+      if (code == TARGET_MEM_REF
 
24911
+         && (TMR_INDEX (expr) || TMR_INDEX2 (expr)))
 
24912
+       return true;
 
24913
       if (TREE_CODE (TREE_OPERAND (expr, 0)) == ADDR_EXPR)
 
24914
-       return false;
 
24915
-      /* Fallthru.  */
 
24916
+       {
 
24917
+         tree base = TREE_OPERAND (TREE_OPERAND (expr, 0), 0);
 
24918
+         double_int off = mem_ref_offset (expr);
 
24919
+         if (off.is_negative ())
 
24920
+           return true;
 
24921
+         if (TREE_CODE (base) == STRING_CST)
 
24922
+           return double_int::from_uhwi (TREE_STRING_LENGTH (base)).ule (off);
 
24923
+         else if (DECL_SIZE_UNIT (base) == NULL_TREE
 
24924
+                  || TREE_CODE (DECL_SIZE_UNIT (base)) != INTEGER_CST
 
24925
+                  || tree_to_double_int (DECL_SIZE_UNIT (base)).ule (off))
 
24926
+           return true;
 
24927
+         /* Now we are sure the first byte of the access is inside
 
24928
+            the object.  */
 
24929
+         return false;
 
24930
+       }
 
24931
+      return true;
 
24932
+
 
24933
     case INDIRECT_REF:
 
24934
       return !TREE_THIS_NOTRAP (expr);
 
24935
 
 
24936
@@ -4166,8 +4184,11 @@
 
24937
   /* If the block is totally empty, look for more unsplitting cases.  */
 
24938
   if (gsi_end_p (gsi))
 
24939
     {
 
24940
-      /* For the degenerate case of an infinite loop bail out.  */
 
24941
-      if (infinite_empty_loop_p (e_out))
 
24942
+      /* For the degenerate case of an infinite loop bail out.
 
24943
+        If bb has no successors and is totally empty, which can happen e.g.
 
24944
+        because of incorrect noreturn attribute, bail out too.  */
 
24945
+      if (e_out == NULL
 
24946
+         || infinite_empty_loop_p (e_out))
 
24947
        return ret;
 
24948
 
 
24949
       return ret | cleanup_empty_eh_unsplit (bb, e_out, lp);
 
24950
@@ -4304,11 +4325,12 @@
 
24951
   remove_unreachable_handlers ();
 
24952
 
 
24953
   /* Watch out for the region tree vanishing due to all unreachable.  */
 
24954
-  if (cfun->eh->region_tree && optimize)
 
24955
+  if (cfun->eh->region_tree)
 
24956
     {
 
24957
       bool changed = false;
 
24958
 
 
24959
-      changed |= unsplit_all_eh ();
 
24960
+      if (optimize)
 
24961
+       changed |= unsplit_all_eh ();
 
24962
       changed |= cleanup_all_empty_eh ();
 
24963
 
 
24964
       if (changed)
 
24965
Index: gcc/fortran/interface.c
 
24966
===================================================================
 
24967
--- a/src/gcc/fortran/interface.c       (.../tags/gcc_4_8_2_release)
 
24968
+++ b/src/gcc/fortran/interface.c       (.../branches/gcc-4_8-branch)
 
24969
@@ -1245,7 +1245,8 @@
 
24970
          return FAILURE;
 
24971
        }
 
24972
 
 
24973
-      if (r1->ts.u.cl->length)
 
24974
+      if (s1->ts.u.cl && s1->ts.u.cl->length
 
24975
+         && s2->ts.u.cl && s2->ts.u.cl->length)
 
24976
        {
 
24977
          int compval = gfc_dep_compare_expr (r1->ts.u.cl->length,
 
24978
                                              r2->ts.u.cl->length);
 
24979
@@ -1367,8 +1368,8 @@
 
24980
       if (s1->attr.function && s2->attr.function)
 
24981
        {
 
24982
          /* If both are functions, check result characteristics.  */
 
24983
-         if (check_result_characteristics (s1, s2, errmsg, err_len)
 
24984
-             == FAILURE)
 
24985
+         if (check_result_characteristics (s1, s2, errmsg, err_len) == FAILURE
 
24986
+             || check_result_characteristics (s2, s1, errmsg, err_len) == FAILURE)
 
24987
            return 0;
 
24988
        }
 
24989
 
 
24990
Index: gcc/fortran/intrinsic.c
 
24991
===================================================================
 
24992
--- a/src/gcc/fortran/intrinsic.c       (.../tags/gcc_4_8_2_release)
 
24993
+++ b/src/gcc/fortran/intrinsic.c       (.../branches/gcc-4_8-branch)
 
24994
@@ -4229,7 +4229,7 @@
 
24995
       c->resolved_sym->attr.elemental = isym->elemental;
 
24996
     }
 
24997
 
 
24998
-  if (gfc_pure (NULL) && !isym->pure)
 
24999
+  if (!isym->pure && gfc_pure (NULL))
 
25000
     {
 
25001
       gfc_error ("Subroutine call to intrinsic '%s' at %L is not PURE", name,
 
25002
                 &c->loc);
 
25003
@@ -4236,6 +4236,9 @@
 
25004
       return MATCH_ERROR;
 
25005
     }
 
25006
 
 
25007
+  if (!isym->pure)
 
25008
+    gfc_unset_implicit_pure (NULL);
 
25009
+
 
25010
   c->resolved_sym->attr.noreturn = isym->noreturn;
 
25011
 
 
25012
   return MATCH_YES;
 
25013
Index: gcc/fortran/trans-expr.c
 
25014
===================================================================
 
25015
--- a/src/gcc/fortran/trans-expr.c      (.../tags/gcc_4_8_2_release)
 
25016
+++ b/src/gcc/fortran/trans-expr.c      (.../branches/gcc-4_8-branch)
 
25017
@@ -355,7 +355,11 @@
 
25018
          gfc_conv_expr_descriptor (parmse, e);
 
25019
 
 
25020
          if (e->rank != class_ts.u.derived->components->as->rank)
 
25021
-           class_array_data_assign (&block, ctree, parmse->expr, true);
 
25022
+           {
 
25023
+             gcc_assert (class_ts.u.derived->components->as->type
 
25024
+                         == AS_ASSUMED_RANK);
 
25025
+             class_array_data_assign (&block, ctree, parmse->expr, false);
 
25026
+           }
 
25027
          else
 
25028
            {
 
25029
              if (gfc_expr_attr (e).codimension)
 
25030
@@ -670,7 +674,6 @@
 
25031
     gfc_add_modify (&parmse->post, vptr,
 
25032
                    fold_convert (TREE_TYPE (vptr), ctree));
 
25033
 
 
25034
-  gcc_assert (!optional || (optional && !copyback));
 
25035
   if (optional)
 
25036
     {
 
25037
       tree tmp2;
 
25038
@@ -6343,7 +6346,13 @@
 
25039
       /* Returns a reference to the scalar evaluated outside the loop
 
25040
         for this case.  */
 
25041
       gfc_conv_expr (se, expr);
 
25042
-      se->expr = gfc_build_addr_expr (NULL_TREE, se->expr);
 
25043
+
 
25044
+      if (expr->ts.type == BT_CHARACTER
 
25045
+         && expr->expr_type != EXPR_FUNCTION)
 
25046
+       gfc_conv_string_parameter (se);
 
25047
+      else
 
25048
+       se->expr = gfc_build_addr_expr (NULL_TREE, se->expr);
 
25049
+
 
25050
       return;
 
25051
     }
 
25052
 
 
25053
Index: gcc/fortran/trans-array.c
 
25054
===================================================================
 
25055
--- a/src/gcc/fortran/trans-array.c     (.../tags/gcc_4_8_2_release)
 
25056
+++ b/src/gcc/fortran/trans-array.c     (.../branches/gcc-4_8-branch)
 
25057
@@ -1,5 +1,5 @@
 
25058
 /* Array translation routines
 
25059
-   Copyright (C) 2002-2013 Free Software Foundation, Inc.
 
25060
+   Copyright (C) 2002-2014 Free Software Foundation, Inc.
 
25061
    Contributed by Paul Brook <paul@nowt.org>
 
25062
    and Steven Bosscher <s.bosscher@student.tudelft.nl>
 
25063
 
 
25064
@@ -2487,6 +2487,11 @@
 
25065
                 a reference to the value.  */
 
25066
              gfc_conv_expr (&se, expr);
 
25067
            }
 
25068
+
 
25069
+         /* Ensure that a pointer to the string is stored.  */
 
25070
+         if (expr->ts.type == BT_CHARACTER)
 
25071
+           gfc_conv_string_parameter (&se);
 
25072
+
 
25073
          gfc_add_block_to_block (&outer_loop->pre, &se.pre);
 
25074
          gfc_add_block_to_block (&outer_loop->post, &se.post);
 
25075
          if (gfc_is_class_scalar_expr (expr))
 
25076
@@ -7940,6 +7945,7 @@
 
25077
   tree size1;
 
25078
   tree size2;
 
25079
   tree array1;
 
25080
+  tree cond_null;
 
25081
   tree cond;
 
25082
   tree tmp;
 
25083
   tree tmp2;
 
25084
@@ -8015,9 +8021,9 @@
 
25085
   jump_label2 = gfc_build_label_decl (NULL_TREE);
 
25086
 
 
25087
   /* Allocate if data is NULL.  */
 
25088
-  cond = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
 
25089
+  cond_null = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
 
25090
                         array1, build_int_cst (TREE_TYPE (array1), 0));
 
25091
-  tmp = build3_v (COND_EXPR, cond,
 
25092
+  tmp = build3_v (COND_EXPR, cond_null,
 
25093
                  build1_v (GOTO_EXPR, jump_label1),
 
25094
                  build_empty_stmt (input_location));
 
25095
   gfc_add_expr_to_block (&fblock, tmp);
 
25096
@@ -8069,13 +8075,25 @@
 
25097
   tmp = build1_v (LABEL_EXPR, jump_label1);
 
25098
   gfc_add_expr_to_block (&fblock, tmp);
 
25099
 
 
25100
-  size1 = gfc_conv_descriptor_size (desc, expr1->rank);
 
25101
+  /* If the lhs has not been allocated, its bounds will not have been
 
25102
+     initialized and so its size is set to zero.  */
 
25103
+  size1 = gfc_create_var (gfc_array_index_type, NULL);
 
25104
+  gfc_init_block (&alloc_block);
 
25105
+  gfc_add_modify (&alloc_block, size1, gfc_index_zero_node);
 
25106
+  gfc_init_block (&realloc_block);
 
25107
+  gfc_add_modify (&realloc_block, size1,
 
25108
+                 gfc_conv_descriptor_size (desc, expr1->rank));
 
25109
+  tmp = build3_v (COND_EXPR, cond_null,
 
25110
+                 gfc_finish_block (&alloc_block),
 
25111
+                 gfc_finish_block (&realloc_block));
 
25112
+  gfc_add_expr_to_block (&fblock, tmp);
 
25113
 
 
25114
-  /* Get the rhs size.  Fix both sizes.  */
 
25115
+  /* Get the rhs size and fix it.  */
 
25116
   if (expr2)
 
25117
     desc2 = rss->info->data.array.descriptor;
 
25118
   else
 
25119
     desc2 = NULL_TREE;
 
25120
+
 
25121
   size2 = gfc_index_one_node;
 
25122
   for (n = 0; n < expr2->rank; n++)
 
25123
     {
 
25124
@@ -8089,8 +8107,6 @@
 
25125
                               gfc_array_index_type,
 
25126
                               tmp, size2);
 
25127
     }
 
25128
-
 
25129
-  size1 = gfc_evaluate_now (size1, &fblock);
 
25130
   size2 = gfc_evaluate_now (size2, &fblock);
 
25131
 
 
25132
   cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
 
25133
Index: gcc/fortran/symbol.c
 
25134
===================================================================
 
25135
--- a/src/gcc/fortran/symbol.c  (.../tags/gcc_4_8_2_release)
 
25136
+++ b/src/gcc/fortran/symbol.c  (.../branches/gcc-4_8-branch)
 
25137
@@ -1110,8 +1110,8 @@
 
25138
       return FAILURE;
 
25139
     }
 
25140
 
 
25141
-  if (s == SAVE_EXPLICIT && gfc_implicit_pure (NULL))
 
25142
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25143
+  if (s == SAVE_EXPLICIT)
 
25144
+    gfc_unset_implicit_pure (NULL);
 
25145
 
 
25146
   if (s == SAVE_EXPLICIT && attr->save == SAVE_EXPLICIT)
 
25147
     {
 
25148
Index: gcc/fortran/class.c
 
25149
===================================================================
 
25150
--- a/src/gcc/fortran/class.c   (.../tags/gcc_4_8_2_release)
 
25151
+++ b/src/gcc/fortran/class.c   (.../branches/gcc-4_8-branch)
 
25152
@@ -2486,7 +2486,7 @@
 
25153
     return NULL;
 
25154
 
 
25155
   /* Sometimes the typespec is passed from a single call.  */
 
25156
-  if (ts->type == BT_DERIVED)
 
25157
+  if (ts->type == BT_DERIVED || ts->type == BT_CLASS)
 
25158
     return gfc_find_derived_vtab (ts->u.derived);
 
25159
 
 
25160
   /* Find the top-level namespace.  */
 
25161
Index: gcc/fortran/decl.c
 
25162
===================================================================
 
25163
--- a/src/gcc/fortran/decl.c    (.../tags/gcc_4_8_2_release)
 
25164
+++ b/src/gcc/fortran/decl.c    (.../branches/gcc-4_8-branch)
 
25165
@@ -510,10 +510,8 @@
 
25166
       free (newdata);
 
25167
       return MATCH_ERROR;
 
25168
     }
 
25169
+  gfc_unset_implicit_pure (gfc_current_ns->proc_name);
 
25170
 
 
25171
-  if (gfc_implicit_pure (NULL))
 
25172
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25173
-
 
25174
   /* Mark the variable as having appeared in a data statement.  */
 
25175
   if (gfc_add_data (&sym->attr, sym->name, &sym->declared_at) == FAILURE)
 
25176
     {
 
25177
@@ -571,10 +569,8 @@
 
25178
       gfc_error ("DATA statement at %C is not allowed in a PURE procedure");
 
25179
       return MATCH_ERROR;
 
25180
     }
 
25181
+  gfc_unset_implicit_pure (gfc_current_ns->proc_name);
 
25182
 
 
25183
-  if (gfc_implicit_pure (NULL))
 
25184
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25185
-
 
25186
   return MATCH_YES;
 
25187
 
 
25188
 cleanup:
 
25189
@@ -1737,6 +1733,7 @@
 
25190
                 "a PURE procedure");
 
25191
       return MATCH_ERROR;
 
25192
     }
 
25193
+  gfc_unset_implicit_pure (gfc_current_ns->proc_name);
 
25194
 
 
25195
   /* Match NULL() initialization.  */
 
25196
   m = gfc_match_null (init);
 
25197
@@ -2045,6 +2042,10 @@
 
25198
              m = MATCH_ERROR;
 
25199
            }
 
25200
 
 
25201
+         if (current_attr.flavor != FL_PARAMETER
 
25202
+             && gfc_state_stack->state != COMP_DERIVED)
 
25203
+           gfc_unset_implicit_pure (gfc_current_ns->proc_name);
 
25204
+
 
25205
          if (m != MATCH_YES)
 
25206
            goto cleanup;
 
25207
        }
 
25208
@@ -5069,7 +5070,14 @@
 
25209
       if (gfc_add_proc (&c->attr, name, NULL) == FAILURE)
 
25210
        return MATCH_ERROR;
 
25211
 
 
25212
-      c->tb = tb;
 
25213
+      if (num == 1)
 
25214
+       c->tb = tb;
 
25215
+      else
 
25216
+       {
 
25217
+         c->tb = XCNEW (gfc_typebound_proc);
 
25218
+         c->tb->where = gfc_current_locus;
 
25219
+         *c->tb = *tb;
 
25220
+       }
 
25221
 
 
25222
       /* Set interface.  */
 
25223
       if (proc_if != NULL)
 
25224
@@ -7384,6 +7392,7 @@
 
25225
 
 
25226
 
 
25227
 /* Check a derived type that is being extended.  */
 
25228
+
 
25229
 static gfc_symbol*
 
25230
 check_extended_derived_type (char *name)
 
25231
 {
 
25232
@@ -7395,14 +7404,15 @@
 
25233
       return NULL;
 
25234
     }
 
25235
 
 
25236
+  extended = gfc_find_dt_in_generic (extended);
 
25237
+
 
25238
+  /* F08:C428.  */
 
25239
   if (!extended)
 
25240
     {
 
25241
-      gfc_error ("No such symbol in TYPE definition at %C");
 
25242
+      gfc_error ("Symbol '%s' at %C has not been previously defined", name);
 
25243
       return NULL;
 
25244
     }
 
25245
 
 
25246
-  extended = gfc_find_dt_in_generic (extended);
 
25247
-
 
25248
   if (extended->attr.flavor != FL_DERIVED)
 
25249
     {
 
25250
       gfc_error ("'%s' in EXTENDS expression at %C is not a "
 
25251
Index: gcc/fortran/dump-parse-tree.c
 
25252
===================================================================
 
25253
--- a/src/gcc/fortran/dump-parse-tree.c (.../tags/gcc_4_8_2_release)
 
25254
+++ b/src/gcc/fortran/dump-parse-tree.c (.../branches/gcc-4_8-branch)
 
25255
@@ -110,7 +110,8 @@
 
25256
       break;
 
25257
 
 
25258
     case BT_CHARACTER:
 
25259
-      show_expr (ts->u.cl->length);
 
25260
+      if (ts->u.cl)
 
25261
+       show_expr (ts->u.cl->length);
 
25262
       fprintf(dumpfile, " %d", ts->kind);
 
25263
       break;
 
25264
 
 
25265
Index: gcc/fortran/gfortran.h
 
25266
===================================================================
 
25267
--- a/src/gcc/fortran/gfortran.h        (.../tags/gcc_4_8_2_release)
 
25268
+++ b/src/gcc/fortran/gfortran.h        (.../branches/gcc-4_8-branch)
 
25269
@@ -2830,6 +2830,7 @@
 
25270
 int gfc_impure_variable (gfc_symbol *);
 
25271
 int gfc_pure (gfc_symbol *);
 
25272
 int gfc_implicit_pure (gfc_symbol *);
 
25273
+void gfc_unset_implicit_pure (gfc_symbol *);
 
25274
 int gfc_elemental (gfc_symbol *);
 
25275
 gfc_try gfc_resolve_iterator (gfc_iterator *, bool, bool);
 
25276
 gfc_try find_forall_index (gfc_expr *, gfc_symbol *, int);
 
25277
Index: gcc/fortran/ChangeLog
 
25278
===================================================================
 
25279
--- a/src/gcc/fortran/ChangeLog (.../tags/gcc_4_8_2_release)
 
25280
+++ b/src/gcc/fortran/ChangeLog (.../branches/gcc-4_8-branch)
 
25281
@@ -1,3 +1,246 @@
 
25282
+2014-03-29  Mikael Morin  <mikael@gcc.gnu.org>
 
25283
+
 
25284
+       PR fortran/60677
 
25285
+       * trans-intrinsic.c (gfc_conv_intrinsic_ichar): Enlarge argument
 
25286
+       list buffer.
 
25287
+
 
25288
+2014-03-28  Mikael Morin  <mikael@gcc.gnu.org>
 
25289
+           Tobias Burnus  <burnus@net-b.de>
 
25290
+
 
25291
+       PR fortran/60576
 
25292
+       * trans-expr.c (gfc_conv_derived_to_class): Avoid
 
25293
+       generation of out-of-bounds range expr.
 
25294
+
 
25295
+2014-03-28  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
25296
+
 
25297
+       PR fortran/60522
 
25298
+       * frontend-passes.c (cfe_code):  Do not walk subtrees
 
25299
+       for WHERE.
 
25300
+
 
25301
+2014-03-20  Tobias Burnus  <burnus@net-b.de>
 
25302
+
 
25303
+       PR fortran/60543
 
25304
+       PR fortran/60283
 
25305
+       * gfortran.h (gfc_unset_implicit_pure): New prototype.
 
25306
+       * resolve.c (gfc_unset_implicit_pure): New.
 
25307
+       (resolve_structure_cons, resolve_function,
 
25308
+       pure_subroutine, resolve_ordinary_assign): Use it.
 
25309
+       * decl.c (match_old_style_init, gfc_match_data,
 
25310
+       match_pointer_init, variable_decl): Ditto.
 
25311
+       * expr.c (gfc_check_pointer_assign): Ditto.
 
25312
+       * intrinsic.c (gfc_intrinsic_sub_interface): Ditto.
 
25313
+       * io.c (match_vtag, gfc_match_open, gfc_match_close,
 
25314
+       match_filepos, gfc_match_inquire, gfc_match_print,
 
25315
+       gfc_match_wait, check_io_constraints): Ditto.
 
25316
+       * match.c (gfc_match_critical, gfc_match_stopcode,
 
25317
+       lock_unlock_statement, sync_statement, gfc_match_allocate,
 
25318
+       gfc_match_deallocate): Ditto.
 
25319
+       * parse.c (decode_omp_directive): Ditto.
 
25320
+       * symbol.c (gfc_add_save): Ditto.
 
25321
+
 
25322
+2014-03-08  Janus Weil  <janus@gcc.gnu.org>
 
25323
+
 
25324
+       PR fortran/60450
 
25325
+       * simplify.c (gfc_simplify_shape): Only clear shape if it was really
 
25326
+       created successfully.
 
25327
+
 
25328
+2014-03-06  Jakub Jelinek  <jakub@redhat.com>
 
25329
+
 
25330
+       Backport from mainline
 
25331
+       2014-02-11  Jakub Jelinek  <jakub@redhat.com>
 
25332
+
 
25333
+       PR fortran/52370
 
25334
+       * trans-decl.c (gfc_build_dummy_array_decl): Set TREE_NO_WARNING
 
25335
+       on decl if sym->attr.optional.
 
25336
+
 
25337
+2014-03-02  Mikael Morin  <mikael@gcc.gnu.org>
 
25338
+
 
25339
+       PR fortran/60341
 
25340
+       * frontend-passes.c (optimize_comparison): Guard two union accesses
 
25341
+       with the corresponding tag checks.
 
25342
+
 
25343
+2014-02-22  Mikael Morin  <mikael@gcc.gnu.org>
 
25344
+
 
25345
+       PR fortran/59599
 
25346
+       * trans-intrinsic.c (gfc_conv_intrinsic_ichar): Calculate the
 
25347
+       number of arguments.
 
25348
+
 
25349
+2014-02-19  Tobias Burnus  <burnus@net-b.de>
 
25350
+
 
25351
+       PR fortran/49397
 
25352
+       * expr.c (gfc_check_pointer_assign): Add check for
 
25353
+       F2008Cor2, C729.
 
25354
+       * trans-decl.c (gfc_get_symbol_decl): Correctly generate
 
25355
+       external decl in a corner case.
 
25356
+
 
25357
+2014-02-19  Janus Weil  <janus@gcc.gnu.org>
 
25358
+
 
25359
+       Backports from mainline:
 
25360
+       2014-02-17  Janus Weil  <janus@gcc.gnu.org>
 
25361
+
 
25362
+       PR fortran/55907
 
25363
+       * resolve.c (build_default_init_expr): Don't initialize character
 
25364
+       variable if -fno-automatic is given.
 
25365
+
 
25366
+       2014-02-18  Janus Weil  <janus@gcc.gnu.org>
 
25367
+
 
25368
+       PR fortran/60231
 
25369
+       * resolve.c (check_generic_tbp_ambiguity): Check for presence of dummy
 
25370
+       arguments to prevent ICE.
 
25371
+
 
25372
+2014-02-09  Janus Weil  <janus@gcc.gnu.org>
 
25373
+
 
25374
+       Backport from mainline
 
25375
+       2013-10-21  Tobias Burnus  <burnus@net-b.de>
 
25376
+
 
25377
+       PR fortran/58803
 
25378
+       PR fortran/59395
 
25379
+       * decl.c (match_ppc_decl): Prevent later double free.
 
25380
+
 
25381
+2014-02-08  Mikael Morin  <mikael@gcc.gnu.org>
 
25382
+
 
25383
+       PR fortran/57033
 
25384
+       * primary.c (gfc_convert_to_structure_constructor): Avoid null pointer
 
25385
+       dereference.
 
25386
+
 
25387
+2014-02-07  Paul Thomas  <pault@gcc.gnu.org>
 
25388
+
 
25389
+       PR fortran/59906
 
25390
+       * trans-stmt.c (gfc_add_loop_ss_code): In the case of character
 
25391
+       SS_REFERENCE, use gfc_conv_string_parameter to ensure that a
 
25392
+       pointer to the string is stored.
 
25393
+       * trans-expr.c (gfc_conv_expr_reference): Likewise, use
 
25394
+       gfc_conv_string_parameter to ensure that a pointer to is passed
 
25395
+       to the elemental function.
 
25396
+
 
25397
+2014-02-01  Paul Thomas  <pault@gcc.gnu.org>
 
25398
+
 
25399
+       PR fortran/59414
 
25400
+       * trans-stmt.c (gfc_trans_allocate): Before the pointer
 
25401
+       assignment to transfer the source _vptr to a class allocate
 
25402
+       expression, the final class reference should be exposed. The
 
25403
+       tail that includes the _data and array references is stored.
 
25404
+       This reduced expression is transferred to 'lhs' and the _vptr
 
25405
+       added. Then the tail is restored to the allocate expression.
 
25406
+
 
25407
+2014-01-26  Mikael Morin  <mikael@gcc.gnu.org>
 
25408
+
 
25409
+       PR fortran/58007
 
25410
+       * module.c
 
25411
+       (fp2, find_pointer2): Remove.
 
25412
+       (mio_component_ref): Don't forcedfully set the containing derived type
 
25413
+       symbol for loading.  Remove unused argument.
 
25414
+       (mio_ref): Update caller
 
25415
+       (skip_list): New argument nest_level.  Initialize level with the new
 
25416
+       argument.
 
25417
+       (read_module): Add forced pointer components association for derived
 
25418
+       type symbols.
 
25419
+
 
25420
+2014-01-19  Paul Thomas  <pault@gcc.gnu.org>
 
25421
+
 
25422
+       Backport from mainline
 
25423
+       2013-12-01  Paul Thomas  <pault@gcc.gnu.org>
 
25424
+
 
25425
+       PR fortran/58410
 
25426
+       * trans-array.c (gfc_alloc_allocatable_for_assignment): Do not
 
25427
+       use the array bounds of an unallocated array but set its size
 
25428
+       to zero instead.
 
25429
+
 
25430
+2014-01-19  Paul Thomas  <pault@gcc.gnu.org>
 
25431
+
 
25432
+       Backport from mainline
 
25433
+       2013-12-01  Paul Thomas  <pault@gcc.gnu.org>
 
25434
+
 
25435
+       PR fortran/34547
 
25436
+       * resolve.c (resolve_transfer): EXPR_NULL is always in an
 
25437
+       invalid context in a transfer statement.
 
25438
+
 
25439
+2014-01-11  Janus Weil  <janus@gcc.gnu.org>
 
25440
+
 
25441
+       Backport from mainline
 
25442
+       2013-12-29  Janus Weil  <janus@gcc.gnu.org>
 
25443
+
 
25444
+       PR fortran/59612
 
25445
+       PR fortran/57042
 
25446
+       * dump-parse-tree.c (show_typespec): Check for charlen.
 
25447
+       * invoke.texi: Fix documentation of -fdump-fortran-optimized and
 
25448
+       -fdump-parse-tree.
 
25449
+
 
25450
+2014-01-04  Janus Weil  <janus@gcc.gnu.org>
 
25451
+
 
25452
+       Backport from mainline
 
25453
+       2014-01-02  Janus Weil  <janus@gcc.gnu.org>
 
25454
+
 
25455
+       PR fortran/59654
 
25456
+       * resolve.c (resolve_typebound_procedures): No need to create the vtab
 
25457
+       here.
 
25458
+
 
25459
+2013-12-31  Janus Weil  <janus@gcc.gnu.org>
 
25460
+
 
25461
+       Backport from mainline
 
25462
+       2013-12-30  Janus Weil  <janus@gcc.gnu.org>
 
25463
+
 
25464
+       PR fortran/58998
 
25465
+       * resolve.c (resolve_symbol): Check that symbol is not only flavorless
 
25466
+       but also untyped.
 
25467
+
 
25468
+2013-12-18  Janus Weil  <janus@gcc.gnu.org>
 
25469
+
 
25470
+       Backport from mainline
 
25471
+       2013-12-15  Janus Weil  <janus@gcc.gnu.org>
 
25472
+
 
25473
+       PR fortran/59493
 
25474
+       * class.c (gfc_find_intrinsic_vtab): Handle BT_CLASS.
 
25475
+
 
25476
+2013-11-30  Paul Thomas  <pault@gcc.gnu.org>
 
25477
+
 
25478
+       Backport from mainline
 
25479
+       2013-11-04  Paul Thomas  <pault@gcc.gnu.org>
 
25480
+
 
25481
+       PR fortran/57445
 
25482
+       * trans-expr.c (gfc_conv_class_to_class): Remove spurious
 
25483
+       assert.
 
25484
+
 
25485
+2013-11-17  Janus Weil  <janus@gcc.gnu.org>
 
25486
+
 
25487
+       Backport from mainline
 
25488
+       2013-11-07  Janus Weil  <janus@gcc.gnu.org>
 
25489
+
 
25490
+       PR fortran/58471
 
25491
+       * primary.c (gfc_expr_attr): Check for result symbol.
 
25492
+
 
25493
+2013-11-16  Janus Weil  <janus@gcc.gnu.org>
 
25494
+
 
25495
+       Backport from mainline
 
25496
+       2013-09-20  Janus Weil  <janus@gcc.gnu.org>
 
25497
+
 
25498
+       PR fortran/58099
 
25499
+       * expr.c (gfc_check_pointer_assign): Remove second call to
 
25500
+       'gfc_compare_interfaces' with swapped arguments.
 
25501
+       * interface.c (gfc_compare_interfaces): Symmetrize the call to
 
25502
+       'check_result_characteristics' by calling it with swapped arguments.
 
25503
+
 
25504
+2013-11-16  Paul Thomas  <pault@gcc.gnu.org>
 
25505
+
 
25506
+       PR fortran/58771
 
25507
+       * trans-io.c (transfer_expr): If the backend_decl for a derived
 
25508
+       type is missing, build it with gfc_typenode_for_spec.
 
25509
+
 
25510
+2013-11-05  Steven G. Kargl <kargl@gcc.gnu.org>
 
25511
+
 
25512
+       PR fortran/58989
 
25513
+       * check.c (gfc_check_reshape): ensure that shape is a constant
 
25514
+       expression.
 
25515
+
 
25516
+2013-11-02  Janus Weil  <janus@gcc.gnu.org>
 
25517
+
 
25518
+       Backport from mainline
 
25519
+       2013-09-23  Janus Weil  <janus@gcc.gnu.org>
 
25520
+
 
25521
+       PR fortran/58355
 
25522
+       * decl.c (check_extended_derived_type): Prevent segfault, modify error
 
25523
+       message.
 
25524
+
 
25525
 2013-10-16  Release Manager
 
25526
 
 
25527
        * GCC 4.8.2 released.
 
25528
Index: gcc/fortran/trans-stmt.c
 
25529
===================================================================
 
25530
--- a/src/gcc/fortran/trans-stmt.c      (.../tags/gcc_4_8_2_release)
 
25531
+++ b/src/gcc/fortran/trans-stmt.c      (.../branches/gcc-4_8-branch)
 
25532
@@ -5104,10 +5104,49 @@
 
25533
        {
 
25534
          gfc_expr *lhs, *rhs;
 
25535
          gfc_se lse;
 
25536
+         gfc_ref *ref, *class_ref, *tail;
 
25537
 
 
25538
+         /* Find the last class reference.  */
 
25539
+         class_ref = NULL;
 
25540
+         for (ref = e->ref; ref; ref = ref->next)
 
25541
+           {
 
25542
+             if (ref->type == REF_COMPONENT
 
25543
+                 && ref->u.c.component->ts.type == BT_CLASS)
 
25544
+               class_ref = ref;
 
25545
+
 
25546
+             if (ref->next == NULL)
 
25547
+               break;
 
25548
+           }
 
25549
+
 
25550
+         /* Remove and store all subsequent references after the
 
25551
+            CLASS reference.  */
 
25552
+         if (class_ref)
 
25553
+           {
 
25554
+             tail = class_ref->next;
 
25555
+             class_ref->next = NULL;
 
25556
+           }
 
25557
+         else
 
25558
+           {
 
25559
+             tail = e->ref;
 
25560
+             e->ref = NULL;
 
25561
+           }
 
25562
+
 
25563
          lhs = gfc_expr_to_initialize (e);
 
25564
          gfc_add_vptr_component (lhs);
 
25565
 
 
25566
+         /* Remove the _vptr component and restore the original tail
 
25567
+            references.  */
 
25568
+         if (class_ref)
 
25569
+           {
 
25570
+             gfc_free_ref_list (class_ref->next);
 
25571
+             class_ref->next = tail;
 
25572
+           }
 
25573
+         else
 
25574
+           {
 
25575
+             gfc_free_ref_list (e->ref);
 
25576
+             e->ref = tail;
 
25577
+           }
 
25578
+
 
25579
          if (class_expr != NULL_TREE)
 
25580
            {
 
25581
              /* Polymorphic SOURCE: VPTR must be determined at run time.  */
 
25582
Index: gcc/fortran/expr.c
 
25583
===================================================================
 
25584
--- a/src/gcc/fortran/expr.c    (.../tags/gcc_4_8_2_release)
 
25585
+++ b/src/gcc/fortran/expr.c    (.../branches/gcc-4_8-branch)
 
25586
@@ -3555,11 +3555,13 @@
 
25587
          return FAILURE;
 
25588
        }
 
25589
 
 
25590
-      if (!gfc_compare_interfaces (s2, s1, name, 0, 1,
 
25591
-                                  err, sizeof(err), NULL, NULL))
 
25592
+      /* Check F2008Cor2, C729.  */
 
25593
+      if (!s2->attr.intrinsic && s2->attr.if_source == IFSRC_UNKNOWN
 
25594
+         && !s2->attr.external && !s2->attr.subroutine && !s2->attr.function)
 
25595
        {
 
25596
-         gfc_error ("Interface mismatch in procedure pointer assignment "
 
25597
-                    "at %L: %s", &rvalue->where, err);
 
25598
+         gfc_error ("Procedure pointer target '%s' at %L must be either an "
 
25599
+                    "intrinsic, host or use associated, referenced or have "
 
25600
+                    "the EXTERNAL attribute", s2->name, &rvalue->where);
 
25601
          return FAILURE;
 
25602
        }
 
25603
 
 
25604
@@ -3679,9 +3681,8 @@
 
25605
     }
 
25606
 
 
25607
   if (is_implicit_pure && gfc_impure_variable (rvalue->symtree->n.sym))
 
25608
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25609
+    gfc_unset_implicit_pure (gfc_current_ns->proc_name);
 
25610
 
 
25611
-
 
25612
   if (gfc_has_vector_index (rvalue))
 
25613
     {
 
25614
       gfc_error ("Pointer assignment with vector subscript "
 
25615
Index: gcc/fortran/module.c
 
25616
===================================================================
 
25617
--- a/src/gcc/fortran/module.c  (.../tags/gcc_4_8_2_release)
 
25618
+++ b/src/gcc/fortran/module.c  (.../branches/gcc-4_8-branch)
 
25619
@@ -386,37 +386,6 @@
 
25620
 }
 
25621
 
 
25622
 
 
25623
-/* Recursive function to find a pointer within a tree by brute force.  */
 
25624
-
 
25625
-static pointer_info *
 
25626
-fp2 (pointer_info *p, const void *target)
 
25627
-{
 
25628
-  pointer_info *q;
 
25629
-
 
25630
-  if (p == NULL)
 
25631
-    return NULL;
 
25632
-
 
25633
-  if (p->u.pointer == target)
 
25634
-    return p;
 
25635
-
 
25636
-  q = fp2 (p->left, target);
 
25637
-  if (q != NULL)
 
25638
-    return q;
 
25639
-
 
25640
-  return fp2 (p->right, target);
 
25641
-}
 
25642
-
 
25643
-
 
25644
-/* During reading, find a pointer_info node from the pointer value.
 
25645
-   This amounts to a brute-force search.  */
 
25646
-
 
25647
-static pointer_info *
 
25648
-find_pointer2 (void *p)
 
25649
-{
 
25650
-  return fp2 (pi_root, p);
 
25651
-}
 
25652
-
 
25653
-
 
25654
 /* Resolve any fixups using a known pointer.  */
 
25655
 
 
25656
 static void
 
25657
@@ -2522,45 +2491,13 @@
 
25658
    the namespace and is not loaded again.  */
 
25659
 
 
25660
 static void
 
25661
-mio_component_ref (gfc_component **cp, gfc_symbol *sym)
 
25662
+mio_component_ref (gfc_component **cp)
 
25663
 {
 
25664
-  char name[GFC_MAX_SYMBOL_LEN + 1];
 
25665
-  gfc_component *q;
 
25666
   pointer_info *p;
 
25667
 
 
25668
   p = mio_pointer_ref (cp);
 
25669
   if (p->type == P_UNKNOWN)
 
25670
     p->type = P_COMPONENT;
 
25671
-
 
25672
-  if (iomode == IO_OUTPUT)
 
25673
-    mio_pool_string (&(*cp)->name);
 
25674
-  else
 
25675
-    {
 
25676
-      mio_internal_string (name);
 
25677
-
 
25678
-      if (sym && sym->attr.is_class)
 
25679
-       sym = sym->components->ts.u.derived;
 
25680
-
 
25681
-      /* It can happen that a component reference can be read before the
 
25682
-        associated derived type symbol has been loaded. Return now and
 
25683
-        wait for a later iteration of load_needed.  */
 
25684
-      if (sym == NULL)
 
25685
-       return;
 
25686
-
 
25687
-      if (sym->components != NULL && p->u.pointer == NULL)
 
25688
-       {
 
25689
-         /* Symbol already loaded, so search by name.  */
 
25690
-         q = gfc_find_component (sym, name, true, true);
 
25691
-
 
25692
-         if (q)
 
25693
-           associate_integer_pointer (p, q);
 
25694
-       }
 
25695
-
 
25696
-      /* Make sure this symbol will eventually be loaded.  */
 
25697
-      p = find_pointer2 (sym);
 
25698
-      if (p->u.rsym.state == UNUSED)
 
25699
-       p->u.rsym.state = NEEDED;
 
25700
-    }
 
25701
 }
 
25702
 
 
25703
 
 
25704
@@ -2917,7 +2854,7 @@
 
25705
 
 
25706
     case REF_COMPONENT:
 
25707
       mio_symbol_ref (&r->u.c.sym);
 
25708
-      mio_component_ref (&r->u.c.component, r->u.c.sym);
 
25709
+      mio_component_ref (&r->u.c.component);
 
25710
       break;
 
25711
 
 
25712
     case REF_SUBSTRING:
 
25713
@@ -3772,7 +3709,9 @@
 
25714
 
 
25715
 
 
25716
 /* Unlike most other routines, the address of the symbol node is already
 
25717
-   fixed on input and the name/module has already been filled in.  */
 
25718
+   fixed on input and the name/module has already been filled in.
 
25719
+   If you update the symbol format here, don't forget to update read_module
 
25720
+   as well (look for "seek to the symbol's component list").   */
 
25721
 
 
25722
 static void
 
25723
 mio_symbol (gfc_symbol *sym)
 
25724
@@ -3782,6 +3721,7 @@
 
25725
   mio_lparen ();
 
25726
 
 
25727
   mio_symbol_attribute (&sym->attr);
 
25728
+
 
25729
   mio_typespec (&sym->ts);
 
25730
   if (sym->ts.type == BT_CLASS)
 
25731
     sym->attr.class_ok = 1;
 
25732
@@ -3812,7 +3752,6 @@
 
25733
 
 
25734
   /* Note that components are always saved, even if they are supposed
 
25735
      to be private.  Component access is checked during searching.  */
 
25736
-
 
25737
   mio_component_list (&sym->components, sym->attr.vtype);
 
25738
 
 
25739
   if (sym->components != NULL)
 
25740
@@ -3914,14 +3853,17 @@
 
25741
 }
 
25742
 
 
25743
 
 
25744
-/* Skip a list between balanced left and right parens.  */
 
25745
+/* Skip a list between balanced left and right parens.
 
25746
+   By setting NEST_LEVEL one assumes that a number of NEST_LEVEL opening parens
 
25747
+   have been already parsed by hand, and the remaining of the content is to be
 
25748
+   skipped here.  The default value is 0 (balanced parens).  */
 
25749
 
 
25750
 static void
 
25751
-skip_list (void)
 
25752
+skip_list (int nest_level = 0)
 
25753
 {
 
25754
   int level;
 
25755
 
 
25756
-  level = 0;
 
25757
+  level = nest_level;
 
25758
   do
 
25759
     {
 
25760
       switch (parse_atom ())
 
25761
@@ -4555,7 +4497,6 @@
 
25762
       info->u.rsym.ns = atom_int;
 
25763
 
 
25764
       get_module_locus (&info->u.rsym.where);
 
25765
-      skip_list ();
 
25766
 
 
25767
       /* See if the symbol has already been loaded by a previous module.
 
25768
         If so, we reference the existing symbol and prevent it from
 
25769
@@ -4566,11 +4507,57 @@
 
25770
 
 
25771
       if (sym == NULL
 
25772
          || (sym->attr.flavor == FL_VARIABLE && info->u.rsym.ns !=1))
 
25773
-       continue;
 
25774
+       {
 
25775
+         skip_list ();
 
25776
+         continue;
 
25777
+       }
 
25778
 
 
25779
       info->u.rsym.state = USED;
 
25780
       info->u.rsym.sym = sym;
 
25781
+      /* The current symbol has already been loaded, so we can avoid loading
 
25782
+        it again.  However, if it is a derived type, some of its components
 
25783
+        can be used in expressions in the module.  To avoid the module loading
 
25784
+        failing, we need to associate the module's component pointer indexes
 
25785
+        with the existing symbol's component pointers.  */
 
25786
+      if (sym->attr.flavor == FL_DERIVED)
 
25787
+       {
 
25788
+         gfc_component *c;
 
25789
 
 
25790
+         /* First seek to the symbol's component list.  */
 
25791
+         mio_lparen (); /* symbol opening.  */
 
25792
+         skip_list (); /* skip symbol attribute.  */
 
25793
+         skip_list (); /* typespec.  */
 
25794
+         require_atom (ATOM_INTEGER); /* namespace ref.  */
 
25795
+         require_atom (ATOM_INTEGER); /* common ref.  */
 
25796
+         skip_list (); /* formal args.  */
 
25797
+         /* no value.  */
 
25798
+         skip_list (); /* array_spec.  */
 
25799
+         require_atom (ATOM_INTEGER); /* result.  */
 
25800
+         /* not a cray pointer.  */
 
25801
+
 
25802
+         mio_lparen (); /* component list opening.  */
 
25803
+         for (c = sym->components; c; c = c->next)
 
25804
+           {
 
25805
+             pointer_info *p;
 
25806
+             const char *comp_name;
 
25807
+             int n;
 
25808
+
 
25809
+             mio_lparen (); /* component opening.  */
 
25810
+             mio_integer (&n);
 
25811
+             p = get_integer (n);
 
25812
+             if (p->u.pointer == NULL)
 
25813
+               associate_integer_pointer (p, c);
 
25814
+             mio_pool_string (&comp_name);
 
25815
+             gcc_assert (comp_name == c->name);
 
25816
+             skip_list (1); /* component end.  */
 
25817
+           }
 
25818
+         mio_rparen (); /* component list closing.  */
 
25819
+
 
25820
+         skip_list (1); /* symbol end.  */
 
25821
+       }
 
25822
+      else
 
25823
+       skip_list ();
 
25824
+
 
25825
       /* Some symbols do not have a namespace (eg. formal arguments),
 
25826
         so the automatic "unique symtree" mechanism must be suppressed
 
25827
         by marking them as referenced.  */
 
25828
Index: gcc/fortran/io.c
 
25829
===================================================================
 
25830
--- a/src/gcc/fortran/io.c      (.../tags/gcc_4_8_2_release)
 
25831
+++ b/src/gcc/fortran/io.c      (.../branches/gcc-4_8-branch)
 
25832
@@ -1309,7 +1309,8 @@
 
25833
       return MATCH_ERROR;
 
25834
     }
 
25835
 
 
25836
-  if (gfc_pure (NULL) && gfc_impure_variable (result->symtree->n.sym))
 
25837
+  bool impure = gfc_impure_variable (result->symtree->n.sym);
 
25838
+  if (impure && gfc_pure (NULL))
 
25839
     {
 
25840
       gfc_error ("Variable %s cannot be assigned in PURE procedure at %C",
 
25841
                 tag->name);
 
25842
@@ -1317,8 +1318,8 @@
 
25843
       return MATCH_ERROR;
 
25844
     }
 
25845
 
 
25846
-  if (gfc_implicit_pure (NULL) && gfc_impure_variable (result->symtree->n.sym))
 
25847
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25848
+  if (impure)
 
25849
+    gfc_unset_implicit_pure (NULL);
 
25850
 
 
25851
   *v = result;
 
25852
   return MATCH_YES;
 
25853
@@ -1838,8 +1839,7 @@
 
25854
       goto cleanup;
 
25855
     }
 
25856
 
 
25857
-  if (gfc_implicit_pure (NULL))
 
25858
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25859
+  gfc_unset_implicit_pure (NULL);
 
25860
 
 
25861
   warn = (open->err || open->iostat) ? true : false;
 
25862
 
 
25863
@@ -2251,8 +2251,7 @@
 
25864
       goto cleanup;
 
25865
     }
 
25866
 
 
25867
-  if (gfc_implicit_pure (NULL))
 
25868
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25869
+  gfc_unset_implicit_pure (NULL);
 
25870
 
 
25871
   warn = (close->iostat || close->err) ? true : false;
 
25872
 
 
25873
@@ -2419,8 +2418,7 @@
 
25874
       goto cleanup;
 
25875
     }
 
25876
 
 
25877
-  if (gfc_implicit_pure (NULL))
 
25878
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25879
+  gfc_unset_implicit_pure (NULL);
 
25880
 
 
25881
   new_st.op = op;
 
25882
   new_st.ext.filepos = fp;
 
25883
@@ -3276,9 +3274,8 @@
 
25884
                     "an internal file in a PURE procedure",
 
25885
                     io_kind_name (k));
 
25886
 
 
25887
-      if (gfc_implicit_pure (NULL) && (k == M_READ || k == M_WRITE))
 
25888
-       gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25889
-
 
25890
+      if (k == M_READ || k == M_WRITE)
 
25891
+       gfc_unset_implicit_pure (NULL);
 
25892
     }
 
25893
 
 
25894
   if (k != M_READ)
 
25895
@@ -3809,8 +3806,7 @@
 
25896
       return MATCH_ERROR;
 
25897
     }
 
25898
 
 
25899
-  if (gfc_implicit_pure (NULL))
 
25900
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25901
+  gfc_unset_implicit_pure (NULL);
 
25902
 
 
25903
   return MATCH_YES;
 
25904
 }
 
25905
@@ -3969,8 +3965,7 @@
 
25906
          return MATCH_ERROR;
 
25907
        }
 
25908
 
 
25909
-      if (gfc_implicit_pure (NULL))
 
25910
-       gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25911
+      gfc_unset_implicit_pure (NULL);
 
25912
 
 
25913
       new_st.block = gfc_get_code ();
 
25914
       new_st.block->op = EXEC_IOLENGTH;
 
25915
@@ -4023,8 +4018,7 @@
 
25916
       goto cleanup;
 
25917
     }
 
25918
 
 
25919
-  if (gfc_implicit_pure (NULL))
 
25920
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25921
+  gfc_unset_implicit_pure (NULL);
 
25922
   
 
25923
   if (inquire->id != NULL && inquire->pending == NULL)
 
25924
     {
 
25925
@@ -4212,8 +4206,7 @@
 
25926
       goto cleanup;
 
25927
     }
 
25928
 
 
25929
-  if (gfc_implicit_pure (NULL))
 
25930
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25931
+  gfc_unset_implicit_pure (NULL);
 
25932
 
 
25933
   new_st.op = EXEC_WAIT;
 
25934
   new_st.ext.wait = wait;
 
25935
Index: gcc/fortran/frontend-passes.c
 
25936
===================================================================
 
25937
--- a/src/gcc/fortran/frontend-passes.c (.../tags/gcc_4_8_2_release)
 
25938
+++ b/src/gcc/fortran/frontend-passes.c (.../branches/gcc-4_8-branch)
 
25939
@@ -623,12 +623,35 @@
 
25940
    to insert statements as needed.  */
 
25941
 
 
25942
 static int
 
25943
-cfe_code (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED,
 
25944
-         void *data ATTRIBUTE_UNUSED)
 
25945
+cfe_code (gfc_code **c, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
 
25946
 {
 
25947
   current_code = c;
 
25948
   inserted_block = NULL;
 
25949
   changed_statement = NULL;
 
25950
+
 
25951
+  /* Do not do anything inside a WHERE statement; scalar assignments, BLOCKs
 
25952
+     and allocation on assigment are prohibited inside WHERE, and finally
 
25953
+     masking an expression would lead to wrong-code when replacing
 
25954
+
 
25955
+     WHERE (a>0)
 
25956
+       b = sum(foo(a) + foo(a))
 
25957
+     END WHERE
 
25958
+
 
25959
+     with
 
25960
+
 
25961
+     WHERE (a > 0)
 
25962
+       tmp = foo(a)
 
25963
+       b = sum(tmp + tmp)
 
25964
+     END WHERE
 
25965
+*/
 
25966
+
 
25967
+  if ((*c)->op == EXEC_WHERE)
 
25968
+    {
 
25969
+      *walk_subtrees = 0;
 
25970
+      return 0;
 
25971
+    }
 
25972
+  
 
25973
+
 
25974
   return 0;
 
25975
 }
 
25976
 
 
25977
@@ -1214,7 +1237,9 @@
 
25978
          /* Replace A // B < A // C with B < C, and A // B < C // B
 
25979
             with A < C.  */
 
25980
          if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
 
25981
+             && op1->expr_type == EXPR_OP
 
25982
              && op1->value.op.op == INTRINSIC_CONCAT
 
25983
+             && op2->expr_type == EXPR_OP
 
25984
              && op2->value.op.op == INTRINSIC_CONCAT)
 
25985
            {
 
25986
              gfc_expr *op1_left = op1->value.op.op1;
 
25987
Index: gcc/fortran/resolve.c
 
25988
===================================================================
 
25989
--- a/src/gcc/fortran/resolve.c (.../tags/gcc_4_8_2_release)
 
25990
+++ b/src/gcc/fortran/resolve.c (.../branches/gcc-4_8-branch)
 
25991
@@ -1,5 +1,5 @@
 
25992
 /* Perform type resolution on the various structures.
 
25993
-   Copyright (C) 2001-2013 Free Software Foundation, Inc.
 
25994
+   Copyright (C) 2001-2014 Free Software Foundation, Inc.
 
25995
    Contributed by Andy Vaught
 
25996
 
 
25997
 This file is part of GCC.
 
25998
@@ -1259,9 +1259,10 @@
 
25999
        }
 
26000
 
 
26001
       /* F2003, C1272 (3).  */
 
26002
-      if (gfc_pure (NULL) && cons->expr->expr_type == EXPR_VARIABLE
 
26003
-         && (gfc_impure_variable (cons->expr->symtree->n.sym)
 
26004
-             || gfc_is_coindexed (cons->expr)))
 
26005
+      bool impure = cons->expr->expr_type == EXPR_VARIABLE
 
26006
+                   && (gfc_impure_variable (cons->expr->symtree->n.sym)
 
26007
+                       || gfc_is_coindexed (cons->expr));
 
26008
+      if (impure && gfc_pure (NULL))
 
26009
        {
 
26010
          t = FAILURE;
 
26011
          gfc_error ("Invalid expression in the structure constructor for "
 
26012
@@ -1269,12 +1270,8 @@
 
26013
                     comp->name, &cons->expr->where);
 
26014
        }
 
26015
 
 
26016
-      if (gfc_implicit_pure (NULL)
 
26017
-           && cons->expr->expr_type == EXPR_VARIABLE
 
26018
-           && (gfc_impure_variable (cons->expr->symtree->n.sym)
 
26019
-               || gfc_is_coindexed (cons->expr)))
 
26020
-       gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
26021
-
 
26022
+      if (impure)
 
26023
+       gfc_unset_implicit_pure (NULL);
 
26024
     }
 
26025
 
 
26026
   return t;
 
26027
@@ -3295,8 +3292,7 @@
 
26028
          t = FAILURE;
 
26029
        }
 
26030
 
 
26031
-      if (gfc_implicit_pure (NULL))
 
26032
-       gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
26033
+      gfc_unset_implicit_pure (NULL);
 
26034
     }
 
26035
 
 
26036
   /* Functions without the RECURSIVE attribution are not allowed to
 
26037
@@ -3361,8 +3357,7 @@
 
26038
     gfc_error ("Subroutine call to '%s' at %L is not PURE", sym->name,
 
26039
               &c->loc);
 
26040
 
 
26041
-  if (gfc_implicit_pure (NULL))
 
26042
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
26043
+  gfc_unset_implicit_pure (NULL);
 
26044
 }
 
26045
 
 
26046
 
 
26047
@@ -8705,10 +8700,11 @@
 
26048
         && exp->value.op.op == INTRINSIC_PARENTHESES)
 
26049
     exp = exp->value.op.op1;
 
26050
 
 
26051
-  if (exp && exp->expr_type == EXPR_NULL && exp->ts.type == BT_UNKNOWN)
 
26052
+  if (exp && exp->expr_type == EXPR_NULL
 
26053
+      && code->ext.dt)
 
26054
     {
 
26055
-      gfc_error ("NULL intrinsic at %L in data transfer statement requires "
 
26056
-                "MOLD=", &exp->where);
 
26057
+      gfc_error ("Invalid context for NULL () intrinsic at %L",
 
26058
+                &exp->where);
 
26059
       return;
 
26060
     }
 
26061
 
 
26062
@@ -9612,7 +9608,7 @@
 
26063
       if (lhs->expr_type == EXPR_VARIABLE
 
26064
            && lhs->symtree->n.sym != gfc_current_ns->proc_name
 
26065
            && lhs->symtree->n.sym->ns != gfc_current_ns)
 
26066
-       gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
26067
+       gfc_unset_implicit_pure (NULL);
 
26068
 
 
26069
       if (lhs->ts.type == BT_DERIVED
 
26070
            && lhs->expr_type == EXPR_VARIABLE
 
26071
@@ -9620,11 +9616,11 @@
 
26072
            && rhs->expr_type == EXPR_VARIABLE
 
26073
            && (gfc_impure_variable (rhs->symtree->n.sym)
 
26074
                || gfc_is_coindexed (rhs)))
 
26075
-       gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
26076
+       gfc_unset_implicit_pure (NULL);
 
26077
 
 
26078
       /* Fortran 2008, C1283.  */
 
26079
       if (gfc_is_coindexed (lhs))
 
26080
-       gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
26081
+       gfc_unset_implicit_pure (NULL);
 
26082
     }
 
26083
 
 
26084
   /* F03:7.4.1.2.  */
 
26085
@@ -11057,7 +11053,7 @@
 
26086
          init_expr = NULL;
 
26087
        }
 
26088
       if (!init_expr && gfc_option.flag_init_character == GFC_INIT_CHARACTER_ON
 
26089
-         && sym->ts.u.cl->length)
 
26090
+         && sym->ts.u.cl->length && gfc_option.flag_max_stack_var_size != 0)
 
26091
        {
 
26092
          gfc_actual_arglist *arg;
 
26093
          init_expr = gfc_get_expr ();
 
26094
@@ -11877,6 +11873,7 @@
 
26095
 {
 
26096
   gfc_symbol *sym1, *sym2;
 
26097
   const char *pass1, *pass2;
 
26098
+  gfc_formal_arglist *dummy_args;
 
26099
 
 
26100
   gcc_assert (t1->specific && t2->specific);
 
26101
   gcc_assert (!t1->specific->is_generic);
 
26102
@@ -11899,19 +11896,33 @@
 
26103
       return FAILURE;
 
26104
     }
 
26105
 
 
26106
-  /* Compare the interfaces.  */
 
26107
+  /* Determine PASS arguments.  */
 
26108
   if (t1->specific->nopass)
 
26109
     pass1 = NULL;
 
26110
   else if (t1->specific->pass_arg)
 
26111
     pass1 = t1->specific->pass_arg;
 
26112
   else
 
26113
-    pass1 = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym)->sym->name;
 
26114
+    {
 
26115
+      dummy_args = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym);
 
26116
+      if (dummy_args)
 
26117
+       pass1 = dummy_args->sym->name;
 
26118
+      else
 
26119
+       pass1 = NULL;
 
26120
+    }
 
26121
   if (t2->specific->nopass)
 
26122
     pass2 = NULL;
 
26123
   else if (t2->specific->pass_arg)
 
26124
     pass2 = t2->specific->pass_arg;
 
26125
   else
 
26126
-    pass2 = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym)->sym->name;
 
26127
+    {
 
26128
+      dummy_args = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym);
 
26129
+      if (dummy_args)
 
26130
+       pass2 = dummy_args->sym->name;
 
26131
+      else
 
26132
+       pass2 = NULL;
 
26133
+    }
 
26134
+
 
26135
+  /* Compare the interfaces.  */
 
26136
   if (gfc_compare_interfaces (sym1, sym2, sym2->name, !t1->is_operator, 0,
 
26137
                              NULL, 0, pass1, pass2))
 
26138
     {
 
26139
@@ -12425,9 +12436,6 @@
 
26140
   resolve_bindings_derived = derived;
 
26141
   resolve_bindings_result = SUCCESS;
 
26142
 
 
26143
-  /* Make sure the vtab has been generated.  */
 
26144
-  gfc_find_derived_vtab (derived);
 
26145
-
 
26146
   if (derived->f2k_derived->tb_sym_root)
 
26147
     gfc_traverse_symtree (derived->f2k_derived->tb_sym_root,
 
26148
                          &resolve_typebound_procedure);
 
26149
@@ -13256,7 +13264,8 @@
 
26150
   if (sym->attr.flavor == FL_UNKNOWN
 
26151
       || (sym->attr.flavor == FL_PROCEDURE && !sym->attr.intrinsic
 
26152
          && !sym->attr.generic && !sym->attr.external
 
26153
-         && sym->attr.if_source == IFSRC_UNKNOWN))
 
26154
+         && sym->attr.if_source == IFSRC_UNKNOWN
 
26155
+         && sym->ts.type == BT_UNKNOWN))
 
26156
     {
 
26157
 
 
26158
     /* If we find that a flavorless symbol is an interface in one of the
 
26159
@@ -14376,6 +14385,33 @@
 
26160
 }
 
26161
 
 
26162
 
 
26163
+void
 
26164
+gfc_unset_implicit_pure (gfc_symbol *sym)
 
26165
+{
 
26166
+  gfc_namespace *ns;
 
26167
+
 
26168
+  if (sym == NULL)
 
26169
+    {
 
26170
+      /* Check if the current procedure is implicit_pure.  Walk up
 
26171
+        the procedure list until we find a procedure.  */
 
26172
+      for (ns = gfc_current_ns; ns; ns = ns->parent)
 
26173
+       {
 
26174
+         sym = ns->proc_name;
 
26175
+         if (sym == NULL)
 
26176
+           return;
 
26177
+
 
26178
+         if (sym->attr.flavor == FL_PROCEDURE)
 
26179
+           break;
 
26180
+       }
 
26181
+    }
 
26182
+
 
26183
+  if (sym->attr.flavor == FL_PROCEDURE)
 
26184
+    sym->attr.implicit_pure = 0;
 
26185
+  else
 
26186
+    sym->attr.pure = 0;
 
26187
+}
 
26188
+
 
26189
+
 
26190
 /* Test whether the current procedure is elemental or not.  */
 
26191
 
 
26192
 int
 
26193
Index: gcc/fortran/trans-io.c
 
26194
===================================================================
 
26195
--- a/src/gcc/fortran/trans-io.c        (.../tags/gcc_4_8_2_release)
 
26196
+++ b/src/gcc/fortran/trans-io.c        (.../branches/gcc-4_8-branch)
 
26197
@@ -243,16 +243,16 @@
 
26198
 
 
26199
   /* The code to generate the error.  */
 
26200
   gfc_start_block (&block);
 
26201
-  
 
26202
+
 
26203
   arg1 = gfc_build_addr_expr (NULL_TREE, var);
 
26204
-  
 
26205
+
 
26206
   arg2 = build_int_cst (integer_type_node, error_code),
 
26207
-  
 
26208
+
 
26209
   asprintf (&message, "%s", _(msgid));
 
26210
   arg3 = gfc_build_addr_expr (pchar_type_node,
 
26211
                              gfc_build_localized_cstring_const (message));
 
26212
   free (message);
 
26213
-  
 
26214
+
 
26215
   tmp = build_call_expr_loc (input_location,
 
26216
                         gfor_fndecl_generate_error, 3, arg1, arg2, arg3);
 
26217
 
 
26218
@@ -521,7 +521,7 @@
 
26219
       gfc_trans_io_runtime_check (cond, var, LIBERROR_BAD_UNIT,
 
26220
                               "Unit number in I/O statement too small",
 
26221
                               &se.pre);
 
26222
-    
 
26223
+
 
26224
       /* UNIT numbers should be less than the max.  */
 
26225
       val = gfc_conv_mpz_to_tree (gfc_integer_kinds[i].huge, 4);
 
26226
       cond = fold_build2_loc (input_location, GT_EXPR, boolean_type_node,
 
26227
@@ -1000,7 +1000,7 @@
 
26228
   if (p->convert)
 
26229
     mask |= set_string (&block, &post_block, var, IOPARM_open_convert,
 
26230
                        p->convert);
 
26231
-                       
 
26232
+
 
26233
   if (p->newunit)
 
26234
     mask |= set_parameter_ref (&block, &post_block, var, IOPARM_open_newunit,
 
26235
                               p->newunit);
 
26236
@@ -1234,7 +1234,7 @@
 
26237
     {
 
26238
       mask |= set_parameter_ref (&block, &post_block, var, IOPARM_inquire_exist,
 
26239
                                 p->exist);
 
26240
-    
 
26241
+
 
26242
       if (p->unit && !p->iostat)
 
26243
        {
 
26244
          p->iostat = create_dummy_iostat ();
 
26245
@@ -1322,7 +1322,7 @@
 
26246
   if (p->pad)
 
26247
     mask |= set_string (&block, &post_block, var, IOPARM_inquire_pad,
 
26248
                        p->pad);
 
26249
-  
 
26250
+
 
26251
   if (p->convert)
 
26252
     mask |= set_string (&block, &post_block, var, IOPARM_inquire_convert,
 
26253
                        p->convert);
 
26254
@@ -1547,7 +1547,7 @@
 
26255
   tree dtype;
 
26256
   tree dt_parm_addr;
 
26257
   tree decl = NULL_TREE;
 
26258
-  int n_dim; 
 
26259
+  int n_dim;
 
26260
   int itype;
 
26261
   int rank = 0;
 
26262
 
 
26263
@@ -2032,7 +2032,7 @@
 
26264
       if (gfc_notification_std (GFC_STD_GNU) != SILENT)
 
26265
        {
 
26266
          gfc_error_now ("Derived type '%s' at %L has PRIVATE components",
 
26267
-                        ts->u.derived->name, code != NULL ? &(code->loc) : 
 
26268
+                        ts->u.derived->name, code != NULL ? &(code->loc) :
 
26269
                         &gfc_current_locus);
 
26270
          return;
 
26271
        }
 
26272
@@ -2041,7 +2041,7 @@
 
26273
       ts->kind = ts->u.derived->ts.kind;
 
26274
       ts->f90_type = ts->u.derived->ts.f90_type;
 
26275
     }
 
26276
-  
 
26277
+
 
26278
   kind = ts->kind;
 
26279
   function = NULL;
 
26280
   arg2 = NULL;
 
26281
@@ -2123,7 +2123,7 @@
 
26282
            function = iocall[IOCALL_X_CHARACTER_WIDE];
 
26283
          else
 
26284
            function = iocall[IOCALL_X_CHARACTER_WIDE_WRITE];
 
26285
-           
 
26286
+
 
26287
          tmp = gfc_build_addr_expr (NULL_TREE, dt_parm);
 
26288
          tmp = build_call_expr_loc (input_location,
 
26289
                                 function, 4, tmp, addr_expr, arg2, arg3);
 
26290
@@ -2158,6 +2158,12 @@
 
26291
       expr = build_fold_indirect_ref_loc (input_location,
 
26292
                                      expr);
 
26293
 
 
26294
+      /* Make sure that the derived type has been built.  An external
 
26295
+        function, if only referenced in an io statement requires this
 
26296
+        check (see PR58771).  */
 
26297
+      if (ts->u.derived->backend_decl == NULL_TREE)
 
26298
+       tmp = gfc_typenode_for_spec (ts);
 
26299
+
 
26300
       for (c = ts->u.derived->components; c; c = c->next)
 
26301
        {
 
26302
          field = c->backend_decl;
 
26303
Index: gcc/fortran/trans-decl.c
 
26304
===================================================================
 
26305
--- a/src/gcc/fortran/trans-decl.c      (.../tags/gcc_4_8_2_release)
 
26306
+++ b/src/gcc/fortran/trans-decl.c      (.../branches/gcc-4_8-branch)
 
26307
@@ -1013,6 +1013,10 @@
 
26308
   TREE_STATIC (decl) = 0;
 
26309
   DECL_EXTERNAL (decl) = 0;
 
26310
 
 
26311
+  /* Avoid uninitialized warnings for optional dummy arguments.  */
 
26312
+  if (sym->attr.optional)
 
26313
+    TREE_NO_WARNING (decl) = 1;
 
26314
+
 
26315
   /* We should never get deferred shape arrays here.  We used to because of
 
26316
      frontend bugs.  */
 
26317
   gcc_assert (sym->as->type != AS_DEFERRED);
 
26318
@@ -1358,9 +1362,10 @@
 
26319
 
 
26320
   if (sym->attr.flavor == FL_PROCEDURE)
 
26321
     {
 
26322
-      /* Catch function declarations. Only used for actual parameters,
 
26323
+      /* Catch functions. Only used for actual parameters,
 
26324
         procedure pointers and procptr initialization targets.  */
 
26325
-      if (sym->attr.external || sym->attr.use_assoc || sym->attr.intrinsic)
 
26326
+      if (sym->attr.external || sym->attr.use_assoc || sym->attr.intrinsic
 
26327
+         || sym->attr.if_source != IFSRC_DECL)
 
26328
        {
 
26329
          decl = gfc_get_extern_function_decl (sym);
 
26330
          gfc_set_decl_location (decl, &sym->declared_at);
 
26331
Index: gcc/fortran/match.c
 
26332
===================================================================
 
26333
--- a/src/gcc/fortran/match.c   (.../tags/gcc_4_8_2_release)
 
26334
+++ b/src/gcc/fortran/match.c   (.../branches/gcc-4_8-branch)
 
26335
@@ -1753,8 +1753,7 @@
 
26336
       return MATCH_ERROR;
 
26337
     }
 
26338
 
 
26339
-  if (gfc_implicit_pure (NULL))
 
26340
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
26341
+  gfc_unset_implicit_pure (NULL);
 
26342
 
 
26343
   if (gfc_notify_std (GFC_STD_F2008, "CRITICAL statement at %C")
 
26344
       == FAILURE)
 
26345
@@ -2683,8 +2682,7 @@
 
26346
       goto cleanup;
 
26347
     }
 
26348
 
 
26349
-  if (gfc_implicit_pure (NULL))
 
26350
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
26351
+  gfc_unset_implicit_pure (NULL);
 
26352
 
 
26353
   if (st == ST_STOP && gfc_find_state (COMP_CRITICAL) == SUCCESS)
 
26354
     {
 
26355
@@ -2824,8 +2822,7 @@
 
26356
       return MATCH_ERROR;
 
26357
     }
 
26358
 
 
26359
-  if (gfc_implicit_pure (NULL))
 
26360
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
26361
+  gfc_unset_implicit_pure (NULL);
 
26362
 
 
26363
   if (gfc_option.coarray == GFC_FCOARRAY_NONE)
 
26364
     {
 
26365
@@ -3020,8 +3017,7 @@
 
26366
       return MATCH_ERROR;
 
26367
     }
 
26368
 
 
26369
-  if (gfc_implicit_pure (NULL))
 
26370
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
26371
+  gfc_unset_implicit_pure (NULL);
 
26372
 
 
26373
   if (gfc_notify_std (GFC_STD_F2008, "SYNC statement at %C")
 
26374
       == FAILURE)
 
26375
@@ -3500,15 +3496,15 @@
 
26376
       if (gfc_check_do_variable (tail->expr->symtree))
 
26377
        goto cleanup;
 
26378
 
 
26379
-      if (gfc_pure (NULL) && gfc_impure_variable (tail->expr->symtree->n.sym))
 
26380
+      bool impure = gfc_impure_variable (tail->expr->symtree->n.sym);
 
26381
+      if (impure && gfc_pure (NULL))
 
26382
        {
 
26383
          gfc_error ("Bad allocate-object at %C for a PURE procedure");
 
26384
          goto cleanup;
 
26385
        }
 
26386
 
 
26387
-      if (gfc_implicit_pure (NULL)
 
26388
-           && gfc_impure_variable (tail->expr->symtree->n.sym))
 
26389
-       gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
26390
+      if (impure)
 
26391
+       gfc_unset_implicit_pure (NULL);
 
26392
 
 
26393
       if (tail->expr->ts.deferred)
 
26394
        {
 
26395
@@ -3890,14 +3886,15 @@
 
26396
 
 
26397
       sym = tail->expr->symtree->n.sym;
 
26398
 
 
26399
-      if (gfc_pure (NULL) && gfc_impure_variable (sym))
 
26400
+      bool impure = gfc_impure_variable (sym);
 
26401
+      if (impure && gfc_pure (NULL))
 
26402
        {
 
26403
          gfc_error ("Illegal allocate-object at %C for a PURE procedure");
 
26404
          goto cleanup;
 
26405
        }
 
26406
 
 
26407
-      if (gfc_implicit_pure (NULL) && gfc_impure_variable (sym))
 
26408
-       gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
26409
+      if (impure)
 
26410
+       gfc_unset_implicit_pure (NULL);
 
26411
 
 
26412
       if (gfc_is_coarray (tail->expr)
 
26413
          && gfc_find_state (COMP_DO_CONCURRENT) == SUCCESS)
 
26414
Index: gcc/fortran/parse.c
 
26415
===================================================================
 
26416
--- a/src/gcc/fortran/parse.c   (.../tags/gcc_4_8_2_release)
 
26417
+++ b/src/gcc/fortran/parse.c   (.../branches/gcc-4_8-branch)
 
26418
@@ -550,8 +550,7 @@
 
26419
       return ST_NONE;
 
26420
     }
 
26421
 
 
26422
-  if (gfc_implicit_pure (NULL))
 
26423
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
26424
+  gfc_unset_implicit_pure (NULL);
 
26425
 
 
26426
   old_locus = gfc_current_locus;
 
26427
 
 
26428
Index: gcc/fortran/check.c
 
26429
===================================================================
 
26430
--- a/src/gcc/fortran/check.c   (.../tags/gcc_4_8_2_release)
 
26431
+++ b/src/gcc/fortran/check.c   (.../branches/gcc-4_8-branch)
 
26432
@@ -3208,7 +3208,7 @@
 
26433
                 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
 
26434
       return FAILURE;
 
26435
     }
 
26436
-  else if (shape->expr_type == EXPR_ARRAY)
 
26437
+  else if (shape->expr_type == EXPR_ARRAY && gfc_is_constant_expr (shape))
 
26438
     {
 
26439
       gfc_expr *e;
 
26440
       int i, extent;
 
26441
Index: gcc/fortran/primary.c
 
26442
===================================================================
 
26443
--- a/src/gcc/fortran/primary.c (.../tags/gcc_4_8_2_release)
 
26444
+++ b/src/gcc/fortran/primary.c (.../branches/gcc-4_8-branch)
 
26445
@@ -2252,7 +2252,7 @@
 
26446
     case EXPR_FUNCTION:
 
26447
       gfc_clear_attr (&attr);
 
26448
 
 
26449
-      if (e->value.function.esym != NULL)
 
26450
+      if (e->value.function.esym && e->value.function.esym->result)
 
26451
        {
 
26452
          gfc_symbol *sym = e->value.function.esym->result;
 
26453
          attr = sym->attr;
 
26454
@@ -2540,7 +2540,8 @@
 
26455
       if (parent && !comp)
 
26456
        break;
 
26457
 
 
26458
-      actual = actual->next;
 
26459
+      if (actual)
 
26460
+       actual = actual->next;
 
26461
     }
 
26462
 
 
26463
   if (build_actual_constructor (&comp_head, &ctor_head, sym) == FAILURE)
 
26464
Index: gcc/fortran/trans-intrinsic.c
 
26465
===================================================================
 
26466
--- a/src/gcc/fortran/trans-intrinsic.c (.../tags/gcc_4_8_2_release)
 
26467
+++ b/src/gcc/fortran/trans-intrinsic.c (.../branches/gcc-4_8-branch)
 
26468
@@ -4684,9 +4684,11 @@
 
26469
 static void
 
26470
 gfc_conv_intrinsic_ichar (gfc_se * se, gfc_expr * expr)
 
26471
 {
 
26472
-  tree args[2], type, pchartype;
 
26473
+  tree args[3], type, pchartype;
 
26474
+  int nargs;
 
26475
 
 
26476
-  gfc_conv_intrinsic_function_args (se, expr, args, 2);
 
26477
+  nargs = gfc_intrinsic_argument_list_length (expr);
 
26478
+  gfc_conv_intrinsic_function_args (se, expr, args, nargs);
 
26479
   gcc_assert (POINTER_TYPE_P (TREE_TYPE (args[1])));
 
26480
   pchartype = gfc_get_pchar_type (expr->value.function.actual->expr->ts.kind);
 
26481
   args[1] = fold_build1_loc (input_location, NOP_EXPR, pchartype, args[1]);
 
26482
Index: gcc/fortran/simplify.c
 
26483
===================================================================
 
26484
--- a/src/gcc/fortran/simplify.c        (.../tags/gcc_4_8_2_release)
 
26485
+++ b/src/gcc/fortran/simplify.c        (.../branches/gcc-4_8-branch)
 
26486
@@ -5528,7 +5528,7 @@
 
26487
       if (e == &gfc_bad_expr || range_check (e, "SHAPE") == &gfc_bad_expr)
 
26488
        {
 
26489
          gfc_free_expr (result);
 
26490
-         if (t)
 
26491
+         if (t == SUCCESS)
 
26492
            gfc_clear_shape (shape, source->rank);
 
26493
          return &gfc_bad_expr;
 
26494
        }
 
26495
@@ -5536,7 +5536,7 @@
 
26496
       gfc_constructor_append_expr (&result->value.constructor, e, NULL);
 
26497
     }
 
26498
 
 
26499
-  if (t)
 
26500
+  if (t == SUCCESS)
 
26501
     gfc_clear_shape (shape, source->rank);
 
26502
 
 
26503
   return result;
 
26504
Index: gcc/configure.ac
 
26505
===================================================================
 
26506
--- a/src/gcc/configure.ac      (.../tags/gcc_4_8_2_release)
 
26507
+++ b/src/gcc/configure.ac      (.../branches/gcc-4_8-branch)
 
26508
@@ -1516,13 +1516,11 @@
 
26509
        /* | [A-Za-z]:[\\/]* ) realsrcdir=${srcdir};;
 
26510
        *) realsrcdir=../${srcdir};;
 
26511
        esac
 
26512
-       saved_CFLAGS="${CFLAGS}"
 
26513
        CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
 
26514
-       LDFLAGS="${LDFLAGS_FOR_BUILD}" \
 
26515
+       LDFLAGS="${LDFLAGS_FOR_BUILD}" GMPINC="" \
 
26516
        ${realsrcdir}/configure \
 
26517
                --enable-languages=${enable_languages-all} \
 
26518
                --target=$target_alias --host=$build_alias --build=$build_alias
 
26519
-       CFLAGS="${saved_CFLAGS}"
 
26520
 
 
26521
        # We just finished tests for the build machine, so rename
 
26522
        # the file auto-build.h in the gcc directory.
 
26523
@@ -1887,6 +1885,7 @@
 
26524
 if test x$build != x$host || test "x$coverage_flags" != x
 
26525
 then
 
26526
     BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
 
26527
+    BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CXXFLAGS_FOR_BUILD)'
 
26528
     BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
 
26529
 fi
 
26530
 
 
26531
@@ -3611,6 +3610,19 @@
 
26532
        kasumi_fi_xor %f46, %f48, %f50, %f52],,
 
26533
       [AC_DEFINE(HAVE_AS_SPARC4, 1,
 
26534
                 [Define if your assembler supports SPARC4 instructions.])])
 
26535
+
 
26536
+    gcc_GAS_CHECK_FEATURE([LEON instructions],
 
26537
+      gcc_cv_as_sparc_leon,,
 
26538
+      [-Aleon],
 
26539
+      [.text
 
26540
+       .register %g2, #scratch
 
26541
+       .register %g3, #scratch
 
26542
+       .align 4
 
26543
+       smac %g2, %g3, %g1
 
26544
+       umac %g2, %g3, %g1
 
26545
+       cas [[%g2]], %g3, %g1],,
 
26546
+      [AC_DEFINE(HAVE_AS_LEON, 1,
 
26547
+                [Define if your assembler supports LEON instructions.])])
 
26548
     ;;
 
26549
 
 
26550
 changequote(,)dnl
 
26551
@@ -3749,8 +3761,13 @@
 
26552
 
 
26553
     # These two are used unconditionally by i386.[ch]; it is to be defined
 
26554
     # to 1 if the feature is present, 0 otherwise.
 
26555
+    as_ix86_gotoff_in_data_opt=
 
26556
+    if test x$gas = xyes; then
 
26557
+      as_ix86_gotoff_in_data_opt="--32"
 
26558
+    fi
 
26559
     gcc_GAS_CHECK_FEATURE([GOTOFF in data],
 
26560
-        gcc_cv_as_ix86_gotoff_in_data, [2,11,0],,
 
26561
+      gcc_cv_as_ix86_gotoff_in_data, [2,11,0],
 
26562
+      [$as_ix86_gotoff_in_data_opt],
 
26563
 [      .text
 
26564
 .L0:
 
26565
        nop
 
26566
@@ -3772,6 +3789,12 @@
 
26567
         [AC_DEFINE(HAVE_AS_IX86_REP_LOCK_PREFIX, 1,
 
26568
           [Define if the assembler supports 'rep <insn>, lock <insn>'.])])
 
26569
 
 
26570
+    gcc_GAS_CHECK_FEATURE([ud2 mnemonic],
 
26571
+       gcc_cv_as_ix86_ud2,,,
 
26572
+       [ud2],,
 
26573
+      [AC_DEFINE(HAVE_AS_IX86_UD2, 1,
 
26574
+       [Define if your assembler supports the 'ud2' mnemonic.])])
 
26575
+
 
26576
     gcc_GAS_CHECK_FEATURE([R_386_TLS_GD_PLT reloc],
 
26577
         gcc_cv_as_ix86_tlsgdplt,,,
 
26578
        [call    tls_gd@tlsgdplt],
 
26579
@@ -5193,15 +5216,15 @@
 
26580
   AC_MSG_CHECKING([for exported symbols])
 
26581
   if test "x$export_sym_check" != x; then
 
26582
     echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
 
26583
-    ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest > /dev/null 2>&1
 
26584
-    if $export_sym_check conftest | grep foobar > /dev/null; then
 
26585
+    ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > /dev/null 2>&1
 
26586
+    if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
 
26587
       : # No need to use a flag
 
26588
       AC_MSG_RESULT([yes])
 
26589
     else
 
26590
       AC_MSG_RESULT([yes])
 
26591
       AC_MSG_CHECKING([for -rdynamic])
 
26592
-      ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest > /dev/null 2>&1
 
26593
-      if $export_sym_check conftest | grep foobar > /dev/null; then
 
26594
+      ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest$ac_exeext > /dev/null 2>&1
 
26595
+      if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
 
26596
         plugin_rdynamic=yes
 
26597
         pluginlibs="-rdynamic"
 
26598
       else
 
26599
Index: gcc/function.c
 
26600
===================================================================
 
26601
--- a/src/gcc/function.c        (.../tags/gcc_4_8_2_release)
 
26602
+++ b/src/gcc/function.c        (.../branches/gcc-4_8-branch)
 
26603
@@ -5509,22 +5509,45 @@
 
26604
         except for any part that overlaps SRC (next loop).  */
 
26605
       bb_uses = &DF_LR_BB_INFO (bb)->use;
 
26606
       bb_defs = &DF_LR_BB_INFO (bb)->def;
 
26607
-      for (i = dregno; i < end_dregno; i++)
 
26608
+      if (df_live)
 
26609
        {
 
26610
-         if (REGNO_REG_SET_P (bb_uses, i) || REGNO_REG_SET_P (bb_defs, i))
 
26611
-           next_block = NULL;
 
26612
-         CLEAR_REGNO_REG_SET (live_out, i);
 
26613
-         CLEAR_REGNO_REG_SET (live_in, i);
 
26614
+         for (i = dregno; i < end_dregno; i++)
 
26615
+           {
 
26616
+             if (REGNO_REG_SET_P (bb_uses, i) || REGNO_REG_SET_P (bb_defs, i)
 
26617
+                 || REGNO_REG_SET_P (&DF_LIVE_BB_INFO (bb)->gen, i))
 
26618
+               next_block = NULL;
 
26619
+             CLEAR_REGNO_REG_SET (live_out, i);
 
26620
+             CLEAR_REGNO_REG_SET (live_in, i);
 
26621
+           }
 
26622
+
 
26623
+         /* Check whether BB clobbers SRC.  We need to add INSN to BB if so.
 
26624
+            Either way, SRC is now live on entry.  */
 
26625
+         for (i = sregno; i < end_sregno; i++)
 
26626
+           {
 
26627
+             if (REGNO_REG_SET_P (bb_defs, i)
 
26628
+                 || REGNO_REG_SET_P (&DF_LIVE_BB_INFO (bb)->gen, i))
 
26629
+               next_block = NULL;
 
26630
+             SET_REGNO_REG_SET (live_out, i);
 
26631
+             SET_REGNO_REG_SET (live_in, i);
 
26632
+           }
 
26633
        }
 
26634
+      else
 
26635
+       {
 
26636
+         /* DF_LR_BB_INFO (bb)->def does not comprise the DF_REF_PARTIAL and
 
26637
+            DF_REF_CONDITIONAL defs.  So if DF_LIVE doesn't exist, i.e.
 
26638
+            at -O1, just give up searching NEXT_BLOCK.  */
 
26639
+         next_block = NULL;
 
26640
+         for (i = dregno; i < end_dregno; i++)
 
26641
+           {
 
26642
+             CLEAR_REGNO_REG_SET (live_out, i);
 
26643
+             CLEAR_REGNO_REG_SET (live_in, i);
 
26644
+           }
 
26645
 
 
26646
-      /* Check whether BB clobbers SRC.  We need to add INSN to BB if so.
 
26647
-        Either way, SRC is now live on entry.  */
 
26648
-      for (i = sregno; i < end_sregno; i++)
 
26649
-       {
 
26650
-         if (REGNO_REG_SET_P (bb_defs, i))
 
26651
-           next_block = NULL;
 
26652
-         SET_REGNO_REG_SET (live_out, i);
 
26653
-         SET_REGNO_REG_SET (live_in, i);
 
26654
+         for (i = sregno; i < end_sregno; i++)
 
26655
+           {
 
26656
+             SET_REGNO_REG_SET (live_out, i);
 
26657
+             SET_REGNO_REG_SET (live_in, i);
 
26658
+           }
 
26659
        }
 
26660
 
 
26661
       /* If we don't need to add the move to BB, look for a single
 
26662
Index: gcc/print-rtl.c
 
26663
===================================================================
 
26664
--- a/src/gcc/print-rtl.c       (.../tags/gcc_4_8_2_release)
 
26665
+++ b/src/gcc/print-rtl.c       (.../branches/gcc-4_8-branch)
 
26666
@@ -582,6 +582,8 @@
 
26667
 
 
26668
       if (MEM_EXPR (in_rtx))
 
26669
        print_mem_expr (outfile, MEM_EXPR (in_rtx));
 
26670
+      else
 
26671
+       fputc (' ', outfile);
 
26672
 
 
26673
       if (MEM_OFFSET_KNOWN_P (in_rtx))
 
26674
        fprintf (outfile, "+" HOST_WIDE_INT_PRINT_DEC, MEM_OFFSET (in_rtx));
 
26675
Index: gcc/tree-vectorizer.h
 
26676
===================================================================
 
26677
--- a/src/gcc/tree-vectorizer.h (.../tags/gcc_4_8_2_release)
 
26678
+++ b/src/gcc/tree-vectorizer.h (.../branches/gcc-4_8-branch)
 
26679
@@ -542,6 +542,10 @@
 
26680
      is 1.  */
 
26681
   unsigned int gap;
 
26682
 
 
26683
+  /* The minimum negative dependence distance this stmt participates in
 
26684
+     or zero if none.  */
 
26685
+  unsigned int min_neg_dist;
 
26686
+
 
26687
   /* Not all stmts in the loop need to be vectorized. e.g, the increment
 
26688
      of the loop induction variable and computation of array indexes. relevant
 
26689
      indicates whether the stmt needs to be vectorized.  */
 
26690
@@ -593,6 +597,7 @@
 
26691
 #define STMT_VINFO_GROUP_READ_WRITE_DEPENDENCE(S)  (S)->read_write_dep
 
26692
 #define STMT_VINFO_GROUPED_ACCESS(S)      ((S)->first_element != NULL && (S)->data_ref_info)
 
26693
 #define STMT_VINFO_LOOP_PHI_EVOLUTION_PART(S) (S)->loop_phi_evolution_part
 
26694
+#define STMT_VINFO_MIN_NEG_DIST(S)     (S)->min_neg_dist
 
26695
 
 
26696
 #define GROUP_FIRST_ELEMENT(S)          (S)->first_element
 
26697
 #define GROUP_NEXT_ELEMENT(S)           (S)->next_element
 
26698
Index: gcc/sdbout.c
 
26699
===================================================================
 
26700
--- a/src/gcc/sdbout.c  (.../tags/gcc_4_8_2_release)
 
26701
+++ b/src/gcc/sdbout.c  (.../branches/gcc-4_8-branch)
 
26702
@@ -1226,7 +1226,10 @@
 
26703
 sdbout_parms (tree parms)
 
26704
 {
 
26705
   for (; parms; parms = TREE_CHAIN (parms))
 
26706
-    if (DECL_NAME (parms))
 
26707
+    if (DECL_NAME (parms)
 
26708
+       && TREE_TYPE (parms) != error_mark_node
 
26709
+       && DECL_RTL_SET_P (parms)
 
26710
+       && DECL_INCOMING_RTL (parms))
 
26711
       {
 
26712
        int current_sym_value = 0;
 
26713
        const char *name = IDENTIFIER_POINTER (DECL_NAME (parms));
 
26714
@@ -1358,7 +1361,10 @@
 
26715
 sdbout_reg_parms (tree parms)
 
26716
 {
 
26717
   for (; parms; parms = TREE_CHAIN (parms))
 
26718
-    if (DECL_NAME (parms))
 
26719
+    if (DECL_NAME (parms)
 
26720
+        && TREE_TYPE (parms) != error_mark_node
 
26721
+        && DECL_RTL_SET_P (parms)
 
26722
+        && DECL_INCOMING_RTL (parms))
 
26723
       {
 
26724
        const char *name = IDENTIFIER_POINTER (DECL_NAME (parms));
 
26725
 
 
26726
Index: gcc/ipa-split.c
 
26727
===================================================================
 
26728
--- a/src/gcc/ipa-split.c       (.../tags/gcc_4_8_2_release)
 
26729
+++ b/src/gcc/ipa-split.c       (.../branches/gcc-4_8-branch)
 
26730
@@ -136,7 +136,7 @@
 
26731
    variable, check it if it is present in bitmap passed via DATA.  */
 
26732
 
 
26733
 static bool
 
26734
-test_nonssa_use (gimple stmt ATTRIBUTE_UNUSED, tree t, void *data)
 
26735
+test_nonssa_use (gimple, tree t, tree, void *data)
 
26736
 {
 
26737
   t = get_base_address (t);
 
26738
 
 
26739
@@ -229,7 +229,7 @@
 
26740
            }
 
26741
          if (gimple_code (stmt) == GIMPLE_LABEL
 
26742
              && test_nonssa_use (stmt, gimple_label_label (stmt),
 
26743
-                                 non_ssa_vars))
 
26744
+                                 NULL_TREE, non_ssa_vars))
 
26745
          {
 
26746
            ok = false;
 
26747
            goto done;
 
26748
@@ -258,7 +258,7 @@
 
26749
              if (virtual_operand_p (gimple_phi_result (stmt)))
 
26750
                continue;
 
26751
              if (TREE_CODE (op) != SSA_NAME
 
26752
-                 && test_nonssa_use (stmt, op, non_ssa_vars))
 
26753
+                 && test_nonssa_use (stmt, op, op, non_ssa_vars))
 
26754
                {
 
26755
                  ok = false;
 
26756
                  goto done;
 
26757
@@ -670,7 +670,7 @@
 
26758
    Return true when access to T prevents splitting the function.  */
 
26759
 
 
26760
 static bool
 
26761
-mark_nonssa_use (gimple stmt ATTRIBUTE_UNUSED, tree t, void *data)
 
26762
+mark_nonssa_use (gimple, tree t, tree, void *data)
 
26763
 {
 
26764
   t = get_base_address (t);
 
26765
 
 
26766
@@ -830,7 +830,7 @@
 
26767
            if (TREE_CODE (op) == SSA_NAME)
 
26768
              bitmap_set_bit (used_ssa_names, SSA_NAME_VERSION (op));
 
26769
            else
 
26770
-             can_split &= !mark_nonssa_use (stmt, op, non_ssa_vars);
 
26771
+             can_split &= !mark_nonssa_use (stmt, op, op, non_ssa_vars);
 
26772
          }
 
26773
       }
 
26774
   return can_split;
 
26775
Index: gcc/alias.c
 
26776
===================================================================
 
26777
--- a/src/gcc/alias.c   (.../tags/gcc_4_8_2_release)
 
26778
+++ b/src/gcc/alias.c   (.../branches/gcc-4_8-branch)
 
26779
@@ -156,7 +156,9 @@
 
26780
 static alias_set_entry get_alias_set_entry (alias_set_type);
 
26781
 static bool nonoverlapping_component_refs_p (const_rtx, const_rtx);
 
26782
 static tree decl_for_component_ref (tree);
 
26783
-static int write_dependence_p (const_rtx, const_rtx, int);
 
26784
+static int write_dependence_p (const_rtx,
 
26785
+                                     const_rtx, enum machine_mode, rtx,
 
26786
+                                                            bool, bool, bool);
 
26787
 
 
26788
 static void memory_modified_1 (rtx, const_rtx, void *);
 
26789
 
 
26790
@@ -2558,15 +2560,24 @@
 
26791
 }
 
26792
 
 
26793
 /* Returns nonzero if a write to X might alias a previous read from
 
26794
-   (or, if WRITEP is nonzero, a write to) MEM.  */
 
26795
+   (or, if WRITEP is true, a write to) MEM.
 
26796
+   If X_CANONCALIZED is true, then X_ADDR is the canonicalized address of X,
 
26797
+   and X_MODE the mode for that access.
 
26798
+   If MEM_CANONICALIZED is true, MEM is canonicalized.  */
 
26799
 
 
26800
 static int
 
26801
-write_dependence_p (const_rtx mem, const_rtx x, int writep)
 
26802
+write_dependence_p (const_rtx mem,
 
26803
+                                  const_rtx x, enum machine_mode x_mode, rtx x_addr,
 
26804
+                                                bool mem_canonicalized, bool x_canonicalized, bool writep)
 
26805
 {
 
26806
-  rtx x_addr, mem_addr;
 
26807
+  rtx mem_addr;
 
26808
   rtx base;
 
26809
   int ret;
 
26810
 
 
26811
+  gcc_checking_assert (x_canonicalized
 
26812
+                             ? (x_addr != NULL_RTX && x_mode != VOIDmode)
 
26813
+                                      : (x_addr == NULL_RTX && x_mode == VOIDmode));
 
26814
+
 
26815
   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
 
26816
     return 1;
 
26817
 
 
26818
@@ -2590,17 +2601,21 @@
 
26819
   if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
 
26820
     return 1;
 
26821
 
 
26822
-  x_addr = XEXP (x, 0);
 
26823
   mem_addr = XEXP (mem, 0);
 
26824
-  if (!((GET_CODE (x_addr) == VALUE
 
26825
-        && GET_CODE (mem_addr) != VALUE
 
26826
-        && reg_mentioned_p (x_addr, mem_addr))
 
26827
-       || (GET_CODE (x_addr) != VALUE
 
26828
-           && GET_CODE (mem_addr) == VALUE
 
26829
-           && reg_mentioned_p (mem_addr, x_addr))))
 
26830
+  if (!x_addr)
 
26831
     {
 
26832
-      x_addr = get_addr (x_addr);
 
26833
-      mem_addr = get_addr (mem_addr);
 
26834
+      x_addr = XEXP (x, 0);
 
26835
+      if (!((GET_CODE (x_addr) == VALUE
 
26836
+            && GET_CODE (mem_addr) != VALUE
 
26837
+            && reg_mentioned_p (x_addr, mem_addr))
 
26838
+           || (GET_CODE (x_addr) != VALUE
 
26839
+               && GET_CODE (mem_addr) == VALUE
 
26840
+               && reg_mentioned_p (mem_addr, x_addr))))
 
26841
+       {
 
26842
+         x_addr = get_addr (x_addr);
 
26843
+         if (!mem_canonicalized)
 
26844
+           mem_addr = get_addr (mem_addr);
 
26845
+       }
 
26846
     }
 
26847
 
 
26848
   if (! writep)
 
26849
@@ -2616,11 +2631,16 @@
 
26850
                          GET_MODE (mem)))
 
26851
     return 0;
 
26852
 
 
26853
-  x_addr = canon_rtx (x_addr);
 
26854
-  mem_addr = canon_rtx (mem_addr);
 
26855
+  if (!x_canonicalized)
 
26856
+    {
 
26857
+      x_addr = canon_rtx (x_addr);
 
26858
+      x_mode = GET_MODE (x);
 
26859
+    }
 
26860
+  if (!mem_canonicalized)
 
26861
+    mem_addr = canon_rtx (mem_addr);
 
26862
 
 
26863
   if ((ret = memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
 
26864
-                                SIZE_FOR_MODE (x), x_addr, 0)) != -1)
 
26865
+                                GET_MODE_SIZE (x_mode), x_addr, 0)) != -1)
 
26866
     return ret;
 
26867
 
 
26868
   if (nonoverlapping_memrefs_p (x, mem, false))
 
26869
@@ -2634,15 +2654,33 @@
 
26870
 int
 
26871
 anti_dependence (const_rtx mem, const_rtx x)
 
26872
 {
 
26873
-  return write_dependence_p (mem, x, /*writep=*/0);
 
26874
+  return write_dependence_p (mem, x, VOIDmode, NULL_RTX,
 
26875
+                                 /*mem_canonicalized=*/false,
 
26876
+                                                    /*x_canonicalized*/false, /*writep=*/false);
 
26877
 }
 
26878
 
 
26879
+/* Likewise, but we already have a canonicalized MEM, and X_ADDR for X.
 
26880
+   Also, consider X in X_MODE (which might be from an enclosing
 
26881
+   STRICT_LOW_PART / ZERO_EXTRACT).
 
26882
+   If MEM_CANONICALIZED is true, MEM is canonicalized.  */
 
26883
+
 
26884
+int
 
26885
+canon_anti_dependence (const_rtx mem, bool mem_canonicalized,
 
26886
+                                        const_rtx x, enum machine_mode x_mode, rtx x_addr)
 
26887
+{
 
26888
+  return write_dependence_p (mem, x, x_mode, x_addr,
 
26889
+                                 mem_canonicalized, /*x_canonicalized=*/true,
 
26890
+                                                            /*writep=*/false);
 
26891
+}
 
26892
+
 
26893
 /* Output dependence: X is written after store in MEM takes place.  */
 
26894
 
 
26895
 int
 
26896
 output_dependence (const_rtx mem, const_rtx x)
 
26897
 {
 
26898
-  return write_dependence_p (mem, x, /*writep=*/1);
 
26899
+  return write_dependence_p (mem, x, VOIDmode, NULL_RTX,
 
26900
+                                 /*mem_canonicalized=*/false,
 
26901
+                                                    /*x_canonicalized*/false, /*writep=*/true);
 
26902
 }
 
26903
 
 
26904
 
 
26905
@@ -2871,17 +2909,14 @@
 
26906
       /* Wipe the reg_seen array clean.  */
 
26907
       bitmap_clear (reg_seen);
 
26908
 
 
26909
-      /* Mark all hard registers which may contain an address.
 
26910
-        The stack, frame and argument pointers may contain an address.
 
26911
-        An argument register which can hold a Pmode value may contain
 
26912
-        an address even if it is not in BASE_REGS.
 
26913
+      /* Initialize the alias information for this pass.  */
 
26914
+      for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
 
26915
+       if (static_reg_base_value[i])
 
26916
+         {
 
26917
+           new_reg_base_value[i] = static_reg_base_value[i];
 
26918
+           bitmap_set_bit (reg_seen, i);
 
26919
+         }
 
26920
 
 
26921
-        The address expression is VOIDmode for an argument and
 
26922
-        Pmode for other registers.  */
 
26923
-
 
26924
-      memcpy (new_reg_base_value, static_reg_base_value,
 
26925
-             FIRST_PSEUDO_REGISTER * sizeof (rtx));
 
26926
-
 
26927
       /* Walk the insns adding values to the new_reg_base_value array.  */
 
26928
       for (i = 0; i < rpo_cnt; i++)
 
26929
        {
 
26930
Index: gcc/tree-vect-loop.c
 
26931
===================================================================
 
26932
--- a/src/gcc/tree-vect-loop.c  (.../tags/gcc_4_8_2_release)
 
26933
+++ b/src/gcc/tree-vect-loop.c  (.../branches/gcc-4_8-branch)
 
26934
@@ -1537,7 +1537,7 @@
 
26935
 
 
26936
   if (!LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo)
 
26937
       || LOOP_VINFO_INT_NITERS (loop_vinfo) % vectorization_factor != 0
 
26938
-      || LOOP_PEELING_FOR_ALIGNMENT (loop_vinfo))
 
26939
+      || LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo))
 
26940
     {
 
26941
       if (dump_enabled_p ())
 
26942
         dump_printf_loc (MSG_NOTE, vect_location, "epilog loop required.");
 
26943
@@ -2097,6 +2097,12 @@
 
26944
               || (!check_reduction && flow_loop_nested_p (vect_loop, loop)));
 
26945
 
 
26946
   name = PHI_RESULT (phi);
 
26947
+  /* ???  If there are no uses of the PHI result the inner loop reduction
 
26948
+     won't be detected as possibly double-reduction by vectorizable_reduction
 
26949
+     because that tries to walk the PHI arg from the preheader edge which
 
26950
+     can be constant.  See PR60382.  */
 
26951
+  if (has_zero_uses (name))
 
26952
+    return NULL;
 
26953
   nloop_uses = 0;
 
26954
   FOR_EACH_IMM_USE_FAST (use_p, imm_iter, name)
 
26955
     {
 
26956
@@ -3115,7 +3121,6 @@
 
26957
   stmt_vec_info stmt_vinfo = vinfo_for_stmt (iv_phi);
 
26958
   loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_vinfo);
 
26959
   struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
 
26960
-  tree scalar_type;
 
26961
   tree vectype;
 
26962
   int nunits;
 
26963
   edge pe = loop_preheader_edge (loop);
 
26964
@@ -3122,7 +3127,6 @@
 
26965
   struct loop *iv_loop;
 
26966
   basic_block new_bb;
 
26967
   tree new_vec, vec_init, vec_step, t;
 
26968
-  tree access_fn;
 
26969
   tree new_var;
 
26970
   tree new_name;
 
26971
   gimple init_stmt, induction_phi, new_stmt;
 
26972
@@ -3130,7 +3134,6 @@
 
26973
   tree init_expr, step_expr;
 
26974
   int vf = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
 
26975
   int i;
 
26976
-  bool ok;
 
26977
   int ncopies;
 
26978
   tree expr;
 
26979
   stmt_vec_info phi_info = vinfo_for_stmt (iv_phi);
 
26980
@@ -3159,16 +3162,14 @@
 
26981
   latch_e = loop_latch_edge (iv_loop);
 
26982
   loop_arg = PHI_ARG_DEF_FROM_EDGE (iv_phi, latch_e);
 
26983
 
 
26984
-  access_fn = analyze_scalar_evolution (iv_loop, PHI_RESULT (iv_phi));
 
26985
-  gcc_assert (access_fn);
 
26986
-  STRIP_NOPS (access_fn);
 
26987
-  ok = vect_is_simple_iv_evolution (iv_loop->num, access_fn,
 
26988
-                                    &init_expr, &step_expr);
 
26989
-  gcc_assert (ok);
 
26990
+  step_expr = STMT_VINFO_LOOP_PHI_EVOLUTION_PART (phi_info);
 
26991
+  gcc_assert (step_expr != NULL_TREE);
 
26992
+
 
26993
   pe = loop_preheader_edge (iv_loop);
 
26994
+  init_expr = PHI_ARG_DEF_FROM_EDGE (iv_phi,
 
26995
+                                    loop_preheader_edge (iv_loop));
 
26996
 
 
26997
-  scalar_type = TREE_TYPE (init_expr);
 
26998
-  vectype = get_vectype_for_scalar_type (scalar_type);
 
26999
+  vectype = get_vectype_for_scalar_type (TREE_TYPE (init_expr));
 
27000
   resvectype = get_vectype_for_scalar_type (TREE_TYPE (PHI_RESULT (iv_phi)));
 
27001
   gcc_assert (vectype);
 
27002
   nunits = TYPE_VECTOR_SUBPARTS (vectype);
 
27003
@@ -3177,6 +3178,16 @@
 
27004
   gcc_assert (phi_info);
 
27005
   gcc_assert (ncopies >= 1);
 
27006
 
 
27007
+  /* Convert the step to the desired type.  */
 
27008
+  step_expr = force_gimple_operand (fold_convert (TREE_TYPE (vectype),
 
27009
+                                                 step_expr),
 
27010
+                                   &stmts, true, NULL_TREE);
 
27011
+  if (stmts)
 
27012
+    {
 
27013
+      new_bb = gsi_insert_seq_on_edge_immediate (pe, stmts);
 
27014
+      gcc_assert (!new_bb);
 
27015
+    }
 
27016
+
 
27017
   /* Find the first insertion point in the BB.  */
 
27018
   si = gsi_after_labels (bb);
 
27019
 
 
27020
@@ -3186,9 +3197,7 @@
 
27021
       /* iv_loop is nested in the loop to be vectorized.  init_expr had already
 
27022
         been created during vectorization of previous stmts.  We obtain it
 
27023
         from the STMT_VINFO_VEC_STMT of the defining stmt.  */
 
27024
-      tree iv_def = PHI_ARG_DEF_FROM_EDGE (iv_phi,
 
27025
-                                           loop_preheader_edge (iv_loop));
 
27026
-      vec_init = vect_get_vec_def_for_operand (iv_def, iv_phi, NULL);
 
27027
+      vec_init = vect_get_vec_def_for_operand (init_expr, iv_phi, NULL);
 
27028
       /* If the initial value is not of proper type, convert it.  */
 
27029
       if (!useless_type_conversion_p (vectype, TREE_TYPE (vec_init)))
 
27030
        {
 
27031
@@ -3211,8 +3220,11 @@
 
27032
 
 
27033
       /* iv_loop is the loop to be vectorized. Create:
 
27034
         vec_init = [X, X+S, X+2*S, X+3*S] (S = step_expr, X = init_expr)  */
 
27035
-      new_var = vect_get_new_vect_var (scalar_type, vect_scalar_var, "var_");
 
27036
-      new_name = force_gimple_operand (init_expr, &stmts, false, new_var);
 
27037
+      new_var = vect_get_new_vect_var (TREE_TYPE (vectype),
 
27038
+                                      vect_scalar_var, "var_");
 
27039
+      new_name = force_gimple_operand (fold_convert (TREE_TYPE (vectype),
 
27040
+                                                    init_expr),
 
27041
+                                      &stmts, false, new_var);
 
27042
       if (stmts)
 
27043
        {
 
27044
          new_bb = gsi_insert_seq_on_edge_immediate (pe, stmts);
 
27045
@@ -3224,9 +3236,7 @@
 
27046
       for (i = 1; i < nunits; i++)
 
27047
        {
 
27048
          /* Create: new_name_i = new_name + step_expr  */
 
27049
-         enum tree_code code = POINTER_TYPE_P (scalar_type)
 
27050
-                               ? POINTER_PLUS_EXPR : PLUS_EXPR;
 
27051
-         init_stmt = gimple_build_assign_with_ops (code, new_var,
 
27052
+         init_stmt = gimple_build_assign_with_ops (PLUS_EXPR, new_var,
 
27053
                                                    new_name, step_expr);
 
27054
          new_name = make_ssa_name (new_var, init_stmt);
 
27055
          gimple_assign_set_lhs (init_stmt, new_name);
 
27056
@@ -5564,8 +5574,9 @@
 
27057
              && !STMT_VINFO_LIVE_P (stmt_info))
 
27058
            continue;
 
27059
 
 
27060
-         if ((TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info))
 
27061
-               != (unsigned HOST_WIDE_INT) vectorization_factor)
 
27062
+         if (STMT_VINFO_VECTYPE (stmt_info)
 
27063
+             && (TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info))
 
27064
+                 != (unsigned HOST_WIDE_INT) vectorization_factor)
 
27065
              && dump_enabled_p ())
 
27066
            dump_printf_loc (MSG_NOTE, vect_location, "multiple-types.");
 
27067
 
 
27068
Index: gcc/ipa.c
 
27069
===================================================================
 
27070
--- a/src/gcc/ipa.c     (.../tags/gcc_4_8_2_release)
 
27071
+++ b/src/gcc/ipa.c     (.../branches/gcc-4_8-branch)
 
27072
@@ -359,6 +359,8 @@
 
27073
            {
 
27074
              if (file)
 
27075
                fprintf (file, " %s", cgraph_node_name (node));
 
27076
+             node->alias = false;
 
27077
+             node->thunk.thunk_p = false;
 
27078
              cgraph_node_remove_callees (node);
 
27079
              ipa_remove_all_references (&node->symbol.ref_list);
 
27080
              changed = true;
 
27081
Index: gcc/lra-coalesce.c
 
27082
===================================================================
 
27083
--- a/src/gcc/lra-coalesce.c    (.../tags/gcc_4_8_2_release)
 
27084
+++ b/src/gcc/lra-coalesce.c    (.../branches/gcc-4_8-branch)
 
27085
@@ -221,9 +221,12 @@
 
27086
   basic_block bb;
 
27087
   rtx mv, set, insn, next, *sorted_moves;
 
27088
   int i, mv_num, sregno, dregno;
 
27089
+  unsigned int regno;
 
27090
   int coalesced_moves;
 
27091
   int max_regno = max_reg_num ();
 
27092
   bitmap_head involved_insns_bitmap;
 
27093
+  bitmap_head result_pseudo_vals_bitmap;
 
27094
+  bitmap_iterator bi;
 
27095
 
 
27096
   timevar_push (TV_LRA_COALESCE);
 
27097
 
 
27098
@@ -318,6 +321,34 @@
 
27099
              }
 
27100
          }
 
27101
     }
 
27102
+  /* If we have situation after inheritance pass:
 
27103
+
 
27104
+     r1 <- ...  insn originally setting p1
 
27105
+     i1 <- r1   setting inheritance i1 from reload r1
 
27106
+       ...
 
27107
+     ... <- ... p2 ... dead p2
 
27108
+     ..
 
27109
+     p1 <- i1
 
27110
+     r2 <- i1
 
27111
+     ...<- ... r2 ...
 
27112
+
 
27113
+     And we are coalescing p1 and p2 using p1.  In this case i1 and p1
 
27114
+     should have different values, otherwise they can get the same
 
27115
+     hard reg and this is wrong for insn using p2 before coalescing.
 
27116
+     So invalidate such inheritance pseudo values.  */
 
27117
+  bitmap_initialize (&result_pseudo_vals_bitmap, &reg_obstack);
 
27118
+  EXECUTE_IF_SET_IN_BITMAP (&coalesced_pseudos_bitmap, 0, regno, bi)
 
27119
+    bitmap_set_bit (&result_pseudo_vals_bitmap,
 
27120
+                   lra_reg_info[first_coalesced_pseudo[regno]].val);
 
27121
+  EXECUTE_IF_SET_IN_BITMAP (&lra_inheritance_pseudos, 0, regno, bi)
 
27122
+    if (bitmap_bit_p (&result_pseudo_vals_bitmap, lra_reg_info[regno].val))
 
27123
+      {
 
27124
+       lra_set_regno_unique_value (regno);
 
27125
+       if (lra_dump_file != NULL)
 
27126
+         fprintf (lra_dump_file,
 
27127
+                  "     Make unique value for inheritance r%d\n", regno);
 
27128
+      }
 
27129
+  bitmap_clear (&result_pseudo_vals_bitmap);
 
27130
   bitmap_clear (&used_pseudos_bitmap);
 
27131
   bitmap_clear (&involved_insns_bitmap);
 
27132
   bitmap_clear (&coalesced_pseudos_bitmap);
 
27133
Index: gcc/tree-vect-data-refs.c
 
27134
===================================================================
 
27135
--- a/src/gcc/tree-vect-data-refs.c     (.../tags/gcc_4_8_2_release)
 
27136
+++ b/src/gcc/tree-vect-data-refs.c     (.../branches/gcc-4_8-branch)
 
27137
@@ -739,6 +739,13 @@
 
27138
          if (dump_enabled_p ())
 
27139
            dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
 
27140
                              "dependence distance negative.");
 
27141
+         /* Record a negative dependence distance to later limit the
 
27142
+            amount of stmt copying / unrolling we can perform.
 
27143
+            Only need to handle read-after-write dependence.  */
 
27144
+         if (DR_IS_READ (drb)
 
27145
+             && (STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) == 0
 
27146
+                 || STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) > (unsigned)dist))
 
27147
+           STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) = dist;
 
27148
          continue;
 
27149
        }
 
27150
 
 
27151
Index: gcc/gimplify.c
 
27152
===================================================================
 
27153
--- a/src/gcc/gimplify.c        (.../tags/gcc_4_8_2_release)
 
27154
+++ b/src/gcc/gimplify.c        (.../branches/gcc-4_8-branch)
 
27155
@@ -2060,6 +2060,9 @@
 
27156
 /* Nonlocal VLAs seen in the current function.  */
 
27157
 static struct pointer_set_t *nonlocal_vlas;
 
27158
 
 
27159
+/* The VAR_DECLs created for nonlocal VLAs for debug info purposes.  */
 
27160
+static tree nonlocal_vla_vars;
 
27161
+
 
27162
 /* Gimplify a VAR_DECL or PARM_DECL.  Return GS_OK if we expanded a
 
27163
    DECL_VALUE_EXPR, and it's worth re-examining things.  */
 
27164
 
 
27165
@@ -2106,14 +2109,13 @@
 
27166
            ctx = ctx->outer_context;
 
27167
          if (!ctx && !pointer_set_insert (nonlocal_vlas, decl))
 
27168
            {
 
27169
-             tree copy = copy_node (decl), block;
 
27170
+             tree copy = copy_node (decl);
 
27171
 
 
27172
              lang_hooks.dup_lang_specific_decl (copy);
 
27173
              SET_DECL_RTL (copy, 0);
 
27174
              TREE_USED (copy) = 1;
 
27175
-             block = DECL_INITIAL (current_function_decl);
 
27176
-             DECL_CHAIN (copy) = BLOCK_VARS (block);
 
27177
-             BLOCK_VARS (block) = copy;
 
27178
+             DECL_CHAIN (copy) = nonlocal_vla_vars;
 
27179
+             nonlocal_vla_vars = copy;
 
27180
              SET_DECL_VALUE_EXPR (copy, unshare_expr (value_expr));
 
27181
              DECL_HAS_VALUE_EXPR_P (copy) = 1;
 
27182
            }
 
27183
@@ -4369,7 +4371,7 @@
 
27184
           unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
 
27185
           tree index = bitsize_int (indexi);
 
27186
           if (offset / part_widthi
 
27187
-              <= TYPE_VECTOR_SUBPARTS (TREE_TYPE (addrtype)))
 
27188
+              < TYPE_VECTOR_SUBPARTS (TREE_TYPE (addrtype)))
 
27189
             return fold_build3 (BIT_FIELD_REF, type, TREE_OPERAND (addr, 0),
 
27190
                                 part_width, index);
 
27191
        }
 
27192
@@ -6131,7 +6133,7 @@
 
27193
    region's REDUCTION clause.  */
 
27194
 
 
27195
 static bool
 
27196
-omp_check_private (struct gimplify_omp_ctx *ctx, tree decl)
 
27197
+omp_check_private (struct gimplify_omp_ctx *ctx, tree decl, bool copyprivate)
 
27198
 {
 
27199
   splay_tree_node n;
 
27200
 
 
27201
@@ -6140,8 +6142,11 @@
 
27202
       ctx = ctx->outer_context;
 
27203
       if (ctx == NULL)
 
27204
        return !(is_global_var (decl)
 
27205
-                /* References might be private, but might be shared too.  */
 
27206
-                || lang_hooks.decls.omp_privatize_by_reference (decl));
 
27207
+                /* References might be private, but might be shared too,
 
27208
+                   when checking for copyprivate, assume they might be
 
27209
+                   private, otherwise assume they might be shared.  */
 
27210
+                || (!copyprivate
 
27211
+                    && lang_hooks.decls.omp_privatize_by_reference (decl)));
 
27212
 
 
27213
       n = splay_tree_lookup (ctx->variables, (splay_tree_key) decl);
 
27214
       if (n != NULL)
 
27215
@@ -6267,12 +6272,36 @@
 
27216
              remove = true;
 
27217
              break;
 
27218
            }
 
27219
+         if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_COPYPRIVATE
 
27220
+             && !remove
 
27221
+             && !omp_check_private (ctx, decl, true))
 
27222
+           {
 
27223
+             remove = true;
 
27224
+             if (is_global_var (decl))
 
27225
+               {
 
27226
+                 if (DECL_THREAD_LOCAL_P (decl))
 
27227
+                   remove = false;
 
27228
+                 else if (DECL_HAS_VALUE_EXPR_P (decl))
 
27229
+                   {
 
27230
+                     tree value = get_base_address (DECL_VALUE_EXPR (decl));
 
27231
+
 
27232
+                     if (value
 
27233
+                         && DECL_P (value)
 
27234
+                         && DECL_THREAD_LOCAL_P (value))
 
27235
+                       remove = false;
 
27236
+                   }
 
27237
+               }
 
27238
+             if (remove)
 
27239
+               error_at (OMP_CLAUSE_LOCATION (c),
 
27240
+                         "copyprivate variable %qE is not threadprivate"
 
27241
+                         " or private in outer context", DECL_NAME (decl));
 
27242
+           }
 
27243
        do_notice:
 
27244
          if (outer_ctx)
 
27245
            omp_notice_variable (outer_ctx, decl, true);
 
27246
          if (check_non_private
 
27247
              && region_type == ORT_WORKSHARE
 
27248
-             && omp_check_private (ctx, decl))
 
27249
+             && omp_check_private (ctx, decl, false))
 
27250
            {
 
27251
              error ("%s variable %qE is private in outer context",
 
27252
                     check_non_private, DECL_NAME (decl));
 
27253
@@ -8261,6 +8290,21 @@
 
27254
 
 
27255
   if (nonlocal_vlas)
 
27256
     {
 
27257
+      if (nonlocal_vla_vars)
 
27258
+       {
 
27259
+         /* tree-nested.c may later on call declare_vars (..., true);
 
27260
+            which relies on BLOCK_VARS chain to be the tail of the
 
27261
+            gimple_bind_vars chain.  Ensure we don't violate that
 
27262
+            assumption.  */
 
27263
+         if (gimple_bind_block (outer_bind)
 
27264
+             == DECL_INITIAL (current_function_decl))
 
27265
+           declare_vars (nonlocal_vla_vars, outer_bind, true);
 
27266
+         else
 
27267
+           BLOCK_VARS (DECL_INITIAL (current_function_decl))
 
27268
+             = chainon (BLOCK_VARS (DECL_INITIAL (current_function_decl)),
 
27269
+                        nonlocal_vla_vars);
 
27270
+         nonlocal_vla_vars = NULL_TREE;
 
27271
+       }
 
27272
       pointer_set_destroy (nonlocal_vlas);
 
27273
       nonlocal_vlas = NULL;
 
27274
     }
 
27275
Index: gcc/tree-dfa.c
 
27276
===================================================================
 
27277
--- a/src/gcc/tree-dfa.c        (.../tags/gcc_4_8_2_release)
 
27278
+++ b/src/gcc/tree-dfa.c        (.../branches/gcc-4_8-branch)
 
27279
@@ -386,7 +386,6 @@
 
27280
   double_int bit_offset = double_int_zero;
 
27281
   HOST_WIDE_INT hbit_offset;
 
27282
   bool seen_variable_array_ref = false;
 
27283
-  tree base_type;
 
27284
 
 
27285
   /* First get the final access size from just the outermost expression.  */
 
27286
   if (TREE_CODE (exp) == COMPONENT_REF)
 
27287
@@ -417,8 +416,6 @@
 
27288
      and find the ultimate containing object.  */
 
27289
   while (1)
 
27290
     {
 
27291
-      base_type = TREE_TYPE (exp);
 
27292
-
 
27293
       switch (TREE_CODE (exp))
 
27294
        {
 
27295
        case BIT_FIELD_REF:
 
27296
@@ -543,7 +540,38 @@
 
27297
        case VIEW_CONVERT_EXPR:
 
27298
          break;
 
27299
 
 
27300
+       case TARGET_MEM_REF:
 
27301
+         /* Via the variable index or index2 we can reach the
 
27302
+            whole object.  Still hand back the decl here.  */
 
27303
+         if (TREE_CODE (TMR_BASE (exp)) == ADDR_EXPR
 
27304
+             && (TMR_INDEX (exp) || TMR_INDEX2 (exp)))
 
27305
+           {
 
27306
+             exp = TREE_OPERAND (TMR_BASE (exp), 0);
 
27307
+             bit_offset = double_int_zero;
 
27308
+             maxsize = -1;
 
27309
+             goto done;
 
27310
+           }
 
27311
+         /* Fallthru.  */
 
27312
        case MEM_REF:
 
27313
+         /* We need to deal with variable arrays ending structures such as
 
27314
+            struct { int length; int a[1]; } x;           x.a[d]
 
27315
+            struct { struct { int a; int b; } a[1]; } x;  x.a[d].a
 
27316
+            struct { struct { int a[1]; } a[1]; } x;      x.a[0][d], x.a[d][0]
 
27317
+            struct { int len; union { int a[1]; struct X x; } u; } x; x.u.a[d]
 
27318
+            where we do not know maxsize for variable index accesses to
 
27319
+            the array.  The simplest way to conservatively deal with this
 
27320
+            is to punt in the case that offset + maxsize reaches the
 
27321
+            base type boundary.  This needs to include possible trailing
 
27322
+            padding that is there for alignment purposes.  */
 
27323
+         if (seen_variable_array_ref
 
27324
+             && maxsize != -1
 
27325
+             && (!bit_offset.fits_shwi ()
 
27326
+                 || !host_integerp (TYPE_SIZE (TREE_TYPE (exp)), 1)
 
27327
+                 || (bit_offset.to_shwi () + maxsize
 
27328
+                     == (HOST_WIDE_INT) TREE_INT_CST_LOW
 
27329
+                           (TYPE_SIZE (TREE_TYPE (exp))))))
 
27330
+           maxsize = -1;
 
27331
+
 
27332
          /* Hand back the decl for MEM[&decl, off].  */
 
27333
          if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR)
 
27334
            {
 
27335
@@ -565,37 +593,6 @@
 
27336
            }
 
27337
          goto done;
 
27338
 
 
27339
-       case TARGET_MEM_REF:
 
27340
-         /* Hand back the decl for MEM[&decl, off].  */
 
27341
-         if (TREE_CODE (TMR_BASE (exp)) == ADDR_EXPR)
 
27342
-           {
 
27343
-             /* Via the variable index or index2 we can reach the
 
27344
-                whole object.  */
 
27345
-             if (TMR_INDEX (exp) || TMR_INDEX2 (exp))
 
27346
-               {
 
27347
-                 exp = TREE_OPERAND (TMR_BASE (exp), 0);
 
27348
-                 bit_offset = double_int_zero;
 
27349
-                 maxsize = -1;
 
27350
-                 goto done;
 
27351
-               }
 
27352
-             if (integer_zerop (TMR_OFFSET (exp)))
 
27353
-               exp = TREE_OPERAND (TMR_BASE (exp), 0);
 
27354
-             else
 
27355
-               {
 
27356
-                 double_int off = mem_ref_offset (exp);
 
27357
-                 off = off.alshift (BITS_PER_UNIT == 8
 
27358
-                                    ? 3 : exact_log2 (BITS_PER_UNIT),
 
27359
-                                    HOST_BITS_PER_DOUBLE_INT);
 
27360
-                 off += bit_offset;
 
27361
-                 if (off.fits_shwi ())
 
27362
-                   {
 
27363
-                     bit_offset = off;
 
27364
-                     exp = TREE_OPERAND (TMR_BASE (exp), 0);
 
27365
-                   }
 
27366
-               }
 
27367
-           }
 
27368
-         goto done;
 
27369
-
 
27370
        default:
 
27371
          goto done;
 
27372
        }
 
27373
@@ -602,8 +599,18 @@
 
27374
 
 
27375
       exp = TREE_OPERAND (exp, 0);
 
27376
     }
 
27377
+
 
27378
+  /* We need to deal with variable arrays ending structures.  */
 
27379
+  if (seen_variable_array_ref
 
27380
+      && maxsize != -1
 
27381
+      && (!bit_offset.fits_shwi ()
 
27382
+         || !host_integerp (TYPE_SIZE (TREE_TYPE (exp)), 1)
 
27383
+         || (bit_offset.to_shwi () + maxsize
 
27384
+             == (HOST_WIDE_INT)
 
27385
+                  TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (exp))))))
 
27386
+    maxsize = -1;
 
27387
+
 
27388
  done:
 
27389
-
 
27390
   if (!bit_offset.fits_shwi ())
 
27391
     {
 
27392
       *poffset = 0;
 
27393
@@ -615,24 +622,6 @@
 
27394
 
 
27395
   hbit_offset = bit_offset.to_shwi ();
 
27396
 
 
27397
-  /* We need to deal with variable arrays ending structures such as
 
27398
-       struct { int length; int a[1]; } x;           x.a[d]
 
27399
-       struct { struct { int a; int b; } a[1]; } x;  x.a[d].a
 
27400
-       struct { struct { int a[1]; } a[1]; } x;      x.a[0][d], x.a[d][0]
 
27401
-       struct { int len; union { int a[1]; struct X x; } u; } x; x.u.a[d]
 
27402
-     where we do not know maxsize for variable index accesses to
 
27403
-     the array.  The simplest way to conservatively deal with this
 
27404
-     is to punt in the case that offset + maxsize reaches the
 
27405
-     base type boundary.  This needs to include possible trailing padding
 
27406
-     that is there for alignment purposes.  */
 
27407
-
 
27408
-  if (seen_variable_array_ref
 
27409
-      && maxsize != -1
 
27410
-      && (!host_integerp (TYPE_SIZE (base_type), 1)
 
27411
-         || (hbit_offset + maxsize
 
27412
-             == (signed) TREE_INT_CST_LOW (TYPE_SIZE (base_type)))))
 
27413
-    maxsize = -1;
 
27414
-
 
27415
   /* In case of a decl or constant base object we can do better.  */
 
27416
 
 
27417
   if (DECL_P (exp))
 
27418
Index: gcc/gimple-fold.c
 
27419
===================================================================
 
27420
--- a/src/gcc/gimple-fold.c     (.../tags/gcc_4_8_2_release)
 
27421
+++ b/src/gcc/gimple-fold.c     (.../branches/gcc-4_8-branch)
 
27422
@@ -178,7 +178,7 @@
 
27423
          /* Make sure we create a cgraph node for functions we'll reference.
 
27424
             They can be non-existent if the reference comes from an entry
 
27425
             of an external vtable for example.  */
 
27426
-         cgraph_get_create_node (base);
 
27427
+         cgraph_get_create_real_symbol_node (base);
 
27428
        }
 
27429
       /* Fixup types in global initializers.  */
 
27430
       if (TREE_TYPE (TREE_TYPE (cval)) != TREE_TYPE (TREE_OPERAND (cval, 0)))
 
27431
@@ -866,6 +866,7 @@
 
27432
       break;
 
27433
     case BUILT_IN_STRCPY:
 
27434
     case BUILT_IN_STRNCPY:
 
27435
+    case BUILT_IN_STRCAT:
 
27436
       arg_idx = 1;
 
27437
       type = 0;
 
27438
       break;
 
27439
@@ -941,6 +942,13 @@
 
27440
                                       val[1]);
 
27441
       break;
 
27442
 
 
27443
+    case BUILT_IN_STRCAT:
 
27444
+      if (val[1] && is_gimple_val (val[1]) && nargs == 2)
 
27445
+       result = fold_builtin_strcat (loc, gimple_call_arg (stmt, 0),
 
27446
+                                     gimple_call_arg (stmt, 1),
 
27447
+                                     val[1]);
 
27448
+      break;
 
27449
+
 
27450
     case BUILT_IN_FPUTS:
 
27451
       if (nargs == 2)
 
27452
        result = fold_builtin_fputs (loc, gimple_call_arg (stmt, 0),
 
27453
Index: gcc/cfgexpand.c
 
27454
===================================================================
 
27455
--- a/src/gcc/cfgexpand.c       (.../tags/gcc_4_8_2_release)
 
27456
+++ b/src/gcc/cfgexpand.c       (.../branches/gcc-4_8-branch)
 
27457
@@ -331,7 +331,7 @@
 
27458
    enter its partition number into bitmap DATA.  */
 
27459
 
 
27460
 static bool
 
27461
-visit_op (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
 
27462
+visit_op (gimple, tree op, tree, void *data)
 
27463
 {
 
27464
   bitmap active = (bitmap)data;
 
27465
   op = get_base_address (op);
 
27466
@@ -351,7 +351,7 @@
 
27467
    from bitmap DATA.  */
 
27468
 
 
27469
 static bool
 
27470
-visit_conflict (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
 
27471
+visit_conflict (gimple, tree op, tree, void *data)
 
27472
 {
 
27473
   bitmap active = (bitmap)data;
 
27474
   op = get_base_address (op);
 
27475
@@ -385,7 +385,7 @@
 
27476
   edge e;
 
27477
   edge_iterator ei;
 
27478
   gimple_stmt_iterator gsi;
 
27479
-  bool (*visit)(gimple, tree, void *);
 
27480
+  walk_stmt_load_store_addr_fn visit;
 
27481
 
 
27482
   bitmap_clear (work);
 
27483
   FOR_EACH_EDGE (e, ei, bb->preds)
 
27484
@@ -4707,14 +4707,18 @@
 
27485
          if (e->insns.r)
 
27486
            {
 
27487
              rebuild_jump_labels_chain (e->insns.r);
 
27488
-             /* Avoid putting insns before parm_birth_insn.  */
 
27489
+             /* Put insns after parm birth, but before
 
27490
+                NOTE_INSNS_FUNCTION_BEG.  */
 
27491
              if (e->src == ENTRY_BLOCK_PTR
 
27492
-                 && single_succ_p (ENTRY_BLOCK_PTR)
 
27493
-                 && parm_birth_insn)
 
27494
+                 && single_succ_p (ENTRY_BLOCK_PTR))
 
27495
                {
 
27496
                  rtx insns = e->insns.r;
 
27497
                  e->insns.r = NULL_RTX;
 
27498
-                 emit_insn_after_noloc (insns, parm_birth_insn, e->dest);
 
27499
+                 if (NOTE_P (parm_birth_insn)
 
27500
+                     && NOTE_KIND (parm_birth_insn) == NOTE_INSN_FUNCTION_BEG)
 
27501
+                   emit_insn_before_noloc (insns, parm_birth_insn, e->dest);
 
27502
+                 else
 
27503
+                   emit_insn_after_noloc (insns, parm_birth_insn, e->dest);
 
27504
                }
 
27505
              else
 
27506
                commit_one_edge_insertion (e);
 
27507
Index: gcc/cselib.c
 
27508
===================================================================
 
27509
--- a/src/gcc/cselib.c  (.../tags/gcc_4_8_2_release)
 
27510
+++ b/src/gcc/cselib.c  (.../branches/gcc-4_8-branch)
 
27511
@@ -2260,8 +2260,8 @@
 
27512
              continue;
 
27513
            }
 
27514
          if (num_mems < PARAM_VALUE (PARAM_MAX_CSELIB_MEMORY_LOCATIONS)
 
27515
-             && ! canon_true_dependence (mem_rtx, GET_MODE (mem_rtx),
 
27516
-                                         mem_addr, x, NULL_RTX))
 
27517
+             && ! canon_anti_dependence (x, false, mem_rtx,
 
27518
+                                         GET_MODE (mem_rtx), mem_addr))
 
27519
            {
 
27520
              has_mem = true;
 
27521
              num_mems++;
 
27522
Index: gcc/tree-ssa-pre.c
 
27523
===================================================================
 
27524
--- a/src/gcc/tree-ssa-pre.c    (.../tags/gcc_4_8_2_release)
 
27525
+++ b/src/gcc/tree-ssa-pre.c    (.../branches/gcc-4_8-branch)
 
27526
@@ -3664,6 +3664,12 @@
 
27527
       if (dump_file && dump_flags & TDF_DETAILS)
 
27528
        fprintf (dump_file, "Starting insert iteration %d\n", num_iterations);
 
27529
       new_stuff = insert_aux (ENTRY_BLOCK_PTR);
 
27530
+
 
27531
+      /* Clear the NEW sets before the next iteration.  We have already
 
27532
+         fully propagated its contents.  */
 
27533
+      if (new_stuff)
 
27534
+       FOR_ALL_BB (bb)
 
27535
+         bitmap_set_free (NEW_SETS (bb));
 
27536
     }
 
27537
   statistics_histogram_event (cfun, "insert iterations", num_iterations);
 
27538
 }
 
27539
Index: gcc/cfgcleanup.c
 
27540
===================================================================
 
27541
--- a/src/gcc/cfgcleanup.c      (.../tags/gcc_4_8_2_release)
 
27542
+++ b/src/gcc/cfgcleanup.c      (.../branches/gcc-4_8-branch)
 
27543
@@ -1293,7 +1293,6 @@
 
27544
 {
 
27545
   rtx i1, i2, last1, last2, afterlast1, afterlast2;
 
27546
   int ninsns = 0;
 
27547
-  rtx p1;
 
27548
   enum replace_direction dir, last_dir, afterlast_dir;
 
27549
   bool follow_fallthru, did_fallthru;
 
27550
 
 
27551
@@ -1321,8 +1320,9 @@
 
27552
       || (returnjump_p (i2) && !side_effects_p (PATTERN (i2))))
 
27553
     {
 
27554
       last2 = i2;
 
27555
-      /* Count everything except for unconditional jump as insn.  */
 
27556
-      if (!simplejump_p (i2) && !returnjump_p (i2) && last1)
 
27557
+      /* Count everything except for unconditional jump as insn.
 
27558
+        Don't count any jumps if dir_p is NULL.  */
 
27559
+      if (!simplejump_p (i2) && !returnjump_p (i2) && last1 && dir_p)
 
27560
        ninsns++;
 
27561
       i2 = PREV_INSN (i2);
 
27562
     }
 
27563
@@ -1373,8 +1373,8 @@
 
27564
          last1 = i1, last2 = i2;
 
27565
          afterlast_dir = last_dir;
 
27566
          last_dir = dir;
 
27567
-         p1 = PATTERN (i1);
 
27568
-         if (!(GET_CODE (p1) == USE || GET_CODE (p1) == CLOBBER))
 
27569
+         if (GET_CODE (PATTERN (i1)) != USE
 
27570
+             && GET_CODE (PATTERN (i1)) != CLOBBER)
 
27571
            ninsns++;
 
27572
        }
 
27573
 
 
27574
@@ -1420,7 +1420,8 @@
 
27575
 /* Like flow_find_cross_jump, except start looking for a matching sequence from
 
27576
    the head of the two blocks.  Do not include jumps at the end.
 
27577
    If STOP_AFTER is nonzero, stop after finding that many matching
 
27578
-   instructions.  */
 
27579
+   instructions.  If STOP_AFTER is zero, count all INSN_P insns, if it is
 
27580
+   non-zero, only count active insns.  */
 
27581
 
 
27582
 int
 
27583
 flow_find_head_matching_sequence (basic_block bb1, basic_block bb2, rtx *f1,
 
27584
@@ -1492,7 +1493,10 @@
 
27585
 
 
27586
          beforelast1 = last1, beforelast2 = last2;
 
27587
          last1 = i1, last2 = i2;
 
27588
-         ninsns++;
 
27589
+         if (!stop_after
 
27590
+             || (GET_CODE (PATTERN (i1)) != USE
 
27591
+                 && GET_CODE (PATTERN (i1)) != CLOBBER))
 
27592
+           ninsns++;
 
27593
        }
 
27594
 
 
27595
       if (i1 == BB_END (bb1) || i2 == BB_END (bb2)
 
27596
Index: gcc/simplify-rtx.c
 
27597
===================================================================
 
27598
--- a/src/gcc/simplify-rtx.c    (.../tags/gcc_4_8_2_release)
 
27599
+++ b/src/gcc/simplify-rtx.c    (.../branches/gcc-4_8-branch)
 
27600
@@ -639,11 +639,16 @@
 
27601
                                   XEXP (op, 0), origmode);
 
27602
     }
 
27603
 
 
27604
-  /* Simplify (truncate:SI (op:DI (x:DI) (y:DI)))
 
27605
-     to (op:SI (truncate:SI (x:DI)) (truncate:SI (x:DI))).  */
 
27606
-  if (GET_CODE (op) == PLUS
 
27607
-      || GET_CODE (op) == MINUS
 
27608
-      || GET_CODE (op) == MULT)
 
27609
+  /* If the machine can perform operations in the truncated mode, distribute
 
27610
+     the truncation, i.e. simplify (truncate:QI (op:SI (x:SI) (y:SI))) into
 
27611
+     (op:QI (truncate:QI (x:SI)) (truncate:QI (y:SI))).  */
 
27612
+  if (1
 
27613
+#ifdef WORD_REGISTER_OPERATIONS
 
27614
+      && precision >= BITS_PER_WORD
 
27615
+#endif
 
27616
+      && (GET_CODE (op) == PLUS
 
27617
+         || GET_CODE (op) == MINUS
 
27618
+         || GET_CODE (op) == MULT))
 
27619
     {
 
27620
       rtx op0 = simplify_gen_unary (TRUNCATE, mode, XEXP (op, 0), op_mode);
 
27621
       if (op0)
 
27622
Index: gcc/tree-ssa-live.c
 
27623
===================================================================
 
27624
--- a/src/gcc/tree-ssa-live.c   (.../tags/gcc_4_8_2_release)
 
27625
+++ b/src/gcc/tree-ssa-live.c   (.../branches/gcc-4_8-branch)
 
27626
@@ -394,7 +394,8 @@
 
27627
     {
 
27628
       /* When a global var becomes used for the first time also walk its
 
27629
          initializer (non global ones don't have any).  */
 
27630
-      if (set_is_used (t) && is_global_var (t))
 
27631
+      if (set_is_used (t) && is_global_var (t)
 
27632
+         && DECL_CONTEXT (t) == current_function_decl)
 
27633
        mark_all_vars_used (&DECL_INITIAL (t));
 
27634
     }
 
27635
   /* remove_unused_scope_block_p requires information about labels
 
27636
Index: gcc/tree-sra.c
 
27637
===================================================================
 
27638
--- a/src/gcc/tree-sra.c        (.../tags/gcc_4_8_2_release)
 
27639
+++ b/src/gcc/tree-sra.c        (.../branches/gcc-4_8-branch)
 
27640
@@ -1161,8 +1161,7 @@
 
27641
    GIMPLE_ASM operands with memory constrains which cannot be scalarized.  */
 
27642
 
 
27643
 static bool
 
27644
-asm_visit_addr (gimple stmt ATTRIBUTE_UNUSED, tree op,
 
27645
-               void *data ATTRIBUTE_UNUSED)
 
27646
+asm_visit_addr (gimple, tree op, tree, void *)
 
27647
 {
 
27648
   op = get_base_address (op);
 
27649
   if (op
 
27650
@@ -2890,6 +2889,10 @@
 
27651
                                                  lacc);
 
27652
              else
 
27653
                drhs = NULL_TREE;
 
27654
+             if (drhs
 
27655
+                 && !useless_type_conversion_p (lacc->type, TREE_TYPE (drhs)))
 
27656
+               drhs = fold_build1_loc (loc, VIEW_CONVERT_EXPR,
 
27657
+                                       lacc->type, drhs);
 
27658
              ds = gimple_build_debug_bind (get_access_replacement (lacc),
 
27659
                                            drhs, gsi_stmt (*old_gsi));
 
27660
              gsi_insert_after (new_gsi, ds, GSI_NEW_STMT);
 
27661
@@ -4868,6 +4871,14 @@
 
27662
       return false;
 
27663
     }
 
27664
 
 
27665
+  if (!opt_for_fn (node->symbol.decl, optimize)
 
27666
+      || !opt_for_fn (node->symbol.decl, flag_ipa_sra))
 
27667
+    {
 
27668
+      if (dump_file)
 
27669
+       fprintf (dump_file, "Function not optimized.\n");
 
27670
+      return false;
 
27671
+    }
 
27672
+
 
27673
   if (DECL_VIRTUAL_P (current_function_decl))
 
27674
     {
 
27675
       if (dump_file)
 
27676
Index: gcc/tree-predcom.c
 
27677
===================================================================
 
27678
--- a/src/gcc/tree-predcom.c    (.../tags/gcc_4_8_2_release)
 
27679
+++ b/src/gcc/tree-predcom.c    (.../branches/gcc-4_8-branch)
 
27680
@@ -1323,90 +1323,43 @@
 
27681
   gsi_insert_after (&bsi, new_stmt, GSI_NEW_STMT);
 
27682
 }
 
27683
 
 
27684
-/* Returns the reference to the address of REF in the ITER-th iteration of
 
27685
-   LOOP, or NULL if we fail to determine it (ITER may be negative).  We
 
27686
-   try to preserve the original shape of the reference (not rewrite it
 
27687
-   as an indirect ref to the address), to make tree_could_trap_p in
 
27688
-   prepare_initializers_chain return false more often.  */
 
27689
+/* Returns a memory reference to DR in the ITER-th iteration of
 
27690
+   the loop it was analyzed in.  Append init stmts to STMTS.  */
 
27691
 
 
27692
-static tree
 
27693
-ref_at_iteration (struct loop *loop, tree ref, int iter)
 
27694
+static tree 
 
27695
+ref_at_iteration (data_reference_p dr, int iter, gimple_seq *stmts)
 
27696
 {
 
27697
-  tree idx, *idx_p, type, val, op0 = NULL_TREE, ret;
 
27698
-  affine_iv iv;
 
27699
-  bool ok;
 
27700
-
 
27701
-  if (handled_component_p (ref))
 
27702
+  tree off = DR_OFFSET (dr);
 
27703
+  tree coff = DR_INIT (dr);
 
27704
+  if (iter == 0)
 
27705
+    ;
 
27706
+  else if (TREE_CODE (DR_STEP (dr)) == INTEGER_CST)
 
27707
+    coff = size_binop (PLUS_EXPR, coff,
 
27708
+                      size_binop (MULT_EXPR, DR_STEP (dr), ssize_int (iter)));
 
27709
+  else
 
27710
+    off = size_binop (PLUS_EXPR, off,
 
27711
+                     size_binop (MULT_EXPR, DR_STEP (dr), ssize_int (iter)));
 
27712
+  tree addr = fold_build_pointer_plus (DR_BASE_ADDRESS (dr), off);
 
27713
+  addr = force_gimple_operand_1 (addr, stmts, is_gimple_mem_ref_addr,
 
27714
+                                NULL_TREE);
 
27715
+  tree alias_ptr = fold_convert (reference_alias_ptr_type (DR_REF (dr)), coff);
 
27716
+  /* While data-ref analysis punts on bit offsets it still handles
 
27717
+     bitfield accesses at byte boundaries.  Cope with that.  Note that
 
27718
+     we cannot simply re-apply the outer COMPONENT_REF because the
 
27719
+     byte-granular portion of it is already applied via DR_INIT and
 
27720
+     DR_OFFSET, so simply build a BIT_FIELD_REF knowing that the bits
 
27721
+     start at offset zero.  */
 
27722
+  if (TREE_CODE (DR_REF (dr)) == COMPONENT_REF
 
27723
+      && DECL_BIT_FIELD (TREE_OPERAND (DR_REF (dr), 1)))
 
27724
     {
 
27725
-      op0 = ref_at_iteration (loop, TREE_OPERAND (ref, 0), iter);
 
27726
-      if (!op0)
 
27727
-       return NULL_TREE;
 
27728
+      tree field = TREE_OPERAND (DR_REF (dr), 1);
 
27729
+      return build3 (BIT_FIELD_REF, TREE_TYPE (DR_REF (dr)),
 
27730
+                    build2 (MEM_REF, DECL_BIT_FIELD_TYPE (field),
 
27731
+                            addr, alias_ptr),
 
27732
+                    DECL_SIZE (field), bitsize_zero_node);
 
27733
     }
 
27734
-  else if (!INDIRECT_REF_P (ref)
 
27735
-          && TREE_CODE (ref) != MEM_REF)
 
27736
-    return unshare_expr (ref);
 
27737
-
 
27738
-  if (TREE_CODE (ref) == MEM_REF)
 
27739
-    {
 
27740
-      ret = unshare_expr (ref);
 
27741
-      idx = TREE_OPERAND (ref, 0);
 
27742
-      idx_p = &TREE_OPERAND (ret, 0);
 
27743
-    }
 
27744
-  else if (TREE_CODE (ref) == COMPONENT_REF)
 
27745
-    {
 
27746
-      /* Check that the offset is loop invariant.  */
 
27747
-      if (TREE_OPERAND (ref, 2)
 
27748
-         && !expr_invariant_in_loop_p (loop, TREE_OPERAND (ref, 2)))
 
27749
-       return NULL_TREE;
 
27750
-
 
27751
-      return build3 (COMPONENT_REF, TREE_TYPE (ref), op0,
 
27752
-                    unshare_expr (TREE_OPERAND (ref, 1)),
 
27753
-                    unshare_expr (TREE_OPERAND (ref, 2)));
 
27754
-    }
 
27755
-  else if (TREE_CODE (ref) == ARRAY_REF)
 
27756
-    {
 
27757
-      /* Check that the lower bound and the step are loop invariant.  */
 
27758
-      if (TREE_OPERAND (ref, 2)
 
27759
-         && !expr_invariant_in_loop_p (loop, TREE_OPERAND (ref, 2)))
 
27760
-       return NULL_TREE;
 
27761
-      if (TREE_OPERAND (ref, 3)
 
27762
-         && !expr_invariant_in_loop_p (loop, TREE_OPERAND (ref, 3)))
 
27763
-       return NULL_TREE;
 
27764
-
 
27765
-      ret = build4 (ARRAY_REF, TREE_TYPE (ref), op0, NULL_TREE,
 
27766
-                   unshare_expr (TREE_OPERAND (ref, 2)),
 
27767
-                   unshare_expr (TREE_OPERAND (ref, 3)));
 
27768
-      idx = TREE_OPERAND (ref, 1);
 
27769
-      idx_p = &TREE_OPERAND (ret, 1);
 
27770
-    }
 
27771
   else
 
27772
-    return NULL_TREE;
 
27773
-
 
27774
-  ok = simple_iv (loop, loop, idx, &iv, true);
 
27775
-  if (!ok)
 
27776
-    return NULL_TREE;
 
27777
-  iv.base = expand_simple_operations (iv.base);
 
27778
-  if (integer_zerop (iv.step))
 
27779
-    *idx_p = unshare_expr (iv.base);
 
27780
-  else
 
27781
-    {
 
27782
-      type = TREE_TYPE (iv.base);
 
27783
-      if (POINTER_TYPE_P (type))
 
27784
-       {
 
27785
-         val = fold_build2 (MULT_EXPR, sizetype, iv.step,
 
27786
-                            size_int (iter));
 
27787
-         val = fold_build_pointer_plus (iv.base, val);
 
27788
-       }
 
27789
-      else
 
27790
-       {
 
27791
-         val = fold_build2 (MULT_EXPR, type, iv.step,
 
27792
-                            build_int_cst_type (type, iter));
 
27793
-         val = fold_build2 (PLUS_EXPR, type, iv.base, val);
 
27794
-       }
 
27795
-      *idx_p = unshare_expr (val);
 
27796
-    }
 
27797
-
 
27798
-  return ret;
 
27799
+    return fold_build2 (MEM_REF, TREE_TYPE (DR_REF (dr)), addr, alias_ptr);
 
27800
 }
 
27801
 
 
27802
 /* Get the initialization expression for the INDEX-th temporary variable
 
27803
@@ -2068,7 +2021,11 @@
 
27804
 
 
27805
   stmt = find_common_use_stmt (&name1, &name2);
 
27806
 
 
27807
-  if (!stmt)
 
27808
+  if (!stmt
 
27809
+      /* A simple post-dominance check - make sure the combination
 
27810
+         is executed under the same condition as the references.  */
 
27811
+      || (gimple_bb (stmt) != gimple_bb (r1->stmt)
 
27812
+         && gimple_bb (stmt) != gimple_bb (r2->stmt)))
 
27813
     return false;
 
27814
 
 
27815
   acode = gimple_assign_rhs_code (stmt);
 
27816
@@ -2365,14 +2322,10 @@
 
27817
       if (chain->inits[i] != NULL_TREE)
 
27818
        continue;
 
27819
 
 
27820
-      init = ref_at_iteration (loop, DR_REF (dr), (int) i - n);
 
27821
-      if (!init)
 
27822
-       return false;
 
27823
-
 
27824
+      init = ref_at_iteration (dr, (int) i - n, &stmts);
 
27825
       if (!chain->all_always_accessed && tree_could_trap_p (init))
 
27826
        return false;
 
27827
 
 
27828
-      init = force_gimple_operand (init, &stmts, false, NULL_TREE);
 
27829
       if (stmts)
 
27830
        gsi_insert_seq_on_edge_immediate (entry, stmts);
 
27831
 
 
27832
@@ -2449,6 +2402,7 @@
 
27833
   if (!components)
 
27834
     {
 
27835
       free_data_refs (datarefs);
 
27836
+      free_affine_expand_cache (&name_expansions);
 
27837
       return false;
 
27838
     }
 
27839
 
 
27840
Index: gcc/loop-iv.c
 
27841
===================================================================
 
27842
--- a/src/gcc/loop-iv.c (.../tags/gcc_4_8_2_release)
 
27843
+++ b/src/gcc/loop-iv.c (.../branches/gcc-4_8-branch)
 
27844
@@ -425,7 +425,9 @@
 
27845
       && !iv->first_special)
 
27846
     {
 
27847
       rtx val = get_iv_value (iv, const0_rtx);
 
27848
-      val = lowpart_subreg (mode, val, iv->extend_mode);
 
27849
+      val = lowpart_subreg (mode, val,
 
27850
+                           iv->extend == IV_UNKNOWN_EXTEND
 
27851
+                           ? iv->mode : iv->extend_mode);
 
27852
 
 
27853
       iv->base = val;
 
27854
       iv->extend = IV_UNKNOWN_EXTEND;
 
27855
@@ -465,8 +467,14 @@
 
27856
       && !iv->first_special)
 
27857
     {
 
27858
       rtx val = get_iv_value (iv, const0_rtx);
 
27859
+      if (iv->extend_mode != iv->mode
 
27860
+         && iv->extend != IV_UNKNOWN_EXTEND
 
27861
+         && iv->extend != extend)
 
27862
+       val = lowpart_subreg (iv->mode, val, iv->extend_mode);
 
27863
       val = simplify_gen_unary (iv_extend_to_rtx_code (extend), mode,
 
27864
-                               val, iv->extend_mode);
 
27865
+                               val,
 
27866
+                               iv->extend == extend
 
27867
+                               ? iv->extend_mode : iv->mode);
 
27868
       iv->base = val;
 
27869
       iv->extend = IV_UNKNOWN_EXTEND;
 
27870
       iv->mode = iv->extend_mode = mode;
 
27871
Index: gcc/ipa-prop.c
 
27872
===================================================================
 
27873
--- a/src/gcc/ipa-prop.c        (.../tags/gcc_4_8_2_release)
 
27874
+++ b/src/gcc/ipa-prop.c        (.../branches/gcc-4_8-branch)
 
27875
@@ -623,16 +623,22 @@
 
27876
   if (parm_ainfo && parm_ainfo->parm_modified)
 
27877
     return false;
 
27878
 
 
27879
-  gcc_checking_assert (gimple_vuse (stmt) != NULL_TREE);
 
27880
-  ao_ref_init (&refd, parm_load);
 
27881
-  /* We can cache visited statements only when parm_ainfo is available and when
 
27882
-     we are looking at a naked load of the whole parameter.  */
 
27883
-  if (!parm_ainfo || TREE_CODE (parm_load) != PARM_DECL)
 
27884
-    visited_stmts = NULL;
 
27885
+  if (optimize)
 
27886
+    {
 
27887
+      gcc_checking_assert (gimple_vuse (stmt) != NULL_TREE);
 
27888
+      ao_ref_init (&refd, parm_load);
 
27889
+      /* We can cache visited statements only when parm_ainfo is available and
 
27890
+     when we are looking at a naked load of the whole parameter.  */
 
27891
+      if (!parm_ainfo || TREE_CODE (parm_load) != PARM_DECL)
 
27892
+       visited_stmts = NULL;
 
27893
+      else
 
27894
+       visited_stmts = &parm_ainfo->parm_visited_statements;
 
27895
+      walk_aliased_vdefs (&refd, gimple_vuse (stmt), mark_modified, &modified,
 
27896
+                         visited_stmts);
 
27897
+    }
 
27898
   else
 
27899
-    visited_stmts = &parm_ainfo->parm_visited_statements;
 
27900
-  walk_aliased_vdefs (&refd, gimple_vuse (stmt), mark_modified, &modified,
 
27901
-                     visited_stmts);
 
27902
+    modified = true;
 
27903
+
 
27904
   if (parm_ainfo && modified)
 
27905
     parm_ainfo->parm_modified = true;
 
27906
   return !modified;
 
27907
@@ -740,7 +746,7 @@
 
27908
 ipa_load_from_parm_agg_1 (vec<ipa_param_descriptor_t> descriptors,
 
27909
                          struct param_analysis_info *parms_ainfo, gimple stmt,
 
27910
                          tree op, int *index_p, HOST_WIDE_INT *offset_p,
 
27911
-                         bool *by_ref_p)
 
27912
+                         HOST_WIDE_INT *size_p, bool *by_ref_p)
 
27913
 {
 
27914
   int index;
 
27915
   HOST_WIDE_INT size, max_size;
 
27916
@@ -758,6 +764,8 @@
 
27917
        {
 
27918
          *index_p = index;
 
27919
          *by_ref_p = false;
 
27920
+         if (size_p)
 
27921
+           *size_p = size;
 
27922
          return true;
 
27923
        }
 
27924
       return false;
 
27925
@@ -800,6 +808,8 @@
 
27926
     {
 
27927
       *index_p = index;
 
27928
       *by_ref_p = true;
 
27929
+      if (size_p)
 
27930
+       *size_p = size;
 
27931
       return true;
 
27932
     }
 
27933
   return false;
 
27934
@@ -814,7 +824,7 @@
 
27935
                        bool *by_ref_p)
 
27936
 {
 
27937
   return ipa_load_from_parm_agg_1 (info->descriptors, NULL, stmt, op, index_p,
 
27938
-                                  offset_p, by_ref_p);
 
27939
+                                  offset_p, NULL, by_ref_p);
 
27940
 }
 
27941
 
 
27942
 /* Given that an actual argument is an SSA_NAME (given in NAME) and is a result
 
27943
@@ -1051,7 +1061,8 @@
 
27944
     return;
 
27945
   parm = TREE_OPERAND (expr, 0);
 
27946
   index = ipa_get_param_decl_index (info, SSA_NAME_VAR (parm));
 
27947
-  gcc_assert (index >= 0);
 
27948
+  if (index < 0)
 
27949
+    return;
 
27950
 
 
27951
   cond_bb = single_pred (assign_bb);
 
27952
   cond = last_stmt (cond_bb);
 
27953
@@ -1462,6 +1473,9 @@
 
27954
 {
 
27955
   struct cgraph_edge *cs;
 
27956
 
 
27957
+  if (!optimize)
 
27958
+    return;
 
27959
+
 
27960
   for (cs = node->callees; cs; cs = cs->next_callee)
 
27961
     {
 
27962
       struct cgraph_node *callee = cgraph_function_or_thunk_node (cs->callee,
 
27963
@@ -1646,7 +1660,7 @@
 
27964
   if (gimple_assign_single_p (def)
 
27965
       && ipa_load_from_parm_agg_1 (info->descriptors, parms_ainfo, def,
 
27966
                                   gimple_assign_rhs1 (def), &index, &offset,
 
27967
-                                  &by_ref))
 
27968
+                                  NULL, &by_ref))
 
27969
     {
 
27970
       struct cgraph_edge *cs = ipa_note_param_call (node, index, call);
 
27971
       cs->indirect_info->offset = offset;
 
27972
@@ -1847,8 +1861,7 @@
 
27973
    passed in DATA.  */
 
27974
 
 
27975
 static bool
 
27976
-visit_ref_for_mod_analysis (gimple stmt ATTRIBUTE_UNUSED,
 
27977
-                            tree op, void *data)
 
27978
+visit_ref_for_mod_analysis (gimple, tree op, tree, void *data)
 
27979
 {
 
27980
   struct ipa_node_params *info = (struct ipa_node_params *) data;
 
27981
 
 
27982
@@ -2126,7 +2139,6 @@
 
27983
      we may create the first reference to the object in the unit.  */
 
27984
   if (!callee || callee->global.inlined_to)
 
27985
     {
 
27986
-      struct cgraph_node *first_clone = callee;
 
27987
 
 
27988
       /* We are better to ensure we can refer to it.
 
27989
         In the case of static functions we are out of luck, since we already   
 
27990
@@ -2142,31 +2154,7 @@
 
27991
                     xstrdup (cgraph_node_name (ie->callee)), ie->callee->uid);
 
27992
          return NULL;
 
27993
        }
 
27994
-
 
27995
-      /* Create symbol table node.  Even if inline clone exists, we can not take
 
27996
-        it as a target of non-inlined call.  */
 
27997
-      callee = cgraph_create_node (target);
 
27998
-
 
27999
-      /* OK, we previously inlined the function, then removed the offline copy and
 
28000
-        now we want it back for external call.  This can happen when devirtualizing
 
28001
-        while inlining function called once that happens after extern inlined and
 
28002
-        virtuals are already removed.  In this case introduce the external node
 
28003
-        and make it available for call.  */
 
28004
-      if (first_clone)
 
28005
-       {
 
28006
-         first_clone->clone_of = callee;
 
28007
-         callee->clones = first_clone;
 
28008
-         symtab_prevail_in_asm_name_hash ((symtab_node)callee);
 
28009
-         symtab_insert_node_to_hashtable ((symtab_node)callee);
 
28010
-         if (dump_file)
 
28011
-           fprintf (dump_file, "ipa-prop: Introduced new external node "
 
28012
-                    "(%s/%i) and turned into root of the clone tree.\n",
 
28013
-                    xstrdup (cgraph_node_name (callee)), callee->uid);
 
28014
-       }
 
28015
-      else if (dump_file)
 
28016
-       fprintf (dump_file, "ipa-prop: Introduced new external node "
 
28017
-                "(%s/%i).\n",
 
28018
-                xstrdup (cgraph_node_name (callee)), callee->uid);
 
28019
+      callee = cgraph_get_create_real_symbol_node (target);
 
28020
     }
 
28021
   ipa_check_create_node_params ();
 
28022
 
 
28023
@@ -3902,7 +3890,7 @@
 
28024
        struct ipa_agg_replacement_value *v;
 
28025
        gimple stmt = gsi_stmt (gsi);
 
28026
        tree rhs, val, t;
 
28027
-       HOST_WIDE_INT offset;
 
28028
+       HOST_WIDE_INT offset, size;
 
28029
        int index;
 
28030
        bool by_ref, vce;
 
28031
 
 
28032
@@ -3929,13 +3917,15 @@
 
28033
          continue;
 
28034
 
 
28035
        if (!ipa_load_from_parm_agg_1 (descriptors, parms_ainfo, stmt,
 
28036
-                                      rhs, &index, &offset, &by_ref))
 
28037
+                                      rhs, &index, &offset, &size, &by_ref))
 
28038
          continue;
 
28039
        for (v = aggval; v; v = v->next)
 
28040
          if (v->index == index
 
28041
              && v->offset == offset)
 
28042
            break;
 
28043
-       if (!v || v->by_ref != by_ref)
 
28044
+       if (!v
 
28045
+           || v->by_ref != by_ref
 
28046
+           || tree_low_cst (TYPE_SIZE (TREE_TYPE (v->value)), 0) != size)
 
28047
          continue;
 
28048
 
 
28049
        gcc_checking_assert (is_gimple_ip_invariant (v->value));
 
28050
Index: gcc/tree-ssa-dce.c
 
28051
===================================================================
 
28052
--- a/src/gcc/tree-ssa-dce.c    (.../tags/gcc_4_8_2_release)
 
28053
+++ b/src/gcc/tree-ssa-dce.c    (.../branches/gcc-4_8-branch)
 
28054
@@ -1307,26 +1307,19 @@
 
28055
          stats.total++;
 
28056
 
 
28057
          /* We can mark a call to free as not necessary if the
 
28058
-            defining statement of its argument is an allocation
 
28059
-            function and that is not necessary itself.  */
 
28060
-         if (gimple_call_builtin_p (stmt, BUILT_IN_FREE))
 
28061
+            defining statement of its argument is not necessary
 
28062
+            (and thus is getting removed).  */
 
28063
+         if (gimple_plf (stmt, STMT_NECESSARY)
 
28064
+             && gimple_call_builtin_p (stmt, BUILT_IN_FREE))
 
28065
            {
 
28066
              tree ptr = gimple_call_arg (stmt, 0);
 
28067
-             tree callee2;
 
28068
-             gimple def_stmt;
 
28069
-             if (TREE_CODE (ptr) != SSA_NAME)
 
28070
-               continue;
 
28071
-             def_stmt = SSA_NAME_DEF_STMT (ptr);
 
28072
-             if (!is_gimple_call (def_stmt)
 
28073
-                 || gimple_plf (def_stmt, STMT_NECESSARY))
 
28074
-               continue;
 
28075
-             callee2 = gimple_call_fndecl (def_stmt);
 
28076
-             if (callee2 == NULL_TREE
 
28077
-                 || DECL_BUILT_IN_CLASS (callee2) != BUILT_IN_NORMAL
 
28078
-                 || (DECL_FUNCTION_CODE (callee2) != BUILT_IN_MALLOC
 
28079
-                     && DECL_FUNCTION_CODE (callee2) != BUILT_IN_CALLOC))
 
28080
-               continue;
 
28081
-             gimple_set_plf (stmt, STMT_NECESSARY, false);
 
28082
+             if (TREE_CODE (ptr) == SSA_NAME)
 
28083
+               {
 
28084
+                 gimple def_stmt = SSA_NAME_DEF_STMT (ptr);
 
28085
+                 if (!gimple_nop_p (def_stmt)
 
28086
+                     && !gimple_plf (def_stmt, STMT_NECESSARY))
 
28087
+                   gimple_set_plf (stmt, STMT_NECESSARY, false);
 
28088
+               }
 
28089
            }
 
28090
 
 
28091
          /* If GSI is not necessary then remove it.  */
 
28092
Index: gcc/tree-ssa-ter.c
 
28093
===================================================================
 
28094
--- a/src/gcc/tree-ssa-ter.c    (.../tags/gcc_4_8_2_release)
 
28095
+++ b/src/gcc/tree-ssa-ter.c    (.../branches/gcc-4_8-branch)
 
28096
@@ -590,6 +590,30 @@
 
28097
 }
 
28098
 
 
28099
 
 
28100
+/* Helper function for find_ssaname_in_stores.  Called via walk_tree to
 
28101
+   find a SSA_NAME DATA somewhere in *TP.  */
 
28102
+
 
28103
+static tree
 
28104
+find_ssaname (tree *tp, int *walk_subtrees, void *data)
 
28105
+{
 
28106
+  tree var = (tree) data;
 
28107
+  if (*tp == var)
 
28108
+    return var;
 
28109
+  else if (IS_TYPE_OR_DECL_P (*tp))
 
28110
+    *walk_subtrees = 0;
 
28111
+  return NULL_TREE;
 
28112
+}
 
28113
+
 
28114
+/* Helper function for find_replaceable_in_bb.  Return true if SSA_NAME DATA
 
28115
+   is used somewhere in T, which is a store in the statement.  Called via
 
28116
+   walk_stmt_load_store_addr_ops.  */
 
28117
+
 
28118
+static bool
 
28119
+find_ssaname_in_store (gimple, tree, tree t, void *data)
 
28120
+{
 
28121
+  return walk_tree (&t, find_ssaname, data, NULL) != NULL_TREE;
 
28122
+}
 
28123
+
 
28124
 /* This function processes basic block BB, and looks for variables which can
 
28125
    be replaced by their expressions.  Results are stored in the table TAB.  */
 
28126
 
 
28127
@@ -643,8 +667,7 @@
 
28128
              /* If the stmt does a memory store and the replacement
 
28129
                 is a load aliasing it avoid creating overlapping
 
28130
                 assignments which we cannot expand correctly.  */
 
28131
-             if (gimple_vdef (stmt)
 
28132
-                 && gimple_assign_single_p (stmt))
 
28133
+             if (gimple_vdef (stmt))
 
28134
                {
 
28135
                  gimple def_stmt = SSA_NAME_DEF_STMT (use);
 
28136
                  while (is_gimple_assign (def_stmt)
 
28137
@@ -653,9 +676,29 @@
 
28138
                      = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (def_stmt));
 
28139
                  if (gimple_vuse (def_stmt)
 
28140
                      && gimple_assign_single_p (def_stmt)
 
28141
-                     && refs_may_alias_p (gimple_assign_lhs (stmt),
 
28142
-                                          gimple_assign_rhs1 (def_stmt)))
 
28143
-                   same_root_var = true;
 
28144
+                     && stmt_may_clobber_ref_p (stmt,
 
28145
+                                                gimple_assign_rhs1 (def_stmt)))
 
28146
+                   {
 
28147
+                     /* For calls, it is not a problem if USE is among
 
28148
+                        call's arguments or say OBJ_TYPE_REF argument,
 
28149
+                        all those necessarily need to be evaluated before
 
28150
+                        the call that may clobber the memory.  But if
 
28151
+                        LHS of the call refers to USE, expansion might
 
28152
+                        evaluate it after the call, prevent TER in that
 
28153
+                        case.
 
28154
+                        For inline asm, allow TER of loads into input
 
28155
+                        arguments, but disallow TER for USEs that occur
 
28156
+                        somewhere in outputs.  */
 
28157
+                     if (is_gimple_call (stmt)
 
28158
+                         || gimple_code (stmt) == GIMPLE_ASM)
 
28159
+                       {
 
28160
+                         if (walk_stmt_load_store_ops (stmt, use, NULL,
 
28161
+                                                       find_ssaname_in_store))
 
28162
+                           same_root_var = true;
 
28163
+                       }
 
28164
+                     else
 
28165
+                       same_root_var = true;
 
28166
+                   }
 
28167
                }
 
28168
 
 
28169
              /* Mark expression as replaceable unless stmt is volatile, or the
 
28170
Index: gcc/ira.c
 
28171
===================================================================
 
28172
--- a/src/gcc/ira.c     (.../tags/gcc_4_8_2_release)
 
28173
+++ b/src/gcc/ira.c     (.../branches/gcc-4_8-branch)
 
28174
@@ -4742,6 +4742,18 @@
 
28175
   if (need_dce && optimize)
 
28176
     run_fast_dce ();
 
28177
 
 
28178
+  /* Diagnose uses of the hard frame pointer when it is used as a global
 
28179
+     register.  Often we can get away with letting the user appropriate
 
28180
+     the frame pointer, but we should let them know when code generation
 
28181
+     makes that impossible.  */
 
28182
+  if (global_regs[HARD_FRAME_POINTER_REGNUM] && frame_pointer_needed)
 
28183
+    {
 
28184
+      tree decl = global_regs_decl[HARD_FRAME_POINTER_REGNUM];
 
28185
+      error_at (DECL_SOURCE_LOCATION (current_function_decl),
 
28186
+                "frame pointer required, but reserved");
 
28187
+      inform (DECL_SOURCE_LOCATION (decl), "for %qD", decl);
 
28188
+    }
 
28189
+
 
28190
   timevar_pop (TV_IRA);
 
28191
 }
 
28192
 
 
28193
Index: gcc/rtl.h
 
28194
===================================================================
 
28195
--- a/src/gcc/rtl.h     (.../tags/gcc_4_8_2_release)
 
28196
+++ b/src/gcc/rtl.h     (.../branches/gcc-4_8-branch)
 
28197
@@ -2705,6 +2705,8 @@
 
28198
                                  const_rtx, rtx);
 
28199
 extern int read_dependence (const_rtx, const_rtx);
 
28200
 extern int anti_dependence (const_rtx, const_rtx);
 
28201
+extern int canon_anti_dependence (const_rtx, bool,
 
28202
+                                               const_rtx, enum machine_mode, rtx);
 
28203
 extern int output_dependence (const_rtx, const_rtx);
 
28204
 extern int may_alias_p (const_rtx, const_rtx);
 
28205
 extern void init_alias_target (void);
 
28206
@@ -2789,6 +2791,8 @@
 
28207
 #define fatal_insn_not_found(insn) \
 
28208
        _fatal_insn_not_found (insn, __FILE__, __LINE__, __FUNCTION__)
 
28209
 
 
28210
+/* reginfo.c */
 
28211
+extern tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
 
28212
 
 
28213
 
 
28214
 #endif /* ! GCC_RTL_H */
 
28215
Index: gcc/tree-vect-stmts.c
 
28216
===================================================================
 
28217
--- a/src/gcc/tree-vect-stmts.c (.../tags/gcc_4_8_2_release)
 
28218
+++ b/src/gcc/tree-vect-stmts.c (.../branches/gcc-4_8-branch)
 
28219
@@ -4369,6 +4369,20 @@
 
28220
       return false;
 
28221
     }
 
28222
 
 
28223
+  /* Invalidate assumptions made by dependence analysis when vectorization
 
28224
+     on the unrolled body effectively re-orders stmts.  */
 
28225
+  if (ncopies > 1
 
28226
+      && STMT_VINFO_MIN_NEG_DIST (stmt_info) != 0
 
28227
+      && ((unsigned)LOOP_VINFO_VECT_FACTOR (loop_vinfo)
 
28228
+         > STMT_VINFO_MIN_NEG_DIST (stmt_info)))
 
28229
+    {
 
28230
+      if (dump_enabled_p ())
 
28231
+       dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
 
28232
+                        "cannot perform implicit CSE when unrolling "
 
28233
+                        "with negative dependence distance\n");
 
28234
+      return false;
 
28235
+    }
 
28236
+
 
28237
   if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo)
 
28238
     return false;
 
28239
 
 
28240
@@ -4425,6 +4439,20 @@
 
28241
          else if (!vect_grouped_load_supported (vectype, group_size))
 
28242
            return false;
 
28243
        }
 
28244
+
 
28245
+      /* Invalidate assumptions made by dependence analysis when vectorization
 
28246
+        on the unrolled body effectively re-orders stmts.  */
 
28247
+      if (!PURE_SLP_STMT (stmt_info)
 
28248
+         && STMT_VINFO_MIN_NEG_DIST (stmt_info) != 0
 
28249
+         && ((unsigned)LOOP_VINFO_VECT_FACTOR (loop_vinfo)
 
28250
+             > STMT_VINFO_MIN_NEG_DIST (stmt_info)))
 
28251
+       {
 
28252
+         if (dump_enabled_p ())
 
28253
+           dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
 
28254
+                            "cannot perform implicit CSE when performing "
 
28255
+                            "group loads with negative dependence distance\n");
 
28256
+         return false;
 
28257
+       }
 
28258
     }
 
28259
 
 
28260
 
 
28261
@@ -6054,8 +6082,7 @@
 
28262
      corresponding to that mode.  The theory is that any use that
 
28263
      would cause problems with this will disable vectorization anyway.  */
 
28264
   else if (!SCALAR_FLOAT_TYPE_P (scalar_type)
 
28265
-          && !INTEGRAL_TYPE_P (scalar_type)
 
28266
-          && !POINTER_TYPE_P (scalar_type))
 
28267
+          && !INTEGRAL_TYPE_P (scalar_type))
 
28268
     scalar_type = lang_hooks.types.type_for_mode (inner_mode, 1);
 
28269
 
 
28270
   /* We can't build a vector type of elements with alignment bigger than
 
28271
Index: gcc/tree-ssa-phiprop.c
 
28272
===================================================================
 
28273
--- a/src/gcc/tree-ssa-phiprop.c        (.../tags/gcc_4_8_2_release)
 
28274
+++ b/src/gcc/tree-ssa-phiprop.c        (.../branches/gcc-4_8-branch)
 
28275
@@ -307,6 +307,12 @@
 
28276
       gimple def_stmt;
 
28277
       tree vuse;
 
28278
 
 
28279
+      /* Only replace loads in blocks that post-dominate the PHI node.  That
 
28280
+         makes sure we don't end up speculating loads.  */
 
28281
+      if (!dominated_by_p (CDI_POST_DOMINATORS,
 
28282
+                          bb, gimple_bb (use_stmt)))
 
28283
+       continue;
 
28284
+         
 
28285
       /* Check whether this is a load of *ptr.  */
 
28286
       if (!(is_gimple_assign (use_stmt)
 
28287
            && TREE_CODE (gimple_assign_lhs (use_stmt)) == SSA_NAME
 
28288
@@ -378,6 +384,7 @@
 
28289
   size_t n;
 
28290
 
 
28291
   calculate_dominance_info (CDI_DOMINATORS);
 
28292
+  calculate_dominance_info (CDI_POST_DOMINATORS);
 
28293
 
 
28294
   n = num_ssa_names;
 
28295
   phivn = XCNEWVEC (struct phiprop_d, n);
 
28296
@@ -395,6 +402,8 @@
 
28297
   bbs.release ();
 
28298
   free (phivn);
 
28299
 
 
28300
+  free_dominance_info (CDI_POST_DOMINATORS);
 
28301
+
 
28302
   return 0;
 
28303
 }
 
28304
 
 
28305
Index: gcc/tree-object-size.c
 
28306
===================================================================
 
28307
--- a/src/gcc/tree-object-size.c        (.../tags/gcc_4_8_2_release)
 
28308
+++ b/src/gcc/tree-object-size.c        (.../branches/gcc-4_8-branch)
 
28309
@@ -64,7 +64,7 @@
 
28310
    the subobject (innermost array or field with address taken).
 
28311
    object_sizes[2] is lower bound for number of bytes till the end of
 
28312
    the object and object_sizes[3] lower bound for subobject.  */
 
28313
-static unsigned HOST_WIDE_INT *object_sizes[4];
 
28314
+static vec<unsigned HOST_WIDE_INT> object_sizes[4];
 
28315
 
 
28316
 /* Bitmaps what object sizes have been computed already.  */
 
28317
 static bitmap computed[4];
 
28318
@@ -493,7 +493,7 @@
 
28319
 
 
28320
   if (TREE_CODE (ptr) == SSA_NAME
 
28321
       && POINTER_TYPE_P (TREE_TYPE (ptr))
 
28322
-      && object_sizes[object_size_type] != NULL)
 
28323
+      && computed[object_size_type] != NULL)
 
28324
     {
 
28325
       if (!bitmap_bit_p (computed[object_size_type], SSA_NAME_VERSION (ptr)))
 
28326
        {
 
28327
@@ -501,6 +501,8 @@
 
28328
          bitmap_iterator bi;
 
28329
          unsigned int i;
 
28330
 
 
28331
+         if (num_ssa_names > object_sizes[object_size_type].length ())
 
28332
+           object_sizes[object_size_type].safe_grow (num_ssa_names);
 
28333
          if (dump_file)
 
28334
            {
 
28335
              fprintf (dump_file, "Computing %s %sobject size for ",
 
28336
@@ -1162,12 +1164,12 @@
 
28337
 {
 
28338
   int object_size_type;
 
28339
 
 
28340
-  if (object_sizes[0])
 
28341
+  if (computed[0])
 
28342
     return;
 
28343
 
 
28344
   for (object_size_type = 0; object_size_type <= 3; object_size_type++)
 
28345
     {
 
28346
-      object_sizes[object_size_type] = XNEWVEC (unsigned HOST_WIDE_INT, num_ssa_names);
 
28347
+      object_sizes[object_size_type].safe_grow (num_ssa_names);
 
28348
       computed[object_size_type] = BITMAP_ALLOC (NULL);
 
28349
     }
 
28350
 
 
28351
@@ -1184,9 +1186,8 @@
 
28352
 
 
28353
   for (object_size_type = 0; object_size_type <= 3; object_size_type++)
 
28354
     {
 
28355
-      free (object_sizes[object_size_type]);
 
28356
+      object_sizes[object_size_type].release ();
 
28357
       BITMAP_FREE (computed[object_size_type]);
 
28358
-      object_sizes[object_size_type] = NULL;
 
28359
     }
 
28360
 }
 
28361
 
 
28362
@@ -1202,18 +1203,11 @@
 
28363
       gimple_stmt_iterator i;
 
28364
       for (i = gsi_start_bb (bb); !gsi_end_p (i); gsi_next (&i))
 
28365
        {
 
28366
-         tree callee, result;
 
28367
+         tree result;
 
28368
          gimple call = gsi_stmt (i);
 
28369
-
 
28370
-          if (gimple_code (call) != GIMPLE_CALL)
 
28371
+         if (!gimple_call_builtin_p (call, BUILT_IN_OBJECT_SIZE))
 
28372
            continue;
 
28373
 
 
28374
-         callee = gimple_call_fndecl (call);
 
28375
-         if (!callee
 
28376
-             || DECL_BUILT_IN_CLASS (callee) != BUILT_IN_NORMAL
 
28377
-             || DECL_FUNCTION_CODE (callee) != BUILT_IN_OBJECT_SIZE)
 
28378
-           continue;
 
28379
-
 
28380
          init_object_sizes ();
 
28381
          result = fold_call_stmt (call, false);
 
28382
          if (!result)
 
28383
@@ -1240,20 +1234,32 @@
 
28384
                continue;
 
28385
            }
 
28386
 
 
28387
+         gcc_assert (TREE_CODE (result) == INTEGER_CST);
 
28388
+
 
28389
          if (dump_file && (dump_flags & TDF_DETAILS))
 
28390
            {
 
28391
              fprintf (dump_file, "Simplified\n  ");
 
28392
              print_gimple_stmt (dump_file, call, 0, dump_flags);
 
28393
+             fprintf (dump_file, " to ");
 
28394
+             print_generic_expr (dump_file, result, 0);
 
28395
+             fprintf (dump_file, "\n");
 
28396
            }
 
28397
 
 
28398
-         if (!update_call_from_tree (&i, result))
 
28399
-           gcc_unreachable ();
 
28400
+         tree lhs = gimple_call_lhs (call);
 
28401
+         if (!lhs)
 
28402
+           continue;
 
28403
 
 
28404
-         if (dump_file && (dump_flags & TDF_DETAILS))
 
28405
+         /* Propagate into all uses and fold those stmts.  */
 
28406
+         gimple use_stmt;
 
28407
+         imm_use_iterator iter;
 
28408
+         FOR_EACH_IMM_USE_STMT (use_stmt, iter, lhs)
 
28409
            {
 
28410
-             fprintf (dump_file, "to\n  ");
 
28411
-             print_gimple_stmt (dump_file, gsi_stmt (i), 0, dump_flags);
 
28412
-             fprintf (dump_file, "\n");
 
28413
+             use_operand_p use_p;
 
28414
+             FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
 
28415
+               SET_USE (use_p, result);
 
28416
+             gimple_stmt_iterator gsi = gsi_for_stmt (use_stmt);
 
28417
+             fold_stmt (&gsi);
 
28418
+             update_stmt (gsi_stmt (gsi));
 
28419
            }
 
28420
        }
 
28421
     }
 
28422
Index: gcc/combine.c
 
28423
===================================================================
 
28424
--- a/src/gcc/combine.c (.../tags/gcc_4_8_2_release)
 
28425
+++ b/src/gcc/combine.c (.../branches/gcc-4_8-branch)
 
28426
@@ -3884,15 +3884,19 @@
 
28427
 
 
28428
       PATTERN (undobuf.other_insn) = other_pat;
 
28429
 
 
28430
-      /* If any of the notes in OTHER_INSN were REG_UNUSED, ensure that they
 
28431
-        are still valid.  Then add any non-duplicate notes added by
 
28432
-        recog_for_combine.  */
 
28433
+      /* If any of the notes in OTHER_INSN were REG_DEAD or REG_UNUSED,
 
28434
+        ensure that they are still valid.  Then add any non-duplicate
 
28435
+        notes added by recog_for_combine.  */
 
28436
       for (note = REG_NOTES (undobuf.other_insn); note; note = next)
 
28437
        {
 
28438
          next = XEXP (note, 1);
 
28439
 
 
28440
-         if (REG_NOTE_KIND (note) == REG_UNUSED
 
28441
-             && ! reg_set_p (XEXP (note, 0), PATTERN (undobuf.other_insn)))
 
28442
+         if ((REG_NOTE_KIND (note) == REG_DEAD
 
28443
+              && !reg_referenced_p (XEXP (note, 0),
 
28444
+                                    PATTERN (undobuf.other_insn)))
 
28445
+             ||(REG_NOTE_KIND (note) == REG_UNUSED
 
28446
+                && !reg_set_p (XEXP (note, 0),
 
28447
+                               PATTERN (undobuf.other_insn))))
 
28448
            remove_note (undobuf.other_insn, note);
 
28449
        }
 
28450
 
 
28451
@@ -5798,8 +5802,15 @@
 
28452
                return x;
 
28453
            }
 
28454
 
 
28455
-         /* If the code changed, return a whole new comparison.  */
 
28456
-         if (new_code != code)
 
28457
+         /* If the code changed, return a whole new comparison.
 
28458
+            We also need to avoid using SUBST in cases where
 
28459
+            simplify_comparison has widened a comparison with a CONST_INT,
 
28460
+            since in that case the wider CONST_INT may fail the sanity
 
28461
+            checks in do_SUBST.  */
 
28462
+         if (new_code != code
 
28463
+             || (CONST_INT_P (op1)
 
28464
+                 && GET_MODE (op0) != GET_MODE (XEXP (x, 0))
 
28465
+                 && GET_MODE (op0) != GET_MODE (XEXP (x, 1))))
 
28466
            return gen_rtx_fmt_ee (new_code, mode, op0, op1);
 
28467
 
 
28468
          /* Otherwise, keep this operation, but maybe change its operands.
 
28469
@@ -7991,7 +8002,7 @@
 
28470
   if (code == CALL || code == ASM_OPERANDS || code == CLOBBER)
 
28471
     return x;
 
28472
 
 
28473
-  /* We want to perform the operation is its present mode unless we know
 
28474
+  /* We want to perform the operation in its present mode unless we know
 
28475
      that the operation is valid in MODE, in which case we do the operation
 
28476
      in MODE.  */
 
28477
   op_mode = ((GET_MODE_CLASS (mode) == GET_MODE_CLASS (GET_MODE (x))
 
28478
@@ -8427,9 +8438,10 @@
 
28479
                                            GET_MODE (x), GEN_INT (mask),
 
28480
                                            XEXP (x, 1));
 
28481
          if (temp && CONST_INT_P (temp))
 
28482
-           SUBST (XEXP (x, 0),
 
28483
-                  force_to_mode (XEXP (x, 0), GET_MODE (x),
 
28484
-                                 INTVAL (temp), next_select));
 
28485
+           x = simplify_gen_binary (code, GET_MODE (x),
 
28486
+                                    force_to_mode (XEXP (x, 0), GET_MODE (x),
 
28487
+                                                   INTVAL (temp), next_select),
 
28488
+                                    XEXP (x, 1));
 
28489
        }
 
28490
       break;
 
28491
 
 
28492
@@ -8497,14 +8509,16 @@
 
28493
       /* We have no way of knowing if the IF_THEN_ELSE can itself be
 
28494
         written in a narrower mode.  We play it safe and do not do so.  */
 
28495
 
 
28496
-      SUBST (XEXP (x, 1),
 
28497
-            gen_lowpart_or_truncate (GET_MODE (x),
 
28498
-                                     force_to_mode (XEXP (x, 1), mode,
 
28499
-                                                    mask, next_select)));
 
28500
-      SUBST (XEXP (x, 2),
 
28501
-            gen_lowpart_or_truncate (GET_MODE (x),
 
28502
-                                     force_to_mode (XEXP (x, 2), mode,
 
28503
-                                                    mask, next_select)));
 
28504
+      op0 = gen_lowpart_or_truncate (GET_MODE (x),
 
28505
+                                    force_to_mode (XEXP (x, 1), mode,
 
28506
+                                                   mask, next_select));
 
28507
+      op1 = gen_lowpart_or_truncate (GET_MODE (x),
 
28508
+                                    force_to_mode (XEXP (x, 2), mode,
 
28509
+                                                   mask, next_select));
 
28510
+      if (op0 != XEXP (x, 1) || op1 != XEXP (x, 2))
 
28511
+       x = simplify_gen_ternary (IF_THEN_ELSE, GET_MODE (x),
 
28512
+                                 GET_MODE (XEXP (x, 0)), XEXP (x, 0),
 
28513
+                                 op0, op1);
 
28514
       break;
 
28515
 
 
28516
     default:
 
28517
Index: gcc/bb-reorder.c
 
28518
===================================================================
 
28519
--- a/src/gcc/bb-reorder.c      (.../tags/gcc_4_8_2_release)
 
28520
+++ b/src/gcc/bb-reorder.c      (.../branches/gcc-4_8-branch)
 
28521
@@ -1685,9 +1685,8 @@
 
28522
          edge e;
 
28523
          edge_iterator ei;
 
28524
 
 
28525
-         /* Find EDGE_CAN_FALLTHRU edge.  */
 
28526
          FOR_EACH_EDGE (e, ei, cur_bb->succs)
 
28527
-           if (e->flags & EDGE_CAN_FALLTHRU)
 
28528
+           if (e->flags & EDGE_FALLTHRU)
 
28529
              {
 
28530
                fall_thru = e;
 
28531
                break;
 
28532
Index: gcc/tree-flow.h
 
28533
===================================================================
 
28534
--- a/src/gcc/tree-flow.h       (.../tags/gcc_4_8_2_release)
 
28535
+++ b/src/gcc/tree-flow.h       (.../branches/gcc-4_8-branch)
 
28536
@@ -425,6 +425,7 @@
 
28537
                                           basic_block, tree);
 
28538
 void remove_edge_and_dominated_blocks (edge);
 
28539
 bool tree_node_can_be_shared (tree);
 
28540
+extern unsigned int split_critical_edges (void);
 
28541
 
 
28542
 /* In tree-cfgcleanup.c  */
 
28543
 extern bitmap cfgcleanup_altered_bbs;
 
28544
Index: gcc/config.gcc
 
28545
===================================================================
 
28546
--- a/src/gcc/config.gcc        (.../tags/gcc_4_8_2_release)
 
28547
+++ b/src/gcc/config.gcc        (.../branches/gcc-4_8-branch)
 
28548
@@ -1761,6 +1761,14 @@
 
28549
        tmake_file="${tmake_file} microblaze/t-microblaze-linux"
 
28550
        ;;
 
28551
 microblaze*-*-rtems*)
 
28552
+       case $target in
 
28553
+               microblazeel-*)
 
28554
+                       tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=0"
 
28555
+                       ;;
 
28556
+               microblaze-*)
 
28557
+                       tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=4321"
 
28558
+                       ;;
 
28559
+       esac
 
28560
        tm_file="${tm_file} dbxelf.h"
 
28561
        tm_file="${tm_file} microblaze/rtems.h rtems.h newlib-stdint.h"
 
28562
        c_target_objs="${c_target_objs} microblaze-c.o"
 
28563
@@ -2963,11 +2971,18 @@
 
28564
          with_cpu=8540
 
28565
       fi       
 
28566
       ;;
 
28567
-    sparc-leon*-*)
 
28568
-      with_cpu=v8;
 
28569
-      ;;
 
28570
     sparc*-*-*)
 
28571
-      with_cpu="`echo ${target} | sed 's/-.*$//'`"
 
28572
+      case ${target} in
 
28573
+       *-leon-*)
 
28574
+         with_cpu=leon
 
28575
+         ;;
 
28576
+       *-leon[3-9]*)
 
28577
+         with_cpu=leon3
 
28578
+         ;;
 
28579
+       *)
 
28580
+         with_cpu="`echo ${target} | sed 's/-.*$//'`"
 
28581
+         ;;
 
28582
+      esac
 
28583
       ;;
 
28584
   esac
 
28585
 
 
28586
@@ -3587,7 +3602,7 @@
 
28587
                        case ${val} in
 
28588
                        "" | sparc | sparcv9 | sparc64 \
 
28589
                        | v7 | cypress \
 
28590
-                       | v8 | supersparc | hypersparc | leon \
 
28591
+                       | v8 | supersparc | hypersparc | leon | leon3 \
 
28592
                        | sparclite | f930 | f934 | sparclite86x \
 
28593
                        | sparclet | tsc701 \
 
28594
                        | v9 | ultrasparc | ultrasparc3 | niagara | niagara2 \
 
28595
@@ -3745,15 +3760,6 @@
 
28596
                cxx_target_objs="${cxx_target_objs} sh-c.o"
 
28597
                ;;
 
28598
 
 
28599
-       sparc-leon*-*)
 
28600
-               if test x$with_tune = x ; then
 
28601
-                 with_tune=leon;
 
28602
-               fi
 
28603
-
 
28604
-               # The SPARC port checks this value at compile-time.
 
28605
-               target_cpu_default2="TARGET_CPU_$with_cpu"
 
28606
-               ;;
 
28607
-
 
28608
        sparc*-*-*)
 
28609
                # Some standard aliases.
 
28610
                case x$with_cpu in
 
28611
@@ -3765,6 +3771,17 @@
 
28612
                        ;;
 
28613
                esac
 
28614
 
 
28615
+               if test x$with_tune = x ; then
 
28616
+                     case ${target} in
 
28617
+                     *-leon-*)
 
28618
+                         with_tune=leon
 
28619
+                         ;;
 
28620
+                     *-leon[3-9]*)
 
28621
+                         with_tune=leon3
 
28622
+                         ;;
 
28623
+                     esac
 
28624
+               fi
 
28625
+
 
28626
                # The SPARC port checks this value at compile-time.
 
28627
                target_cpu_default2="TARGET_CPU_$with_cpu"
 
28628
                ;;
 
28629
Index: gcc/reginfo.c
 
28630
===================================================================
 
28631
--- a/src/gcc/reginfo.c (.../tags/gcc_4_8_2_release)
 
28632
+++ b/src/gcc/reginfo.c (.../branches/gcc-4_8-branch)
 
28633
@@ -85,7 +85,7 @@
 
28634
 char global_regs[FIRST_PSEUDO_REGISTER];
 
28635
 
 
28636
 /* Declaration for the global register. */
 
28637
-static tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
 
28638
+tree global_regs_decl[FIRST_PSEUDO_REGISTER];
 
28639
 
 
28640
 /* Same information as REGS_INVALIDATED_BY_CALL but in regset form to be used
 
28641
    in dataflow more conveniently.  */
 
28642
@@ -620,40 +620,35 @@
 
28643
        mode = GET_MODE_WIDER_MODE (mode))
 
28644
     if ((unsigned) hard_regno_nregs[regno][mode] == nregs
 
28645
        && HARD_REGNO_MODE_OK (regno, mode)
 
28646
-       && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
 
28647
+       && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
 
28648
+       && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
 
28649
       found_mode = mode;
 
28650
 
 
28651
-  if (found_mode != VOIDmode)
 
28652
-    return found_mode;
 
28653
-
 
28654
   for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
 
28655
        mode != VOIDmode;
 
28656
        mode = GET_MODE_WIDER_MODE (mode))
 
28657
     if ((unsigned) hard_regno_nregs[regno][mode] == nregs
 
28658
        && HARD_REGNO_MODE_OK (regno, mode)
 
28659
-       && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
 
28660
+       && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
 
28661
+       && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
 
28662
       found_mode = mode;
 
28663
 
 
28664
-  if (found_mode != VOIDmode)
 
28665
-    return found_mode;
 
28666
-
 
28667
   for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT);
 
28668
        mode != VOIDmode;
 
28669
        mode = GET_MODE_WIDER_MODE (mode))
 
28670
     if ((unsigned) hard_regno_nregs[regno][mode] == nregs
 
28671
        && HARD_REGNO_MODE_OK (regno, mode)
 
28672
-       && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
 
28673
+       && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
 
28674
+       && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
 
28675
       found_mode = mode;
 
28676
 
 
28677
-  if (found_mode != VOIDmode)
 
28678
-    return found_mode;
 
28679
-
 
28680
   for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT);
 
28681
        mode != VOIDmode;
 
28682
        mode = GET_MODE_WIDER_MODE (mode))
 
28683
     if ((unsigned) hard_regno_nregs[regno][mode] == nregs
 
28684
        && HARD_REGNO_MODE_OK (regno, mode)
 
28685
-       && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
 
28686
+       && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
 
28687
+       && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
 
28688
       found_mode = mode;
 
28689
 
 
28690
   if (found_mode != VOIDmode)
 
28691
Index: gcc/Makefile.in
 
28692
===================================================================
 
28693
--- a/src/gcc/Makefile.in       (.../tags/gcc_4_8_2_release)
 
28694
+++ b/src/gcc/Makefile.in       (.../branches/gcc-4_8-branch)
 
28695
@@ -1827,7 +1827,7 @@
 
28696
            "$(MULTILIB_EXCLUSIONS)" \
 
28697
            "$(MULTILIB_OSDIRNAMES)" \
 
28698
            "$(MULTILIB_REQUIRED)" \
 
28699
-           "$(MULTIARCH_DIRNAME)" \
 
28700
+           "$(if $(MULTILIB_OSDIRNAMES),,$(MULTIARCH_DIRNAME))" \
 
28701
            "$(MULTILIB_REUSE)" \
 
28702
            "@enable_multilib@" \
 
28703
            > tmp-mlib.h; \
 
28704
@@ -2256,7 +2256,7 @@
 
28705
    $(FUNCTION_H) $(TM_H) coretypes.h \
 
28706
    $(TREE_PASS_H) $(BASIC_BLOCK_H) $(BITMAP_H) \
 
28707
    $(FLAGS_H) $(HASHTAB_H) pointer-set.h \
 
28708
-   $(GIMPLE_H) $(TREE_INLINE_H) $(GIMPLE_PRETTY_PRINT_H)
 
28709
+   $(GIMPLE_H) $(TREE_INLINE_H) $(GIMPLE_PRETTY_PRINT_H) $(PARAMS_H)
 
28710
 tree-ssa.o : tree-ssa.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
 
28711
    $(TREE_H) $(TM_P_H) $(EXPR_H) $(DIAGNOSTIC_H) \
 
28712
    toplev.h $(FUNCTION_H) $(TM_H) coretypes.h \
 
28713
@@ -3037,7 +3037,7 @@
 
28714
     $(TM_H) coretypes.h $(GIMPLE_H) \
 
28715
     $(TREE_PASS_H) $(FLAGS_H) $(EXPR_H) $(BASIC_BLOCK_H) \
 
28716
     $(GGC_H) $(OBSTACK_H) $(PARAMS_H) $(CPPLIB_H) $(PARAMS_H) \
 
28717
-    $(GIMPLE_PRETTY_PRINT_H) langhooks.h
 
28718
+    $(GIMPLE_PRETTY_PRINT_H) langhooks.h $(OPTABS_H)
 
28719
 tree-complex.o : tree-complex.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TREE_H) \
 
28720
     $(TM_H) $(FLAGS_H) $(TREE_FLOW_H) $(GIMPLE_H) \
 
28721
     tree-iterator.h $(TREE_PASS_H) tree-ssa-propagate.h
 
28722
@@ -3276,12 +3276,12 @@
 
28723
    $(TM_H) $(RTL_H) $(REGS_H) insn-config.h insn-codes.h $(DF_H) \
 
28724
    $(RECOG_H) output.h addresses.h $(REGS_H) hard-reg-set.h $(FLAGS_H) \
 
28725
    $(FUNCTION_H) $(EXPR_H) $(BASIC_BLOCK_H) $(TM_P_H) $(EXCEPT_H) \
 
28726
-   ira.h rtl-error.h $(LRA_INT_H)
 
28727
+   ira.h rtl-error.h $(LRA_INT_H) $(OPTABS_H)
 
28728
 lra-eliminations.o : lra-eliminations.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
 
28729
    $(TM_H) $(RTL_H) $(REGS_H) insn-config.h $(DF_H) \
 
28730
    $(RECOG_H) output.h $(REGS_H) hard-reg-set.h $(FLAGS_H) $(FUNCTION_H) \
 
28731
    $(EXPR_H) $(BASIC_BLOCK_H) $(TM_P_H) $(EXCEPT_H) ira.h \
 
28732
-   rtl-error.h $(LRA_INT_H)
 
28733
+   rtl-error.h $(LRA_INT_H) $(OPTABS_H)
 
28734
 lra-lives.o : lra-lives.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
 
28735
    $(RTL_H) $(REGS_H) insn-config.h $(DF_H) \
 
28736
    $(RECOG_H) output.h $(REGS_H) hard-reg-set.h $(FLAGS_H) $(FUNCTION_H) \
 
28737
Index: gcc/gimple.c
 
28738
===================================================================
 
28739
--- a/src/gcc/gimple.c  (.../tags/gcc_4_8_2_release)
 
28740
+++ b/src/gcc/gimple.c  (.../branches/gcc-4_8-branch)
 
28741
@@ -3841,42 +3841,46 @@
 
28742
 
 
28743
 /* For the statement STMT call the callbacks VISIT_LOAD, VISIT_STORE and
 
28744
    VISIT_ADDR if non-NULL on loads, store and address-taken operands
 
28745
-   passing the STMT, the base of the operand and DATA to it.  The base
 
28746
-   will be either a decl, an indirect reference (including TARGET_MEM_REF)
 
28747
-   or the argument of an address expression.
 
28748
+   passing the STMT, the base of the operand, the operand itself containing
 
28749
+   the base and DATA to it.  The base will be either a decl, an indirect
 
28750
+   reference (including TARGET_MEM_REF) or the argument of an address
 
28751
+   expression.
 
28752
    Returns the results of these callbacks or'ed.  */
 
28753
 
 
28754
 bool
 
28755
 walk_stmt_load_store_addr_ops (gimple stmt, void *data,
 
28756
-                              bool (*visit_load)(gimple, tree, void *),
 
28757
-                              bool (*visit_store)(gimple, tree, void *),
 
28758
-                              bool (*visit_addr)(gimple, tree, void *))
 
28759
+                              walk_stmt_load_store_addr_fn visit_load,
 
28760
+                              walk_stmt_load_store_addr_fn visit_store,
 
28761
+                              walk_stmt_load_store_addr_fn visit_addr)
 
28762
 {
 
28763
   bool ret = false;
 
28764
   unsigned i;
 
28765
   if (gimple_assign_single_p (stmt))
 
28766
     {
 
28767
-      tree lhs, rhs;
 
28768
+      tree lhs, rhs, arg;
 
28769
       if (visit_store)
 
28770
        {
 
28771
-         lhs = get_base_loadstore (gimple_assign_lhs (stmt));
 
28772
+         arg = gimple_assign_lhs (stmt);
 
28773
+         lhs = get_base_loadstore (arg);
 
28774
          if (lhs)
 
28775
-           ret |= visit_store (stmt, lhs, data);
 
28776
+           ret |= visit_store (stmt, lhs, arg, data);
 
28777
        }
 
28778
-      rhs = gimple_assign_rhs1 (stmt);
 
28779
+      arg = gimple_assign_rhs1 (stmt);
 
28780
+      rhs = arg;
 
28781
       while (handled_component_p (rhs))
 
28782
        rhs = TREE_OPERAND (rhs, 0);
 
28783
       if (visit_addr)
 
28784
        {
 
28785
          if (TREE_CODE (rhs) == ADDR_EXPR)
 
28786
-           ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), data);
 
28787
+           ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), arg, data);
 
28788
          else if (TREE_CODE (rhs) == TARGET_MEM_REF
 
28789
                   && TREE_CODE (TMR_BASE (rhs)) == ADDR_EXPR)
 
28790
-           ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (rhs), 0), data);
 
28791
+           ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (rhs), 0), arg,
 
28792
+                              data);
 
28793
          else if (TREE_CODE (rhs) == OBJ_TYPE_REF
 
28794
                   && TREE_CODE (OBJ_TYPE_REF_OBJECT (rhs)) == ADDR_EXPR)
 
28795
            ret |= visit_addr (stmt, TREE_OPERAND (OBJ_TYPE_REF_OBJECT (rhs),
 
28796
-                                                  0), data);
 
28797
+                                                  0), arg, data);
 
28798
          else if (TREE_CODE (rhs) == CONSTRUCTOR)
 
28799
            {
 
28800
              unsigned int ix;
 
28801
@@ -3884,23 +3888,23 @@
 
28802
 
 
28803
              FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (rhs), ix, val)
 
28804
                if (TREE_CODE (val) == ADDR_EXPR)
 
28805
-                 ret |= visit_addr (stmt, TREE_OPERAND (val, 0), data);
 
28806
+                 ret |= visit_addr (stmt, TREE_OPERAND (val, 0), arg, data);
 
28807
                else if (TREE_CODE (val) == OBJ_TYPE_REF
 
28808
                         && TREE_CODE (OBJ_TYPE_REF_OBJECT (val)) == ADDR_EXPR)
 
28809
                  ret |= visit_addr (stmt,
 
28810
                                     TREE_OPERAND (OBJ_TYPE_REF_OBJECT (val),
 
28811
-                                                  0), data);
 
28812
+                                                  0), arg, data);
 
28813
            }
 
28814
           lhs = gimple_assign_lhs (stmt);
 
28815
          if (TREE_CODE (lhs) == TARGET_MEM_REF
 
28816
               && TREE_CODE (TMR_BASE (lhs)) == ADDR_EXPR)
 
28817
-            ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (lhs), 0), data);
 
28818
+           ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (lhs), 0), lhs, data);
 
28819
        }
 
28820
       if (visit_load)
 
28821
        {
 
28822
          rhs = get_base_loadstore (rhs);
 
28823
          if (rhs)
 
28824
-           ret |= visit_load (stmt, rhs, data);
 
28825
+           ret |= visit_load (stmt, rhs, arg, data);
 
28826
        }
 
28827
     }
 
28828
   else if (visit_addr
 
28829
@@ -3913,7 +3917,7 @@
 
28830
          if (op == NULL_TREE)
 
28831
            ;
 
28832
          else if (TREE_CODE (op) == ADDR_EXPR)
 
28833
-           ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
 
28834
+           ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
 
28835
          /* COND_EXPR and VCOND_EXPR rhs1 argument is a comparison
 
28836
             tree with two operands.  */
 
28837
          else if (i == 1 && COMPARISON_CLASS_P (op))
 
28838
@@ -3920,10 +3924,10 @@
 
28839
            {
 
28840
              if (TREE_CODE (TREE_OPERAND (op, 0)) == ADDR_EXPR)
 
28841
                ret |= visit_addr (stmt, TREE_OPERAND (TREE_OPERAND (op, 0),
 
28842
-                                                      0), data);
 
28843
+                                                      0), op, data);
 
28844
              if (TREE_CODE (TREE_OPERAND (op, 1)) == ADDR_EXPR)
 
28845
                ret |= visit_addr (stmt, TREE_OPERAND (TREE_OPERAND (op, 1),
 
28846
-                                                      0), data);
 
28847
+                                                      0), op, data);
 
28848
            }
 
28849
        }
 
28850
     }
 
28851
@@ -3931,26 +3935,26 @@
 
28852
     {
 
28853
       if (visit_store)
 
28854
        {
 
28855
-         tree lhs = gimple_call_lhs (stmt);
 
28856
-         if (lhs)
 
28857
+         tree arg = gimple_call_lhs (stmt);
 
28858
+         if (arg)
 
28859
            {
 
28860
-             lhs = get_base_loadstore (lhs);
 
28861
+             tree lhs = get_base_loadstore (arg);
 
28862
              if (lhs)
 
28863
-               ret |= visit_store (stmt, lhs, data);
 
28864
+               ret |= visit_store (stmt, lhs, arg, data);
 
28865
            }
 
28866
        }
 
28867
       if (visit_load || visit_addr)
 
28868
        for (i = 0; i < gimple_call_num_args (stmt); ++i)
 
28869
          {
 
28870
-           tree rhs = gimple_call_arg (stmt, i);
 
28871
+           tree arg = gimple_call_arg (stmt, i);
 
28872
            if (visit_addr
 
28873
-               && TREE_CODE (rhs) == ADDR_EXPR)
 
28874
-             ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), data);
 
28875
+               && TREE_CODE (arg) == ADDR_EXPR)
 
28876
+             ret |= visit_addr (stmt, TREE_OPERAND (arg, 0), arg, data);
 
28877
            else if (visit_load)
 
28878
              {
 
28879
-               rhs = get_base_loadstore (rhs);
 
28880
+               tree rhs = get_base_loadstore (arg);
 
28881
                if (rhs)
 
28882
-                 ret |= visit_load (stmt, rhs, data);
 
28883
+                 ret |= visit_load (stmt, rhs, arg, data);
 
28884
              }
 
28885
          }
 
28886
       if (visit_addr
 
28887
@@ -3957,12 +3961,13 @@
 
28888
          && gimple_call_chain (stmt)
 
28889
          && TREE_CODE (gimple_call_chain (stmt)) == ADDR_EXPR)
 
28890
        ret |= visit_addr (stmt, TREE_OPERAND (gimple_call_chain (stmt), 0),
 
28891
-                          data);
 
28892
+                          gimple_call_chain (stmt), data);
 
28893
       if (visit_addr
 
28894
          && gimple_call_return_slot_opt_p (stmt)
 
28895
          && gimple_call_lhs (stmt) != NULL_TREE
 
28896
          && TREE_ADDRESSABLE (TREE_TYPE (gimple_call_lhs (stmt))))
 
28897
-       ret |= visit_addr (stmt, gimple_call_lhs (stmt), data);
 
28898
+       ret |= visit_addr (stmt, gimple_call_lhs (stmt),
 
28899
+                          gimple_call_lhs (stmt), data);
 
28900
     }
 
28901
   else if (gimple_code (stmt) == GIMPLE_ASM)
 
28902
     {
 
28903
@@ -3978,7 +3983,7 @@
 
28904
            tree link = gimple_asm_output_op (stmt, i);
 
28905
            tree op = get_base_loadstore (TREE_VALUE (link));
 
28906
            if (op && visit_store)
 
28907
-             ret |= visit_store (stmt, op, data);
 
28908
+             ret |= visit_store (stmt, op, TREE_VALUE (link), data);
 
28909
            if (visit_addr)
 
28910
              {
 
28911
                constraint = TREE_STRING_POINTER
 
28912
@@ -3987,7 +3992,7 @@
 
28913
                parse_output_constraint (&constraint, i, 0, 0, &allows_mem,
 
28914
                                         &allows_reg, &is_inout);
 
28915
                if (op && !allows_reg && allows_mem)
 
28916
-                 ret |= visit_addr (stmt, op, data);
 
28917
+                 ret |= visit_addr (stmt, op, TREE_VALUE (link), data);
 
28918
              }
 
28919
          }
 
28920
       if (visit_load || visit_addr)
 
28921
@@ -3997,7 +4002,7 @@
 
28922
            tree op = TREE_VALUE (link);
 
28923
            if (visit_addr
 
28924
                && TREE_CODE (op) == ADDR_EXPR)
 
28925
-             ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
 
28926
+             ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
 
28927
            else if (visit_load || visit_addr)
 
28928
              {
 
28929
                op = get_base_loadstore (op);
 
28930
@@ -4004,7 +4009,7 @@
 
28931
                if (op)
 
28932
                  {
 
28933
                    if (visit_load)
 
28934
-                     ret |= visit_load (stmt, op, data);
 
28935
+                     ret |= visit_load (stmt, op, TREE_VALUE (link), data);
 
28936
                    if (visit_addr)
 
28937
                      {
 
28938
                        constraint = TREE_STRING_POINTER
 
28939
@@ -4013,7 +4018,8 @@
 
28940
                                                0, oconstraints,
 
28941
                                                &allows_mem, &allows_reg);
 
28942
                        if (!allows_reg && allows_mem)
 
28943
-                         ret |= visit_addr (stmt, op, data);
 
28944
+                         ret |= visit_addr (stmt, op, TREE_VALUE (link),
 
28945
+                                            data);
 
28946
                      }
 
28947
                  }
 
28948
              }
 
28949
@@ -4026,12 +4032,12 @@
 
28950
        {
 
28951
          if (visit_addr
 
28952
              && TREE_CODE (op) == ADDR_EXPR)
 
28953
-           ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
 
28954
+           ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
 
28955
          else if (visit_load)
 
28956
            {
 
28957
-             op = get_base_loadstore (op);
 
28958
-             if (op)
 
28959
-               ret |= visit_load (stmt, op, data);
 
28960
+             tree base = get_base_loadstore (op);
 
28961
+             if (base)
 
28962
+               ret |= visit_load (stmt, base, op, data);
 
28963
            }
 
28964
        }
 
28965
     }
 
28966
@@ -4042,7 +4048,7 @@
 
28967
        {
 
28968
          tree op = PHI_ARG_DEF (stmt, i);
 
28969
          if (TREE_CODE (op) == ADDR_EXPR)
 
28970
-           ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
 
28971
+           ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
 
28972
        }
 
28973
     }
 
28974
   else if (visit_addr
 
28975
@@ -4050,7 +4056,7 @@
 
28976
     {
 
28977
       tree op = gimple_goto_dest (stmt);
 
28978
       if (TREE_CODE (op) == ADDR_EXPR)
 
28979
-       ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
 
28980
+       ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
 
28981
     }
 
28982
 
 
28983
   return ret;
 
28984
@@ -4061,8 +4067,8 @@
 
28985
 
 
28986
 bool
 
28987
 walk_stmt_load_store_ops (gimple stmt, void *data,
 
28988
-                         bool (*visit_load)(gimple, tree, void *),
 
28989
-                         bool (*visit_store)(gimple, tree, void *))
 
28990
+                         walk_stmt_load_store_addr_fn visit_load,
 
28991
+                         walk_stmt_load_store_addr_fn visit_store)
 
28992
 {
 
28993
   return walk_stmt_load_store_addr_ops (stmt, data,
 
28994
                                        visit_load, visit_store, NULL);
 
28995
@@ -4071,8 +4077,7 @@
 
28996
 /* Helper for gimple_ior_addresses_taken_1.  */
 
28997
 
 
28998
 static bool
 
28999
-gimple_ior_addresses_taken_1 (gimple stmt ATTRIBUTE_UNUSED,
 
29000
-                             tree addr, void *data)
 
29001
+gimple_ior_addresses_taken_1 (gimple, tree addr, tree, void *data)
 
29002
 {
 
29003
   bitmap addresses_taken = (bitmap)data;
 
29004
   addr = get_base_address (addr);
 
29005
Index: gcc/tree-ssa-structalias.c
 
29006
===================================================================
 
29007
--- a/src/gcc/tree-ssa-structalias.c    (.../tags/gcc_4_8_2_release)
 
29008
+++ b/src/gcc/tree-ssa-structalias.c    (.../branches/gcc-4_8-branch)
 
29009
@@ -949,24 +949,27 @@
 
29010
        bitmap_set_bit (result, i);
 
29011
       else
 
29012
        {
 
29013
-         unsigned HOST_WIDE_INT fieldoffset = vi->offset + offset;
 
29014
+         HOST_WIDE_INT fieldoffset = vi->offset + offset;
 
29015
+         unsigned HOST_WIDE_INT size = vi->size;
 
29016
 
 
29017
          /* If the offset makes the pointer point to before the
 
29018
             variable use offset zero for the field lookup.  */
 
29019
-         if (offset < 0
 
29020
-             && fieldoffset > vi->offset)
 
29021
-           fieldoffset = 0;
 
29022
-
 
29023
-         if (offset != 0)
 
29024
+         if (fieldoffset < 0)
 
29025
+           vi = lookup_vi_for_tree (vi->decl);
 
29026
+         else
 
29027
            vi = first_or_preceding_vi_for_offset (vi, fieldoffset);
 
29028
 
 
29029
-         bitmap_set_bit (result, vi->id);
 
29030
-         /* If the result is not exactly at fieldoffset include the next
 
29031
-            field as well.  See get_constraint_for_ptr_offset for more
 
29032
-            rationale.  */
 
29033
-         if (vi->offset != fieldoffset
 
29034
-             && vi->next != NULL)
 
29035
-           bitmap_set_bit (result, vi->next->id);
 
29036
+         do
 
29037
+           {
 
29038
+             bitmap_set_bit (result, vi->id);
 
29039
+             if (!vi->next)
 
29040
+               break;
 
29041
+
 
29042
+             /* We have to include all fields that overlap the current field
 
29043
+                shifted by offset.  */
 
29044
+             vi = vi->next;
 
29045
+           }
 
29046
+         while (vi->offset < fieldoffset + size);
 
29047
        }
 
29048
     }
 
29049
 
 
29050
@@ -1607,16 +1610,21 @@
 
29051
     {
 
29052
       varinfo_t v = get_varinfo (j);
 
29053
       HOST_WIDE_INT fieldoffset = v->offset + roffset;
 
29054
+      unsigned HOST_WIDE_INT size = v->size;
 
29055
       unsigned int t;
 
29056
 
 
29057
       if (v->is_full_var)
 
29058
-       fieldoffset = v->offset;
 
29059
+       ;
 
29060
       else if (roffset != 0)
 
29061
-       v = first_vi_for_offset (v, fieldoffset);
 
29062
-      /* If the access is outside of the variable we can ignore it.  */
 
29063
-      if (!v)
 
29064
-       continue;
 
29065
+       {
 
29066
+         if (fieldoffset < 0)
 
29067
+           v = lookup_vi_for_tree (v->decl);
 
29068
+         else
 
29069
+           v = first_or_preceding_vi_for_offset (v, fieldoffset);
 
29070
+       }
 
29071
 
 
29072
+      /* We have to include all fields that overlap the current field
 
29073
+        shifted by roffset.  */
 
29074
       do
 
29075
        {
 
29076
          t = find (v->id);
 
29077
@@ -1633,16 +1641,13 @@
 
29078
                   && add_graph_edge (graph, lhs, t))
 
29079
            flag |= bitmap_ior_into (sol, get_varinfo (t)->solution);
 
29080
 
 
29081
-         /* If the variable is not exactly at the requested offset
 
29082
-            we have to include the next one.  */
 
29083
-         if (v->offset == (unsigned HOST_WIDE_INT)fieldoffset
 
29084
+         if (v->is_full_var
 
29085
              || v->next == NULL)
 
29086
            break;
 
29087
 
 
29088
          v = v->next;
 
29089
-         fieldoffset = v->offset;
 
29090
        }
 
29091
-      while (1);
 
29092
+      while (v->offset < fieldoffset + size);
 
29093
     }
 
29094
 
 
29095
 done:
 
29096
@@ -1705,15 +1710,20 @@
 
29097
       varinfo_t v = get_varinfo (j);
 
29098
       unsigned int t;
 
29099
       HOST_WIDE_INT fieldoffset = v->offset + loff;
 
29100
+      unsigned HOST_WIDE_INT size = v->size;
 
29101
 
 
29102
       if (v->is_full_var)
 
29103
-       fieldoffset = v->offset;
 
29104
+       ;
 
29105
       else if (loff != 0)
 
29106
-       v = first_vi_for_offset (v, fieldoffset);
 
29107
-      /* If the access is outside of the variable we can ignore it.  */
 
29108
-      if (!v)
 
29109
-       continue;
 
29110
+       {
 
29111
+         if (fieldoffset < 0)
 
29112
+           v = lookup_vi_for_tree (v->decl);
 
29113
+         else
 
29114
+           v = first_or_preceding_vi_for_offset (v, fieldoffset);
 
29115
+       }
 
29116
 
 
29117
+      /* We have to include all fields that overlap the current field
 
29118
+        shifted by loff.  */
 
29119
       do
 
29120
        {
 
29121
          if (v->may_have_pointers)
 
29122
@@ -1739,16 +1749,13 @@
 
29123
                bitmap_set_bit (changed, t);
 
29124
            }
 
29125
 
 
29126
-         /* If the variable is not exactly at the requested offset
 
29127
-            we have to include the next one.  */
 
29128
-         if (v->offset == (unsigned HOST_WIDE_INT)fieldoffset
 
29129
+         if (v->is_full_var
 
29130
              || v->next == NULL)
 
29131
            break;
 
29132
 
 
29133
          v = v->next;
 
29134
-         fieldoffset = v->offset;
 
29135
        }
 
29136
-      while (1);
 
29137
+      while (v->offset < fieldoffset + size);
 
29138
     }
 
29139
 }
 
29140
 
 
29141
@@ -2997,35 +3004,30 @@
 
29142
          varinfo_t temp;
 
29143
          unsigned HOST_WIDE_INT offset = curr->offset + rhsoffset;
 
29144
 
 
29145
-         /* Search the sub-field which overlaps with the
 
29146
-            pointed-to offset.  If the result is outside of the variable
 
29147
-            we have to provide a conservative result, as the variable is
 
29148
-            still reachable from the resulting pointer (even though it
 
29149
-            technically cannot point to anything).  The last and first
 
29150
-            sub-fields are such conservative results.
 
29151
-            ???  If we always had a sub-field for &object + 1 then
 
29152
-            we could represent this in a more precise way.  */
 
29153
+         /* If curr->offset + rhsoffset is less than zero adjust it.  */
 
29154
          if (rhsoffset < 0
 
29155
              && curr->offset < offset)
 
29156
            offset = 0;
 
29157
+
 
29158
+         /* We have to include all fields that overlap the current
 
29159
+            field shifted by rhsoffset.  And we include at least
 
29160
+            the last or the first field of the variable to represent
 
29161
+            reachability of off-bound addresses, in particular &object + 1,
 
29162
+            conservatively correct.  */
 
29163
          temp = first_or_preceding_vi_for_offset (curr, offset);
 
29164
-
 
29165
-         /* If the found variable is not exactly at the pointed to
 
29166
-            result, we have to include the next variable in the
 
29167
-            solution as well.  Otherwise two increments by offset / 2
 
29168
-            do not result in the same or a conservative superset
 
29169
-            solution.  */
 
29170
-         if (temp->offset != offset
 
29171
-             && temp->next != NULL)
 
29172
+         c.var = temp->id;
 
29173
+         c.offset = 0;
 
29174
+         temp = temp->next;
 
29175
+         while (temp
 
29176
+                && temp->offset < offset + curr->size)
 
29177
            {
 
29178
              struct constraint_expr c2;
 
29179
-             c2.var = temp->next->id;
 
29180
+             c2.var = temp->id;
 
29181
              c2.type = ADDRESSOF;
 
29182
              c2.offset = 0;
 
29183
              results->safe_push (c2);
 
29184
+             temp = temp->next;
 
29185
            }
 
29186
-         c.var = temp->id;
 
29187
-         c.offset = 0;
 
29188
        }
 
29189
       else
 
29190
        c.offset = rhsoffset;
 
29191
Index: gcc/gimple.h
 
29192
===================================================================
 
29193
--- a/src/gcc/gimple.h  (.../tags/gcc_4_8_2_release)
 
29194
+++ b/src/gcc/gimple.h  (.../branches/gcc-4_8-branch)
 
29195
@@ -176,6 +176,9 @@
 
29196
   /* Nonzero if this statement contains volatile operands.  */
 
29197
   unsigned has_volatile_ops    : 1;
 
29198
 
 
29199
+  /* Padding to get subcode to 16 bit alignment.  */
 
29200
+  unsigned pad                 : 1;
 
29201
+
 
29202
   /* The SUBCODE field can be used for tuple-specific flags for tuples
 
29203
      that do not require subcodes.  Note that SUBCODE should be at
 
29204
      least as wide as tree codes, as several tuples store tree codes
 
29205
@@ -888,13 +891,14 @@
 
29206
 extern alias_set_type gimple_get_alias_set (tree);
 
29207
 extern void count_uses_and_derefs (tree, gimple, unsigned *, unsigned *,
 
29208
                                   unsigned *);
 
29209
+typedef bool (*walk_stmt_load_store_addr_fn) (gimple, tree, tree, void *);
 
29210
 extern bool walk_stmt_load_store_addr_ops (gimple, void *,
 
29211
-                                          bool (*)(gimple, tree, void *),
 
29212
-                                          bool (*)(gimple, tree, void *),
 
29213
-                                          bool (*)(gimple, tree, void *));
 
29214
+                                          walk_stmt_load_store_addr_fn,
 
29215
+                                          walk_stmt_load_store_addr_fn,
 
29216
+                                          walk_stmt_load_store_addr_fn);
 
29217
 extern bool walk_stmt_load_store_ops (gimple, void *,
 
29218
-                                     bool (*)(gimple, tree, void *),
 
29219
-                                     bool (*)(gimple, tree, void *));
 
29220
+                                     walk_stmt_load_store_addr_fn,
 
29221
+                                     walk_stmt_load_store_addr_fn);
 
29222
 extern bool gimple_ior_addresses_taken (bitmap, gimple);
 
29223
 extern bool gimple_call_builtin_p (gimple, enum built_in_class);
 
29224
 extern bool gimple_call_builtin_p (gimple, enum built_in_function);
 
29225
Index: gcc/tree-cfg.c
 
29226
===================================================================
 
29227
--- a/src/gcc/tree-cfg.c        (.../tags/gcc_4_8_2_release)
 
29228
+++ b/src/gcc/tree-cfg.c        (.../branches/gcc-4_8-branch)
 
29229
@@ -104,7 +104,6 @@
 
29230
 static void assign_discriminator (location_t, basic_block);
 
29231
 static edge gimple_redirect_edge_and_branch (edge, basic_block);
 
29232
 static edge gimple_try_redirect_by_replacing_jump (edge, basic_block);
 
29233
-static unsigned int split_critical_edges (void);
 
29234
 
 
29235
 /* Various helpers.  */
 
29236
 static inline bool stmt_starts_bb_p (gimple, gimple);
 
29237
@@ -1535,6 +1534,11 @@
 
29238
 
 
29239
   FOR_EACH_IMM_USE_STMT (stmt, imm_iter, name)
 
29240
     {
 
29241
+      /* Mark the block if we change the last stmt in it.  */
 
29242
+      if (cfgcleanup_altered_bbs
 
29243
+         && stmt_ends_bb_p (stmt))
 
29244
+       bitmap_set_bit (cfgcleanup_altered_bbs, gimple_bb (stmt)->index);
 
29245
+
 
29246
       FOR_EACH_IMM_USE_ON_STMT (use, imm_iter)
 
29247
         {
 
29248
          replace_exp (use, val);
 
29249
@@ -1559,11 +1563,6 @@
 
29250
          gimple orig_stmt = stmt;
 
29251
          size_t i;
 
29252
 
 
29253
-         /* Mark the block if we changed the last stmt in it.  */
 
29254
-         if (cfgcleanup_altered_bbs
 
29255
-             && stmt_ends_bb_p (stmt))
 
29256
-           bitmap_set_bit (cfgcleanup_altered_bbs, gimple_bb (stmt)->index);
 
29257
-
 
29258
          /* FIXME.  It shouldn't be required to keep TREE_CONSTANT
 
29259
             on ADDR_EXPRs up-to-date on GIMPLE.  Propagation will
 
29260
             only change sth from non-invariant to invariant, and only
 
29261
@@ -3513,11 +3512,10 @@
 
29262
     case PLUS_EXPR:
 
29263
     case MINUS_EXPR:
 
29264
       {
 
29265
-       /* We use regular PLUS_EXPR and MINUS_EXPR for vectors.
 
29266
-          ???  This just makes the checker happy and may not be what is
 
29267
-          intended.  */
 
29268
-       if (TREE_CODE (lhs_type) == VECTOR_TYPE
 
29269
-           && POINTER_TYPE_P (TREE_TYPE (lhs_type)))
 
29270
+       tree lhs_etype = lhs_type;
 
29271
+       tree rhs1_etype = rhs1_type;
 
29272
+       tree rhs2_etype = rhs2_type;
 
29273
+       if (TREE_CODE (lhs_type) == VECTOR_TYPE)
 
29274
          {
 
29275
            if (TREE_CODE (rhs1_type) != VECTOR_TYPE
 
29276
                || TREE_CODE (rhs2_type) != VECTOR_TYPE)
 
29277
@@ -3525,22 +3523,13 @@
 
29278
                error ("invalid non-vector operands to vector valued plus");
 
29279
                return true;
 
29280
              }
 
29281
-           lhs_type = TREE_TYPE (lhs_type);
 
29282
-           rhs1_type = TREE_TYPE (rhs1_type);
 
29283
-           rhs2_type = TREE_TYPE (rhs2_type);
 
29284
-           /* PLUS_EXPR is commutative, so we might end up canonicalizing
 
29285
-              the pointer to 2nd place.  */
 
29286
-           if (POINTER_TYPE_P (rhs2_type))
 
29287
-             {
 
29288
-               tree tem = rhs1_type;
 
29289
-               rhs1_type = rhs2_type;
 
29290
-               rhs2_type = tem;
 
29291
-             }
 
29292
-           goto do_pointer_plus_expr_check;
 
29293
+           lhs_etype = TREE_TYPE (lhs_type);
 
29294
+           rhs1_etype = TREE_TYPE (rhs1_type);
 
29295
+           rhs2_etype = TREE_TYPE (rhs2_type);
 
29296
          }
 
29297
-       if (POINTER_TYPE_P (lhs_type)
 
29298
-           || POINTER_TYPE_P (rhs1_type)
 
29299
-           || POINTER_TYPE_P (rhs2_type))
 
29300
+       if (POINTER_TYPE_P (lhs_etype)
 
29301
+           || POINTER_TYPE_P (rhs1_etype)
 
29302
+           || POINTER_TYPE_P (rhs2_etype))
 
29303
          {
 
29304
            error ("invalid (pointer) operands to plus/minus");
 
29305
            return true;
 
29306
@@ -3552,7 +3541,6 @@
 
29307
 
 
29308
     case POINTER_PLUS_EXPR:
 
29309
       {
 
29310
-do_pointer_plus_expr_check:
 
29311
        if (!POINTER_TYPE_P (rhs1_type)
 
29312
            || !useless_type_conversion_p (lhs_type, rhs1_type)
 
29313
            || !ptrofftype_p (rhs2_type))
 
29314
@@ -7658,7 +7646,7 @@
 
29315
 
 
29316
 /* Split all critical edges.  */
 
29317
 
 
29318
-static unsigned int
 
29319
+unsigned int
 
29320
 split_critical_edges (void)
 
29321
 {
 
29322
   basic_block bb;
 
29323
Index: gcc/passes.c
 
29324
===================================================================
 
29325
--- a/src/gcc/passes.c  (.../tags/gcc_4_8_2_release)
 
29326
+++ b/src/gcc/passes.c  (.../branches/gcc-4_8-branch)
 
29327
@@ -1398,6 +1398,7 @@
 
29328
       /* After CCP we rewrite no longer addressed locals into SSA
 
29329
         form if possible.  */
 
29330
       NEXT_PASS (pass_forwprop);
 
29331
+      NEXT_PASS (pass_object_sizes);
 
29332
       /* pass_build_alias is a dummy pass that ensures that we
 
29333
         execute TODO_rebuild_alias at this point.  */
 
29334
       NEXT_PASS (pass_build_alias);
 
29335
@@ -1435,7 +1436,6 @@
 
29336
       NEXT_PASS (pass_dce);
 
29337
       NEXT_PASS (pass_forwprop);
 
29338
       NEXT_PASS (pass_phiopt);
 
29339
-      NEXT_PASS (pass_object_sizes);
 
29340
       NEXT_PASS (pass_strlen);
 
29341
       NEXT_PASS (pass_ccp);
 
29342
       /* After CCP we rewrite no longer addressed locals into SSA
 
29343
Index: gcc/tree-ssa-reassoc.c
 
29344
===================================================================
 
29345
--- a/src/gcc/tree-ssa-reassoc.c        (.../tags/gcc_4_8_2_release)
 
29346
+++ b/src/gcc/tree-ssa-reassoc.c        (.../branches/gcc-4_8-branch)
 
29347
@@ -1980,8 +1980,15 @@
 
29348
 
 
29349
   tem = fold_convert_loc (loc, optype, tem);
 
29350
   gsi = gsi_for_stmt (stmt);
 
29351
-  tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, true,
 
29352
-                                 GSI_SAME_STMT);
 
29353
+  /* In rare cases range->exp can be equal to lhs of stmt.
 
29354
+     In that case we have to insert after the stmt rather then before
 
29355
+     it.  */
 
29356
+  if (op == range->exp)
 
29357
+    tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, false,
 
29358
+                                   GSI_SAME_STMT);
 
29359
+  else
 
29360
+    tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, true,
 
29361
+                                   GSI_SAME_STMT);
 
29362
 
 
29363
   /* If doing inter-bb range test optimization, update the
 
29364
      stmts immediately.  Start with changing the first range test
 
29365
Index: gcc/config/s390/s390.c
 
29366
===================================================================
 
29367
--- a/src/gcc/config/s390/s390.c        (.../tags/gcc_4_8_2_release)
 
29368
+++ b/src/gcc/config/s390/s390.c        (.../branches/gcc-4_8-branch)
 
29369
@@ -407,6 +407,65 @@
 
29370
    bytes on a z10 (or higher) CPU.  */
 
29371
 #define PREDICT_DISTANCE (TARGET_Z10 ? 384 : 2048)
 
29372
 
 
29373
+static const int s390_hotpatch_trampoline_halfwords_default = 12;
 
29374
+static const int s390_hotpatch_trampoline_halfwords_max = 1000000;
 
29375
+static int s390_hotpatch_trampoline_halfwords = -1;
 
29376
+
 
29377
+/* Return the argument of the given hotpatch attribute or the default value if
 
29378
+   no argument is present.  */
 
29379
+
 
29380
+static inline int
 
29381
+get_hotpatch_attribute (tree hotpatch_attr)
 
29382
+{
 
29383
+  const_tree args;
 
29384
+
 
29385
+  args = TREE_VALUE (hotpatch_attr);
 
29386
+
 
29387
+  return (args) ?
 
29388
+    TREE_INT_CST_LOW (TREE_VALUE (args)):
 
29389
+    s390_hotpatch_trampoline_halfwords_default;
 
29390
+}
 
29391
+
 
29392
+/* Check whether the hotpatch attribute is applied to a function and, if it has
 
29393
+   an argument, the argument is valid.  */
 
29394
+
 
29395
+static tree
 
29396
+s390_handle_hotpatch_attribute (tree *node, tree name, tree args,
 
29397
+                               int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
 
29398
+{
 
29399
+  if (TREE_CODE (*node) != FUNCTION_DECL)
 
29400
+    {
 
29401
+      warning (OPT_Wattributes, "%qE attribute only applies to functions",
 
29402
+              name);
 
29403
+      *no_add_attrs = true;
 
29404
+    }
 
29405
+  else if (args)
 
29406
+    {
 
29407
+      tree expr = TREE_VALUE (args);
 
29408
+
 
29409
+      if (TREE_CODE (expr) != INTEGER_CST
 
29410
+         || !INTEGRAL_TYPE_P (TREE_TYPE (expr))
 
29411
+         || TREE_INT_CST_HIGH (expr) != 0
 
29412
+         || TREE_INT_CST_LOW (expr) > (unsigned int)
 
29413
+         s390_hotpatch_trampoline_halfwords_max)
 
29414
+       {
 
29415
+         error ("requested %qE attribute is not a non-negative integer"
 
29416
+                " constant or too large (max. %d)", name,
 
29417
+                s390_hotpatch_trampoline_halfwords_max);
 
29418
+         *no_add_attrs = true;
 
29419
+       }
 
29420
+    }
 
29421
+
 
29422
+  return NULL_TREE;
 
29423
+}
 
29424
+
 
29425
+static const struct attribute_spec s390_attribute_table[] = {
 
29426
+  { "hotpatch", 0, 1, true, false, false, s390_handle_hotpatch_attribute, false
 
29427
+  },
 
29428
+  /* End element.  */
 
29429
+  { NULL,        0, 0, false, false, false, NULL, false }
 
29430
+};
 
29431
+
 
29432
 /* Return the alignment for LABEL.  We default to the -falign-labels
 
29433
    value except for the literal pool base label.  */
 
29434
 int
 
29435
@@ -883,7 +942,8 @@
 
29436
        {
 
29437
          /* For CCRAWmode put the required cc mask into the second
 
29438
             operand.  */
 
29439
-         if (GET_MODE (XVECEXP (*op0, 0, 0)) == CCRAWmode)
 
29440
+        if (GET_MODE (XVECEXP (*op0, 0, 0)) == CCRAWmode
 
29441
+            && INTVAL (*op1) >= 0 && INTVAL (*op1) <= 3)
 
29442
            *op1 = gen_rtx_CONST_INT (VOIDmode, 1 << (3 - INTVAL (*op1)));
 
29443
          *op0 = XVECEXP (*op0, 0, 0);
 
29444
          *code = new_code;
 
29445
@@ -1594,6 +1654,46 @@
 
29446
 static void
 
29447
 s390_option_override (void)
 
29448
 {
 
29449
+  unsigned int i;
 
29450
+  cl_deferred_option *opt;
 
29451
+  vec<cl_deferred_option> *v =
 
29452
+    (vec<cl_deferred_option> *) s390_deferred_options;
 
29453
+
 
29454
+  if (v)
 
29455
+    FOR_EACH_VEC_ELT (*v, i, opt)
 
29456
+      {
 
29457
+       switch (opt->opt_index)
 
29458
+         {
 
29459
+         case OPT_mhotpatch:
 
29460
+           s390_hotpatch_trampoline_halfwords = (opt->value) ?
 
29461
+             s390_hotpatch_trampoline_halfwords_default : -1;
 
29462
+           break;
 
29463
+         case OPT_mhotpatch_:
 
29464
+           {
 
29465
+             int val;
 
29466
+
 
29467
+             val = integral_argument (opt->arg);
 
29468
+             if (val == -1)
 
29469
+               {
 
29470
+                 /* argument is not a plain number */
 
29471
+                 error ("argument to %qs should be a non-negative integer",
 
29472
+                        "-mhotpatch=");
 
29473
+                 break;
 
29474
+               }
 
29475
+             else if (val > s390_hotpatch_trampoline_halfwords_max)
 
29476
+               {
 
29477
+                 error ("argument to %qs is too large (max. %d)",
 
29478
+                        "-mhotpatch=", s390_hotpatch_trampoline_halfwords_max);
 
29479
+                 break;
 
29480
+               }
 
29481
+             s390_hotpatch_trampoline_halfwords = val;
 
29482
+             break;
 
29483
+           }
 
29484
+         default:
 
29485
+           gcc_unreachable ();
 
29486
+         }
 
29487
+      }
 
29488
+
 
29489
   /* Set up function hooks.  */
 
29490
   init_machine_status = s390_init_machine_status;
 
29491
 
 
29492
@@ -3015,15 +3115,22 @@
 
29493
         prefer ADDR_REGS.  If 'class' is not a superset
 
29494
         of ADDR_REGS, e.g. FP_REGS, reject this reload.  */
 
29495
       case CONST:
 
29496
-       /* A larl operand with odd addend will get fixed via secondary
 
29497
-          reload.  So don't request it to be pushed into literal
 
29498
-          pool.  */
 
29499
+       /* Symrefs cannot be pushed into the literal pool with -fPIC
 
29500
+          so we *MUST NOT* return NO_REGS for these cases
 
29501
+          (s390_cannot_force_const_mem will return true).  
 
29502
+
 
29503
+          On the other hand we MUST return NO_REGS for symrefs with
 
29504
+          invalid addend which might have been pushed to the literal
 
29505
+          pool (no -fPIC).  Usually we would expect them to be
 
29506
+          handled via secondary reload but this does not happen if
 
29507
+          they are used as literal pool slot replacement in reload
 
29508
+          inheritance (see emit_input_reload_insns).  */
 
29509
        if (TARGET_CPU_ZARCH
 
29510
            && GET_CODE (XEXP (op, 0)) == PLUS
 
29511
            && GET_CODE (XEXP (XEXP(op, 0), 0)) == SYMBOL_REF
 
29512
            && GET_CODE (XEXP (XEXP(op, 0), 1)) == CONST_INT)
 
29513
          {
 
29514
-           if (reg_class_subset_p (ADDR_REGS, rclass))
 
29515
+           if (flag_pic && reg_class_subset_p (ADDR_REGS, rclass))
 
29516
              return ADDR_REGS;
 
29517
            else
 
29518
              return NO_REGS;
 
29519
@@ -4683,7 +4790,7 @@
 
29520
   int smode_bsize, mode_bsize;
 
29521
   rtx op, clobber;
 
29522
 
 
29523
-  if (bitsize + bitpos > GET_MODE_SIZE (mode))
 
29524
+  if (bitsize + bitpos > GET_MODE_BITSIZE (mode))
 
29525
     return false;
 
29526
 
 
29527
   /* Generate INSERT IMMEDIATE (IILL et al).  */
 
29528
@@ -5311,6 +5418,101 @@
 
29529
   gcc_unreachable ();
 
29530
 }
 
29531
 
 
29532
+/* Returns -1 if the function should not be made hotpatchable.  Otherwise it
 
29533
+   returns a number >= 0 that is the desired size of the hotpatch trampoline
 
29534
+   in halfwords. */
 
29535
+
 
29536
+static int s390_function_num_hotpatch_trampoline_halfwords (tree decl,
 
29537
+                                                           bool do_warn)
 
29538
+{
 
29539
+  tree attr;
 
29540
+
 
29541
+  if (DECL_DECLARED_INLINE_P (decl)
 
29542
+      || DECL_ARTIFICIAL (decl)
 
29543
+      || MAIN_NAME_P (DECL_NAME (decl)))
 
29544
+    {
 
29545
+      /* - Explicitly inlined functions cannot be hotpatched.
 
29546
+        - Artificial functions need not be hotpatched.
 
29547
+        - Making the main function hotpatchable is useless. */
 
29548
+      return -1;
 
29549
+    }
 
29550
+  attr = lookup_attribute ("hotpatch", DECL_ATTRIBUTES (decl));
 
29551
+  if (attr || s390_hotpatch_trampoline_halfwords >= 0)
 
29552
+    {
 
29553
+      if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (decl)))
 
29554
+       {
 
29555
+         if (do_warn)
 
29556
+           warning (OPT_Wattributes, "function %qE with the %qs attribute"
 
29557
+                    " is not hotpatchable", DECL_NAME (decl), "always_inline");
 
29558
+         return -1;
 
29559
+       }
 
29560
+      else
 
29561
+       {
 
29562
+         return (attr) ?
 
29563
+           get_hotpatch_attribute (attr) : s390_hotpatch_trampoline_halfwords;
 
29564
+       }
 
29565
+    }
 
29566
+
 
29567
+  return -1;
 
29568
+}
 
29569
+
 
29570
+/* Hook to determine if one function can safely inline another.  */
 
29571
+
 
29572
+static bool
 
29573
+s390_can_inline_p (tree caller, tree callee)
 
29574
+{
 
29575
+  if (s390_function_num_hotpatch_trampoline_halfwords (callee, false) >= 0)
 
29576
+    return false;
 
29577
+
 
29578
+  return default_target_can_inline_p (caller, callee);
 
29579
+}
 
29580
+
 
29581
+/* Write the extra assembler code needed to declare a function properly.  */
 
29582
+
 
29583
+void
 
29584
+s390_asm_output_function_label (FILE *asm_out_file, const char *fname,
 
29585
+                               tree decl)
 
29586
+{
 
29587
+  int hotpatch_trampoline_halfwords = -1;
 
29588
+
 
29589
+  if (decl)
 
29590
+    {
 
29591
+      hotpatch_trampoline_halfwords =
 
29592
+       s390_function_num_hotpatch_trampoline_halfwords (decl, true);
 
29593
+      if (hotpatch_trampoline_halfwords >= 0
 
29594
+         && decl_function_context (decl) != NULL_TREE)
 
29595
+       {
 
29596
+         warning_at (DECL_SOURCE_LOCATION (decl), OPT_mhotpatch,
 
29597
+                     "hotpatching is not compatible with nested functions");
 
29598
+         hotpatch_trampoline_halfwords = -1;
 
29599
+       }
 
29600
+    }
 
29601
+
 
29602
+  if (hotpatch_trampoline_halfwords > 0)
 
29603
+    {
 
29604
+      int i;
 
29605
+
 
29606
+      /* Add a trampoline code area before the function label and initialize it
 
29607
+        with two-byte nop instructions.  This area can be overwritten with code
 
29608
+        that jumps to a patched version of the function.  */
 
29609
+      for (i = 0; i < hotpatch_trampoline_halfwords; i++)
 
29610
+       asm_fprintf (asm_out_file, "\tnopr\t%%r7\n");
 
29611
+      /* Note:  The function label must be aligned so that (a) the bytes of the
 
29612
+        following nop do not cross a cacheline boundary, and (b) a jump address
 
29613
+        (eight bytes for 64 bit targets, 4 bytes for 32 bit targets) can be
 
29614
+        stored directly before the label without crossing a cacheline
 
29615
+        boundary.  All this is necessary to make sure the trampoline code can
 
29616
+        be changed atomically.  */
 
29617
+    }
 
29618
+
 
29619
+  ASM_OUTPUT_LABEL (asm_out_file, fname);
 
29620
+
 
29621
+  /* Output a four-byte nop if hotpatching is enabled.  This can be overwritten
 
29622
+     atomically with a relative backwards jump to the trampoline area.  */
 
29623
+  if (hotpatch_trampoline_halfwords >= 0)
 
29624
+    asm_fprintf (asm_out_file, "\tnop\t0\n");
 
29625
+}
 
29626
+
 
29627
 /* Output machine-dependent UNSPECs occurring in address constant X
 
29628
    in assembler syntax to stdio stream FILE.  Returns true if the
 
29629
    constant X could be recognized, false otherwise.  */
 
29630
@@ -7846,6 +8048,9 @@
 
29631
     {
 
29632
       bb = BASIC_BLOCK (bb_index);
 
29633
 
 
29634
+      if (!bb)
 
29635
+       continue;
 
29636
+
 
29637
       FOR_BB_INSNS (bb, insn)
 
29638
        {
 
29639
          rtx ite, cc, pat, target;
 
29640
@@ -7959,7 +8164,10 @@
 
29641
   if (!result)
 
29642
     return;
 
29643
 
 
29644
-  PATTERN (tbegin_insn) = XVECEXP (PATTERN (tbegin_insn), 0, 0);
 
29645
+  PATTERN (tbegin_insn) = gen_rtx_PARALLEL (VOIDmode,
 
29646
+                           gen_rtvec (2,
 
29647
+                                      XVECEXP (PATTERN (tbegin_insn), 0, 0),
 
29648
+                                      XVECEXP (PATTERN (tbegin_insn), 0, 1)));
 
29649
   INSN_CODE (tbegin_insn) = -1;
 
29650
   df_insn_rescan (tbegin_insn);
 
29651
 
 
29652
@@ -9568,61 +9776,47 @@
 
29653
 void
 
29654
 s390_expand_tbegin (rtx dest, rtx tdb, rtx retry, bool clobber_fprs_p)
 
29655
 {
 
29656
-  const int CC0 = 1 << 3;
 
29657
-  const int CC1 = 1 << 2;
 
29658
-  const int CC3 = 1 << 0;
 
29659
-  rtx abort_label = gen_label_rtx ();
 
29660
-  rtx leave_label = gen_label_rtx ();
 
29661
+  rtx retry_plus_two = gen_reg_rtx (SImode);
 
29662
   rtx retry_reg = gen_reg_rtx (SImode);
 
29663
   rtx retry_label = NULL_RTX;
 
29664
-  rtx jump;
 
29665
-  rtx very_unlikely = GEN_INT (REG_BR_PROB_BASE / 100 - 1);
 
29666
 
 
29667
   if (retry != NULL_RTX)
 
29668
     {
 
29669
       emit_move_insn (retry_reg, retry);
 
29670
+      emit_insn (gen_addsi3 (retry_plus_two, retry_reg, const2_rtx));
 
29671
+      emit_insn (gen_addsi3 (retry_reg, retry_reg, const1_rtx));
 
29672
       retry_label = gen_label_rtx ();
 
29673
       emit_label (retry_label);
 
29674
     }
 
29675
 
 
29676
   if (clobber_fprs_p)
 
29677
-    emit_insn (gen_tbegin_1 (tdb,
 
29678
-                gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK)));
 
29679
+    emit_insn (gen_tbegin_1 (gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK), tdb));
 
29680
   else
 
29681
-    emit_insn (gen_tbegin_nofloat_1 (tdb,
 
29682
-                gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK)));
 
29683
+    emit_insn (gen_tbegin_nofloat_1 (gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK),
 
29684
+                                    tdb));
 
29685
 
 
29686
-  jump = s390_emit_jump (abort_label,
 
29687
-                        gen_rtx_NE (VOIDmode,
 
29688
-                                    gen_rtx_REG (CCRAWmode, CC_REGNUM),
 
29689
-                                    gen_rtx_CONST_INT (VOIDmode, CC0)));
 
29690
-
 
29691
-  JUMP_LABEL (jump) = abort_label;
 
29692
-  LABEL_NUSES (abort_label) = 1;
 
29693
-  add_reg_note (jump, REG_BR_PROB, very_unlikely);
 
29694
-
 
29695
-  /* Initialize CC return value.  */
 
29696
-  emit_move_insn (dest, const0_rtx);
 
29697
-
 
29698
-  s390_emit_jump (leave_label, NULL_RTX);
 
29699
-  LABEL_NUSES (leave_label) = 1;
 
29700
-  emit_barrier ();
 
29701
-
 
29702
-  /* Abort handler code.  */
 
29703
-
 
29704
-  emit_label (abort_label);
 
29705
+  emit_move_insn (dest, gen_rtx_UNSPEC (SImode,
 
29706
+                                       gen_rtvec (1, gen_rtx_REG (CCRAWmode,
 
29707
+                                                                  CC_REGNUM)),
 
29708
+                                       UNSPEC_CC_TO_INT));
 
29709
   if (retry != NULL_RTX)
 
29710
     {
 
29711
+      const int CC0 = 1 << 3;
 
29712
+      const int CC1 = 1 << 2;
 
29713
+      const int CC3 = 1 << 0;
 
29714
+      rtx jump;
 
29715
       rtx count = gen_reg_rtx (SImode);
 
29716
+      rtx leave_label = gen_label_rtx ();
 
29717
+
 
29718
+      /* Exit for success and permanent failures.  */
 
29719
       jump = s390_emit_jump (leave_label,
 
29720
                             gen_rtx_EQ (VOIDmode,
 
29721
                               gen_rtx_REG (CCRAWmode, CC_REGNUM),
 
29722
-                              gen_rtx_CONST_INT (VOIDmode, CC1 | CC3)));
 
29723
-      LABEL_NUSES (leave_label) = 2;
 
29724
-      add_reg_note (jump, REG_BR_PROB, very_unlikely);
 
29725
+                              gen_rtx_CONST_INT (VOIDmode, CC0 | CC1 | CC3)));
 
29726
+      LABEL_NUSES (leave_label) = 1;
 
29727
 
 
29728
       /* CC2 - transient failure. Perform retry with ppa.  */
 
29729
-      emit_move_insn (count, retry);
 
29730
+      emit_move_insn (count, retry_plus_two);
 
29731
       emit_insn (gen_subsi3 (count, count, retry_reg));
 
29732
       emit_insn (gen_tx_assist (count));
 
29733
       jump = emit_jump_insn (gen_doloop_si64 (retry_label,
 
29734
@@ -9630,13 +9824,8 @@
 
29735
                                              retry_reg));
 
29736
       JUMP_LABEL (jump) = retry_label;
 
29737
       LABEL_NUSES (retry_label) = 1;
 
29738
+      emit_label (leave_label);
 
29739
     }
 
29740
-
 
29741
-  emit_move_insn (dest, gen_rtx_UNSPEC (SImode,
 
29742
-                                       gen_rtvec (1, gen_rtx_REG (CCRAWmode,
 
29743
-                                                                  CC_REGNUM)),
 
29744
-                                       UNSPEC_CC_TO_INT));
 
29745
-  emit_label (leave_label);
 
29746
 }
 
29747
 
 
29748
 /* Builtins.  */
 
29749
@@ -9674,6 +9863,9 @@
 
29750
 s390_init_builtins (void)
 
29751
 {
 
29752
   tree ftype, uint64_type;
 
29753
+  tree returns_twice_attr = tree_cons (get_identifier ("returns_twice"),
 
29754
+                                      NULL, NULL);
 
29755
+  tree noreturn_attr = tree_cons (get_identifier ("noreturn"), NULL, NULL);
 
29756
 
 
29757
   /* void foo (void) */
 
29758
   ftype = build_function_type_list (void_type_node, NULL_TREE);
 
29759
@@ -9684,7 +9876,7 @@
 
29760
   ftype = build_function_type_list (void_type_node, integer_type_node,
 
29761
                                    NULL_TREE);
 
29762
   add_builtin_function ("__builtin_tabort", ftype,
 
29763
-                       S390_BUILTIN_TABORT, BUILT_IN_MD, NULL, NULL_TREE);
 
29764
+                       S390_BUILTIN_TABORT, BUILT_IN_MD, NULL, noreturn_attr);
 
29765
   add_builtin_function ("__builtin_tx_assist", ftype,
 
29766
                        S390_BUILTIN_TX_ASSIST, BUILT_IN_MD, NULL, NULL_TREE);
 
29767
 
 
29768
@@ -9691,10 +9883,10 @@
 
29769
   /* int foo (void *) */
 
29770
   ftype = build_function_type_list (integer_type_node, ptr_type_node, NULL_TREE);
 
29771
   add_builtin_function ("__builtin_tbegin", ftype, S390_BUILTIN_TBEGIN,
 
29772
-                       BUILT_IN_MD, NULL, NULL_TREE);
 
29773
+                       BUILT_IN_MD, NULL, returns_twice_attr);
 
29774
   add_builtin_function ("__builtin_tbegin_nofloat", ftype,
 
29775
                        S390_BUILTIN_TBEGIN_NOFLOAT,
 
29776
-                       BUILT_IN_MD, NULL, NULL_TREE);
 
29777
+                       BUILT_IN_MD, NULL, returns_twice_attr);
 
29778
 
 
29779
   /* int foo (void *, int) */
 
29780
   ftype = build_function_type_list (integer_type_node, ptr_type_node,
 
29781
@@ -9702,11 +9894,11 @@
 
29782
   add_builtin_function ("__builtin_tbegin_retry", ftype,
 
29783
                        S390_BUILTIN_TBEGIN_RETRY,
 
29784
                        BUILT_IN_MD,
 
29785
-                       NULL, NULL_TREE);
 
29786
+                       NULL, returns_twice_attr);
 
29787
   add_builtin_function ("__builtin_tbegin_retry_nofloat", ftype,
 
29788
                        S390_BUILTIN_TBEGIN_RETRY_NOFLOAT,
 
29789
                        BUILT_IN_MD,
 
29790
-                       NULL, NULL_TREE);
 
29791
+                       NULL, returns_twice_attr);
 
29792
 
 
29793
   /* int foo (void) */
 
29794
   ftype = build_function_type_list (integer_type_node, NULL_TREE);
 
29795
@@ -11622,6 +11814,12 @@
 
29796
 #undef TARGET_CANONICALIZE_COMPARISON
 
29797
 #define TARGET_CANONICALIZE_COMPARISON s390_canonicalize_comparison
 
29798
 
 
29799
+#undef TARGET_ATTRIBUTE_TABLE
 
29800
+#define TARGET_ATTRIBUTE_TABLE s390_attribute_table
 
29801
+
 
29802
+#undef TARGET_CAN_INLINE_P
 
29803
+#define TARGET_CAN_INLINE_P s390_can_inline_p
 
29804
+
 
29805
 struct gcc_target targetm = TARGET_INITIALIZER;
 
29806
 
 
29807
 #include "gt-s390.h"
 
29808
Index: gcc/config/s390/s390.h
 
29809
===================================================================
 
29810
--- a/src/gcc/config/s390/s390.h        (.../tags/gcc_4_8_2_release)
 
29811
+++ b/src/gcc/config/s390/s390.h        (.../branches/gcc-4_8-branch)
 
29812
@@ -217,7 +217,7 @@
 
29813
 #define STACK_BOUNDARY 64
 
29814
 
 
29815
 /* Allocation boundary (in *bits*) for the code of a function.  */
 
29816
-#define FUNCTION_BOUNDARY 32
 
29817
+#define FUNCTION_BOUNDARY 64
 
29818
 
 
29819
 /* There is no point aligning anything to a rounder boundary than this.  */
 
29820
 #define BIGGEST_ALIGNMENT 64
 
29821
@@ -878,6 +878,9 @@
 
29822
   fputc ('\n', (FILE));                                                        \
 
29823
 } while (0)
 
29824
 
 
29825
+#undef ASM_OUTPUT_FUNCTION_LABEL
 
29826
+#define ASM_OUTPUT_FUNCTION_LABEL(FILE, NAME, DECL) \
 
29827
+  s390_asm_output_function_label (FILE, NAME, DECL)
 
29828
 
 
29829
 /* Miscellaneous parameters.  */
 
29830
 
 
29831
Index: gcc/config/s390/s390.md
 
29832
===================================================================
 
29833
--- a/src/gcc/config/s390/s390.md       (.../tags/gcc_4_8_2_release)
 
29834
+++ b/src/gcc/config/s390/s390.md       (.../branches/gcc-4_8-branch)
 
29835
@@ -147,6 +147,7 @@
 
29836
 
 
29837
    ; Transactional Execution support
 
29838
    UNSPECV_TBEGIN
 
29839
+   UNSPECV_TBEGIN_TDB
 
29840
    UNSPECV_TBEGINC
 
29841
    UNSPECV_TEND
 
29842
    UNSPECV_TABORT
 
29843
@@ -9896,9 +9897,10 @@
 
29844
 
 
29845
 (define_insn "tbegin_1"
 
29846
   [(set (reg:CCRAW CC_REGNUM)
 
29847
-       (unspec_volatile:CCRAW [(match_operand:BLK 0 "memory_operand"    "=Q")
 
29848
-                               (match_operand     1 "const_int_operand" " D")]
 
29849
+       (unspec_volatile:CCRAW [(match_operand 0 "const_int_operand" "D")]
 
29850
                               UNSPECV_TBEGIN))
 
29851
+   (set (match_operand:BLK 1 "memory_operand" "=Q")
 
29852
+       (unspec_volatile:BLK [(match_dup 0)] UNSPECV_TBEGIN_TDB))
 
29853
    (clobber (reg:DF 16))
 
29854
    (clobber (reg:DF 17))
 
29855
    (clobber (reg:DF 18))
 
29856
@@ -9917,18 +9919,19 @@
 
29857
    (clobber (reg:DF 31))]
 
29858
 ; CONST_OK_FOR_CONSTRAINT_P does not work with D constraint since D is
 
29859
 ; not supposed to be used for immediates (see genpreds.c).
 
29860
-  "TARGET_HTM && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 0xffff"
 
29861
-  "tbegin\t%0,%x1"
 
29862
+  "TARGET_HTM && INTVAL (operands[0]) >= 0 && INTVAL (operands[0]) <= 0xffff"
 
29863
+  "tbegin\t%1,%x0"
 
29864
   [(set_attr "op_type" "SIL")])
 
29865
 
 
29866
 ; Same as above but without the FPR clobbers
 
29867
 (define_insn "tbegin_nofloat_1"
 
29868
   [(set (reg:CCRAW CC_REGNUM)
 
29869
-       (unspec_volatile:CCRAW [(match_operand:BLK 0 "memory_operand"    "=Q")
 
29870
-                               (match_operand     1 "const_int_operand" " D")]
 
29871
-                              UNSPECV_TBEGIN))]
 
29872
-  "TARGET_HTM && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 0xffff"
 
29873
-  "tbegin\t%0,%x1"
 
29874
+       (unspec_volatile:CCRAW [(match_operand 0 "const_int_operand" "D")]
 
29875
+                              UNSPECV_TBEGIN))
 
29876
+   (set (match_operand:BLK 1 "memory_operand" "=Q")
 
29877
+       (unspec_volatile:BLK [(match_dup 0)] UNSPECV_TBEGIN_TDB))]
 
29878
+  "TARGET_HTM && INTVAL (operands[0]) >= 0 && INTVAL (operands[0]) <= 0xffff"
 
29879
+  "tbegin\t%1,%x0"
 
29880
   [(set_attr "op_type" "SIL")])
 
29881
 
 
29882
 
 
29883
@@ -10012,15 +10015,12 @@
 
29884
 ; Transaction perform processor assist
 
29885
 
 
29886
 (define_expand "tx_assist"
 
29887
-  [(set (match_dup 1) (const_int 0))
 
29888
-   (unspec_volatile [(match_operand:SI 0 "register_operand" "")
 
29889
-                    (match_dup 1)
 
29890
+  [(unspec_volatile [(match_operand:SI 0 "register_operand" "")
 
29891
+                    (reg:SI GPR0_REGNUM)
 
29892
                     (const_int 1)]
 
29893
                    UNSPECV_PPA)]
 
29894
   "TARGET_HTM"
 
29895
-{
 
29896
-  operands[1] = gen_reg_rtx (SImode);
 
29897
-})
 
29898
+  "")
 
29899
 
 
29900
 (define_insn "*ppa"
 
29901
   [(unspec_volatile [(match_operand:SI 0 "register_operand" "d")
 
29902
@@ -10028,5 +10028,5 @@
 
29903
                     (match_operand 2 "const_int_operand" "I")]
 
29904
                    UNSPECV_PPA)]
 
29905
   "TARGET_HTM && INTVAL (operands[2]) < 16"
 
29906
-  "ppa\t%0,%1,1"
 
29907
+  "ppa\t%0,%1,%2"
 
29908
   [(set_attr "op_type" "RRF")])
 
29909
Index: gcc/config/s390/s390.opt
 
29910
===================================================================
 
29911
--- a/src/gcc/config/s390/s390.opt      (.../tags/gcc_4_8_2_release)
 
29912
+++ b/src/gcc/config/s390/s390.opt      (.../branches/gcc-4_8-branch)
 
29913
@@ -96,6 +96,14 @@
 
29914
 Target Report RejectNegative Negative(msoft-float) InverseMask(SOFT_FLOAT, HARD_FLOAT)
 
29915
 Enable hardware floating point
 
29916
 
 
29917
+mhotpatch
 
29918
+Target Report Var(s390_deferred_options) Defer
 
29919
+Prepend the function label with 12 two-byte Nop instructions, and add a four byte Nop instruction after the label for hotpatching.
 
29920
+
 
29921
+mhotpatch=
 
29922
+Target RejectNegative Report Joined Var(s390_deferred_options) Defer
 
29923
+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.
 
29924
+
 
29925
 mlong-double-128
 
29926
 Target Report RejectNegative Negative(mlong-double-64) Mask(LONG_DOUBLE_128)
 
29927
 Use 128-bit long double
 
29928
Index: gcc/config/s390/htmxlintrin.h
 
29929
===================================================================
 
29930
--- a/src/gcc/config/s390/htmxlintrin.h (.../tags/gcc_4_8_2_release)
 
29931
+++ b/src/gcc/config/s390/htmxlintrin.h (.../branches/gcc-4_8-branch)
 
29932
@@ -33,13 +33,20 @@
 
29933
    the IBM XL compiler.  For documentation please see the "z/OS XL
 
29934
    C/C++ Programming Guide" publically available on the web.  */
 
29935
 
 
29936
-extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 
29937
+/* FIXME: __TM_simple_begin and __TM_begin should be marked
 
29938
+   __always_inline__ as well but this currently produces an error
 
29939
+   since the tbegin builtins are "returns_twice" and setjmp_call_p
 
29940
+   (calls.c) therefore identifies the functions as calling setjmp.
 
29941
+   The tree inliner currently refuses to inline functions calling
 
29942
+   setjmp.  */
 
29943
+
 
29944
+long
 
29945
 __TM_simple_begin ()
 
29946
 {
 
29947
   return __builtin_tbegin_nofloat (0);
 
29948
 }
 
29949
 
 
29950
-extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 
29951
+long
 
29952
 __TM_begin (void* const tdb)
 
29953
 {
 
29954
   return __builtin_tbegin_nofloat (tdb);
 
29955
@@ -78,7 +85,7 @@
 
29956
   if (depth != 0)
 
29957
     return depth;
 
29958
 
 
29959
-  if (tdb->format == 0)
 
29960
+  if (tdb->format != 1)
 
29961
     return 0;
 
29962
   return tdb->nesting_depth;
 
29963
 }
 
29964
@@ -90,7 +97,7 @@
 
29965
 {
 
29966
   struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
 
29967
 
 
29968
-  if (tdb->format == 0)
 
29969
+  if (tdb->format != 1)
 
29970
     return 0;
 
29971
 
 
29972
   return !!(tdb->abort_code >= _HTM_FIRST_USER_ABORT_CODE);
 
29973
@@ -101,7 +108,7 @@
 
29974
 {
 
29975
   struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
 
29976
 
 
29977
-  if (tdb->format == 0)
 
29978
+  if (tdb->format != 1)
 
29979
     return 0;
 
29980
 
 
29981
   if (tdb->abort_code >= _HTM_FIRST_USER_ABORT_CODE)
 
29982
@@ -117,7 +124,7 @@
 
29983
 {
 
29984
   struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
 
29985
 
 
29986
-  return (tdb->format == 0
 
29987
+  return (tdb->format == 1
 
29988
          && (tdb->abort_code == 4 /* unfiltered program interruption */
 
29989
              || tdb->abort_code == 11 /* restricted instruction */));
 
29990
 }
 
29991
@@ -127,7 +134,7 @@
 
29992
 {
 
29993
   struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
 
29994
 
 
29995
-  return (tdb->format == 0
 
29996
+  return (tdb->format == 1
 
29997
          && (tdb->abort_code == 7 /* fetch overflow */
 
29998
              || tdb->abort_code == 8 /* store overflow */));
 
29999
 }
 
30000
@@ -137,7 +144,7 @@
 
30001
 {
 
30002
   struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
 
30003
 
 
30004
-  return tdb->format == 0 && tdb->abort_code == 13; /* depth exceeded */
 
30005
+  return tdb->format == 1 && tdb->abort_code == 13; /* depth exceeded */
 
30006
 }
 
30007
 
 
30008
 extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 
30009
@@ -145,7 +152,7 @@
 
30010
 {
 
30011
   struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
 
30012
 
 
30013
-  return (tdb->format == 0
 
30014
+  return (tdb->format == 1
 
30015
          && (tdb->abort_code == 9 /* fetch conflict */
 
30016
              || tdb->abort_code == 10 /* store conflict */));
 
30017
 }
 
30018
Index: gcc/config/s390/s390-protos.h
 
30019
===================================================================
 
30020
--- a/src/gcc/config/s390/s390-protos.h (.../tags/gcc_4_8_2_release)
 
30021
+++ b/src/gcc/config/s390/s390-protos.h (.../branches/gcc-4_8-branch)
 
30022
@@ -110,5 +110,6 @@
 
30023
 extern int s390_branch_condition_mask (rtx);
 
30024
 extern int s390_compare_and_branch_condition_mask (rtx);
 
30025
 extern bool s390_extzv_shift_ok (int, int, unsigned HOST_WIDE_INT);
 
30026
+extern void s390_asm_output_function_label (FILE *, const char *, tree);
 
30027
 
 
30028
 #endif /* RTX_CODE */
 
30029
Index: gcc/config/sparc/t-rtems
 
30030
===================================================================
 
30031
--- a/src/gcc/config/sparc/t-rtems      (.../tags/gcc_4_8_2_release)
 
30032
+++ b/src/gcc/config/sparc/t-rtems      (.../branches/gcc-4_8-branch)
 
30033
@@ -17,6 +17,6 @@
 
30034
 # <http://www.gnu.org/licenses/>.
 
30035
 #
 
30036
 
 
30037
-MULTILIB_OPTIONS = msoft-float mcpu=v8
 
30038
-MULTILIB_DIRNAMES = soft v8
 
30039
+MULTILIB_OPTIONS = msoft-float mcpu=v8/mcpu=leon3
 
30040
+MULTILIB_DIRNAMES = soft v8 leon3
 
30041
 MULTILIB_MATCHES = msoft-float=mno-fpu
 
30042
Index: gcc/config/sparc/sparc.md
 
30043
===================================================================
 
30044
--- a/src/gcc/config/sparc/sparc.md     (.../tags/gcc_4_8_2_release)
 
30045
+++ b/src/gcc/config/sparc/sparc.md     (.../branches/gcc-4_8-branch)
 
30046
@@ -206,7 +206,7 @@
 
30047
 ;; 'f' for all DF/TFmode values, including those that are specific to the v8.
 
30048
 
 
30049
 ;; Attribute for cpu type.
 
30050
-;; These must match the values for enum processor_type in sparc.h.
 
30051
+;; These must match the values of the enum processor_type in sparc-opts.h.
 
30052
 (define_attr "cpu"
 
30053
   "v7,
 
30054
    cypress,
 
30055
@@ -214,6 +214,7 @@
 
30056
    supersparc,
 
30057
    hypersparc,
 
30058
    leon,
 
30059
+   leon3,
 
30060
    sparclite,
 
30061
    f930,
 
30062
    f934,
 
30063
@@ -284,7 +285,8 @@
 
30064
   (const_string "none"))
 
30065
 
 
30066
 (define_attr "pic" "false,true"
 
30067
-  (symbol_ref "(flag_pic != 0 ? PIC_TRUE : PIC_FALSE)"))
 
30068
+  (symbol_ref "(flag_pic != 0
 
30069
+               ? PIC_TRUE : PIC_FALSE)"))
 
30070
 
 
30071
 (define_attr "calls_alloca" "false,true"
 
30072
   (symbol_ref "(cfun->calls_alloca != 0
 
30073
@@ -306,6 +308,10 @@
 
30074
   (symbol_ref "(TARGET_FLAT != 0
 
30075
                ? FLAT_TRUE : FLAT_FALSE)"))
 
30076
 
 
30077
+(define_attr "fix_ut699" "false,true"
 
30078
+   (symbol_ref "(sparc_fix_ut699 != 0
 
30079
+                ? FIX_UT699_TRUE : FIX_UT699_FALSE)"))
 
30080
+
 
30081
 ;; Length (in # of insns).
 
30082
 ;; Beware that setting a length greater or equal to 3 for conditional branches
 
30083
 ;; has a side-effect (see output_cbranch and output_v9branch).
 
30084
@@ -420,32 +426,18 @@
 
30085
   [(set_attr "length" "2")
 
30086
    (set_attr "type" "multi")])
 
30087
 
 
30088
-;; Attributes for instruction and branch scheduling
 
30089
-(define_attr "tls_call_delay" "false,true"
 
30090
-  (symbol_ref "(tls_call_delay (insn)
 
30091
-               ? TLS_CALL_DELAY_TRUE : TLS_CALL_DELAY_FALSE)"))
 
30092
-
 
30093
+;; Attributes for branch scheduling
 
30094
 (define_attr "in_call_delay" "false,true"
 
30095
-  (cond [(eq_attr "type" "uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
 
30096
-               (const_string "false")
 
30097
-        (eq_attr "type" "load,fpload,store,fpstore")
 
30098
-               (if_then_else (eq_attr "length" "1")
 
30099
-                             (const_string "true")
 
30100
-                             (const_string "false"))]
 
30101
-        (if_then_else (and (eq_attr "length" "1")
 
30102
-                           (eq_attr "tls_call_delay" "true"))
 
30103
-                      (const_string "true")
 
30104
-                      (const_string "false"))))
 
30105
+  (symbol_ref "(eligible_for_call_delay (insn)
 
30106
+               ? IN_CALL_DELAY_TRUE : IN_CALL_DELAY_FALSE)"))
 
30107
 
 
30108
-(define_attr "eligible_for_sibcall_delay" "false,true"
 
30109
+(define_attr "in_sibcall_delay" "false,true"
 
30110
   (symbol_ref "(eligible_for_sibcall_delay (insn)
 
30111
-               ? ELIGIBLE_FOR_SIBCALL_DELAY_TRUE
 
30112
-               : ELIGIBLE_FOR_SIBCALL_DELAY_FALSE)"))
 
30113
+               ? IN_SIBCALL_DELAY_TRUE : IN_SIBCALL_DELAY_FALSE)"))
 
30114
 
 
30115
-(define_attr "eligible_for_return_delay" "false,true"
 
30116
+(define_attr "in_return_delay" "false,true"
 
30117
   (symbol_ref "(eligible_for_return_delay (insn)
 
30118
-               ? ELIGIBLE_FOR_RETURN_DELAY_TRUE
 
30119
-               : ELIGIBLE_FOR_RETURN_DELAY_FALSE)"))
 
30120
+               ? IN_RETURN_DELAY_TRUE : IN_RETURN_DELAY_FALSE)"))
 
30121
 
 
30122
 ;; ??? !v9: Should implement the notion of predelay slots for floating-point
 
30123
 ;; branches.  This would allow us to remove the nop always inserted before
 
30124
@@ -460,41 +452,34 @@
 
30125
 ;; because it prevents us from moving back the final store of inner loops.
 
30126
 
 
30127
 (define_attr "in_branch_delay" "false,true"
 
30128
-  (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
 
30129
-                    (eq_attr "length" "1"))
 
30130
-               (const_string "true")
 
30131
-               (const_string "false")))
 
30132
+  (cond [(eq_attr "type" "uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
 
30133
+          (const_string "false")
 
30134
+        (and (eq_attr "fix_ut699" "true") (eq_attr "type" "load,sload"))
 
30135
+          (const_string "false")
 
30136
+        (and (eq_attr "fix_ut699" "true")
 
30137
+             (and (eq_attr "type" "fpload,fp,fpmove,fpmul,fpdivs,fpsqrts")
 
30138
+                  (eq_attr "fptype" "single")))
 
30139
+          (const_string "false")
 
30140
+        (eq_attr "length" "1")
 
30141
+          (const_string "true")
 
30142
+       ] (const_string "false")))
 
30143
 
 
30144
-(define_attr "in_uncond_branch_delay" "false,true"
 
30145
-  (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
 
30146
-                    (eq_attr "length" "1"))
 
30147
-               (const_string "true")
 
30148
-               (const_string "false")))
 
30149
-
 
30150
-(define_attr "in_annul_branch_delay" "false,true"
 
30151
-  (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
 
30152
-                    (eq_attr "length" "1"))
 
30153
-               (const_string "true")
 
30154
-               (const_string "false")))
 
30155
-
 
30156
 (define_delay (eq_attr "type" "call")
 
30157
   [(eq_attr "in_call_delay" "true") (nil) (nil)])
 
30158
 
 
30159
 (define_delay (eq_attr "type" "sibcall")
 
30160
-  [(eq_attr "eligible_for_sibcall_delay" "true") (nil) (nil)])
 
30161
+  [(eq_attr "in_sibcall_delay" "true") (nil) (nil)])
 
30162
 
 
30163
+(define_delay (eq_attr "type" "return")
 
30164
+  [(eq_attr "in_return_delay" "true") (nil) (nil)])
 
30165
+
 
30166
 (define_delay (eq_attr "type" "branch")
 
30167
-  [(eq_attr "in_branch_delay" "true")
 
30168
-   (nil) (eq_attr "in_annul_branch_delay" "true")])
 
30169
+  [(eq_attr "in_branch_delay" "true") (nil) (eq_attr "in_branch_delay" "true")])
 
30170
 
 
30171
 (define_delay (eq_attr "type" "uncond_branch")
 
30172
-  [(eq_attr "in_uncond_branch_delay" "true")
 
30173
-   (nil) (nil)])
 
30174
+  [(eq_attr "in_branch_delay" "true") (nil) (nil)])
 
30175
 
 
30176
-(define_delay (eq_attr "type" "return")
 
30177
-  [(eq_attr "eligible_for_return_delay" "true") (nil) (nil)])
 
30178
 
 
30179
-
 
30180
 ;; Include SPARC DFA schedulers
 
30181
 
 
30182
 (include "cypress.md")
 
30183
@@ -5548,7 +5533,7 @@
 
30184
   [(set (match_operand:DF 0 "register_operand" "=e")
 
30185
        (mult:DF (float_extend:DF (match_operand:SF 1 "register_operand" "f"))
 
30186
                 (float_extend:DF (match_operand:SF 2 "register_operand" "f"))))]
 
30187
-  "(TARGET_V8 || TARGET_V9) && TARGET_FPU"
 
30188
+  "(TARGET_V8 || TARGET_V9) && TARGET_FPU && !sparc_fix_ut699"
 
30189
   "fsmuld\t%1, %2, %0"
 
30190
   [(set_attr "type" "fpmul")
 
30191
    (set_attr "fptype" "double")])
 
30192
@@ -5575,22 +5560,39 @@
 
30193
                (match_operand:TF 2 "register_operand" "e")))]
 
30194
   "TARGET_FPU && TARGET_HARD_QUAD"
 
30195
   "fdivq\t%1, %2, %0"
 
30196
-  [(set_attr "type" "fpdivd")])
 
30197
+  [(set_attr "type" "fpdivs")])
 
30198
 
 
30199
-(define_insn "divdf3"
 
30200
+(define_expand "divdf3"
 
30201
   [(set (match_operand:DF 0 "register_operand" "=e")
 
30202
        (div:DF (match_operand:DF 1 "register_operand" "e")
 
30203
                (match_operand:DF 2 "register_operand" "e")))]
 
30204
   "TARGET_FPU"
 
30205
+  "")
 
30206
+
 
30207
+(define_insn "*divdf3_nofix"
 
30208
+  [(set (match_operand:DF 0 "register_operand" "=e")
 
30209
+       (div:DF (match_operand:DF 1 "register_operand" "e")
 
30210
+               (match_operand:DF 2 "register_operand" "e")))]
 
30211
+  "TARGET_FPU && !sparc_fix_ut699"
 
30212
   "fdivd\t%1, %2, %0"
 
30213
   [(set_attr "type" "fpdivd")
 
30214
    (set_attr "fptype" "double")])
 
30215
 
 
30216
+(define_insn "*divdf3_fix"
 
30217
+  [(set (match_operand:DF 0 "register_operand" "=e")
 
30218
+       (div:DF (match_operand:DF 1 "register_operand" "e")
 
30219
+               (match_operand:DF 2 "register_operand" "e")))]
 
30220
+  "TARGET_FPU && sparc_fix_ut699"
 
30221
+  "fdivd\t%1, %2, %0\n\tstd\t%0, [%%sp-8]"
 
30222
+  [(set_attr "type" "fpdivd")
 
30223
+   (set_attr "fptype" "double")
 
30224
+   (set_attr "length" "2")])
 
30225
+
 
30226
 (define_insn "divsf3"
 
30227
   [(set (match_operand:SF 0 "register_operand" "=f")
 
30228
        (div:SF (match_operand:SF 1 "register_operand" "f")
 
30229
                (match_operand:SF 2 "register_operand" "f")))]
 
30230
-  "TARGET_FPU"
 
30231
+  "TARGET_FPU && !sparc_fix_ut699"
 
30232
   "fdivs\t%1, %2, %0"
 
30233
   [(set_attr "type" "fpdivs")])
 
30234
 
 
30235
@@ -5789,20 +5791,35 @@
 
30236
        (sqrt:TF (match_operand:TF 1 "register_operand" "e")))]
 
30237
   "TARGET_FPU && TARGET_HARD_QUAD"
 
30238
   "fsqrtq\t%1, %0"
 
30239
-  [(set_attr "type" "fpsqrtd")])
 
30240
+  [(set_attr "type" "fpsqrts")])
 
30241
 
 
30242
-(define_insn "sqrtdf2"
 
30243
+(define_expand "sqrtdf2"
 
30244
   [(set (match_operand:DF 0 "register_operand" "=e")
 
30245
        (sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
 
30246
   "TARGET_FPU"
 
30247
+  "")
 
30248
+
 
30249
+(define_insn "*sqrtdf2_nofix"
 
30250
+  [(set (match_operand:DF 0 "register_operand" "=e")
 
30251
+       (sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
 
30252
+  "TARGET_FPU && !sparc_fix_ut699"
 
30253
   "fsqrtd\t%1, %0"
 
30254
   [(set_attr "type" "fpsqrtd")
 
30255
    (set_attr "fptype" "double")])
 
30256
 
 
30257
+(define_insn "*sqrtdf2_fix"
 
30258
+  [(set (match_operand:DF 0 "register_operand" "=e")
 
30259
+       (sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
 
30260
+  "TARGET_FPU && sparc_fix_ut699"
 
30261
+  "fsqrtd\t%1, %0\n\tstd\t%0, [%%sp-8]"
 
30262
+  [(set_attr "type" "fpsqrtd")
 
30263
+   (set_attr "fptype" "double")
 
30264
+   (set_attr "length" "2")])
 
30265
+
 
30266
 (define_insn "sqrtsf2"
 
30267
   [(set (match_operand:SF 0 "register_operand" "=f")
 
30268
        (sqrt:SF (match_operand:SF 1 "register_operand" "f")))]
 
30269
-  "TARGET_FPU"
 
30270
+  "TARGET_FPU && !sparc_fix_ut699"
 
30271
   "fsqrts\t%1, %0"
 
30272
   [(set_attr "type" "fpsqrts")])
 
30273
 
 
30274
Index: gcc/config/sparc/t-sparc
 
30275
===================================================================
 
30276
--- a/src/gcc/config/sparc/t-sparc      (.../tags/gcc_4_8_2_release)
 
30277
+++ b/src/gcc/config/sparc/t-sparc      (.../branches/gcc-4_8-branch)
 
30278
@@ -23,7 +23,7 @@
 
30279
   insn-codes.h conditions.h output.h $(INSN_ATTR_H) $(FLAGS_H) \
 
30280
   $(FUNCTION_H) $(EXCEPT_H) $(EXPR_H) $(OPTABS_H) $(RECOG_H) \
 
30281
   $(DIAGNOSTIC_CORE_H) $(GGC_H) $(TM_P_H) debug.h $(TARGET_H) \
 
30282
-  $(TARGET_DEF_H) $(COMMON_TARGET_H) $(GIMPLE_H) \
 
30283
+  $(TARGET_DEF_H) $(COMMON_TARGET_H) $(GIMPLE_H) $(TREE_PASS_H) \
 
30284
   langhooks.h reload.h $(PARAMS_H) $(DF_H) $(OPTS_H) \
 
30285
   gt-sparc.h
 
30286
 
 
30287
Index: gcc/config/sparc/sparc.opt
 
30288
===================================================================
 
30289
--- a/src/gcc/config/sparc/sparc.opt    (.../tags/gcc_4_8_2_release)
 
30290
+++ b/src/gcc/config/sparc/sparc.opt    (.../branches/gcc-4_8-branch)
 
30291
@@ -146,6 +146,9 @@
 
30292
 Enum(sparc_processor_type) String(leon) Value(PROCESSOR_LEON)
 
30293
 
 
30294
 EnumValue
 
30295
+Enum(sparc_processor_type) String(leon3) Value(PROCESSOR_LEON3)
 
30296
+
 
30297
+EnumValue
 
30298
 Enum(sparc_processor_type) String(sparclite) Value(PROCESSOR_SPARCLITE)
 
30299
 
 
30300
 EnumValue
 
30301
@@ -201,9 +204,19 @@
 
30302
 Enable workaround for single erratum of AT697F processor
 
30303
 (corresponding to erratum #13 of AT697E processor)
 
30304
 
 
30305
+mfix-ut699
 
30306
+Target Report RejectNegative Var(sparc_fix_ut699)
 
30307
+Enable workarounds for the errata of the UT699 processor
 
30308
+
 
30309
 Mask(LONG_DOUBLE_128)
 
30310
 ;; Use 128-bit long double
 
30311
 
 
30312
+Mask(LEON)
 
30313
+;; Generate code for LEON
 
30314
+
 
30315
+Mask(LEON3)
 
30316
+;; Generate code for LEON3
 
30317
+
 
30318
 Mask(SPARCLITE)
 
30319
 ;; Generate code for SPARClite
 
30320
 
 
30321
Index: gcc/config/sparc/sync.md
 
30322
===================================================================
 
30323
--- a/src/gcc/config/sparc/sync.md      (.../tags/gcc_4_8_2_release)
 
30324
+++ b/src/gcc/config/sparc/sync.md      (.../branches/gcc-4_8-branch)
 
30325
@@ -161,7 +161,8 @@
 
30326
    (match_operand:SI 5 "const_int_operand" "")         ;; is_weak
 
30327
    (match_operand:SI 6 "const_int_operand" "")         ;; mod_s
 
30328
    (match_operand:SI 7 "const_int_operand" "")]                ;; mod_f
 
30329
-  "TARGET_V9 && (<MODE>mode != DImode || TARGET_ARCH64 || TARGET_V8PLUS)"
 
30330
+  "(TARGET_V9 || TARGET_LEON3)
 
30331
+   && (<MODE>mode != DImode || TARGET_ARCH64 || TARGET_V8PLUS)"
 
30332
 {
 
30333
   sparc_expand_compare_and_swap (operands);
 
30334
   DONE;
 
30335
@@ -176,7 +177,7 @@
 
30336
             [(match_operand:I48MODE 2 "register_operand" "")
 
30337
              (match_operand:I48MODE 3 "register_operand" "")]
 
30338
             UNSPECV_CAS))])]
 
30339
-  "TARGET_V9"
 
30340
+  "TARGET_V9 || TARGET_LEON3"
 
30341
   "")
 
30342
 
 
30343
 (define_insn "*atomic_compare_and_swap<mode>_1"
 
30344
@@ -187,7 +188,7 @@
 
30345
          [(match_operand:I48MODE 2 "register_operand" "r")
 
30346
           (match_operand:I48MODE 3 "register_operand" "0")]
 
30347
          UNSPECV_CAS))]
 
30348
-  "TARGET_V9 && (<MODE>mode == SImode || TARGET_ARCH64)"
 
30349
+  "(TARGET_V9 || TARGET_LEON3) && (<MODE>mode != DImode || TARGET_ARCH64)"
 
30350
   "cas<modesuffix>\t%1, %2, %0"
 
30351
   [(set_attr "type" "multi")])
 
30352
 
 
30353
@@ -220,7 +221,7 @@
 
30354
    (match_operand:SI 1 "memory_operand" "")
 
30355
    (match_operand:SI 2 "register_operand" "")
 
30356
    (match_operand:SI 3 "const_int_operand" "")]
 
30357
-  "TARGET_V8 || TARGET_V9"
 
30358
+  "(TARGET_V8 || TARGET_V9) && !sparc_fix_ut699"
 
30359
 {
 
30360
   enum memmodel model = (enum memmodel) INTVAL (operands[3]);
 
30361
 
 
30362
@@ -236,7 +237,7 @@
 
30363
                            UNSPECV_SWAP))
 
30364
    (set (match_dup 1)
 
30365
        (match_operand:SI 2 "register_operand" "0"))]
 
30366
-  "TARGET_V8 || TARGET_V9"
 
30367
+  "(TARGET_V8 || TARGET_V9) && !sparc_fix_ut699"
 
30368
   "swap\t%1, %0"
 
30369
   [(set_attr "type" "multi")])
 
30370
 
 
30371
@@ -244,7 +245,7 @@
 
30372
   [(match_operand:QI 0 "register_operand" "")
 
30373
    (match_operand:QI 1 "memory_operand" "")
 
30374
    (match_operand:SI 2 "const_int_operand" "")]
 
30375
-  ""
 
30376
+  "!sparc_fix_ut699"
 
30377
 {
 
30378
   enum memmodel model = (enum memmodel) INTVAL (operands[2]);
 
30379
   rtx ret;
 
30380
@@ -268,6 +269,6 @@
 
30381
        (unspec_volatile:QI [(match_operand:QI 1 "memory_operand" "+m")]
 
30382
                            UNSPECV_LDSTUB))
 
30383
    (set (match_dup 1) (const_int -1))]
 
30384
-  ""
 
30385
+  "!sparc_fix_ut699"
 
30386
   "ldstub\t%1, %0"
 
30387
   [(set_attr "type" "multi")])
 
30388
Index: gcc/config/sparc/sparc-opts.h
 
30389
===================================================================
 
30390
--- a/src/gcc/config/sparc/sparc-opts.h (.../tags/gcc_4_8_2_release)
 
30391
+++ b/src/gcc/config/sparc/sparc-opts.h (.../branches/gcc-4_8-branch)
 
30392
@@ -30,6 +30,7 @@
 
30393
   PROCESSOR_SUPERSPARC,
 
30394
   PROCESSOR_HYPERSPARC,
 
30395
   PROCESSOR_LEON,
 
30396
+  PROCESSOR_LEON3,
 
30397
   PROCESSOR_SPARCLITE,
 
30398
   PROCESSOR_F930,
 
30399
   PROCESSOR_F934,
 
30400
Index: gcc/config/sparc/sparc-protos.h
 
30401
===================================================================
 
30402
--- a/src/gcc/config/sparc/sparc-protos.h       (.../tags/gcc_4_8_2_release)
 
30403
+++ b/src/gcc/config/sparc/sparc-protos.h       (.../branches/gcc-4_8-branch)
 
30404
@@ -84,9 +84,9 @@
 
30405
 extern int mems_ok_for_ldd_peep (rtx, rtx, rtx);
 
30406
 extern int empty_delay_slot (rtx);
 
30407
 extern int emit_cbcond_nop (rtx);
 
30408
+extern int eligible_for_call_delay (rtx);
 
30409
 extern int eligible_for_return_delay (rtx);
 
30410
 extern int eligible_for_sibcall_delay (rtx);
 
30411
-extern int tls_call_delay (rtx);
 
30412
 extern int emit_move_sequence (rtx, enum machine_mode);
 
30413
 extern int fp_sethi_p (rtx);
 
30414
 extern int fp_mov_p (rtx);
 
30415
Index: gcc/config/sparc/sparc.c
 
30416
===================================================================
 
30417
--- a/src/gcc/config/sparc/sparc.c      (.../tags/gcc_4_8_2_release)
 
30418
+++ b/src/gcc/config/sparc/sparc.c      (.../branches/gcc-4_8-branch)
 
30419
@@ -52,6 +52,7 @@
 
30420
 #include "params.h"
 
30421
 #include "df.h"
 
30422
 #include "opts.h"
 
30423
+#include "tree-pass.h"
 
30424
 
 
30425
 /* Processor costs */
 
30426
 
 
30427
@@ -226,6 +227,30 @@
 
30428
 };
 
30429
 
 
30430
 static const
 
30431
+struct processor_costs leon3_costs = {
 
30432
+  COSTS_N_INSNS (1), /* int load */
 
30433
+  COSTS_N_INSNS (1), /* int signed load */
 
30434
+  COSTS_N_INSNS (1), /* int zeroed load */
 
30435
+  COSTS_N_INSNS (1), /* float load */
 
30436
+  COSTS_N_INSNS (1), /* fmov, fneg, fabs */
 
30437
+  COSTS_N_INSNS (1), /* fadd, fsub */
 
30438
+  COSTS_N_INSNS (1), /* fcmp */
 
30439
+  COSTS_N_INSNS (1), /* fmov, fmovr */
 
30440
+  COSTS_N_INSNS (1), /* fmul */
 
30441
+  COSTS_N_INSNS (14), /* fdivs */
 
30442
+  COSTS_N_INSNS (15), /* fdivd */
 
30443
+  COSTS_N_INSNS (22), /* fsqrts */
 
30444
+  COSTS_N_INSNS (23), /* fsqrtd */
 
30445
+  COSTS_N_INSNS (5), /* imul */
 
30446
+  COSTS_N_INSNS (5), /* imulX */
 
30447
+  0, /* imul bit factor */
 
30448
+  COSTS_N_INSNS (35), /* idiv */
 
30449
+  COSTS_N_INSNS (35), /* idivX */
 
30450
+  COSTS_N_INSNS (1), /* movcc/movr */
 
30451
+  0, /* shift penalty */
 
30452
+};
 
30453
+
 
30454
+static const
 
30455
 struct processor_costs sparclet_costs = {
 
30456
   COSTS_N_INSNS (3), /* int load */
 
30457
   COSTS_N_INSNS (3), /* int signed load */
 
30458
@@ -538,7 +563,6 @@
 
30459
                                   HOST_WIDE_INT, tree);
 
30460
 static bool sparc_can_output_mi_thunk (const_tree, HOST_WIDE_INT,
 
30461
                                       HOST_WIDE_INT, const_tree);
 
30462
-static void sparc_reorg (void);
 
30463
 static struct machine_function * sparc_init_machine_status (void);
 
30464
 static bool sparc_cannot_force_const_mem (enum machine_mode, rtx);
 
30465
 static rtx sparc_tls_get_addr (void);
 
30466
@@ -680,9 +704,6 @@
 
30467
 #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
 
30468
 #define TARGET_ASM_CAN_OUTPUT_MI_THUNK sparc_can_output_mi_thunk
 
30469
 
 
30470
-#undef TARGET_MACHINE_DEPENDENT_REORG
 
30471
-#define TARGET_MACHINE_DEPENDENT_REORG sparc_reorg
 
30472
-
 
30473
 #undef TARGET_RTX_COSTS
 
30474
 #define TARGET_RTX_COSTS sparc_rtx_costs
 
30475
 #undef TARGET_ADDRESS_COST
 
30476
@@ -804,6 +825,306 @@
 
30477
 
 
30478
 struct gcc_target targetm = TARGET_INITIALIZER;
 
30479
 
 
30480
+/* Return the memory reference contained in X if any, zero otherwise.  */
 
30481
+
 
30482
+static rtx
 
30483
+mem_ref (rtx x)
 
30484
+{
 
30485
+  if (GET_CODE (x) == SIGN_EXTEND || GET_CODE (x) == ZERO_EXTEND)
 
30486
+    x = XEXP (x, 0);
 
30487
+
 
30488
+  if (MEM_P (x))
 
30489
+    return x;
 
30490
+
 
30491
+  return NULL_RTX;
 
30492
+}
 
30493
+
 
30494
+/* We use a machine specific pass to enable workarounds for errata.
 
30495
+   We need to have the (essentially) final form of the insn stream in order
 
30496
+   to properly detect the various hazards.  Therefore, this machine specific
 
30497
+   pass runs as late as possible.  The pass is inserted in the pass pipeline
 
30498
+   at the end of sparc_option_override.  */
 
30499
+
 
30500
+static bool
 
30501
+sparc_gate_work_around_errata (void)
 
30502
+{
 
30503
+  /* The only errata we handle are those of the AT697F and UT699.  */
 
30504
+  return sparc_fix_at697f != 0 || sparc_fix_ut699 != 0;
 
30505
+}
 
30506
+
 
30507
+static unsigned int
 
30508
+sparc_do_work_around_errata (void)
 
30509
+{
 
30510
+  rtx insn, next;
 
30511
+
 
30512
+  /* Force all instructions to be split into their final form.  */
 
30513
+  split_all_insns_noflow ();
 
30514
+
 
30515
+  /* Now look for specific patterns in the insn stream.  */
 
30516
+  for (insn = get_insns (); insn; insn = next)
 
30517
+    {
 
30518
+      bool insert_nop = false;
 
30519
+      rtx set;
 
30520
+
 
30521
+      /* Look into the instruction in a delay slot.  */
 
30522
+      if (NONJUMP_INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE)
 
30523
+       insn = XVECEXP (PATTERN (insn), 0, 1);
 
30524
+
 
30525
+      /* Look for a single-word load into an odd-numbered FP register.  */
 
30526
+      if (sparc_fix_at697f
 
30527
+         && NONJUMP_INSN_P (insn)
 
30528
+         && (set = single_set (insn)) != NULL_RTX
 
30529
+         && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
 
30530
+         && MEM_P (SET_SRC (set))
 
30531
+         && REG_P (SET_DEST (set))
 
30532
+         && REGNO (SET_DEST (set)) > 31
 
30533
+         && REGNO (SET_DEST (set)) % 2 != 0)
 
30534
+       {
 
30535
+         /* The wrong dependency is on the enclosing double register.  */
 
30536
+         const unsigned int x = REGNO (SET_DEST (set)) - 1;
 
30537
+         unsigned int src1, src2, dest;
 
30538
+         int code;
 
30539
+
 
30540
+         next = next_active_insn (insn);
 
30541
+         if (!next)
 
30542
+           break;
 
30543
+         /* If the insn is a branch, then it cannot be problematic.  */
 
30544
+         if (!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) == SEQUENCE)
 
30545
+           continue;
 
30546
+
 
30547
+         extract_insn (next);
 
30548
+         code = INSN_CODE (next);
 
30549
+
 
30550
+         switch (code)
 
30551
+           {
 
30552
+           case CODE_FOR_adddf3:
 
30553
+           case CODE_FOR_subdf3:
 
30554
+           case CODE_FOR_muldf3:
 
30555
+           case CODE_FOR_divdf3:
 
30556
+             dest = REGNO (recog_data.operand[0]);
 
30557
+             src1 = REGNO (recog_data.operand[1]);
 
30558
+             src2 = REGNO (recog_data.operand[2]);
 
30559
+             if (src1 != src2)
 
30560
+               {
 
30561
+                 /* Case [1-4]:
 
30562
+                                ld [address], %fx+1
 
30563
+                                FPOPd %f{x,y}, %f{y,x}, %f{x,y}  */
 
30564
+                 if ((src1 == x || src2 == x)
 
30565
+                     && (dest == src1 || dest == src2))
 
30566
+                   insert_nop = true;
 
30567
+               }
 
30568
+             else
 
30569
+               {
 
30570
+                 /* Case 5:
 
30571
+                            ld [address], %fx+1
 
30572
+                            FPOPd %fx, %fx, %fx  */
 
30573
+                 if (src1 == x
 
30574
+                     && dest == src1
 
30575
+                     && (code == CODE_FOR_adddf3 || code == CODE_FOR_muldf3))
 
30576
+                   insert_nop = true;
 
30577
+               }
 
30578
+             break;
 
30579
+
 
30580
+           case CODE_FOR_sqrtdf2:
 
30581
+             dest = REGNO (recog_data.operand[0]);
 
30582
+             src1 = REGNO (recog_data.operand[1]);
 
30583
+             /* Case 6:
 
30584
+                        ld [address], %fx+1
 
30585
+                        fsqrtd %fx, %fx  */
 
30586
+             if (src1 == x && dest == src1)
 
30587
+               insert_nop = true;
 
30588
+             break;
 
30589
+
 
30590
+           default:
 
30591
+             break;
 
30592
+           }
 
30593
+       }
 
30594
+
 
30595
+      /* Look for a single-word load into an integer register.  */
 
30596
+      else if (sparc_fix_ut699
 
30597
+              && NONJUMP_INSN_P (insn)
 
30598
+              && (set = single_set (insn)) != NULL_RTX
 
30599
+              && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) <= 4
 
30600
+              && mem_ref (SET_SRC (set)) != NULL_RTX
 
30601
+              && REG_P (SET_DEST (set))
 
30602
+              && REGNO (SET_DEST (set)) < 32)
 
30603
+       {
 
30604
+         /* There is no problem if the second memory access has a data
 
30605
+            dependency on the first single-cycle load.  */
 
30606
+         rtx x = SET_DEST (set);
 
30607
+
 
30608
+         next = next_active_insn (insn);
 
30609
+         if (!next)
 
30610
+           break;
 
30611
+         /* If the insn is a branch, then it cannot be problematic.  */
 
30612
+         if (!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) == SEQUENCE)
 
30613
+           continue;
 
30614
+
 
30615
+         /* Look for a second memory access to/from an integer register.  */
 
30616
+         if ((set = single_set (next)) != NULL_RTX)
 
30617
+           {
 
30618
+             rtx src = SET_SRC (set);
 
30619
+             rtx dest = SET_DEST (set);
 
30620
+             rtx mem;
 
30621
+
 
30622
+             /* LDD is affected.  */
 
30623
+             if ((mem = mem_ref (src)) != NULL_RTX
 
30624
+                 && REG_P (dest)
 
30625
+                 && REGNO (dest) < 32
 
30626
+                 && !reg_mentioned_p (x, XEXP (mem, 0)))
 
30627
+               insert_nop = true;
 
30628
+
 
30629
+             /* STD is *not* affected.  */
 
30630
+             else if (MEM_P (dest)
 
30631
+                      && GET_MODE_SIZE (GET_MODE (dest)) <= 4
 
30632
+                      && (src == CONST0_RTX (GET_MODE (dest))
 
30633
+                          || (REG_P (src)
 
30634
+                              && REGNO (src) < 32
 
30635
+                              && REGNO (src) != REGNO (x)))
 
30636
+                      && !reg_mentioned_p (x, XEXP (dest, 0)))
 
30637
+               insert_nop = true;
 
30638
+           }
 
30639
+       }
 
30640
+
 
30641
+      /* Look for a single-word load/operation into an FP register.  */
 
30642
+      else if (sparc_fix_ut699
 
30643
+              && NONJUMP_INSN_P (insn)
 
30644
+              && (set = single_set (insn)) != NULL_RTX
 
30645
+              && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
 
30646
+              && REG_P (SET_DEST (set))
 
30647
+              && REGNO (SET_DEST (set)) > 31)
 
30648
+       {
 
30649
+         /* Number of instructions in the problematic window.  */
 
30650
+         const int n_insns = 4;
 
30651
+         /* The problematic combination is with the sibling FP register.  */
 
30652
+         const unsigned int x = REGNO (SET_DEST (set));
 
30653
+         const unsigned int y = x ^ 1;
 
30654
+         rtx after;
 
30655
+         int i;
 
30656
+
 
30657
+         next = next_active_insn (insn);
 
30658
+         if (!next)
 
30659
+           break;
 
30660
+         /* If the insn is a branch, then it cannot be problematic.  */
 
30661
+         if (!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) == SEQUENCE)
 
30662
+           continue;
 
30663
+
 
30664
+         /* Look for a second load/operation into the sibling FP register.  */
 
30665
+         if (!((set = single_set (next)) != NULL_RTX
 
30666
+               && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
 
30667
+               && REG_P (SET_DEST (set))
 
30668
+               && REGNO (SET_DEST (set)) == y))
 
30669
+           continue;
 
30670
+
 
30671
+         /* Look for a (possible) store from the FP register in the next N
 
30672
+            instructions, but bail out if it is again modified or if there
 
30673
+            is a store from the sibling FP register before this store.  */
 
30674
+         for (after = next, i = 0; i < n_insns; i++)
 
30675
+           {
 
30676
+             bool branch_p;
 
30677
+
 
30678
+             after = next_active_insn (after);
 
30679
+             if (!after)
 
30680
+               break;
 
30681
+
 
30682
+             /* This is a branch with an empty delay slot.  */
 
30683
+             if (!NONJUMP_INSN_P (after))
 
30684
+               {
 
30685
+                 if (++i == n_insns)
 
30686
+                   break;
 
30687
+                 branch_p = true;
 
30688
+                 after = NULL_RTX;
 
30689
+               }
 
30690
+             /* This is a branch with a filled delay slot.  */
 
30691
+             else if (GET_CODE (PATTERN (after)) == SEQUENCE)
 
30692
+               {
 
30693
+                 if (++i == n_insns)
 
30694
+                   break;
 
30695
+                 branch_p = true;
 
30696
+                 after = XVECEXP (PATTERN (after), 0, 1);
 
30697
+               }
 
30698
+             /* This is a regular instruction.  */
 
30699
+             else
 
30700
+               branch_p = false;
 
30701
+
 
30702
+             if (after && (set = single_set (after)) != NULL_RTX)
 
30703
+               {
 
30704
+                 const rtx src = SET_SRC (set);
 
30705
+                 const rtx dest = SET_DEST (set);
 
30706
+                 const unsigned int size = GET_MODE_SIZE (GET_MODE (dest));
 
30707
+
 
30708
+                 /* If the FP register is again modified before the store,
 
30709
+                    then the store isn't affected.  */
 
30710
+                 if (REG_P (dest)
 
30711
+                     && (REGNO (dest) == x
 
30712
+                         || (REGNO (dest) == y && size == 8)))
 
30713
+                   break;
 
30714
+
 
30715
+                 if (MEM_P (dest) && REG_P (src))
 
30716
+                   {
 
30717
+                     /* If there is a store from the sibling FP register
 
30718
+                        before the store, then the store is not affected.  */
 
30719
+                     if (REGNO (src) == y || (REGNO (src) == x && size == 8))
 
30720
+                       break;
 
30721
+
 
30722
+                     /* Otherwise, the store is affected.  */
 
30723
+                     if (REGNO (src) == x && size == 4)
 
30724
+                       {
 
30725
+                         insert_nop = true;
 
30726
+                         break;
 
30727
+                       }
 
30728
+                   }
 
30729
+               }
 
30730
+
 
30731
+             /* If we have a branch in the first M instructions, then we
 
30732
+                cannot see the (M+2)th instruction so we play safe.  */
 
30733
+             if (branch_p && i <= (n_insns - 2))
 
30734
+               {
 
30735
+                 insert_nop = true;
 
30736
+                 break;
 
30737
+               }
 
30738
+           }
 
30739
+       }
 
30740
+
 
30741
+      else
 
30742
+       next = NEXT_INSN (insn);
 
30743
+
 
30744
+      if (insert_nop)
 
30745
+       emit_insn_before (gen_nop (), next);
 
30746
+    }
 
30747
+
 
30748
+  return 0;
 
30749
+}
 
30750
+
 
30751
+struct rtl_opt_pass pass_work_around_errata =
 
30752
+{
 
30753
+ {
 
30754
+  RTL_PASS,
 
30755
+  "errata",                            /* name */
 
30756
+  OPTGROUP_NONE,                       /* optinfo_flags */
 
30757
+  sparc_gate_work_around_errata,       /* gate */
 
30758
+  sparc_do_work_around_errata,         /* execute */
 
30759
+  NULL,                                        /* sub */
 
30760
+  NULL,                                        /* next */
 
30761
+  0,                                   /* static_pass_number */
 
30762
+  TV_MACH_DEP,                         /* tv_id */
 
30763
+  0,                                   /* properties_required */
 
30764
+  0,                                   /* properties_provided */
 
30765
+  0,                                   /* properties_destroyed */
 
30766
+  0,                                   /* todo_flags_start */
 
30767
+  TODO_verify_rtl_sharing,             /* todo_flags_finish */
 
30768
+ }
 
30769
+};
 
30770
+
 
30771
+struct register_pass_info insert_pass_work_around_errata =
 
30772
+{
 
30773
+  &pass_work_around_errata.pass,       /* pass */
 
30774
+  "dbr",                               /* reference_pass_name */
 
30775
+  1,                                   /* ref_pass_instance_number */
 
30776
+  PASS_POS_INSERT_AFTER                        /* po_op */
 
30777
+};
 
30778
+
 
30779
+/* Helpers for TARGET_DEBUG_OPTIONS.  */
 
30780
 static void
 
30781
 dump_target_flag_bits (const int flags)
 
30782
 {
 
30783
@@ -888,6 +1209,7 @@
 
30784
     { TARGET_CPU_supersparc, PROCESSOR_SUPERSPARC },
 
30785
     { TARGET_CPU_hypersparc, PROCESSOR_HYPERSPARC },
 
30786
     { TARGET_CPU_leon, PROCESSOR_LEON },
 
30787
+    { TARGET_CPU_leon3, PROCESSOR_LEON3 },
 
30788
     { TARGET_CPU_sparclite, PROCESSOR_F930 },
 
30789
     { TARGET_CPU_sparclite86x, PROCESSOR_SPARCLITE86X },
 
30790
     { TARGET_CPU_sparclet, PROCESSOR_TSC701 },
 
30791
@@ -902,7 +1224,7 @@
 
30792
   };
 
30793
   const struct cpu_default *def;
 
30794
   /* Table of values for -m{cpu,tune}=.  This must match the order of
 
30795
-     the PROCESSOR_* enumeration.  */
 
30796
+     the enum processor_type in sparc-opts.h.  */
 
30797
   static struct cpu_table {
 
30798
     const char *const name;
 
30799
     const int disable;
 
30800
@@ -914,8 +1236,8 @@
 
30801
     /* TI TMS390Z55 supersparc */
 
30802
     { "supersparc",    MASK_ISA, MASK_V8 },
 
30803
     { "hypersparc",    MASK_ISA, MASK_V8|MASK_FPU },
 
30804
-    /* LEON */
 
30805
-    { "leon",          MASK_ISA, MASK_V8|MASK_FPU },
 
30806
+    { "leon",          MASK_ISA, MASK_V8|MASK_LEON|MASK_FPU },
 
30807
+    { "leon3",         MASK_ISA, MASK_V8|MASK_LEON3|MASK_FPU },
 
30808
     { "sparclite",     MASK_ISA, MASK_SPARCLITE },
 
30809
     /* The Fujitsu MB86930 is the original sparclite chip, with no FPU.  */
 
30810
     { "f930",          MASK_ISA|MASK_FPU, MASK_SPARCLITE },
 
30811
@@ -1075,6 +1397,9 @@
 
30812
 #ifndef HAVE_AS_SPARC4
 
30813
                   & ~MASK_CBCOND
 
30814
 #endif
 
30815
+#ifndef HAVE_AS_LEON
 
30816
+                  & ~(MASK_LEON | MASK_LEON3)
 
30817
+#endif
 
30818
                   );
 
30819
 
 
30820
   /* If -mfpu or -mno-fpu was explicitly used, don't override with
 
30821
@@ -1164,6 +1489,9 @@
 
30822
     case PROCESSOR_LEON:
 
30823
       sparc_costs = &leon_costs;
 
30824
       break;
 
30825
+    case PROCESSOR_LEON3:
 
30826
+      sparc_costs = &leon3_costs;
 
30827
+      break;
 
30828
     case PROCESSOR_SPARCLET:
 
30829
     case PROCESSOR_TSC701:
 
30830
       sparc_costs = &sparclet_costs;
 
30831
@@ -1200,6 +1528,10 @@
 
30832
       /* Choose the most relaxed model for the processor.  */
 
30833
       else if (TARGET_V9)
 
30834
        sparc_memory_model = SMM_RMO;
 
30835
+      else if (TARGET_LEON3)
 
30836
+       sparc_memory_model = SMM_TSO;
 
30837
+      else if (TARGET_LEON)
 
30838
+       sparc_memory_model = SMM_SC;
 
30839
       else if (TARGET_V8)
 
30840
        sparc_memory_model = SMM_PSO;
 
30841
       else
 
30842
@@ -1241,6 +1573,13 @@
 
30843
      pessimizes for double floating-point registers.  */
 
30844
   if (!global_options_set.x_flag_ira_share_save_slots)
 
30845
     flag_ira_share_save_slots = 0;
 
30846
+
 
30847
+  /* We register a machine specific pass to work around errata, if any.
 
30848
+     The pass mut be scheduled as late as possible so that we have the
 
30849
+     (essentially) final form of the insn stream to work on.
 
30850
+     Registering the pass must be done at start up.  It's convenient to
 
30851
+     do it here.  */
 
30852
+  register_pass (&insert_pass_work_around_errata);
 
30853
 }
 
30854
 
 
30855
 /* Miscellaneous utilities.  */
 
30856
@@ -3090,10 +3429,13 @@
 
30857
 /* Return nonzero if TRIAL can go into the call delay slot.  */
 
30858
 
 
30859
 int
 
30860
-tls_call_delay (rtx trial)
 
30861
+eligible_for_call_delay (rtx trial)
 
30862
 {
 
30863
   rtx pat;
 
30864
 
 
30865
+  if (get_attr_in_branch_delay (trial) == IN_BRANCH_DELAY_FALSE)
 
30866
+    return 0;
 
30867
+
 
30868
   /* Binutils allows
 
30869
        call __tls_get_addr, %tgd_call (foo)
 
30870
         add %l7, %o0, %o0, %tgd_add (foo)
 
30871
@@ -3175,11 +3517,7 @@
 
30872
 
 
30873
   /* If we have the 'return' instruction, anything that does not use
 
30874
      local or output registers and can go into a delay slot wins.  */
 
30875
-  else if (return_p
 
30876
-          && TARGET_V9
 
30877
-          && !epilogue_renumber (&pat, 1)
 
30878
-          && get_attr_in_uncond_branch_delay (trial)
 
30879
-              == IN_UNCOND_BRANCH_DELAY_TRUE)
 
30880
+  else if (return_p && TARGET_V9 && !epilogue_renumber (&pat, 1))
 
30881
     return 1;
 
30882
 
 
30883
   /* The 'restore src1,src2,dest' pattern for SImode.  */
 
30884
@@ -3222,22 +3560,21 @@
 
30885
   int regno;
 
30886
   rtx pat;
 
30887
 
 
30888
-  if (GET_CODE (trial) != INSN)
 
30889
-    return 0;
 
30890
-
 
30891
-  if (get_attr_length (trial) != 1)
 
30892
-    return 0;
 
30893
-
 
30894
   /* If the function uses __builtin_eh_return, the eh_return machinery
 
30895
      occupies the delay slot.  */
 
30896
   if (crtl->calls_eh_return)
 
30897
     return 0;
 
30898
 
 
30899
+  if (get_attr_in_branch_delay (trial) == IN_BRANCH_DELAY_FALSE)
 
30900
+    return 0;
 
30901
+
 
30902
   /* In the case of a leaf or flat function, anything can go into the slot.  */
 
30903
   if (sparc_leaf_function_p || TARGET_FLAT)
 
30904
-    return
 
30905
-      get_attr_in_uncond_branch_delay (trial) == IN_UNCOND_BRANCH_DELAY_TRUE;
 
30906
+    return 1;
 
30907
 
 
30908
+  if (!NONJUMP_INSN_P (trial))
 
30909
+    return 0;
 
30910
+
 
30911
   pat = PATTERN (trial);
 
30912
   if (GET_CODE (pat) == PARALLEL)
 
30913
     {
 
30914
@@ -3256,9 +3593,7 @@
 
30915
          if (regno >= 8 && regno < 24)
 
30916
            return 0;
 
30917
        }
 
30918
-      return !epilogue_renumber (&pat, 1)
 
30919
-       && (get_attr_in_uncond_branch_delay (trial)
 
30920
-           == IN_UNCOND_BRANCH_DELAY_TRUE);
 
30921
+      return !epilogue_renumber (&pat, 1);
 
30922
     }
 
30923
 
 
30924
   if (GET_CODE (pat) != SET)
 
30925
@@ -3278,10 +3613,7 @@
 
30926
      instruction, it can probably go in.  But restore will not work
 
30927
      with FP_REGS.  */
 
30928
   if (! SPARC_INT_REG_P (regno))
 
30929
-    return (TARGET_V9
 
30930
-           && !epilogue_renumber (&pat, 1)
 
30931
-           && get_attr_in_uncond_branch_delay (trial)
 
30932
-              == IN_UNCOND_BRANCH_DELAY_TRUE);
 
30933
+    return TARGET_V9 && !epilogue_renumber (&pat, 1);
 
30934
 
 
30935
   return eligible_for_restore_insn (trial, true);
 
30936
 }
 
30937
@@ -3293,10 +3625,10 @@
 
30938
 {
 
30939
   rtx pat;
 
30940
 
 
30941
-  if (GET_CODE (trial) != INSN || GET_CODE (PATTERN (trial)) != SET)
 
30942
+  if (get_attr_in_branch_delay (trial) == IN_BRANCH_DELAY_FALSE)
 
30943
     return 0;
 
30944
 
 
30945
-  if (get_attr_length (trial) != 1)
 
30946
+  if (!NONJUMP_INSN_P (trial))
 
30947
     return 0;
 
30948
 
 
30949
   pat = PATTERN (trial);
 
30950
@@ -3315,6 +3647,9 @@
 
30951
       return 1;
 
30952
     }
 
30953
 
 
30954
+  if (GET_CODE (pat) != SET)
 
30955
+    return 0;
 
30956
+
 
30957
   /* Otherwise, only operations which can be done in tandem with
 
30958
      a `restore' insn can go into the delay slot.  */
 
30959
   if (GET_CODE (SET_DEST (pat)) != REG
 
30960
@@ -10355,7 +10690,8 @@
 
30961
              tmp = e0.add_with_sign (tmp, false, &add1_ovf);
 
30962
              if (tmp.is_negative ())
 
30963
                tmp = tmp.neg_with_overflow (&neg2_ovf);
 
30964
-
 
30965
+             else
 
30966
+               neg2_ovf = false;
 
30967
              result = result.add_with_sign (tmp, false, &add2_ovf);
 
30968
              overflow |= neg1_ovf | neg2_ovf | add1_ovf | add2_ovf;
 
30969
            }
 
30970
@@ -10897,107 +11233,6 @@
 
30971
   return (vcall_offset >= -32768 || ! fixed_regs[5]);
 
30972
 }
 
30973
 
 
30974
-/* We use the machine specific reorg pass to enable workarounds for errata.  */
 
30975
-
 
30976
-static void
 
30977
-sparc_reorg (void)
 
30978
-{
 
30979
-  rtx insn, next;
 
30980
-
 
30981
-  /* The only erratum we handle for now is that of the AT697F processor.  */
 
30982
-  if (!sparc_fix_at697f)
 
30983
-    return;
 
30984
-
 
30985
-  /* We need to have the (essentially) final form of the insn stream in order
 
30986
-     to properly detect the various hazards.  Run delay slot scheduling.  */
 
30987
-  if (optimize > 0 && flag_delayed_branch)
 
30988
-    {
 
30989
-      cleanup_barriers ();
 
30990
-      dbr_schedule (get_insns ());
 
30991
-    }
 
30992
-
 
30993
-  /* Now look for specific patterns in the insn stream.  */
 
30994
-  for (insn = get_insns (); insn; insn = next)
 
30995
-    {
 
30996
-      bool insert_nop = false;
 
30997
-      rtx set;
 
30998
-
 
30999
-      /* Look for a single-word load into an odd-numbered FP register.  */
 
31000
-      if (NONJUMP_INSN_P (insn)
 
31001
-         && (set = single_set (insn)) != NULL_RTX
 
31002
-         && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
 
31003
-         && MEM_P (SET_SRC (set))
 
31004
-         && REG_P (SET_DEST (set))
 
31005
-         && REGNO (SET_DEST (set)) > 31
 
31006
-         && REGNO (SET_DEST (set)) % 2 != 0)
 
31007
-       {
 
31008
-         /* The wrong dependency is on the enclosing double register.  */
 
31009
-         unsigned int x = REGNO (SET_DEST (set)) - 1;
 
31010
-         unsigned int src1, src2, dest;
 
31011
-         int code;
 
31012
-
 
31013
-         /* If the insn has a delay slot, then it cannot be problematic.  */
 
31014
-         next = next_active_insn (insn);
 
31015
-         if (NONJUMP_INSN_P (next) && GET_CODE (PATTERN (next)) == SEQUENCE)
 
31016
-           code = -1;
 
31017
-         else
 
31018
-           {
 
31019
-             extract_insn (next);
 
31020
-             code = INSN_CODE (next);
 
31021
-           }
 
31022
-
 
31023
-         switch (code)
 
31024
-           {
 
31025
-           case CODE_FOR_adddf3:
 
31026
-           case CODE_FOR_subdf3:
 
31027
-           case CODE_FOR_muldf3:
 
31028
-           case CODE_FOR_divdf3:
 
31029
-             dest = REGNO (recog_data.operand[0]);
 
31030
-             src1 = REGNO (recog_data.operand[1]);
 
31031
-             src2 = REGNO (recog_data.operand[2]);
 
31032
-             if (src1 != src2)
 
31033
-               {
 
31034
-                 /* Case [1-4]:
 
31035
-                                ld [address], %fx+1
 
31036
-                                FPOPd %f{x,y}, %f{y,x}, %f{x,y}  */
 
31037
-                 if ((src1 == x || src2 == x)
 
31038
-                     && (dest == src1 || dest == src2))
 
31039
-                   insert_nop = true;
 
31040
-               }
 
31041
-             else
 
31042
-               {
 
31043
-                 /* Case 5:
 
31044
-                            ld [address], %fx+1
 
31045
-                            FPOPd %fx, %fx, %fx  */
 
31046
-                 if (src1 == x
 
31047
-                     && dest == src1
 
31048
-                     && (code == CODE_FOR_adddf3 || code == CODE_FOR_muldf3))
 
31049
-                   insert_nop = true;
 
31050
-               }
 
31051
-             break;
 
31052
-
 
31053
-           case CODE_FOR_sqrtdf2:
 
31054
-             dest = REGNO (recog_data.operand[0]);
 
31055
-             src1 = REGNO (recog_data.operand[1]);
 
31056
-             /* Case 6:
 
31057
-                        ld [address], %fx+1
 
31058
-                        fsqrtd %fx, %fx  */
 
31059
-             if (src1 == x && dest == src1)
 
31060
-               insert_nop = true;
 
31061
-             break;
 
31062
-
 
31063
-           default:
 
31064
-             break;
 
31065
-           }
 
31066
-       }
 
31067
-      else
 
31068
-       next = NEXT_INSN (insn);
 
31069
-
 
31070
-      if (insert_nop)
 
31071
-       emit_insn_after (gen_nop (), insn);
 
31072
-    }
 
31073
-}
 
31074
-
 
31075
 /* How to allocate a 'struct machine_function'.  */
 
31076
 
 
31077
 static struct machine_function *
 
31078
Index: gcc/config/sparc/leon.md
 
31079
===================================================================
 
31080
--- a/src/gcc/config/sparc/leon.md      (.../tags/gcc_4_8_2_release)
 
31081
+++ b/src/gcc/config/sparc/leon.md      (.../branches/gcc-4_8-branch)
 
31082
@@ -17,40 +17,48 @@
 
31083
 ;; along with GCC; see the file COPYING3.  If not see
 
31084
 ;; <http://www.gnu.org/licenses/>.
 
31085
 
 
31086
+;; Leon is a single-issue processor.
 
31087
 
 
31088
 (define_automaton "leon")
 
31089
 
 
31090
-(define_cpu_unit "leon_memory, leon_fpalu" "leon")
 
31091
-(define_cpu_unit "leon_fpmds" "leon")
 
31092
-(define_cpu_unit "write_buf" "leon")
 
31093
+(define_cpu_unit "leon_memory" "leon")
 
31094
 
 
31095
 (define_insn_reservation "leon_load" 1
 
31096
-  (and (eq_attr "cpu" "leon")
 
31097
-    (eq_attr "type" "load,sload,fpload"))
 
31098
+  (and (eq_attr "cpu" "leon") (eq_attr "type" "load,sload"))
 
31099
   "leon_memory")
 
31100
 
 
31101
-(define_insn_reservation "leon_store" 1
 
31102
-  (and (eq_attr "cpu" "leon")
 
31103
-    (eq_attr "type" "store,fpstore"))
 
31104
-  "leon_memory+write_buf")
 
31105
-  
 
31106
-(define_insn_reservation "leon_fp_alu" 1
 
31107
-  (and (eq_attr "cpu" "leon")
 
31108
-    (eq_attr "type" "fp,fpmove"))
 
31109
-  "leon_fpalu, nothing")
 
31110
+;; Use a double reservation to work around the load pipeline hazard on UT699.
 
31111
+(define_insn_reservation "leon3_load" 1
 
31112
+  (and (eq_attr "cpu" "leon3") (eq_attr "type" "load,sload"))
 
31113
+  "leon_memory*2")
 
31114
 
 
31115
-(define_insn_reservation "leon_fp_mult" 1
 
31116
-  (and (eq_attr "cpu" "leon")
 
31117
-    (eq_attr "type" "fpmul"))
 
31118
-  "leon_fpmds, nothing")
 
31119
+(define_insn_reservation "leon_store" 2
 
31120
+  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "store"))
 
31121
+  "leon_memory*2")
 
31122
 
 
31123
-(define_insn_reservation "leon_fp_div" 16
 
31124
-  (and (eq_attr "cpu" "leon")
 
31125
-    (eq_attr "type" "fpdivs,fpdivd"))
 
31126
-  "leon_fpmds, nothing*15")
 
31127
+;; This describes Gaisler Research's FPU
 
31128
 
 
31129
-(define_insn_reservation "leon_fp_sqrt" 23
 
31130
-  (and (eq_attr "cpu" "leon")
 
31131
-    (eq_attr "type" "fpsqrts,fpsqrtd"))
 
31132
-  "leon_fpmds, nothing*21")
 
31133
+(define_automaton "grfpu")
 
31134
 
 
31135
+(define_cpu_unit "grfpu_alu" "grfpu")
 
31136
+(define_cpu_unit "grfpu_ds" "grfpu")
 
31137
+
 
31138
+(define_insn_reservation "leon_fp_alu" 4
 
31139
+  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fp,fpcmp,fpmul"))
 
31140
+  "grfpu_alu, nothing*3")
 
31141
+
 
31142
+(define_insn_reservation "leon_fp_divs" 16
 
31143
+  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpdivs"))
 
31144
+  "grfpu_ds*14, nothing*2")
 
31145
+
 
31146
+(define_insn_reservation "leon_fp_divd" 17
 
31147
+  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpdivd"))
 
31148
+  "grfpu_ds*15, nothing*2")
 
31149
+
 
31150
+(define_insn_reservation "leon_fp_sqrts" 24
 
31151
+  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpsqrts"))
 
31152
+  "grfpu_ds*22, nothing*2")
 
31153
+
 
31154
+(define_insn_reservation "leon_fp_sqrtd" 25
 
31155
+  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpsqrtd"))
 
31156
+  "grfpu_ds*23, nothing*2")
 
31157
Index: gcc/config/sparc/sparc.h
 
31158
===================================================================
 
31159
--- a/src/gcc/config/sparc/sparc.h      (.../tags/gcc_4_8_2_release)
 
31160
+++ b/src/gcc/config/sparc/sparc.h      (.../branches/gcc-4_8-branch)
 
31161
@@ -136,21 +136,22 @@
 
31162
 #define TARGET_CPU_supersparc  2
 
31163
 #define TARGET_CPU_hypersparc  3
 
31164
 #define TARGET_CPU_leon                4
 
31165
-#define TARGET_CPU_sparclite   5
 
31166
-#define TARGET_CPU_f930                5       /* alias */
 
31167
-#define TARGET_CPU_f934                5       /* alias */
 
31168
-#define TARGET_CPU_sparclite86x        6
 
31169
-#define TARGET_CPU_sparclet    7
 
31170
-#define TARGET_CPU_tsc701      7       /* alias */
 
31171
-#define TARGET_CPU_v9          8       /* generic v9 implementation */
 
31172
-#define TARGET_CPU_sparcv9     8       /* alias */
 
31173
-#define TARGET_CPU_sparc64     8       /* alias */
 
31174
-#define TARGET_CPU_ultrasparc  9
 
31175
-#define TARGET_CPU_ultrasparc3 10
 
31176
-#define TARGET_CPU_niagara     11
 
31177
-#define TARGET_CPU_niagara2    12
 
31178
-#define TARGET_CPU_niagara3    13
 
31179
-#define TARGET_CPU_niagara4    14
 
31180
+#define TARGET_CPU_leon3       5
 
31181
+#define TARGET_CPU_sparclite   6
 
31182
+#define TARGET_CPU_f930                6       /* alias */
 
31183
+#define TARGET_CPU_f934                6       /* alias */
 
31184
+#define TARGET_CPU_sparclite86x        7
 
31185
+#define TARGET_CPU_sparclet    8
 
31186
+#define TARGET_CPU_tsc701      8       /* alias */
 
31187
+#define TARGET_CPU_v9          9       /* generic v9 implementation */
 
31188
+#define TARGET_CPU_sparcv9     9       /* alias */
 
31189
+#define TARGET_CPU_sparc64     9       /* alias */
 
31190
+#define TARGET_CPU_ultrasparc  10
 
31191
+#define TARGET_CPU_ultrasparc3 11
 
31192
+#define TARGET_CPU_niagara     12
 
31193
+#define TARGET_CPU_niagara2    13
 
31194
+#define TARGET_CPU_niagara3    14
 
31195
+#define TARGET_CPU_niagara4    15
 
31196
 
 
31197
 #if TARGET_CPU_DEFAULT == TARGET_CPU_v9 \
 
31198
  || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc \
 
31199
@@ -232,9 +233,10 @@
 
31200
 #define ASM_CPU32_DEFAULT_SPEC ""
 
31201
 #endif
 
31202
 
 
31203
-#if TARGET_CPU_DEFAULT == TARGET_CPU_leon
 
31204
+#if TARGET_CPU_DEFAULT == TARGET_CPU_leon \
 
31205
+ || TARGET_CPU_DEFAULT == TARGET_CPU_leon3
 
31206
 #define CPP_CPU32_DEFAULT_SPEC "-D__leon__ -D__sparc_v8__"
 
31207
-#define ASM_CPU32_DEFAULT_SPEC ""
 
31208
+#define ASM_CPU32_DEFAULT_SPEC AS_LEON_FLAG
 
31209
 #endif
 
31210
 
 
31211
 #endif
 
31212
@@ -282,6 +284,7 @@
 
31213
 %{mcpu=supersparc:-D__supersparc__ -D__sparc_v8__} \
 
31214
 %{mcpu=hypersparc:-D__hypersparc__ -D__sparc_v8__} \
 
31215
 %{mcpu=leon:-D__leon__ -D__sparc_v8__} \
 
31216
+%{mcpu=leon3:-D__leon__ -D__sparc_v8__} \
 
31217
 %{mcpu=v9:-D__sparc_v9__} \
 
31218
 %{mcpu=ultrasparc:-D__sparc_v9__} \
 
31219
 %{mcpu=ultrasparc3:-D__sparc_v9__} \
 
31220
@@ -329,7 +332,8 @@
 
31221
 %{mcpu=v8:-Av8} \
 
31222
 %{mcpu=supersparc:-Av8} \
 
31223
 %{mcpu=hypersparc:-Av8} \
 
31224
-%{mcpu=leon:-Av8} \
 
31225
+%{mcpu=leon:" AS_LEON_FLAG "} \
 
31226
+%{mcpu=leon3:" AS_LEON_FLAG "} \
 
31227
 %{mv8plus:-Av8plus} \
 
31228
 %{mcpu=v9:-Av9} \
 
31229
 %{mcpu=ultrasparc:%{!mv8plus:-Av9a}} \
 
31230
@@ -1754,6 +1758,12 @@
 
31231
 #define AS_NIAGARA4_FLAG "-Av9" AS_NIAGARA3_FLAG
 
31232
 #endif
 
31233
 
 
31234
+#ifdef HAVE_AS_LEON
 
31235
+#define AS_LEON_FLAG "-Aleon"
 
31236
+#else
 
31237
+#define AS_LEON_FLAG "-Av8"
 
31238
+#endif
 
31239
+
 
31240
 /* We use gcc _mcount for profiling.  */
 
31241
 #define NO_PROFILE_COUNTERS 0
 
31242
 
 
31243
Index: gcc/config/i386/i386.h
 
31244
===================================================================
 
31245
--- a/src/gcc/config/i386/i386.h        (.../tags/gcc_4_8_2_release)
 
31246
+++ b/src/gcc/config/i386/i386.h        (.../branches/gcc-4_8-branch)
 
31247
@@ -197,10 +197,10 @@
 
31248
 
 
31249
 /* Macros used in the machine description to test the flags.  */
 
31250
 
 
31251
-/* configure can arrange to make this 2, to force a 486.  */
 
31252
+/* configure can arrange to change it.  */
 
31253
 
 
31254
 #ifndef TARGET_CPU_DEFAULT
 
31255
-#define TARGET_CPU_DEFAULT TARGET_CPU_DEFAULT_generic
 
31256
+#define TARGET_CPU_DEFAULT PROCESSOR_GENERIC32
 
31257
 #endif
 
31258
 
 
31259
 #ifndef TARGET_FPMATH_DEFAULT
 
31260
@@ -591,43 +591,6 @@
 
31261
 /* Target Pragmas.  */
 
31262
 #define REGISTER_TARGET_PRAGMAS() ix86_register_pragmas ()
 
31263
 
 
31264
-enum target_cpu_default
 
31265
-{
 
31266
-  TARGET_CPU_DEFAULT_generic = 0,
 
31267
-
 
31268
-  TARGET_CPU_DEFAULT_i386,
 
31269
-  TARGET_CPU_DEFAULT_i486,
 
31270
-  TARGET_CPU_DEFAULT_pentium,
 
31271
-  TARGET_CPU_DEFAULT_pentium_mmx,
 
31272
-  TARGET_CPU_DEFAULT_pentiumpro,
 
31273
-  TARGET_CPU_DEFAULT_pentium2,
 
31274
-  TARGET_CPU_DEFAULT_pentium3,
 
31275
-  TARGET_CPU_DEFAULT_pentium4,
 
31276
-  TARGET_CPU_DEFAULT_pentium_m,
 
31277
-  TARGET_CPU_DEFAULT_prescott,
 
31278
-  TARGET_CPU_DEFAULT_nocona,
 
31279
-  TARGET_CPU_DEFAULT_core2,
 
31280
-  TARGET_CPU_DEFAULT_corei7,
 
31281
-  TARGET_CPU_DEFAULT_haswell,
 
31282
-  TARGET_CPU_DEFAULT_atom,
 
31283
-
 
31284
-  TARGET_CPU_DEFAULT_geode,
 
31285
-  TARGET_CPU_DEFAULT_k6,
 
31286
-  TARGET_CPU_DEFAULT_k6_2,
 
31287
-  TARGET_CPU_DEFAULT_k6_3,
 
31288
-  TARGET_CPU_DEFAULT_athlon,
 
31289
-  TARGET_CPU_DEFAULT_athlon_sse,
 
31290
-  TARGET_CPU_DEFAULT_k8,
 
31291
-  TARGET_CPU_DEFAULT_amdfam10,
 
31292
-  TARGET_CPU_DEFAULT_bdver1,
 
31293
-  TARGET_CPU_DEFAULT_bdver2,
 
31294
-  TARGET_CPU_DEFAULT_bdver3,
 
31295
-  TARGET_CPU_DEFAULT_btver1,
 
31296
-  TARGET_CPU_DEFAULT_btver2,
 
31297
-
 
31298
-  TARGET_CPU_DEFAULT_max
 
31299
-};
 
31300
-
 
31301
 #ifndef CC1_SPEC
 
31302
 #define CC1_SPEC "%(cc1_cpu) "
 
31303
 #endif
 
31304
@@ -2089,25 +2052,27 @@
 
31305
    with x86-64 medium memory model */
 
31306
 #define DEFAULT_LARGE_SECTION_THRESHOLD 65536
 
31307
 
 
31308
-/* Which processor to tune code generation for.  */
 
31309
+/* Which processor to tune code generation for.  These must be in sync
 
31310
+   with processor_target_table in i386.c.  */ 
 
31311
 
 
31312
 enum processor_type
 
31313
 {
 
31314
-  PROCESSOR_I386 = 0,                  /* 80386 */
 
31315
+  PROCESSOR_GENERIC32 = 0,
 
31316
+  PROCESSOR_GENERIC64,
 
31317
+  PROCESSOR_I386,                      /* 80386 */
 
31318
   PROCESSOR_I486,                      /* 80486DX, 80486SX, 80486DX[24] */
 
31319
   PROCESSOR_PENTIUM,
 
31320
   PROCESSOR_PENTIUMPRO,
 
31321
-  PROCESSOR_GEODE,
 
31322
-  PROCESSOR_K6,
 
31323
-  PROCESSOR_ATHLON,
 
31324
   PROCESSOR_PENTIUM4,
 
31325
-  PROCESSOR_K8,
 
31326
   PROCESSOR_NOCONA,
 
31327
   PROCESSOR_CORE2,
 
31328
   PROCESSOR_COREI7,
 
31329
   PROCESSOR_HASWELL,
 
31330
-  PROCESSOR_GENERIC32,
 
31331
-  PROCESSOR_GENERIC64,
 
31332
+  PROCESSOR_ATOM,
 
31333
+  PROCESSOR_GEODE,
 
31334
+  PROCESSOR_K6,
 
31335
+  PROCESSOR_ATHLON,
 
31336
+  PROCESSOR_K8,
 
31337
   PROCESSOR_AMDFAM10,
 
31338
   PROCESSOR_BDVER1,
 
31339
   PROCESSOR_BDVER2,
 
31340
@@ -2114,7 +2079,6 @@
 
31341
   PROCESSOR_BDVER3,
 
31342
   PROCESSOR_BTVER1,
 
31343
   PROCESSOR_BTVER2,
 
31344
-  PROCESSOR_ATOM,
 
31345
   PROCESSOR_max
 
31346
 };
 
31347
 
 
31348
Index: gcc/config/i386/i386.md
 
31349
===================================================================
 
31350
--- a/src/gcc/config/i386/i386.md       (.../tags/gcc_4_8_2_release)
 
31351
+++ b/src/gcc/config/i386/i386.md       (.../branches/gcc-4_8-branch)
 
31352
@@ -363,6 +363,13 @@
 
31353
           (const_string "unknown")]
 
31354
         (const_string "integer")))
 
31355
 
 
31356
+;; The minimum required alignment of vector mode memory operands of the SSE
 
31357
+;; (non-VEX/EVEX) instruction in bits, if it is different from
 
31358
+;; GET_MODE_ALIGNMENT of the operand, otherwise 0.  If an instruction has
 
31359
+;; multiple alternatives, this should be conservative maximum of those minimum
 
31360
+;; required alignments.
 
31361
+(define_attr "ssememalign" "" (const_int 0))
 
31362
+
 
31363
 ;; The (bounding maximum) length of an instruction immediate.
 
31364
 (define_attr "length_immediate" ""
 
31365
   (cond [(eq_attr "type" "incdec,setcc,icmov,str,lea,other,multi,idiv,leave,
 
31366
@@ -1570,7 +1577,7 @@
 
31367
   split_double_mode (DImode, &operands[1], 1, &operands[2], &operands[3]);
 
31368
 
 
31369
   operands[1] = gen_lowpart (DImode, operands[2]);
 
31370
-  operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx,
 
31371
+  operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
 
31372
                                                   GEN_INT (4)));
 
31373
 })
 
31374
 
 
31375
@@ -1587,7 +1594,7 @@
 
31376
   split_double_mode (DImode, &operands[1], 1, &operands[2], &operands[3]);
 
31377
 
 
31378
   operands[1] = gen_lowpart (DImode, operands[2]);
 
31379
-  operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx,
 
31380
+  operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
 
31381
                                                   GEN_INT (4)));
 
31382
 })
 
31383
 
 
31384
@@ -2715,7 +2722,20 @@
 
31385
   "reload_completed"
 
31386
   [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_dup 2)))
 
31387
    (set (mem:SF (reg:P SP_REG)) (match_dup 1))]
 
31388
-  "operands[2] = GEN_INT (-GET_MODE_SIZE (<P:MODE>mode));")
 
31389
+{
 
31390
+  rtx op = XEXP (operands[0], 0);
 
31391
+  if (GET_CODE (op) == PRE_DEC)
 
31392
+    {
 
31393
+      gcc_assert (!TARGET_64BIT);
 
31394
+      op = GEN_INT (-4);
 
31395
+    }
 
31396
+  else
 
31397
+    {
 
31398
+      op = XEXP (XEXP (op, 1), 1);
 
31399
+      gcc_assert (CONST_INT_P (op));
 
31400
+    }
 
31401
+  operands[2] = op;
 
31402
+})
 
31403
 
 
31404
 (define_split
 
31405
   [(set (match_operand:SF 0 "push_operand")
 
31406
@@ -5443,6 +5463,12 @@
 
31407
     mode = SImode;
 
31408
 
 
31409
   ix86_split_lea_for_addr (curr_insn, operands, mode);
 
31410
+
 
31411
+  /* Zero-extend return register to DImode for zero-extended addresses.  */
 
31412
+  if (mode != <MODE>mode)
 
31413
+    emit_insn (gen_zero_extendsidi2
 
31414
+              (operands[0], gen_lowpart (mode, operands[0])));
 
31415
+
 
31416
   DONE;
 
31417
 }
 
31418
   [(set_attr "type" "lea")
 
31419
@@ -6589,7 +6615,7 @@
 
31420
    (set_attr "use_carry" "1")
 
31421
    (set_attr "mode" "<MODE>")])
 
31422
 
 
31423
-;; Overflow setting add and subtract instructions
 
31424
+;; Overflow setting add instructions
 
31425
 
 
31426
 (define_insn "*add<mode>3_cconly_overflow"
 
31427
   [(set (reg:CCC FLAGS_REG)
 
31428
@@ -6604,43 +6630,31 @@
 
31429
   [(set_attr "type" "alu")
 
31430
    (set_attr "mode" "<MODE>")])
 
31431
 
 
31432
-(define_insn "*sub<mode>3_cconly_overflow"
 
31433
+(define_insn "*add<mode>3_cc_overflow"
 
31434
   [(set (reg:CCC FLAGS_REG)
 
31435
        (compare:CCC
 
31436
-         (minus:SWI
 
31437
-           (match_operand:SWI 0 "nonimmediate_operand" "<r>m,<r>")
 
31438
-           (match_operand:SWI 1 "<general_operand>" "<r><i>,<r>m"))
 
31439
-         (match_dup 0)))]
 
31440
-  ""
 
31441
-  "cmp{<imodesuffix>}\t{%1, %0|%0, %1}"
 
31442
-  [(set_attr "type" "icmp")
 
31443
-   (set_attr "mode" "<MODE>")])
 
31444
-
 
31445
-(define_insn "*<plusminus_insn><mode>3_cc_overflow"
 
31446
-  [(set (reg:CCC FLAGS_REG)
 
31447
-       (compare:CCC
 
31448
-           (plusminus:SWI
 
31449
-               (match_operand:SWI 1 "nonimmediate_operand" "<comm>0,0")
 
31450
+           (plus:SWI
 
31451
+               (match_operand:SWI 1 "nonimmediate_operand" "%0,0")
 
31452
                (match_operand:SWI 2 "<general_operand>" "<r><i>,<r>m"))
 
31453
            (match_dup 1)))
 
31454
    (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m,<r>")
 
31455
-       (plusminus:SWI (match_dup 1) (match_dup 2)))]
 
31456
-  "ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
 
31457
-  "<plusminus_mnemonic>{<imodesuffix>}\t{%2, %0|%0, %2}"
 
31458
+       (plus:SWI (match_dup 1) (match_dup 2)))]
 
31459
+  "ix86_binary_operator_ok (PLUS, <MODE>mode, operands)"
 
31460
+  "add{<imodesuffix>}\t{%2, %0|%0, %2}"
 
31461
   [(set_attr "type" "alu")
 
31462
    (set_attr "mode" "<MODE>")])
 
31463
 
 
31464
-(define_insn "*<plusminus_insn>si3_zext_cc_overflow"
 
31465
+(define_insn "*addsi3_zext_cc_overflow"
 
31466
   [(set (reg:CCC FLAGS_REG)
 
31467
        (compare:CCC
 
31468
-         (plusminus:SI
 
31469
-           (match_operand:SI 1 "nonimmediate_operand" "<comm>0")
 
31470
+         (plus:SI
 
31471
+           (match_operand:SI 1 "nonimmediate_operand" "%0")
 
31472
            (match_operand:SI 2 "x86_64_general_operand" "rme"))
 
31473
          (match_dup 1)))
 
31474
    (set (match_operand:DI 0 "register_operand" "=r")
 
31475
-       (zero_extend:DI (plusminus:SI (match_dup 1) (match_dup 2))))]
 
31476
-  "TARGET_64BIT && ix86_binary_operator_ok (<CODE>, SImode, operands)"
 
31477
-  "<plusminus_mnemonic>{l}\t{%2, %k0|%k0, %2}"
 
31478
+       (zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))]
 
31479
+  "TARGET_64BIT && ix86_binary_operator_ok (PLUS, SImode, operands)"
 
31480
+  "add{l}\t{%2, %k0|%k0, %2}"
 
31481
   [(set_attr "type" "alu")
 
31482
    (set_attr "mode" "SI")])
 
31483
 
 
31484
@@ -8012,7 +8026,18 @@
 
31485
         (const_int 0)))
 
31486
    (set (match_operand:DI 0 "nonimmediate_operand" "=r,r,rm")
 
31487
        (and:DI (match_dup 1) (match_dup 2)))]
 
31488
-  "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)
 
31489
+  "TARGET_64BIT
 
31490
+   && ix86_match_ccmode
 
31491
+       (insn,
 
31492
+        /* If we are going to emit andl instead of andq, and the operands[2]
 
31493
+           constant might have the SImode sign bit set, make sure the sign
 
31494
+           flag isn't tested, because the instruction will set the sign flag
 
31495
+           based on bit 31 rather than bit 63.  If it isn't CONST_INT,
 
31496
+           conservatively assume it might have bit 31 set.  */
 
31497
+        (satisfies_constraint_Z (operands[2])
 
31498
+         && (!CONST_INT_P (operands[2])
 
31499
+             || val_signbit_known_set_p (SImode, INTVAL (operands[2]))))
 
31500
+        ? CCZmode : CCNOmode)
 
31501
    && ix86_binary_operator_ok (AND, DImode, operands)"
 
31502
   "@
 
31503
    and{l}\t{%k2, %k0|%k0, %k2}
 
31504
@@ -17569,7 +17594,13 @@
 
31505
 (define_insn "trap"
 
31506
   [(trap_if (const_int 1) (const_int 6))]
 
31507
   ""
 
31508
-  { return ASM_SHORT "0x0b0f"; }
 
31509
+{
 
31510
+#ifdef HAVE_AS_IX86_UD2
 
31511
+  return "ud2";
 
31512
+#else
 
31513
+  return ASM_SHORT "0x0b0f";
 
31514
+#endif
 
31515
+}
 
31516
   [(set_attr "length" "2")])
 
31517
 
 
31518
 (define_expand "prefetch"
 
31519
Index: gcc/config/i386/f16cintrin.h
 
31520
===================================================================
 
31521
--- a/src/gcc/config/i386/f16cintrin.h  (.../tags/gcc_4_8_2_release)
 
31522
+++ b/src/gcc/config/i386/f16cintrin.h  (.../branches/gcc-4_8-branch)
 
31523
@@ -35,7 +35,7 @@
 
31524
 extern __inline float __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 
31525
 _cvtsh_ss (unsigned short __S)
 
31526
 {
 
31527
-  __v8hi __H = __extension__ (__v8hi){ __S, 0, 0, 0, 0, 0, 0, 0 };
 
31528
+  __v8hi __H = __extension__ (__v8hi){ (short) __S, 0, 0, 0, 0, 0, 0, 0 };
 
31529
   __v4sf __A = __builtin_ia32_vcvtph2ps (__H);
 
31530
   return __builtin_ia32_vec_ext_v4sf (__A, 0);
 
31531
 }
 
31532
Index: gcc/config/i386/t-rtems
 
31533
===================================================================
 
31534
--- a/src/gcc/config/i386/t-rtems       (.../tags/gcc_4_8_2_release)
 
31535
+++ b/src/gcc/config/i386/t-rtems       (.../branches/gcc-4_8-branch)
 
31536
@@ -17,11 +17,10 @@
 
31537
 # <http://www.gnu.org/licenses/>.
 
31538
 #
 
31539
 
 
31540
-MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro \
 
31541
-msoft-float
 
31542
+MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro msoft-float
 
31543
 MULTILIB_DIRNAMES= m486 mpentium mpentiumpro soft-float
 
31544
-MULTILIB_MATCHES = msoft-float=mno-m80387
 
31545
-MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?mathlon
 
31546
+MULTILIB_MATCHES = msoft-float=mno-80387
 
31547
+MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?athlon
 
31548
 MULTILIB_EXCEPTIONS = \
 
31549
 mtune=pentium/*msoft-float* \
 
31550
 mtune=pentiumpro/*msoft-float*
 
31551
Index: gcc/config/i386/winnt.c
 
31552
===================================================================
 
31553
--- a/src/gcc/config/i386/winnt.c       (.../tags/gcc_4_8_2_release)
 
31554
+++ b/src/gcc/config/i386/winnt.c       (.../branches/gcc-4_8-branch)
 
31555
@@ -547,8 +547,9 @@
 
31556
         sets 'discard' characteristic, rather than telling linker
 
31557
         to warn of size or content mismatch, so do the same.  */ 
 
31558
       bool discard = (flags & SECTION_CODE)
 
31559
-                     || lookup_attribute ("selectany",
 
31560
-                                          DECL_ATTRIBUTES (decl));      
 
31561
+                     || (TREE_CODE (decl) != IDENTIFIER_NODE
 
31562
+                         && lookup_attribute ("selectany",
 
31563
+                                              DECL_ATTRIBUTES (decl)));
 
31564
       fprintf (asm_out_file, "\t.linkonce %s\n",
 
31565
               (discard  ? "discard" : "same_size"));
 
31566
     }
 
31567
Index: gcc/config/i386/sse.md
 
31568
===================================================================
 
31569
--- a/src/gcc/config/i386/sse.md        (.../tags/gcc_4_8_2_release)
 
31570
+++ b/src/gcc/config/i386/sse.md        (.../branches/gcc-4_8-branch)
 
31571
@@ -605,6 +605,7 @@
 
31572
 }
 
31573
   [(set_attr "type" "ssemov")
 
31574
    (set_attr "movu" "1")
 
31575
+   (set_attr "ssememalign" "8")
 
31576
    (set_attr "prefix" "maybe_vex")
 
31577
    (set (attr "mode")
 
31578
        (cond [(match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
 
31579
@@ -634,6 +635,7 @@
 
31580
 }
 
31581
   [(set_attr "type" "ssemov")
 
31582
    (set_attr "movu" "1")
 
31583
+   (set_attr "ssememalign" "8")
 
31584
    (set_attr "prefix" "maybe_vex")
 
31585
    (set (attr "mode")
 
31586
        (cond [(ior (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
 
31587
@@ -663,6 +665,7 @@
 
31588
 }
 
31589
   [(set_attr "type" "ssemov")
 
31590
    (set_attr "movu" "1")
 
31591
+   (set_attr "ssememalign" "8")
 
31592
    (set (attr "prefix_data16")
 
31593
      (if_then_else
 
31594
        (match_test "TARGET_AVX")
 
31595
@@ -696,6 +699,7 @@
 
31596
 }
 
31597
   [(set_attr "type" "ssemov")
 
31598
    (set_attr "movu" "1")
 
31599
+   (set_attr "ssememalign" "8")
 
31600
    (set (attr "prefix_data16")
 
31601
      (if_then_else
 
31602
        (match_test "TARGET_AVX")
 
31603
@@ -721,6 +725,7 @@
 
31604
   "%vlddqu\t{%1, %0|%0, %1}"
 
31605
   [(set_attr "type" "ssemov")
 
31606
    (set_attr "movu" "1")
 
31607
+   (set_attr "ssememalign" "8")
 
31608
    (set (attr "prefix_data16")
 
31609
      (if_then_else
 
31610
        (match_test "TARGET_AVX")
 
31611
@@ -1001,6 +1006,7 @@
 
31612
    vrcpss\t{%1, %2, %0|%0, %2, %1}"
 
31613
   [(set_attr "isa" "noavx,avx")
 
31614
    (set_attr "type" "sse")
 
31615
+   (set_attr "ssememalign" "32")
 
31616
    (set_attr "atom_sse_attr" "rcp")
 
31617
    (set_attr "btver2_sse_attr" "rcp")
 
31618
    (set_attr "prefix" "orig,vex")
 
31619
@@ -1089,6 +1095,7 @@
 
31620
    vrsqrtss\t{%1, %2, %0|%0, %2, %1}"
 
31621
   [(set_attr "isa" "noavx,avx")
 
31622
    (set_attr "type" "sse")
 
31623
+   (set_attr "ssememalign" "32")
 
31624
    (set_attr "prefix" "orig,vex")
 
31625
    (set_attr "mode" "SF")])
 
31626
 
 
31627
@@ -2844,6 +2851,7 @@
 
31628
   "%vcvtdq2pd\t{%1, %0|%0, %q1}"
 
31629
   [(set_attr "type" "ssecvt")
 
31630
    (set_attr "prefix" "maybe_vex")
 
31631
+   (set_attr "ssememalign" "64")
 
31632
    (set_attr "mode" "V2DF")])
 
31633
 
 
31634
 (define_insn "avx_cvtpd2dq256"
 
31635
@@ -3572,6 +3580,7 @@
 
31636
    %vmovhps\t{%2, %0|%0, %2}"
 
31637
   [(set_attr "isa" "noavx,avx,noavx,avx,*")
 
31638
    (set_attr "type" "ssemov")
 
31639
+   (set_attr "ssememalign" "64")
 
31640
    (set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
 
31641
    (set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
 
31642
 
 
31643
@@ -3617,6 +3626,7 @@
 
31644
    %vmovlps\t{%2, %H0|%H0, %2}"
 
31645
   [(set_attr "isa" "noavx,avx,noavx,avx,*")
 
31646
    (set_attr "type" "ssemov")
 
31647
+   (set_attr "ssememalign" "64")
 
31648
    (set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
 
31649
    (set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
 
31650
 
 
31651
@@ -3941,6 +3951,7 @@
 
31652
    %vmovhlps\t{%1, %d0|%d0, %1}
 
31653
    %vmovlps\t{%H1, %d0|%d0, %H1}"
 
31654
   [(set_attr "type" "ssemov")
 
31655
+   (set_attr "ssememalign" "64")
 
31656
    (set_attr "prefix" "maybe_vex")
 
31657
    (set_attr "mode" "V2SF,V4SF,V2SF")])
 
31658
 
 
31659
@@ -3980,6 +3991,7 @@
 
31660
    %vmovlps\t{%2, %H0|%H0, %2}"
 
31661
   [(set_attr "isa" "noavx,avx,noavx,avx,*")
 
31662
    (set_attr "type" "ssemov")
 
31663
+   (set_attr "ssememalign" "64")
 
31664
    (set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
 
31665
    (set_attr "mode" "V2SF,V2SF,V4SF,V4SF,V2SF")])
 
31666
 
 
31667
@@ -4033,6 +4045,7 @@
 
31668
    %vmovlps\t{%2, %0|%0, %2}"
 
31669
   [(set_attr "isa" "noavx,avx,noavx,avx,*")
 
31670
    (set_attr "type" "sseshuf,sseshuf,ssemov,ssemov,ssemov")
 
31671
+   (set_attr "ssememalign" "64")
 
31672
    (set_attr "length_immediate" "1,1,*,*,*")
 
31673
    (set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
 
31674
    (set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
 
31675
@@ -4642,7 +4655,8 @@
 
31676
    vmovlpd\t{%H1, %2, %0|%0, %2, %H1}
 
31677
    %vmovhpd\t{%1, %0|%0, %1}"
 
31678
   [(set_attr "isa" "noavx,avx,sse3,noavx,avx,*")
 
31679
-  (set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
 
31680
+   (set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
 
31681
+   (set_attr "ssememalign" "64")
 
31682
    (set_attr "prefix_data16" "*,*,*,1,*,1")
 
31683
    (set_attr "prefix" "orig,vex,maybe_vex,orig,vex,maybe_vex")
 
31684
    (set_attr "mode" "V2DF,V2DF,DF,V1DF,V1DF,V1DF")])
 
31685
@@ -4744,6 +4758,7 @@
 
31686
    %vmovlpd\t{%2, %H0|%H0, %2}"
 
31687
   [(set_attr "isa" "noavx,avx,sse3,noavx,avx,*")
 
31688
    (set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
 
31689
+   (set_attr "ssememalign" "64")
 
31690
    (set_attr "prefix_data16" "*,*,*,1,*,1")
 
31691
    (set_attr "prefix" "orig,vex,maybe_vex,orig,vex,maybe_vex")
 
31692
    (set_attr "mode" "V2DF,V2DF,DF,V1DF,V1DF,V1DF")])
 
31693
@@ -4982,6 +4997,7 @@
 
31694
    movhlps\t{%1, %0|%0, %1}
 
31695
    movlps\t{%H1, %0|%0, %H1}"
 
31696
   [(set_attr "type" "ssemov")
 
31697
+   (set_attr "ssememalign" "64")
 
31698
    (set_attr "mode" "V2SF,V4SF,V2SF")])
 
31699
 
 
31700
 ;; Avoid combining registers from different units in a single alternative,
 
31701
@@ -5077,6 +5093,7 @@
 
31702
    #"
 
31703
   [(set_attr "isa" "noavx,avx,noavx,avx,*,*,*")
 
31704
    (set_attr "type" "ssemov,ssemov,sselog,sselog,ssemov,fmov,imov")
 
31705
+   (set_attr "ssememalign" "64")
 
31706
    (set_attr "prefix_data16" "1,*,*,*,*,*,*")
 
31707
    (set_attr "prefix" "orig,vex,orig,vex,*,*,*")
 
31708
    (set_attr "mode" "V1DF,V1DF,V2DF,V2DF,DF,DF,DF")])
 
31709
@@ -5145,6 +5162,7 @@
 
31710
              (const_string "imov")
 
31711
           ]
 
31712
           (const_string "ssemov")))
 
31713
+   (set_attr "ssememalign" "64")
 
31714
    (set_attr "prefix_data16" "*,1,*,*,*,*,1,*,*,*,*")
 
31715
    (set_attr "length_immediate" "*,*,*,*,*,1,*,*,*,*,*")
 
31716
    (set_attr "prefix" "maybe_vex,orig,vex,orig,vex,orig,orig,vex,*,*,*")
 
31717
@@ -5189,6 +5207,7 @@
 
31718
        (const_string "1")
 
31719
        (const_string "*")))
 
31720
    (set_attr "length_immediate" "*,*,*,*,*,1,*,*,*")
 
31721
+   (set_attr "ssememalign" "64")
 
31722
    (set_attr "prefix" "orig,vex,orig,vex,maybe_vex,orig,orig,vex,maybe_vex")
 
31723
    (set_attr "mode" "DF,DF,V1DF,V1DF,V1DF,V2DF,V1DF,V1DF,V1DF")])
 
31724
 
 
31725
@@ -8736,6 +8755,7 @@
 
31726
   "TARGET_SSE4_1"
 
31727
   "%vpmov<extsuffix>bw\t{%1, %0|%0, %q1}"
 
31728
   [(set_attr "type" "ssemov")
 
31729
+   (set_attr "ssememalign" "64")
 
31730
    (set_attr "prefix_extra" "1")
 
31731
    (set_attr "prefix" "maybe_vex")
 
31732
    (set_attr "mode" "TI")])
 
31733
@@ -8766,6 +8786,7 @@
 
31734
   "TARGET_SSE4_1"
 
31735
   "%vpmov<extsuffix>bd\t{%1, %0|%0, %k1}"
 
31736
   [(set_attr "type" "ssemov")
 
31737
+   (set_attr "ssememalign" "32")
 
31738
    (set_attr "prefix_extra" "1")
 
31739
    (set_attr "prefix" "maybe_vex")
 
31740
    (set_attr "mode" "TI")])
 
31741
@@ -8791,6 +8812,7 @@
 
31742
   "TARGET_SSE4_1"
 
31743
   "%vpmov<extsuffix>wd\t{%1, %0|%0, %q1}"
 
31744
   [(set_attr "type" "ssemov")
 
31745
+   (set_attr "ssememalign" "64")
 
31746
    (set_attr "prefix_extra" "1")
 
31747
    (set_attr "prefix" "maybe_vex")
 
31748
    (set_attr "mode" "TI")])
 
31749
@@ -8818,6 +8840,7 @@
 
31750
   "TARGET_SSE4_1"
 
31751
   "%vpmov<extsuffix>bq\t{%1, %0|%0, %w1}"
 
31752
   [(set_attr "type" "ssemov")
 
31753
+   (set_attr "ssememalign" "16")
 
31754
    (set_attr "prefix_extra" "1")
 
31755
    (set_attr "prefix" "maybe_vex")
 
31756
    (set_attr "mode" "TI")])
 
31757
@@ -8845,6 +8868,7 @@
 
31758
   "TARGET_SSE4_1"
 
31759
   "%vpmov<extsuffix>wq\t{%1, %0|%0, %k1}"
 
31760
   [(set_attr "type" "ssemov")
 
31761
+   (set_attr "ssememalign" "32")
 
31762
    (set_attr "prefix_extra" "1")
 
31763
    (set_attr "prefix" "maybe_vex")
 
31764
    (set_attr "mode" "TI")])
 
31765
@@ -8868,6 +8892,7 @@
 
31766
   "TARGET_SSE4_1"
 
31767
   "%vpmov<extsuffix>dq\t{%1, %0|%0, %q1}"
 
31768
   [(set_attr "type" "ssemov")
 
31769
+   (set_attr "ssememalign" "64")
 
31770
    (set_attr "prefix_extra" "1")
 
31771
    (set_attr "prefix" "maybe_vex")
 
31772
    (set_attr "mode" "TI")])
 
31773
@@ -9151,6 +9176,7 @@
 
31774
   [(set_attr "type" "sselog")
 
31775
    (set_attr "prefix_data16" "1")
 
31776
    (set_attr "prefix_extra" "1")
 
31777
+   (set_attr "ssememalign" "8")
 
31778
    (set_attr "length_immediate" "1")
 
31779
    (set_attr "memory" "none,load")
 
31780
    (set_attr "mode" "TI")])
 
31781
@@ -9213,6 +9239,7 @@
 
31782
   [(set_attr "type" "sselog")
 
31783
    (set_attr "prefix_data16" "1")
 
31784
    (set_attr "prefix_extra" "1")
 
31785
+   (set_attr "ssememalign" "8")
 
31786
    (set_attr "length_immediate" "1")
 
31787
    (set_attr "memory" "load")
 
31788
    (set_attr "mode" "TI")])
 
31789
@@ -9240,6 +9267,7 @@
 
31790
    (set_attr "prefix_data16" "1")
 
31791
    (set_attr "prefix_extra" "1")
 
31792
    (set_attr "prefix" "maybe_vex")
 
31793
+   (set_attr "ssememalign" "8")
 
31794
    (set_attr "length_immediate" "1")
 
31795
    (set_attr "btver2_decode" "vector")
 
31796
    (set_attr "memory" "none,load")
 
31797
@@ -9267,6 +9295,7 @@
 
31798
   [(set_attr "type" "sselog")
 
31799
    (set_attr "prefix_data16" "1")
 
31800
    (set_attr "prefix_extra" "1")
 
31801
+   (set_attr "ssememalign" "8")
 
31802
    (set_attr "length_immediate" "1")
 
31803
    (set_attr "prefix" "maybe_vex")
 
31804
    (set_attr "btver2_decode" "vector")
 
31805
@@ -9293,6 +9322,7 @@
 
31806
   [(set_attr "type" "sselog")
 
31807
    (set_attr "prefix_data16" "1")
 
31808
    (set_attr "prefix_extra" "1")
 
31809
+   (set_attr "ssememalign" "8")
 
31810
    (set_attr "length_immediate" "1")
 
31811
    (set_attr "memory" "none,load,none,load")
 
31812
    (set_attr "btver2_decode" "vector,vector,vector,vector") 
 
31813
@@ -9346,6 +9376,7 @@
 
31814
   [(set_attr "type" "sselog")
 
31815
    (set_attr "prefix_data16" "1")
 
31816
    (set_attr "prefix_extra" "1")
 
31817
+   (set_attr "ssememalign" "8")
 
31818
    (set_attr "length_immediate" "1")
 
31819
    (set_attr "memory" "none,load")
 
31820
    (set_attr "mode" "TI")])
 
31821
@@ -9399,6 +9430,7 @@
 
31822
   [(set_attr "type" "sselog")
 
31823
    (set_attr "prefix_data16" "1")
 
31824
    (set_attr "prefix_extra" "1")
 
31825
+   (set_attr "ssememalign" "8")
 
31826
    (set_attr "length_immediate" "1")
 
31827
    (set_attr "memory" "load")
 
31828
    (set_attr "mode" "TI")])
 
31829
@@ -9421,6 +9453,7 @@
 
31830
   [(set_attr "type" "sselog")
 
31831
    (set_attr "prefix_data16" "1")
 
31832
    (set_attr "prefix_extra" "1")
 
31833
+   (set_attr "ssememalign" "8")
 
31834
    (set_attr "length_immediate" "1")
 
31835
    (set_attr "prefix" "maybe_vex")
 
31836
    (set_attr "memory" "none,load")
 
31837
@@ -9445,6 +9478,7 @@
 
31838
   [(set_attr "type" "sselog")
 
31839
    (set_attr "prefix_data16" "1")
 
31840
    (set_attr "prefix_extra" "1")
 
31841
+   (set_attr "ssememalign" "8")
 
31842
    (set_attr "length_immediate" "1")
 
31843
    (set_attr "prefix" "maybe_vex")
 
31844
    (set_attr "memory" "none,load")
 
31845
@@ -9469,6 +9503,7 @@
 
31846
   [(set_attr "type" "sselog")
 
31847
    (set_attr "prefix_data16" "1")
 
31848
    (set_attr "prefix_extra" "1")
 
31849
+   (set_attr "ssememalign" "8")
 
31850
    (set_attr "length_immediate" "1")
 
31851
    (set_attr "memory" "none,load,none,load")
 
31852
    (set_attr "prefix" "maybe_vex")
 
31853
@@ -10213,7 +10248,6 @@
 
31854
   [(set_attr "type" "ssecvt1")
 
31855
    (set_attr "mode" "<MODE>")])
 
31856
 
 
31857
-;; scalar insns
 
31858
 (define_expand "xop_vmfrcz<mode>2"
 
31859
   [(set (match_operand:VF_128 0 "register_operand")
 
31860
        (vec_merge:VF_128
 
31861
@@ -10220,14 +10254,12 @@
 
31862
          (unspec:VF_128
 
31863
           [(match_operand:VF_128 1 "nonimmediate_operand")]
 
31864
           UNSPEC_FRCZ)
 
31865
-         (match_dup 3)
 
31866
+         (match_dup 2)
 
31867
          (const_int 1)))]
 
31868
   "TARGET_XOP"
 
31869
-{
 
31870
-  operands[3] = CONST0_RTX (<MODE>mode);
 
31871
-})
 
31872
+  "operands[2] = CONST0_RTX (<MODE>mode);")
 
31873
 
 
31874
-(define_insn "*xop_vmfrcz_<mode>"
 
31875
+(define_insn "*xop_vmfrcz<mode>2"
 
31876
   [(set (match_operand:VF_128 0 "register_operand" "=x")
 
31877
        (vec_merge:VF_128
 
31878
          (unspec:VF_128
 
31879
Index: gcc/config/i386/xopintrin.h
 
31880
===================================================================
 
31881
--- a/src/gcc/config/i386/xopintrin.h   (.../tags/gcc_4_8_2_release)
 
31882
+++ b/src/gcc/config/i386/xopintrin.h   (.../branches/gcc-4_8-branch)
 
31883
@@ -745,13 +745,17 @@
 
31884
 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 
31885
 _mm_frcz_ss (__m128 __A, __m128 __B)
 
31886
 {
 
31887
-  return (__m128) __builtin_ia32_vfrczss ((__v4sf)__A, (__v4sf)__B);
 
31888
+  return (__m128) __builtin_ia32_movss ((__v4sf)__A,
 
31889
+                                       (__v4sf)
 
31890
+                                       __builtin_ia32_vfrczss ((__v4sf)__B));
 
31891
 }
 
31892
 
 
31893
 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 
31894
 _mm_frcz_sd (__m128d __A, __m128d __B)
 
31895
 {
 
31896
-  return (__m128d) __builtin_ia32_vfrczsd ((__v2df)__A, (__v2df)__B);
 
31897
+  return (__m128d) __builtin_ia32_movsd ((__v2df)__A,
 
31898
+                                        (__v2df)
 
31899
+                                        __builtin_ia32_vfrczsd ((__v2df)__B));
 
31900
 }
 
31901
 
 
31902
 extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 
31903
Index: gcc/config/i386/driver-i386.c
 
31904
===================================================================
 
31905
--- a/src/gcc/config/i386/driver-i386.c (.../tags/gcc_4_8_2_release)
 
31906
+++ b/src/gcc/config/i386/driver-i386.c (.../branches/gcc-4_8-branch)
 
31907
@@ -126,6 +126,18 @@
 
31908
       case 0x0c:
 
31909
        level1->sizekb = 16; level1->assoc = 4; level1->line = 32;
 
31910
        break;
 
31911
+      case 0x0d:
 
31912
+       level1->sizekb = 16; level1->assoc = 4; level1->line = 64;
 
31913
+       break;
 
31914
+      case 0x0e:
 
31915
+       level1->sizekb = 24; level1->assoc = 6; level1->line = 64;
 
31916
+       break;
 
31917
+      case 0x21:
 
31918
+       level2->sizekb = 256; level2->assoc = 8; level2->line = 64;
 
31919
+       break;
 
31920
+      case 0x24:
 
31921
+       level2->sizekb = 1024; level2->assoc = 16; level2->line = 64;
 
31922
+       break;
 
31923
       case 0x2c:
 
31924
        level1->sizekb = 32; level1->assoc = 8; level1->line = 64;
 
31925
        break;
 
31926
@@ -162,6 +174,9 @@
 
31927
       case 0x45:
 
31928
        level2->sizekb = 2048; level2->assoc = 4; level2->line = 32;
 
31929
        break;
 
31930
+      case 0x48:
 
31931
+       level2->sizekb = 3072; level2->assoc = 12; level2->line = 64;
 
31932
+       break;
 
31933
       case 0x49:
 
31934
        if (xeon_mp)
 
31935
          break;
 
31936
@@ -203,6 +218,9 @@
 
31937
       case 0x7f:
 
31938
        level2->sizekb = 512; level2->assoc = 2; level2->line = 64;
 
31939
        break;
 
31940
+      case 0x80:
 
31941
+       level2->sizekb = 512; level2->assoc = 8; level2->line = 64;
 
31942
+       break;
 
31943
       case 0x82:
 
31944
        level2->sizekb = 256; level2->assoc = 8; level2->line = 32;
 
31945
        break;
 
31946
@@ -470,6 +488,28 @@
 
31947
       has_xsaveopt = eax & bit_XSAVEOPT;
 
31948
     }
 
31949
 
 
31950
+  /* Check cpuid level of extended features.  */
 
31951
+  __cpuid (0x80000000, ext_level, ebx, ecx, edx);
 
31952
+
 
31953
+  if (ext_level > 0x80000000)
 
31954
+    {
 
31955
+      __cpuid (0x80000001, eax, ebx, ecx, edx);
 
31956
+
 
31957
+      has_lahf_lm = ecx & bit_LAHF_LM;
 
31958
+      has_sse4a = ecx & bit_SSE4a;
 
31959
+      has_abm = ecx & bit_ABM;
 
31960
+      has_lwp = ecx & bit_LWP;
 
31961
+      has_fma4 = ecx & bit_FMA4;
 
31962
+      has_xop = ecx & bit_XOP;
 
31963
+      has_tbm = ecx & bit_TBM;
 
31964
+      has_lzcnt = ecx & bit_LZCNT;
 
31965
+      has_prfchw = ecx & bit_PRFCHW;
 
31966
+
 
31967
+      has_longmode = edx & bit_LM;
 
31968
+      has_3dnowp = edx & bit_3DNOWP;
 
31969
+      has_3dnow = edx & bit_3DNOW;
 
31970
+    }
 
31971
+
 
31972
   /* Get XCR_XFEATURE_ENABLED_MASK register with xgetbv.  */
 
31973
 #define XCR_XFEATURE_ENABLED_MASK      0x0
 
31974
 #define XSTATE_FP                      0x1
 
31975
@@ -488,33 +528,12 @@
 
31976
       has_avx2 = 0;
 
31977
       has_fma = 0;
 
31978
       has_fma4 = 0;
 
31979
+      has_f16c = 0;
 
31980
       has_xop = 0;
 
31981
       has_xsave = 0;
 
31982
       has_xsaveopt = 0;
 
31983
     }
 
31984
 
 
31985
-  /* Check cpuid level of extended features.  */
 
31986
-  __cpuid (0x80000000, ext_level, ebx, ecx, edx);
 
31987
-
 
31988
-  if (ext_level > 0x80000000)
 
31989
-    {
 
31990
-      __cpuid (0x80000001, eax, ebx, ecx, edx);
 
31991
-
 
31992
-      has_lahf_lm = ecx & bit_LAHF_LM;
 
31993
-      has_sse4a = ecx & bit_SSE4a;
 
31994
-      has_abm = ecx & bit_ABM;
 
31995
-      has_lwp = ecx & bit_LWP;
 
31996
-      has_fma4 = ecx & bit_FMA4;
 
31997
-      has_xop = ecx & bit_XOP;
 
31998
-      has_tbm = ecx & bit_TBM;
 
31999
-      has_lzcnt = ecx & bit_LZCNT;
 
32000
-      has_prfchw = ecx & bit_PRFCHW;
 
32001
-
 
32002
-      has_longmode = edx & bit_LM;
 
32003
-      has_3dnowp = edx & bit_3DNOWP;
 
32004
-      has_3dnow = edx & bit_3DNOW;
 
32005
-    }
 
32006
-
 
32007
   if (!arch)
 
32008
     {
 
32009
       if (vendor == signature_AMD_ebx
 
32010
Index: gcc/config/i386/i386.c
 
32011
===================================================================
 
32012
--- a/src/gcc/config/i386/i386.c        (.../tags/gcc_4_8_2_release)
 
32013
+++ b/src/gcc/config/i386/i386.c        (.../branches/gcc-4_8-branch)
 
32014
@@ -1378,7 +1378,7 @@
 
32015
   8,                                   /* MMX or SSE register to integer */
 
32016
   8,                                   /* size of l1 cache.  */
 
32017
   1024,                                        /* size of l2 cache.  */
 
32018
-  128,                                 /* size of prefetch block */
 
32019
+  64,                                  /* size of prefetch block */
 
32020
   8,                                   /* number of parallel prefetches */
 
32021
   1,                                   /* Branch cost */
 
32022
   COSTS_N_INSNS (6),                   /* cost of FADD and FSUB insns.  */
 
32023
@@ -1894,10 +1894,10 @@
 
32024
   m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_ATOM  | m_AMDFAM10 | m_BDVER | m_GENERIC,
 
32025
 
 
32026
   /* X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL */
 
32027
-  m_COREI7 | m_AMDFAM10 | m_BDVER | m_BTVER,
 
32028
+  m_COREI7 | m_HASWELL | m_AMDFAM10 | m_BDVER | m_BTVER,
 
32029
 
 
32030
   /* X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL */
 
32031
-  m_COREI7 | m_BDVER,
 
32032
+  m_COREI7 | m_HASWELL| m_BDVER,
 
32033
 
 
32034
   /* X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL */
 
32035
   m_BDVER ,
 
32036
@@ -2409,6 +2409,7 @@
 
32037
 /* Processor target table, indexed by processor number */
 
32038
 struct ptt
 
32039
 {
 
32040
+  const char *const name;                      /* processor name  */
 
32041
   const struct processor_costs *cost;          /* Processor costs */
 
32042
   const int align_loop;                                /* Default alignments.  */
 
32043
   const int align_loop_max_skip;
 
32044
@@ -2417,67 +2418,32 @@
 
32045
   const int align_func;
 
32046
 };
 
32047
 
 
32048
+/* This table must be in sync with enum processor_type in i386.h.  */ 
 
32049
 static const struct ptt processor_target_table[PROCESSOR_max] =
 
32050
 {
 
32051
-  {&i386_cost, 4, 3, 4, 3, 4},
 
32052
-  {&i486_cost, 16, 15, 16, 15, 16},
 
32053
-  {&pentium_cost, 16, 7, 16, 7, 16},
 
32054
-  {&pentiumpro_cost, 16, 15, 16, 10, 16},
 
32055
-  {&geode_cost, 0, 0, 0, 0, 0},
 
32056
-  {&k6_cost, 32, 7, 32, 7, 32},
 
32057
-  {&athlon_cost, 16, 7, 16, 7, 16},
 
32058
-  {&pentium4_cost, 0, 0, 0, 0, 0},
 
32059
-  {&k8_cost, 16, 7, 16, 7, 16},
 
32060
-  {&nocona_cost, 0, 0, 0, 0, 0},
 
32061
-  /* Core 2  */
 
32062
-  {&core_cost, 16, 10, 16, 10, 16},
 
32063
-  /* Core i7  */
 
32064
-  {&core_cost, 16, 10, 16, 10, 16},
 
32065
-  /* Core avx2  */
 
32066
-  {&core_cost, 16, 10, 16, 10, 16},
 
32067
-  {&generic32_cost, 16, 7, 16, 7, 16},
 
32068
-  {&generic64_cost, 16, 10, 16, 10, 16},
 
32069
-  {&amdfam10_cost, 32, 24, 32, 7, 32},
 
32070
-  {&bdver1_cost, 16, 10, 16, 7, 11},
 
32071
-  {&bdver2_cost, 16, 10, 16, 7, 11},
 
32072
-  {&bdver3_cost, 16, 10, 16, 7, 11},
 
32073
-  {&btver1_cost, 16, 10, 16, 7, 11},
 
32074
-  {&btver2_cost, 16, 10, 16, 7, 11},
 
32075
-  {&atom_cost, 16, 15, 16, 7, 16}
 
32076
+  {"generic", &generic32_cost, 16, 7, 16, 7, 16},
 
32077
+  {"generic", &generic64_cost, 16, 10, 16, 10, 16},
 
32078
+  {"i386", &i386_cost, 4, 3, 4, 3, 4},
 
32079
+  {"i486", &i486_cost, 16, 15, 16, 15, 16},
 
32080
+  {"pentium", &pentium_cost, 16, 7, 16, 7, 16},
 
32081
+  {"pentiumpro", &pentiumpro_cost, 16, 15, 16, 10, 16},
 
32082
+  {"pentium4", &pentium4_cost, 0, 0, 0, 0, 0},
 
32083
+  {"nocona", &nocona_cost, 0, 0, 0, 0, 0},
 
32084
+  {"core2", &core_cost, 16, 10, 16, 10, 16},
 
32085
+  {"corei7", &core_cost, 16, 10, 16, 10, 16},
 
32086
+  {"core-avx2", &core_cost, 16, 10, 16, 10, 16},
 
32087
+  {"atom", &atom_cost, 16, 15, 16, 7, 16},
 
32088
+  {"geode", &geode_cost, 0, 0, 0, 0, 0},
 
32089
+  {"k6", &k6_cost, 32, 7, 32, 7, 32},
 
32090
+  {"athlon", &athlon_cost, 16, 7, 16, 7, 16},
 
32091
+  {"k8", &k8_cost, 16, 7, 16, 7, 16},
 
32092
+  {"amdfam10", &amdfam10_cost, 32, 24, 32, 7, 32},
 
32093
+  {"bdver1", &bdver1_cost, 16, 10, 16, 7, 11},
 
32094
+  {"bdver2", &bdver2_cost, 16, 10, 16, 7, 11},
 
32095
+  {"bdver3", &bdver3_cost, 16, 10, 16, 7, 11},
 
32096
+  {"btver1", &btver1_cost, 16, 10, 16, 7, 11},
 
32097
+  {"btver2", &btver2_cost, 16, 10, 16, 7, 11}
 
32098
 };
 
32099
-
 
32100
-static const char *const cpu_names[TARGET_CPU_DEFAULT_max] =
 
32101
-{
 
32102
-  "generic",
 
32103
-  "i386",
 
32104
-  "i486",
 
32105
-  "pentium",
 
32106
-  "pentium-mmx",
 
32107
-  "pentiumpro",
 
32108
-  "pentium2",
 
32109
-  "pentium3",
 
32110
-  "pentium4",
 
32111
-  "pentium-m",
 
32112
-  "prescott",
 
32113
-  "nocona",
 
32114
-  "core2",
 
32115
-  "corei7",
 
32116
-  "core-avx2",
 
32117
-  "atom",
 
32118
-  "geode",
 
32119
-  "k6",
 
32120
-  "k6-2",
 
32121
-  "k6-3",
 
32122
-  "athlon",
 
32123
-  "athlon-4",
 
32124
-  "k8",
 
32125
-  "amdfam10",
 
32126
-  "bdver1",
 
32127
-  "bdver2",
 
32128
-  "bdver3",
 
32129
-  "btver1",
 
32130
-  "btver2"
 
32131
-};
 
32132
 
 
32133
 static bool
 
32134
 gate_insert_vzeroupper (void)
 
32135
@@ -2983,7 +2949,7 @@
 
32136
       {"bdver3", PROCESSOR_BDVER3, CPU_BDVER3,
 
32137
        PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
 
32138
        | PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_SSSE3 | PTA_SSE4_1
 
32139
-       | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX
 
32140
+       | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX | PTA_FMA4
 
32141
        | PTA_XOP | PTA_LWP | PTA_BMI | PTA_TBM | PTA_F16C
 
32142
        | PTA_FMA | PTA_PRFCHW | PTA_FXSR | PTA_XSAVE 
 
32143
        | PTA_XSAVEOPT},
 
32144
@@ -3125,7 +3091,8 @@
 
32145
        ix86_tune_string = ix86_arch_string;
 
32146
       if (!ix86_tune_string)
 
32147
        {
 
32148
-         ix86_tune_string = cpu_names[TARGET_CPU_DEFAULT];
 
32149
+         ix86_tune_string
 
32150
+           = processor_target_table[TARGET_CPU_DEFAULT].name;
 
32151
          ix86_tune_defaulted = 1;
 
32152
        }
 
32153
 
 
32154
@@ -4078,19 +4045,15 @@
 
32155
     = ix86_target_string (ptr->x_ix86_isa_flags, ptr->x_target_flags,
 
32156
                          NULL, NULL, ptr->x_ix86_fpmath, false);
 
32157
 
 
32158
+  gcc_assert (ptr->arch < PROCESSOR_max);
 
32159
   fprintf (file, "%*sarch = %d (%s)\n",
 
32160
           indent, "",
 
32161
-          ptr->arch,
 
32162
-          ((ptr->arch < TARGET_CPU_DEFAULT_max)
 
32163
-           ? cpu_names[ptr->arch]
 
32164
-           : "<unknown>"));
 
32165
+          ptr->arch, processor_target_table[ptr->arch].name);
 
32166
 
 
32167
+  gcc_assert (ptr->tune < PROCESSOR_max);
 
32168
   fprintf (file, "%*stune = %d (%s)\n",
 
32169
           indent, "",
 
32170
-          ptr->tune,
 
32171
-          ((ptr->tune < TARGET_CPU_DEFAULT_max)
 
32172
-           ? cpu_names[ptr->tune]
 
32173
-           : "<unknown>"));
 
32174
+          ptr->tune, processor_target_table[ptr->tune].name);
 
32175
 
 
32176
   fprintf (file, "%*sbranch_cost = %d\n", indent, "", ptr->branch_cost);
 
32177
 
 
32178
@@ -5213,7 +5176,12 @@
 
32179
   /* Use register calling convention for local functions when possible.  */
 
32180
   if (decl
 
32181
       && TREE_CODE (decl) == FUNCTION_DECL
 
32182
-      && optimize
 
32183
+      /* Caller and callee must agree on the calling convention, so
 
32184
+        checking here just optimize means that with
 
32185
+        __attribute__((optimize (...))) caller could use regparm convention
 
32186
+        and callee not, or vice versa.  Instead look at whether the callee
 
32187
+        is optimized or not.  */
 
32188
+      && opt_for_fn (decl, optimize)
 
32189
       && !(profile_flag && !flag_fentry))
 
32190
     {
 
32191
       /* FIXME: remove this CONST_CAST when cgraph.[ch] is constified.  */
 
32192
@@ -5409,6 +5377,17 @@
 
32193
          bool win;
 
32194
          int j;
 
32195
 
 
32196
+         /* For pre-AVX disallow unaligned loads/stores where the
 
32197
+            instructions don't support it.  */
 
32198
+         if (!TARGET_AVX
 
32199
+             && VECTOR_MODE_P (GET_MODE (op))
 
32200
+             && misaligned_operand (op, GET_MODE (op)))
 
32201
+           {
 
32202
+             int min_align = get_attr_ssememalign (insn);
 
32203
+             if (min_align == 0)
 
32204
+               return false;
 
32205
+           }
 
32206
+
 
32207
          /* A unary operator may be accepted by the predicate, but it
 
32208
             is irrelevant for matching constraints.  */
 
32209
          if (UNARY_P (op))
 
32210
@@ -5747,9 +5726,9 @@
 
32211
          cum->nregs = 0;
 
32212
          cum->sse_nregs = 0;
 
32213
          cum->mmx_nregs = 0;
 
32214
-         cum->warn_avx = 0;
 
32215
-         cum->warn_sse = 0;
 
32216
-         cum->warn_mmx = 0;
 
32217
+         cum->warn_avx = false;
 
32218
+         cum->warn_sse = false;
 
32219
+         cum->warn_mmx = false;
 
32220
          return;
 
32221
        }
 
32222
 
 
32223
@@ -5790,10 +5769,14 @@
 
32224
 
 
32225
    The midde-end can't deal with the vector types > 16 bytes.  In this
 
32226
    case, we return the original mode and warn ABI change if CUM isn't
 
32227
-   NULL.  */
 
32228
+   NULL. 
 
32229
 
 
32230
+   If INT_RETURN is true, warn ABI change if the vector mode isn't
 
32231
+   available for function return value.  */
 
32232
+
 
32233
 static enum machine_mode
 
32234
-type_natural_mode (const_tree type, const CUMULATIVE_ARGS *cum)
 
32235
+type_natural_mode (const_tree type, const CUMULATIVE_ARGS *cum,
 
32236
+                  bool in_return)
 
32237
 {
 
32238
   enum machine_mode mode = TYPE_MODE (type);
 
32239
 
 
32240
@@ -5819,33 +5802,61 @@
 
32241
                if (size == 32 && !TARGET_AVX)
 
32242
                  {
 
32243
                    static bool warnedavx;
 
32244
+                   static bool warnedavx_ret;
 
32245
 
 
32246
-                   if (cum
 
32247
-                       && !warnedavx
 
32248
-                       && cum->warn_avx)
 
32249
+                   if (cum && cum->warn_avx && !warnedavx)
 
32250
                      {
 
32251
-                       warnedavx = true;
 
32252
-                       warning (0, "AVX vector argument without AVX "
 
32253
-                                "enabled changes the ABI");
 
32254
+                       if (warning (OPT_Wpsabi, "AVX vector argument "
 
32255
+                                    "without AVX enabled changes the ABI"))
 
32256
+                         warnedavx = true;
 
32257
                      }
 
32258
+                   else if (in_return && !warnedavx_ret)
 
32259
+                     {
 
32260
+                       if (warning (OPT_Wpsabi, "AVX vector return "
 
32261
+                                    "without AVX enabled changes the ABI"))
 
32262
+                         warnedavx_ret = true;
 
32263
+                     }
 
32264
+
 
32265
                    return TYPE_MODE (type);
 
32266
                  }
 
32267
-               else if ((size == 8 || size == 16) && !TARGET_SSE)
 
32268
+               else if (((size == 8 && TARGET_64BIT) || size == 16)
 
32269
+                        && !TARGET_SSE)
 
32270
                  {
 
32271
                    static bool warnedsse;
 
32272
+                   static bool warnedsse_ret;
 
32273
 
 
32274
-                   if (cum
 
32275
-                       && !warnedsse
 
32276
-                       && cum->warn_sse)
 
32277
+                   if (cum && cum->warn_sse && !warnedsse)
 
32278
                      {
 
32279
-                       warnedsse = true;
 
32280
-                       warning (0, "SSE vector argument without SSE "
 
32281
-                                "enabled changes the ABI");
 
32282
+                       if (warning (OPT_Wpsabi, "SSE vector argument "
 
32283
+                                    "without SSE enabled changes the ABI"))
 
32284
+                         warnedsse = true;
 
32285
                      }
 
32286
-                   return mode;
 
32287
+                   else if (!TARGET_64BIT && in_return && !warnedsse_ret)
 
32288
+                     {
 
32289
+                       if (warning (OPT_Wpsabi, "SSE vector return "
 
32290
+                                    "without SSE enabled changes the ABI"))
 
32291
+                         warnedsse_ret = true;
 
32292
+                     }
 
32293
                  }
 
32294
-               else
 
32295
-                 return mode;
 
32296
+               else if ((size == 8 && !TARGET_64BIT) && !TARGET_MMX)
 
32297
+                 {
 
32298
+                   static bool warnedmmx;
 
32299
+                   static bool warnedmmx_ret;
 
32300
+
 
32301
+                   if (cum && cum->warn_mmx && !warnedmmx)
 
32302
+                     {
 
32303
+                       if (warning (OPT_Wpsabi, "MMX vector argument "
 
32304
+                                    "without MMX enabled changes the ABI"))
 
32305
+                         warnedmmx = true;
 
32306
+                     }
 
32307
+                   else if (in_return && !warnedmmx_ret)
 
32308
+                     {
 
32309
+                       if (warning (OPT_Wpsabi, "MMX vector return "
 
32310
+                                    "without MMX enabled changes the ABI"))
 
32311
+                         warnedmmx_ret = true;
 
32312
+                     }
 
32313
+                 }
 
32314
+               return mode;
 
32315
              }
 
32316
 
 
32317
          gcc_unreachable ();
 
32318
@@ -6190,25 +6201,28 @@
 
32319
     case CHImode:
 
32320
     case CQImode:
 
32321
       {
 
32322
-       int size = (bit_offset % 64)+ (int) GET_MODE_BITSIZE (mode);
 
32323
+       int size = bit_offset + (int) GET_MODE_BITSIZE (mode);
 
32324
 
 
32325
-       if (size <= 32)
 
32326
+       /* Analyze last 128 bits only.  */
 
32327
+       size = (size - 1) & 0x7f;
 
32328
+
 
32329
+       if (size < 32)
 
32330
          {
 
32331
            classes[0] = X86_64_INTEGERSI_CLASS;
 
32332
            return 1;
 
32333
          }
 
32334
-       else if (size <= 64)
 
32335
+       else if (size < 64)
 
32336
          {
 
32337
            classes[0] = X86_64_INTEGER_CLASS;
 
32338
            return 1;
 
32339
          }
 
32340
-       else if (size <= 64+32)
 
32341
+       else if (size < 64+32)
 
32342
          {
 
32343
            classes[0] = X86_64_INTEGER_CLASS;
 
32344
            classes[1] = X86_64_INTEGERSI_CLASS;
 
32345
            return 2;
 
32346
          }
 
32347
-       else if (size <= 64+64)
 
32348
+       else if (size < 64+64)
 
32349
          {
 
32350
            classes[0] = classes[1] = X86_64_INTEGER_CLASS;
 
32351
            return 2;
 
32352
@@ -6475,7 +6489,7 @@
 
32353
   if (n == 2
 
32354
       && regclass[0] == X86_64_INTEGER_CLASS
 
32355
       && regclass[1] == X86_64_INTEGER_CLASS
 
32356
-      && (mode == CDImode || mode == TImode || mode == TFmode)
 
32357
+      && (mode == CDImode || mode == TImode)
 
32358
       && intreg[0] + 1 == intreg[1])
 
32359
     return gen_rtx_REG (mode, intreg[0]);
 
32360
 
 
32361
@@ -6725,7 +6739,7 @@
 
32362
   words = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
 
32363
 
 
32364
   if (type)
 
32365
-    mode = type_natural_mode (type, NULL);
 
32366
+    mode = type_natural_mode (type, NULL, false);
 
32367
 
 
32368
   if (TARGET_64BIT && (cum ? cum->call_abi : ix86_abi) == MS_ABI)
 
32369
     function_arg_advance_ms_64 (cum, bytes, words);
 
32370
@@ -6753,8 +6767,6 @@
 
32371
                 enum machine_mode orig_mode, const_tree type,
 
32372
                 HOST_WIDE_INT bytes, HOST_WIDE_INT words)
 
32373
 {
 
32374
-  static bool warnedsse, warnedmmx;
 
32375
-
 
32376
   /* Avoid the AL settings for the Unix64 ABI.  */
 
32377
   if (mode == VOIDmode)
 
32378
     return constm1_rtx;
 
32379
@@ -6811,12 +6823,6 @@
 
32380
     case V2DFmode:
 
32381
       if (!type || !AGGREGATE_TYPE_P (type))
 
32382
        {
 
32383
-         if (!TARGET_SSE && !warnedsse && cum->warn_sse)
 
32384
-           {
 
32385
-             warnedsse = true;
 
32386
-             warning (0, "SSE vector argument without SSE enabled "
 
32387
-                      "changes the ABI");
 
32388
-           }
 
32389
          if (cum->sse_nregs)
 
32390
            return gen_reg_or_parallel (mode, orig_mode,
 
32391
                                        cum->sse_regno + FIRST_SSE_REG);
 
32392
@@ -6849,12 +6855,6 @@
 
32393
     case V1DImode:
 
32394
       if (!type || !AGGREGATE_TYPE_P (type))
 
32395
        {
 
32396
-         if (!TARGET_MMX && !warnedmmx && cum->warn_mmx)
 
32397
-           {
 
32398
-             warnedmmx = true;
 
32399
-             warning (0, "MMX vector argument without MMX enabled "
 
32400
-                      "changes the ABI");
 
32401
-           }
 
32402
          if (cum->mmx_nregs)
 
32403
            return gen_reg_or_parallel (mode, orig_mode,
 
32404
                                        cum->mmx_regno + FIRST_MMX_REG);
 
32405
@@ -6977,7 +6977,7 @@
 
32406
   /* To simplify the code below, represent vector types with a vector mode
 
32407
      even if MMX/SSE are not active.  */
 
32408
   if (type && TREE_CODE (type) == VECTOR_TYPE)
 
32409
-    mode = type_natural_mode (type, cum);
 
32410
+    mode = type_natural_mode (type, cum, false);
 
32411
 
 
32412
   if (TARGET_64BIT && (cum ? cum->call_abi : ix86_abi) == MS_ABI)
 
32413
     arg = function_arg_ms_64 (cum, mode, omode, named, bytes);
 
32414
@@ -7235,9 +7235,15 @@
 
32415
   switch (regno)
 
32416
     {
 
32417
     case AX_REG:
 
32418
+    case DX_REG:
 
32419
       return true;
 
32420
+    case DI_REG:
 
32421
+    case SI_REG:
 
32422
+      return TARGET_64BIT && ix86_abi != MS_ABI;
 
32423
 
 
32424
-    case FIRST_FLOAT_REG:
 
32425
+      /* Complex values are returned in %st(0)/%st(1) pair.  */
 
32426
+    case ST0_REG:
 
32427
+    case ST1_REG:
 
32428
       /* TODO: The function should depend on current function ABI but
 
32429
        builtins.c would need updating then. Therefore we use the
 
32430
        default ABI.  */
 
32431
@@ -7245,10 +7251,12 @@
 
32432
        return false;
 
32433
       return TARGET_FLOAT_RETURNS_IN_80387;
 
32434
 
 
32435
-    case FIRST_SSE_REG:
 
32436
+      /* Complex values are returned in %xmm0/%xmm1 pair.  */
 
32437
+    case XMM0_REG:
 
32438
+    case XMM1_REG:
 
32439
       return TARGET_SSE;
 
32440
 
 
32441
-    case FIRST_MMX_REG:
 
32442
+    case MM0_REG:
 
32443
       if (TARGET_MACHO || TARGET_64BIT)
 
32444
        return false;
 
32445
       return TARGET_MMX;
 
32446
@@ -7420,7 +7428,7 @@
 
32447
   enum machine_mode mode, orig_mode;
 
32448
 
 
32449
   orig_mode = TYPE_MODE (valtype);
 
32450
-  mode = type_natural_mode (valtype, NULL);
 
32451
+  mode = type_natural_mode (valtype, NULL, true);
 
32452
   return ix86_function_value_1 (valtype, fntype_or_decl, orig_mode, mode);
 
32453
 }
 
32454
 
 
32455
@@ -7535,7 +7543,7 @@
 
32456
 #ifdef SUBTARGET_RETURN_IN_MEMORY
 
32457
   return SUBTARGET_RETURN_IN_MEMORY (type, fntype);
 
32458
 #else
 
32459
-  const enum machine_mode mode = type_natural_mode (type, NULL);
 
32460
+  const enum machine_mode mode = type_natural_mode (type, NULL, true);
 
32461
 
 
32462
   if (TARGET_64BIT)
 
32463
     {
 
32464
@@ -7549,52 +7557,6 @@
 
32465
 #endif
 
32466
 }
 
32467
 
 
32468
-/* When returning SSE vector types, we have a choice of either
 
32469
-     (1) being abi incompatible with a -march switch, or
 
32470
-     (2) generating an error.
 
32471
-   Given no good solution, I think the safest thing is one warning.
 
32472
-   The user won't be able to use -Werror, but....
 
32473
-
 
32474
-   Choose the STRUCT_VALUE_RTX hook because that's (at present) only
 
32475
-   called in response to actually generating a caller or callee that
 
32476
-   uses such a type.  As opposed to TARGET_RETURN_IN_MEMORY, which is called
 
32477
-   via aggregate_value_p for general type probing from tree-ssa.  */
 
32478
-
 
32479
-static rtx
 
32480
-ix86_struct_value_rtx (tree type, int incoming ATTRIBUTE_UNUSED)
 
32481
-{
 
32482
-  static bool warnedsse, warnedmmx;
 
32483
-
 
32484
-  if (!TARGET_64BIT && type)
 
32485
-    {
 
32486
-      /* Look at the return type of the function, not the function type.  */
 
32487
-      enum machine_mode mode = TYPE_MODE (TREE_TYPE (type));
 
32488
-
 
32489
-      if (!TARGET_SSE && !warnedsse)
 
32490
-       {
 
32491
-         if (mode == TImode
 
32492
-             || (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 16))
 
32493
-           {
 
32494
-             warnedsse = true;
 
32495
-             warning (0, "SSE vector return without SSE enabled "
 
32496
-                      "changes the ABI");
 
32497
-           }
 
32498
-       }
 
32499
-
 
32500
-      if (!TARGET_MMX && !warnedmmx)
 
32501
-       {
 
32502
-         if (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 8)
 
32503
-           {
 
32504
-             warnedmmx = true;
 
32505
-             warning (0, "MMX vector return without MMX enabled "
 
32506
-                      "changes the ABI");
 
32507
-           }
 
32508
-       }
 
32509
-    }
 
32510
-
 
32511
-  return NULL;
 
32512
-}
 
32513
-
 
32514
 
 
32515
 /* Create the va_list data type.  */
 
32516
 
 
32517
@@ -8019,7 +7981,7 @@
 
32518
   size = int_size_in_bytes (type);
 
32519
   rsize = (size + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
 
32520
 
 
32521
-  nat_mode = type_natural_mode (type, NULL);
 
32522
+  nat_mode = type_natural_mode (type, NULL, false);
 
32523
   switch (nat_mode)
 
32524
     {
 
32525
     case V8SFmode:
 
32526
@@ -10560,18 +10522,20 @@
 
32527
        }
 
32528
       m->fs.sp_offset += allocate;
 
32529
 
 
32530
+      /* Use stack_pointer_rtx for relative addressing so that code
 
32531
+        works for realigned stack, too.  */
 
32532
       if (r10_live && eax_live)
 
32533
         {
 
32534
-         t = choose_baseaddr (m->fs.sp_offset - allocate);
 
32535
+         t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax);
 
32536
          emit_move_insn (gen_rtx_REG (word_mode, R10_REG),
 
32537
                          gen_frame_mem (word_mode, t));
 
32538
-         t = choose_baseaddr (m->fs.sp_offset - allocate - UNITS_PER_WORD);
 
32539
+         t = plus_constant (Pmode, t, UNITS_PER_WORD);
 
32540
          emit_move_insn (gen_rtx_REG (word_mode, AX_REG),
 
32541
                          gen_frame_mem (word_mode, t));
 
32542
        }
 
32543
       else if (eax_live || r10_live)
 
32544
        {
 
32545
-         t = choose_baseaddr (m->fs.sp_offset - allocate);
 
32546
+         t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax);
 
32547
          emit_move_insn (gen_rtx_REG (word_mode,
 
32548
                                       (eax_live ? AX_REG : R10_REG)),
 
32549
                          gen_frame_mem (word_mode, t));
 
32550
@@ -11561,30 +11525,6 @@
 
32551
     }
 
32552
 }
 
32553
 
 
32554
-/* Determine if op is suitable SUBREG RTX for address.  */
 
32555
-
 
32556
-static bool
 
32557
-ix86_address_subreg_operand (rtx op)
 
32558
-{
 
32559
-  enum machine_mode mode;
 
32560
-
 
32561
-  if (!REG_P (op))
 
32562
-    return false;
 
32563
-
 
32564
-  mode = GET_MODE (op);
 
32565
-
 
32566
-  if (GET_MODE_CLASS (mode) != MODE_INT)
 
32567
-    return false;
 
32568
-
 
32569
-  /* Don't allow SUBREGs that span more than a word.  It can lead to spill
 
32570
-     failures when the register is one word out of a two word structure.  */
 
32571
-  if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
 
32572
-    return false;
 
32573
-
 
32574
-  /* Allow only SUBREGs of non-eliminable hard registers.  */
 
32575
-  return register_no_elim_operand (op, mode);
 
32576
-}
 
32577
-
 
32578
 /* Extract the parts of an RTL expression that is a valid memory address
 
32579
    for an instruction.  Return 0 if the structure of the address is
 
32580
    grossly off.  Return -1 if the address contains ASHIFT, so it is not
 
32581
@@ -11641,7 +11581,7 @@
 
32582
     base = addr;
 
32583
   else if (GET_CODE (addr) == SUBREG)
 
32584
     {
 
32585
-      if (ix86_address_subreg_operand (SUBREG_REG (addr)))
 
32586
+      if (REG_P (SUBREG_REG (addr)))
 
32587
        base = addr;
 
32588
       else
 
32589
        return 0;
 
32590
@@ -11705,7 +11645,7 @@
 
32591
              break;
 
32592
 
 
32593
            case SUBREG:
 
32594
-             if (!ix86_address_subreg_operand (SUBREG_REG (op)))
 
32595
+             if (!REG_P (SUBREG_REG (op)))
 
32596
                return 0;
 
32597
              /* FALLTHRU */
 
32598
 
 
32599
@@ -11750,19 +11690,6 @@
 
32600
       scale = 1 << scale;
 
32601
       retval = -1;
 
32602
     }
 
32603
-  else if (CONST_INT_P (addr))
 
32604
-    {
 
32605
-      if (!x86_64_immediate_operand (addr, VOIDmode))
 
32606
-       return 0;
 
32607
-
 
32608
-      /* Constant addresses are sign extended to 64bit, we have to
 
32609
-        prevent addresses from 0x80000000 to 0xffffffff in x32 mode.  */
 
32610
-      if (TARGET_X32
 
32611
-         && val_signbit_known_set_p (SImode, INTVAL (addr)))
 
32612
-       return 0;
 
32613
-
 
32614
-      disp = addr;
 
32615
-    }
 
32616
   else
 
32617
     disp = addr;                       /* displacement */
 
32618
 
 
32619
@@ -11771,18 +11698,12 @@
 
32620
       if (REG_P (index))
 
32621
        ;
 
32622
       else if (GET_CODE (index) == SUBREG
 
32623
-              && ix86_address_subreg_operand (SUBREG_REG (index)))
 
32624
+              && REG_P (SUBREG_REG (index)))
 
32625
        ;
 
32626
       else
 
32627
        return 0;
 
32628
     }
 
32629
 
 
32630
-/* Address override works only on the (%reg) part of %fs:(%reg).  */
 
32631
-  if (seg != SEG_DEFAULT
 
32632
-      && ((base && GET_MODE (base) != word_mode)
 
32633
-         || (index && GET_MODE (index) != word_mode)))
 
32634
-    return 0;
 
32635
-
 
32636
   /* Extract the integral value of scale.  */
 
32637
   if (scale_rtx)
 
32638
     {
 
32639
@@ -12258,6 +12179,45 @@
 
32640
   return false;
 
32641
 }
 
32642
 
 
32643
+/* Determine if op is suitable RTX for an address register.
 
32644
+   Return naked register if a register or a register subreg is
 
32645
+   found, otherwise return NULL_RTX.  */
 
32646
+
 
32647
+static rtx
 
32648
+ix86_validate_address_register (rtx op)
 
32649
+{
 
32650
+  enum machine_mode mode = GET_MODE (op);
 
32651
+
 
32652
+  /* Only SImode or DImode registers can form the address.  */
 
32653
+  if (mode != SImode && mode != DImode)
 
32654
+    return NULL_RTX;
 
32655
+
 
32656
+  if (REG_P (op))
 
32657
+    return op;
 
32658
+  else if (GET_CODE (op) == SUBREG)
 
32659
+    {
 
32660
+      rtx reg = SUBREG_REG (op);
 
32661
+
 
32662
+      if (!REG_P (reg))
 
32663
+       return NULL_RTX;
 
32664
+
 
32665
+      mode = GET_MODE (reg);
 
32666
+
 
32667
+      /* Don't allow SUBREGs that span more than a word.  It can
 
32668
+        lead to spill failures when the register is one word out
 
32669
+        of a two word structure.  */
 
32670
+      if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
 
32671
+       return NULL_RTX;
 
32672
+
 
32673
+      /* Allow only SUBREGs of non-eliminable hard registers.  */
 
32674
+      if (register_no_elim_operand (reg, mode))
 
32675
+       return reg;
 
32676
+    }
 
32677
+
 
32678
+  /* Op is not a register.  */
 
32679
+  return NULL_RTX;
 
32680
+}
 
32681
+
 
32682
 /* Recognizes RTL expressions that are valid memory addresses for an
 
32683
    instruction.  The MODE argument is the machine mode for the MEM
 
32684
    expression that wants to use this address.
 
32685
@@ -12273,6 +12233,7 @@
 
32686
   struct ix86_address parts;
 
32687
   rtx base, index, disp;
 
32688
   HOST_WIDE_INT scale;
 
32689
+  enum ix86_address_seg seg;
 
32690
 
 
32691
   if (ix86_decompose_address (addr, &parts) <= 0)
 
32692
     /* Decomposition failed.  */
 
32693
@@ -12282,23 +12243,16 @@
 
32694
   index = parts.index;
 
32695
   disp = parts.disp;
 
32696
   scale = parts.scale;
 
32697
+  seg = parts.seg;
 
32698
 
 
32699
   /* Validate base register.  */
 
32700
   if (base)
 
32701
     {
 
32702
-      rtx reg;
 
32703
+      rtx reg = ix86_validate_address_register (base);
 
32704
 
 
32705
-      if (REG_P (base))
 
32706
-       reg = base;
 
32707
-      else if (GET_CODE (base) == SUBREG && REG_P (SUBREG_REG (base)))
 
32708
-       reg = SUBREG_REG (base);
 
32709
-      else
 
32710
-       /* Base is not a register.  */
 
32711
+      if (reg == NULL_RTX)
 
32712
        return false;
 
32713
 
 
32714
-      if (GET_MODE (base) != SImode && GET_MODE (base) != DImode)
 
32715
-       return false;
 
32716
-
 
32717
       if ((strict && ! REG_OK_FOR_BASE_STRICT_P (reg))
 
32718
          || (! strict && ! REG_OK_FOR_BASE_NONSTRICT_P (reg)))
 
32719
        /* Base is not valid.  */
 
32720
@@ -12308,19 +12262,11 @@
 
32721
   /* Validate index register.  */
 
32722
   if (index)
 
32723
     {
 
32724
-      rtx reg;
 
32725
+      rtx reg = ix86_validate_address_register (index);
 
32726
 
 
32727
-      if (REG_P (index))
 
32728
-       reg = index;
 
32729
-      else if (GET_CODE (index) == SUBREG && REG_P (SUBREG_REG (index)))
 
32730
-       reg = SUBREG_REG (index);
 
32731
-      else
 
32732
-       /* Index is not a register.  */
 
32733
+      if (reg == NULL_RTX)
 
32734
        return false;
 
32735
 
 
32736
-      if (GET_MODE (index) != SImode && GET_MODE (index) != DImode)
 
32737
-       return false;
 
32738
-
 
32739
       if ((strict && ! REG_OK_FOR_INDEX_STRICT_P (reg))
 
32740
          || (! strict && ! REG_OK_FOR_INDEX_NONSTRICT_P (reg)))
 
32741
        /* Index is not valid.  */
 
32742
@@ -12332,6 +12278,12 @@
 
32743
       && GET_MODE (base) != GET_MODE (index))
 
32744
     return false;
 
32745
 
 
32746
+  /* Address override works only on the (%reg) part of %fs:(%reg).  */
 
32747
+  if (seg != SEG_DEFAULT
 
32748
+      && ((base && GET_MODE (base) != word_mode)
 
32749
+         || (index && GET_MODE (index) != word_mode)))
 
32750
+    return false;
 
32751
+
 
32752
   /* Validate scale factor.  */
 
32753
   if (scale != 1)
 
32754
     {
 
32755
@@ -12453,6 +12405,12 @@
 
32756
               && !x86_64_immediate_operand (disp, VOIDmode))
 
32757
        /* Displacement is out of range.  */
 
32758
        return false;
 
32759
+      /* In x32 mode, constant addresses are sign extended to 64bit, so
 
32760
+        we have to prevent addresses from 0x80000000 to 0xffffffff.  */
 
32761
+      else if (TARGET_X32 && !(index || base)
 
32762
+              && CONST_INT_P (disp)
 
32763
+              && val_signbit_known_set_p (SImode, INTVAL (disp)))
 
32764
+       return false;
 
32765
     }
 
32766
 
 
32767
   /* Everything looks valid.  */
 
32768
@@ -13817,8 +13775,6 @@
 
32769
         Those same assemblers have the same but opposite lossage on cmov.  */
 
32770
       if (mode == CCmode)
 
32771
        suffix = fp ? "nbe" : "a";
 
32772
-      else if (mode == CCCmode)
 
32773
-       suffix = "b";
 
32774
       else
 
32775
        gcc_unreachable ();
 
32776
       break;
 
32777
@@ -13840,8 +13796,12 @@
 
32778
        }
 
32779
       break;
 
32780
     case LTU:
 
32781
-      gcc_assert (mode == CCmode || mode == CCCmode);
 
32782
-      suffix = "b";
 
32783
+      if (mode == CCmode)
 
32784
+       suffix = "b";
 
32785
+      else if (mode == CCCmode)
 
32786
+       suffix = "c";
 
32787
+      else
 
32788
+       gcc_unreachable ();
 
32789
       break;
 
32790
     case GE:
 
32791
       switch (mode)
 
32792
@@ -13861,9 +13821,12 @@
 
32793
        }
 
32794
       break;
 
32795
     case GEU:
 
32796
-      /* ??? As above.  */
 
32797
-      gcc_assert (mode == CCmode || mode == CCCmode);
 
32798
-      suffix = fp ? "nb" : "ae";
 
32799
+      if (mode == CCmode)
 
32800
+       suffix = fp ? "nb" : "ae";
 
32801
+      else if (mode == CCCmode)
 
32802
+       suffix = "nc";
 
32803
+      else
 
32804
+       gcc_unreachable ();
 
32805
       break;
 
32806
     case LE:
 
32807
       gcc_assert (mode == CCmode || mode == CCGCmode || mode == CCNOmode);
 
32808
@@ -13870,11 +13833,8 @@
 
32809
       suffix = "le";
 
32810
       break;
 
32811
     case LEU:
 
32812
-      /* ??? As above.  */
 
32813
       if (mode == CCmode)
 
32814
        suffix = "be";
 
32815
-      else if (mode == CCCmode)
 
32816
-       suffix = fp ? "nb" : "ae";
 
32817
       else
 
32818
        gcc_unreachable ();
 
32819
       break;
 
32820
@@ -15340,7 +15300,7 @@
 
32821
              rtx arg = XEXP (XEXP (link, 0), 0);
 
32822
 
 
32823
              if (ix86_check_avx256_register (&arg, NULL))
 
32824
-               return AVX_U128_ANY;
 
32825
+               return AVX_U128_DIRTY;
 
32826
            }
 
32827
        }
 
32828
 
 
32829
@@ -15460,8 +15420,8 @@
 
32830
     {
 
32831
       bool avx_reg256_found = false;
 
32832
       note_stores (pat, ix86_check_avx256_stores, &avx_reg256_found);
 
32833
-      if (!avx_reg256_found)
 
32834
-       return AVX_U128_CLEAN;
 
32835
+
 
32836
+      return avx_reg256_found ? AVX_U128_DIRTY : AVX_U128_CLEAN;
 
32837
     }
 
32838
 
 
32839
   /* Otherwise, return current mode.  Remember that if insn
 
32840
@@ -17350,10 +17310,20 @@
 
32841
   if (!TARGET_OPT_AGU || optimize_function_for_size_p (cfun))
 
32842
     return false;
 
32843
 
 
32844
-  /* Check it is correct to split here.  */
 
32845
-  if (!ix86_ok_to_clobber_flags(insn))
 
32846
+  /* The "at least two components" test below might not catch simple
 
32847
+     move or zero extension insns if parts.base is non-NULL and parts.disp
 
32848
+     is const0_rtx as the only components in the address, e.g. if the
 
32849
+     register is %rbp or %r13.  As this test is much cheaper and moves or
 
32850
+     zero extensions are the common case, do this check first.  */
 
32851
+  if (REG_P (operands[1])
 
32852
+      || (SImode_address_operand (operands[1], VOIDmode)
 
32853
+         && REG_P (XEXP (operands[1], 0))))
 
32854
     return false;
 
32855
 
 
32856
+  /* Check if it is OK to split here.  */
 
32857
+  if (!ix86_ok_to_clobber_flags (insn))
 
32858
+    return false;
 
32859
+
 
32860
   ok = ix86_decompose_address (operands[1], &parts);
 
32861
   gcc_assert (ok);
 
32862
 
 
32863
@@ -18486,12 +18456,7 @@
 
32864
        return CCmode;
 
32865
     case GTU:                  /* CF=0 & ZF=0 */
 
32866
     case LEU:                  /* CF=1 | ZF=1 */
 
32867
-      /* Detect overflow checks.  They need just the carry flag.  */
 
32868
-      if (GET_CODE (op0) == MINUS
 
32869
-         && rtx_equal_p (op1, XEXP (op0, 0)))
 
32870
-       return CCCmode;
 
32871
-      else
 
32872
-       return CCmode;
 
32873
+      return CCmode;
 
32874
       /* Codes possibly doable only with sign flag when
 
32875
          comparing against zero.  */
 
32876
     case GE:                   /* SF=OF   or   SF=0 */
 
32877
@@ -20500,7 +20465,7 @@
 
32878
          return;
 
32879
 
 
32880
        case V8SFmode:
 
32881
-         mask = gen_lowpart (V8SFmode, mask);
 
32882
+         mask = gen_lowpart (V8SImode, mask);
 
32883
          if (one_operand_shuffle)
 
32884
            emit_insn (gen_avx2_permvarv8sf (target, op0, mask));
 
32885
          else
 
32886
@@ -21740,6 +21705,21 @@
 
32887
   return SImode;
 
32888
 }
 
32889
 
 
32890
+/* Copy the address to a Pmode register.  This is used for x32 to
 
32891
+   truncate DImode TLS address to a SImode register. */
 
32892
+
 
32893
+static rtx
 
32894
+ix86_copy_addr_to_reg (rtx addr)
 
32895
+{
 
32896
+  if (GET_MODE (addr) == Pmode)
 
32897
+    return copy_addr_to_reg (addr);
 
32898
+  else
 
32899
+    {
 
32900
+      gcc_assert (GET_MODE (addr) == DImode && Pmode == SImode);
 
32901
+      return gen_rtx_SUBREG (SImode, copy_to_mode_reg (DImode, addr), 0);
 
32902
+    }
 
32903
+}
 
32904
+
 
32905
 /* When SRCPTR is non-NULL, output simple loop to move memory
 
32906
    pointer to SRCPTR to DESTPTR via chunks of MODE unrolled UNROLL times,
 
32907
    overall size is COUNT specified in bytes.  When SRCPTR is NULL, output the
 
32908
@@ -22728,8 +22708,8 @@
 
32909
   gcc_assert (alg != no_stringop);
 
32910
   if (!count)
 
32911
     count_exp = copy_to_mode_reg (GET_MODE (count_exp), count_exp);
 
32912
-  destreg = copy_addr_to_reg (XEXP (dst, 0));
 
32913
-  srcreg = copy_addr_to_reg (XEXP (src, 0));
 
32914
+  destreg = ix86_copy_addr_to_reg (XEXP (dst, 0));
 
32915
+  srcreg = ix86_copy_addr_to_reg (XEXP (src, 0));
 
32916
   switch (alg)
 
32917
     {
 
32918
     case libcall:
 
32919
@@ -23119,7 +23099,7 @@
 
32920
   gcc_assert (alg != no_stringop);
 
32921
   if (!count)
 
32922
     count_exp = copy_to_mode_reg (counter_mode (count_exp), count_exp);
 
32923
-  destreg = copy_addr_to_reg (XEXP (dst, 0));
 
32924
+  destreg = ix86_copy_addr_to_reg (XEXP (dst, 0));
 
32925
   switch (alg)
 
32926
     {
 
32927
     case libcall:
 
32928
@@ -24988,7 +24968,8 @@
 
32929
 int
 
32930
 ix86_data_alignment (tree type, int align)
 
32931
 {
 
32932
-  int max_align = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
 
32933
+  int max_align
 
32934
+    = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
 
32935
 
 
32936
   if (AGGREGATE_TYPE_P (type)
 
32937
       && TYPE_SIZE (type)
 
32938
@@ -27984,8 +27965,8 @@
 
32939
   { OPTION_MASK_ISA_XOP, CODE_FOR_xop_shlv8hi3,         "__builtin_ia32_vpshlw",      IX86_BUILTIN_VPSHLW,      UNKNOWN,      (int)MULTI_ARG_2_HI },
 
32940
   { OPTION_MASK_ISA_XOP, CODE_FOR_xop_shlv16qi3,        "__builtin_ia32_vpshlb",      IX86_BUILTIN_VPSHLB,      UNKNOWN,      (int)MULTI_ARG_2_QI },
 
32941
 
 
32942
-  { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv4sf2,       "__builtin_ia32_vfrczss",     IX86_BUILTIN_VFRCZSS,     UNKNOWN,      (int)MULTI_ARG_2_SF },
 
32943
-  { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv2df2,       "__builtin_ia32_vfrczsd",     IX86_BUILTIN_VFRCZSD,     UNKNOWN,      (int)MULTI_ARG_2_DF },
 
32944
+  { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv4sf2,       "__builtin_ia32_vfrczss",     IX86_BUILTIN_VFRCZSS,     UNKNOWN,      (int)MULTI_ARG_1_SF },
 
32945
+  { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv2df2,       "__builtin_ia32_vfrczsd",     IX86_BUILTIN_VFRCZSD,     UNKNOWN,      (int)MULTI_ARG_1_DF },
 
32946
   { OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv4sf2,         "__builtin_ia32_vfrczps",     IX86_BUILTIN_VFRCZPS,     UNKNOWN,      (int)MULTI_ARG_1_SF },
 
32947
   { OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv2df2,         "__builtin_ia32_vfrczpd",     IX86_BUILTIN_VFRCZPD,     UNKNOWN,      (int)MULTI_ARG_1_DF },
 
32948
   { OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv8sf2,         "__builtin_ia32_vfrczps256",  IX86_BUILTIN_VFRCZPS256,  UNKNOWN,      (int)MULTI_ARG_1_SF2 },
 
32949
@@ -31245,11 +31226,12 @@
 
32950
 
 
32951
 static rtx
 
32952
 ix86_expand_special_args_builtin (const struct builtin_description *d,
 
32953
-                                   tree exp, rtx target)
 
32954
+                                 tree exp, rtx target)
 
32955
 {
 
32956
   tree arg;
 
32957
   rtx pat, op;
 
32958
   unsigned int i, nargs, arg_adjust, memory;
 
32959
+  bool aligned_mem = false;
 
32960
   struct
 
32961
     {
 
32962
       rtx op;
 
32963
@@ -31295,6 +31277,15 @@
 
32964
       nargs = 1;
 
32965
       klass = load;
 
32966
       memory = 0;
 
32967
+      switch (icode)
 
32968
+       {
 
32969
+       case CODE_FOR_sse4_1_movntdqa:
 
32970
+       case CODE_FOR_avx2_movntdqa:
 
32971
+         aligned_mem = true;
 
32972
+         break;
 
32973
+       default:
 
32974
+         break;
 
32975
+       }
 
32976
       break;
 
32977
     case VOID_FTYPE_PV2SF_V4SF:
 
32978
     case VOID_FTYPE_PV4DI_V4DI:
 
32979
@@ -31312,6 +31303,26 @@
 
32980
       klass = store;
 
32981
       /* Reserve memory operand for target.  */
 
32982
       memory = ARRAY_SIZE (args);
 
32983
+      switch (icode)
 
32984
+       {
 
32985
+       /* These builtins and instructions require the memory
 
32986
+          to be properly aligned.  */
 
32987
+       case CODE_FOR_avx_movntv4di:
 
32988
+       case CODE_FOR_sse2_movntv2di:
 
32989
+       case CODE_FOR_avx_movntv8sf:
 
32990
+       case CODE_FOR_sse_movntv4sf:
 
32991
+       case CODE_FOR_sse4a_vmmovntv4sf:
 
32992
+       case CODE_FOR_avx_movntv4df:
 
32993
+       case CODE_FOR_sse2_movntv2df:
 
32994
+       case CODE_FOR_sse4a_vmmovntv2df:
 
32995
+       case CODE_FOR_sse2_movntidi:
 
32996
+       case CODE_FOR_sse_movntq:
 
32997
+       case CODE_FOR_sse2_movntisi:
 
32998
+         aligned_mem = true;
 
32999
+         break;
 
33000
+       default:
 
33001
+         break;
 
33002
+       }
 
33003
       break;
 
33004
     case V4SF_FTYPE_V4SF_PCV2SF:
 
33005
     case V2DF_FTYPE_V2DF_PCDOUBLE:
 
33006
@@ -31368,6 +31379,17 @@
 
33007
        {
 
33008
          op = force_reg (Pmode, convert_to_mode (Pmode, op, 1));
 
33009
          target = gen_rtx_MEM (tmode, op);
 
33010
+         /* target at this point has just BITS_PER_UNIT MEM_ALIGN
 
33011
+            on it.  Try to improve it using get_pointer_alignment,
 
33012
+            and if the special builtin is one that requires strict
 
33013
+            mode alignment, also from it's GET_MODE_ALIGNMENT.
 
33014
+            Failure to do so could lead to ix86_legitimate_combined_insn
 
33015
+            rejecting all changes to such insns.  */
 
33016
+         unsigned int align = get_pointer_alignment (arg);
 
33017
+         if (aligned_mem && align < GET_MODE_ALIGNMENT (tmode))
 
33018
+           align = GET_MODE_ALIGNMENT (tmode);
 
33019
+         if (MEM_ALIGN (target) < align)
 
33020
+           set_mem_align (target, align);
 
33021
        }
 
33022
       else
 
33023
        target = force_reg (tmode, op);
 
33024
@@ -31413,8 +31435,17 @@
 
33025
              /* This must be the memory operand.  */
 
33026
              op = force_reg (Pmode, convert_to_mode (Pmode, op, 1));
 
33027
              op = gen_rtx_MEM (mode, op);
 
33028
-             gcc_assert (GET_MODE (op) == mode
 
33029
-                         || GET_MODE (op) == VOIDmode);
 
33030
+             /* op at this point has just BITS_PER_UNIT MEM_ALIGN
 
33031
+                on it.  Try to improve it using get_pointer_alignment,
 
33032
+                and if the special builtin is one that requires strict
 
33033
+                mode alignment, also from it's GET_MODE_ALIGNMENT.
 
33034
+                Failure to do so could lead to ix86_legitimate_combined_insn
 
33035
+                rejecting all changes to such insns.  */
 
33036
+             unsigned int align = get_pointer_alignment (arg);
 
33037
+             if (aligned_mem && align < GET_MODE_ALIGNMENT (mode))
 
33038
+               align = GET_MODE_ALIGNMENT (mode);
 
33039
+             if (MEM_ALIGN (op) < align)
 
33040
+               set_mem_align (op, align);
 
33041
            }
 
33042
          else
 
33043
            {
 
33044
@@ -32208,7 +32239,9 @@
 
33045
       mode4 = insn_data[icode].operand[5].mode;
 
33046
 
 
33047
       if (target == NULL_RTX
 
33048
-         || GET_MODE (target) != insn_data[icode].operand[0].mode)
 
33049
+         || GET_MODE (target) != insn_data[icode].operand[0].mode
 
33050
+         || !insn_data[icode].operand[0].predicate (target,
 
33051
+                                                    GET_MODE (target)))
 
33052
        subtarget = gen_reg_rtx (insn_data[icode].operand[0].mode);
 
33053
       else
 
33054
        subtarget = target;
 
33055
@@ -33879,10 +33912,10 @@
 
33056
     {
 
33057
       /* We implement the move patterns for all vector modes into and
 
33058
         out of SSE registers, even when no operation instructions
 
33059
-        are available.  OImode move is available only when AVX is
 
33060
-        enabled.  */
 
33061
-      return ((TARGET_AVX && mode == OImode)
 
33062
-             || VALID_AVX256_REG_MODE (mode)
 
33063
+        are available.  OImode and AVX modes are available only when
 
33064
+        AVX is enabled.  */
 
33065
+      return ((TARGET_AVX
 
33066
+              && VALID_AVX256_REG_OR_OI_MODE (mode))
 
33067
              || VALID_SSE_REG_MODE (mode)
 
33068
              || VALID_SSE2_REG_MODE (mode)
 
33069
              || VALID_MMX_REG_MODE (mode)
 
33070
@@ -35020,7 +35053,7 @@
 
33071
        {
 
33072
          tmp = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, fnaddr), UNSPEC_GOTPCREL);
 
33073
          tmp = gen_rtx_CONST (Pmode, tmp);
 
33074
-         fnaddr = gen_rtx_MEM (Pmode, tmp);
 
33075
+         fnaddr = gen_const_mem (Pmode, tmp);
 
33076
        }
 
33077
     }
 
33078
   else
 
33079
@@ -35040,8 +35073,9 @@
 
33080
          output_set_got (tmp, NULL_RTX);
 
33081
 
 
33082
          fnaddr = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, fnaddr), UNSPEC_GOT);
 
33083
-         fnaddr = gen_rtx_PLUS (Pmode, fnaddr, tmp);
 
33084
-         fnaddr = gen_rtx_MEM (Pmode, fnaddr);
 
33085
+         fnaddr = gen_rtx_CONST (Pmode, fnaddr);
 
33086
+         fnaddr = gen_rtx_PLUS (Pmode, tmp, fnaddr);
 
33087
+         fnaddr = gen_const_mem (Pmode, fnaddr);
 
33088
        }
 
33089
     }
 
33090
 
 
33091
@@ -35232,7 +35266,10 @@
 
33092
      The smallest offset in the page INSN can start is the case where START
 
33093
      ends on the offset 0.  Offset of INSN is then NBYTES - sizeof (INSN).
 
33094
      We add p2align to 16byte window with maxskip 15 - NBYTES + sizeof (INSN).
 
33095
-     */
 
33096
+
 
33097
+     Don't consider asm goto as jump, while it can contain a jump, it doesn't
 
33098
+     have to, control transfer to label(s) can be performed through other
 
33099
+     means, and also we estimate minimum length of all asm stmts as 0.  */
 
33100
   for (insn = start; insn; insn = NEXT_INSN (insn))
 
33101
     {
 
33102
       int min_size;
 
33103
@@ -35260,6 +35297,7 @@
 
33104
                {
 
33105
                  start = NEXT_INSN (start);
 
33106
                  if ((JUMP_P (start)
 
33107
+                      && asm_noperands (PATTERN (start)) < 0
 
33108
                       && GET_CODE (PATTERN (start)) != ADDR_VEC
 
33109
                       && GET_CODE (PATTERN (start)) != ADDR_DIFF_VEC)
 
33110
                      || CALL_P (start))
 
33111
@@ -35278,6 +35316,7 @@
 
33112
        fprintf (dump_file, "Insn %i estimated to %i bytes\n",
 
33113
                 INSN_UID (insn), min_size);
 
33114
       if ((JUMP_P (insn)
 
33115
+          && asm_noperands (PATTERN (insn)) < 0
 
33116
           && GET_CODE (PATTERN (insn)) != ADDR_VEC
 
33117
           && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC)
 
33118
          || CALL_P (insn))
 
33119
@@ -35289,6 +35328,7 @@
 
33120
        {
 
33121
          start = NEXT_INSN (start);
 
33122
          if ((JUMP_P (start)
 
33123
+              && asm_noperands (PATTERN (start)) < 0
 
33124
               && GET_CODE (PATTERN (start)) != ADDR_VEC
 
33125
               && GET_CODE (PATTERN (start)) != ADDR_DIFF_VEC)
 
33126
              || CALL_P (start))
 
33127
@@ -39371,7 +39411,9 @@
 
33128
       else
 
33129
        dfinal.perm[i] = e;
 
33130
     }
 
33131
-  dfinal.op0 = gen_reg_rtx (dfinal.vmode);
 
33132
+
 
33133
+  if (!d->testing_p)
 
33134
+    dfinal.op0 = gen_reg_rtx (dfinal.vmode);
 
33135
   dfinal.op1 = dfinal.op0;
 
33136
   dfinal.one_operand_p = true;
 
33137
   dremap.target = dfinal.op0;
 
33138
@@ -39806,6 +39848,9 @@
 
33139
     return false;
 
33140
   gcc_assert (!d->one_operand_p);
 
33141
 
 
33142
+  if (d->testing_p)
 
33143
+    return true;
 
33144
+
 
33145
   nelt = d->nelt;
 
33146
   eltsz = GET_MODE_SIZE (GET_MODE_INNER (d->vmode));
 
33147
 
 
33148
@@ -40005,6 +40050,8 @@
 
33149
   switch (d->vmode)
 
33150
     {
 
33151
     case V4DFmode:
 
33152
+      if (d->testing_p)
 
33153
+       break;
 
33154
       t1 = gen_reg_rtx (V4DFmode);
 
33155
       t2 = gen_reg_rtx (V4DFmode);
 
33156
 
 
33157
@@ -40024,6 +40071,8 @@
 
33158
       {
 
33159
        int mask = odd ? 0xdd : 0x88;
 
33160
 
 
33161
+       if (d->testing_p)
 
33162
+         break;
 
33163
        t1 = gen_reg_rtx (V8SFmode);
 
33164
        t2 = gen_reg_rtx (V8SFmode);
 
33165
        t3 = gen_reg_rtx (V8SFmode);
 
33166
@@ -40065,6 +40114,8 @@
 
33167
        return expand_vec_perm_pshufb2 (d);
 
33168
       else
 
33169
        {
 
33170
+         if (d->testing_p)
 
33171
+           break;
 
33172
          /* We need 2*log2(N)-1 operations to achieve odd/even
 
33173
             with interleave. */
 
33174
          t1 = gen_reg_rtx (V8HImode);
 
33175
@@ -40086,6 +40137,8 @@
 
33176
        return expand_vec_perm_pshufb2 (d);
 
33177
       else
 
33178
        {
 
33179
+         if (d->testing_p)
 
33180
+           break;
 
33181
          t1 = gen_reg_rtx (V16QImode);
 
33182
          t2 = gen_reg_rtx (V16QImode);
 
33183
          t3 = gen_reg_rtx (V16QImode);
 
33184
@@ -40118,6 +40171,9 @@
 
33185
          return expand_vec_perm_even_odd_1 (&d_copy, odd);
 
33186
        }
 
33187
 
 
33188
+      if (d->testing_p)
 
33189
+       break;
 
33190
+
 
33191
       t1 = gen_reg_rtx (V4DImode);
 
33192
       t2 = gen_reg_rtx (V4DImode);
 
33193
 
 
33194
@@ -40144,6 +40200,9 @@
 
33195
          return expand_vec_perm_even_odd_1 (&d_copy, odd);
 
33196
        }
 
33197
 
 
33198
+      if (d->testing_p)
 
33199
+       break;
 
33200
+
 
33201
       t1 = gen_reg_rtx (V8SImode);
 
33202
       t2 = gen_reg_rtx (V8SImode);
 
33203
 
 
33204
@@ -40236,6 +40295,8 @@
 
33205
     case V16QImode:
 
33206
       /* These can be implemented via interleave.  We save one insn by
 
33207
         stopping once we have promoted to V4SImode and then use pshufd.  */
 
33208
+      if (d->testing_p)
 
33209
+       return true;
 
33210
       do
 
33211
        {
 
33212
          rtx dest;
 
33213
@@ -42473,8 +42534,6 @@
 
33214
 
 
33215
 #undef TARGET_PROMOTE_PROTOTYPES
 
33216
 #define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_true
 
33217
-#undef TARGET_STRUCT_VALUE_RTX
 
33218
-#define TARGET_STRUCT_VALUE_RTX ix86_struct_value_rtx
 
33219
 #undef TARGET_SETUP_INCOMING_VARARGS
 
33220
 #define TARGET_SETUP_INCOMING_VARARGS ix86_setup_incoming_varargs
 
33221
 #undef TARGET_MUST_PASS_IN_STACK
 
33222
Index: gcc/config/tilegx/tilegx.md
 
33223
===================================================================
 
33224
--- a/src/gcc/config/tilegx/tilegx.md   (.../tags/gcc_4_8_2_release)
 
33225
+++ b/src/gcc/config/tilegx/tilegx.md   (.../branches/gcc-4_8-branch)
 
33226
@@ -5076,10 +5076,8 @@
 
33227
 
 
33228
 ;; Network intrinsics
 
33229
 
 
33230
-;; Note the "pseudo" text is handled specially by the
 
33231
-;; asm_output_opcode routine.  If the output is an empty string, the
 
33232
-;; instruction would bypass the asm_output_opcode routine, bypassing
 
33233
-;; the bundle handling code.
 
33234
+;; Note the this barrier is of type "nothing," which is deleted after
 
33235
+;; the final scheduling pass so that nothing is emitted for it.
 
33236
 (define_insn "tilegx_network_barrier"
 
33237
   [(unspec_volatile:SI [(const_int 0)] UNSPEC_NETWORK_BARRIER)]
 
33238
   ""
 
33239
Index: gcc/config/tilegx/tilegx-c.c
 
33240
===================================================================
 
33241
--- a/src/gcc/config/tilegx/tilegx-c.c  (.../tags/gcc_4_8_2_release)
 
33242
+++ b/src/gcc/config/tilegx/tilegx-c.c  (.../branches/gcc-4_8-branch)
 
33243
@@ -47,6 +47,9 @@
 
33244
   if (TARGET_32BIT)
 
33245
     builtin_define ("__tilegx32__");
 
33246
 
 
33247
+  builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
 
33248
+  builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
 
33249
+
 
33250
   TILEGX_CPU_CPP_ENDIAN_BUILTINS ();
 
33251
   GNU_USER_TARGET_OS_CPP_BUILTINS ();
 
33252
 }
 
33253
Index: gcc/config/tilegx/sync.md
 
33254
===================================================================
 
33255
--- a/src/gcc/config/tilegx/sync.md     (.../tags/gcc_4_8_2_release)
 
33256
+++ b/src/gcc/config/tilegx/sync.md     (.../branches/gcc-4_8-branch)
 
33257
@@ -150,15 +150,22 @@
 
33258
    (match_operand:SI 3 "const_int_operand" "")]         ;; model
 
33259
   ""
 
33260
 {
 
33261
+  rtx addend;
 
33262
   enum memmodel model = (enum memmodel) INTVAL (operands[3]);
 
33263
 
 
33264
   if (operands[2] != const0_rtx)
 
33265
-    emit_move_insn (operands[2], gen_rtx_NEG (<MODE>mode, operands[2]));
 
33266
+    {
 
33267
+       addend = gen_reg_rtx (<MODE>mode);
 
33268
+       emit_move_insn (addend,
 
33269
+                       gen_rtx_MINUS (<MODE>mode, const0_rtx, operands[2]));
 
33270
+    }
 
33271
+  else
 
33272
+    addend = operands[2];
 
33273
 
 
33274
   tilegx_pre_atomic_barrier (model);
 
33275
   emit_insn (gen_atomic_fetch_add_bare<mode> (operands[0],
 
33276
                                               operands[1],
 
33277
-                                              operands[2]));
 
33278
+                                              addend));
 
33279
   tilegx_post_atomic_barrier (model);
 
33280
   DONE;
 
33281
 })
 
33282
Index: gcc/config/tilegx/tilegx.c
 
33283
===================================================================
 
33284
--- a/src/gcc/config/tilegx/tilegx.c    (.../tags/gcc_4_8_2_release)
 
33285
+++ b/src/gcc/config/tilegx/tilegx.c    (.../branches/gcc-4_8-branch)
 
33286
@@ -702,6 +702,16 @@
 
33287
 }
 
33288
 
 
33289
 
 
33290
+/* Implement TARGET_EXPAND_TO_RTL_HOOK.  */
 
33291
+static void
 
33292
+tilegx_expand_to_rtl_hook (void)
 
33293
+{
 
33294
+  /* Exclude earlier sets of crtl->uses_pic_offset_table, because we
 
33295
+     only care about uses actually emitted.  */
 
33296
+  crtl->uses_pic_offset_table = 0;
 
33297
+}
 
33298
+
 
33299
+
 
33300
 /* Implement TARGET_SHIFT_TRUNCATION_MASK.  DImode shifts use the mode
 
33301
    matching insns and therefore guarantee that the shift count is
 
33302
    modulo 64.  SImode shifts sometimes use the 64 bit version so do
 
33303
@@ -3543,6 +3553,12 @@
 
33304
     }
 
33305
   if (!pat)
 
33306
     return NULL_RTX;
 
33307
+
 
33308
+  /* If we are generating a prefetch, tell the scheduler not to move
 
33309
+     it around.  */
 
33310
+  if (GET_CODE (pat) == PREFETCH)
 
33311
+    PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
 
33312
+
 
33313
   emit_insn (pat);
 
33314
 
 
33315
   if (nonvoid)
 
33316
@@ -4368,10 +4384,12 @@
 
33317
   basic_block bb;
 
33318
   FOR_EACH_BB (bb)
 
33319
     {
 
33320
-      rtx insn, next;
 
33321
+      rtx insn, next, prev;
 
33322
       rtx end = NEXT_INSN (BB_END (bb));
 
33323
 
 
33324
-      for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn; insn = next)
 
33325
+      prev = NULL_RTX;
 
33326
+      for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn;
 
33327
+          prev = insn, insn = next)
 
33328
        {
 
33329
          next = next_insn_to_bundle (NEXT_INSN (insn), end);
 
33330
 
 
33331
@@ -4396,6 +4414,18 @@
 
33332
                  PUT_MODE (insn, SImode);
 
33333
                }
 
33334
            }
 
33335
+
 
33336
+         /* Delete barrier insns, because they can mess up the
 
33337
+            emitting of bundle braces.  If it is end-of-bundle, then
 
33338
+            the previous insn must be marked end-of-bundle.  */
 
33339
+         if (get_attr_type (insn) == TYPE_NOTHING) {
 
33340
+           if (GET_MODE (insn) == QImode && prev != NULL
 
33341
+               && GET_MODE (prev) == SImode)
 
33342
+             {
 
33343
+               PUT_MODE (prev, QImode);
 
33344
+             }
 
33345
+           delete_insn (insn);
 
33346
+         }
 
33347
        }
 
33348
     }
 
33349
 }
 
33350
@@ -5498,6 +5528,9 @@
 
33351
 #undef  TARGET_RTX_COSTS
 
33352
 #define TARGET_RTX_COSTS tilegx_rtx_costs
 
33353
 
 
33354
+#undef  TARGET_EXPAND_TO_RTL_HOOK
 
33355
+#define TARGET_EXPAND_TO_RTL_HOOK tilegx_expand_to_rtl_hook
 
33356
+
 
33357
 #undef  TARGET_SHIFT_TRUNCATION_MASK
 
33358
 #define TARGET_SHIFT_TRUNCATION_MASK tilegx_shift_truncation_mask
 
33359
 
 
33360
Index: gcc/config/sh/predicates.md
 
33361
===================================================================
 
33362
--- a/src/gcc/config/sh/predicates.md   (.../tags/gcc_4_8_2_release)
 
33363
+++ b/src/gcc/config/sh/predicates.md   (.../branches/gcc-4_8-branch)
 
33364
@@ -389,6 +389,12 @@
 
33365
                                           XEXP (XEXP (op, 0), 1),
 
33366
                                           TARGET_SH2A, true)")))
 
33367
 
 
33368
+;; Returns true if OP is a displacement address that can fit into a
 
33369
+;; 16 bit (non-SH2A) memory load / store insn.
 
33370
+(define_predicate "short_displacement_mem_operand"
 
33371
+  (match_test "sh_disp_addr_displacement (op)
 
33372
+              <= sh_max_mov_insn_displacement (GET_MODE (op), false)"))
 
33373
+
 
33374
 ;; Returns 1 if the operand can be used in an SH2A movu.{b|w} insn.
 
33375
 (define_predicate "zero_extend_movu_operand"
 
33376
   (and (match_operand 0 "displacement_mem_operand")
 
33377
@@ -413,6 +419,11 @@
 
33378
   if (t_reg_operand (op, mode))
 
33379
     return 0;
 
33380
 
 
33381
+  /* Disallow PC relative QImode loads, since these is no insn to do that
 
33382
+     and an imm8 load should be used instead.  */
 
33383
+  if (IS_PC_RELATIVE_LOAD_ADDR_P (op) && GET_MODE (op) == QImode)
 
33384
+    return false;
 
33385
+
 
33386
   if (MEM_P (op))
 
33387
     {
 
33388
       rtx inside = XEXP (op, 0);
 
33389
Index: gcc/config/sh/sh-protos.h
 
33390
===================================================================
 
33391
--- a/src/gcc/config/sh/sh-protos.h     (.../tags/gcc_4_8_2_release)
 
33392
+++ b/src/gcc/config/sh/sh-protos.h     (.../branches/gcc-4_8-branch)
 
33393
@@ -159,6 +159,8 @@
 
33394
 extern bool sh_cfun_trap_exit_p (void);
 
33395
 extern rtx sh_find_equiv_gbr_addr (rtx cur_insn, rtx mem);
 
33396
 extern int sh_eval_treg_value (rtx op);
 
33397
+extern HOST_WIDE_INT sh_disp_addr_displacement (rtx mem_op);
 
33398
+extern int sh_max_mov_insn_displacement (machine_mode mode, bool consider_sh2a);
 
33399
 
 
33400
 /* Result value of sh_find_set_of_reg.  */
 
33401
 struct set_of_reg
 
33402
Index: gcc/config/sh/sh.c
 
33403
===================================================================
 
33404
--- a/src/gcc/config/sh/sh.c    (.../tags/gcc_4_8_2_release)
 
33405
+++ b/src/gcc/config/sh/sh.c    (.../branches/gcc-4_8-branch)
 
33406
@@ -310,9 +310,7 @@
 
33407
 static void sh_conditional_register_usage (void);
 
33408
 static bool sh_legitimate_constant_p (enum machine_mode, rtx);
 
33409
 static int mov_insn_size (enum machine_mode, bool);
 
33410
-static int max_mov_insn_displacement (enum machine_mode, bool);
 
33411
 static int mov_insn_alignment_mask (enum machine_mode, bool);
 
33412
-static HOST_WIDE_INT disp_addr_displacement (rtx);
 
33413
 static bool sequence_insn_p (rtx);
 
33414
 static void sh_canonicalize_comparison (int *, rtx *, rtx *, bool);
 
33415
 static void sh_canonicalize_comparison (enum rtx_code&, rtx&, rtx&,
 
33416
@@ -3628,8 +3626,8 @@
 
33417
 
 
33418
 /* Determine the maximum possible displacement for a move insn for the
 
33419
    specified mode.  */
 
33420
-static int
 
33421
-max_mov_insn_displacement (enum machine_mode mode, bool consider_sh2a)
 
33422
+int
 
33423
+sh_max_mov_insn_displacement (machine_mode mode, bool consider_sh2a)
 
33424
 {
 
33425
   /* The 4 byte displacement move insns are the same as the 2 byte
 
33426
      versions but take a 12 bit displacement.  All we need to do is to
 
33427
@@ -3665,8 +3663,8 @@
 
33428
 }
 
33429
 
 
33430
 /* Return the displacement value of a displacement address.  */
 
33431
-static inline HOST_WIDE_INT
 
33432
-disp_addr_displacement (rtx x)
 
33433
+HOST_WIDE_INT
 
33434
+sh_disp_addr_displacement (rtx x)
 
33435
 {
 
33436
   gcc_assert (satisfies_constraint_Sdd (x));
 
33437
   return INTVAL (XEXP (XEXP (x, 0), 1));
 
33438
@@ -3703,12 +3701,12 @@
 
33439
         HImode and QImode loads/stores with displacement put pressure on
 
33440
         R0 which will most likely require another reg copy.  Thus account
 
33441
         a higher cost for that.  */
 
33442
-      if (offset > 0 && offset <= max_mov_insn_displacement (mode, false))
 
33443
+      if (offset > 0 && offset <= sh_max_mov_insn_displacement (mode, false))
 
33444
        return (mode == HImode || mode == QImode) ? 2 : 1;
 
33445
 
 
33446
       /* The displacement would fit into a 4 byte move insn (SH2A).  */
 
33447
       if (TARGET_SH2A
 
33448
-         && offset > 0 && offset <= max_mov_insn_displacement (mode, true))
 
33449
+         && offset > 0 && offset <= sh_max_mov_insn_displacement (mode, true))
 
33450
        return 2;
 
33451
 
 
33452
       /* The displacement is probably out of range and will require extra
 
33453
@@ -10218,7 +10216,7 @@
 
33454
   else
 
33455
     {
 
33456
       const HOST_WIDE_INT offset = INTVAL (op);
 
33457
-      const int max_disp = max_mov_insn_displacement (mode, consider_sh2a);
 
33458
+      const int max_disp = sh_max_mov_insn_displacement (mode, consider_sh2a);
 
33459
       const int align_mask = mov_insn_alignment_mask (mode, consider_sh2a);
 
33460
 
 
33461
       /* If the mode does not support any displacement always return false.
 
33462
@@ -10404,7 +10402,7 @@
 
33463
      effectively disable the small displacement insns.  */
 
33464
   const int mode_sz = GET_MODE_SIZE (mode);
 
33465
   const int mov_insn_sz = mov_insn_size (mode, false);
 
33466
-  const int max_disp = max_mov_insn_displacement (mode, false);
 
33467
+  const int max_disp = sh_max_mov_insn_displacement (mode, false);
 
33468
   const int max_disp_next = max_disp + mov_insn_sz;
 
33469
   HOST_WIDE_INT align_modifier = offset > 127 ? mov_insn_sz : 0;
 
33470
   HOST_WIDE_INT offset_adjust;
 
33471
@@ -13165,7 +13163,8 @@
 
33472
      the insns must have the appropriate alternatives.  */
 
33473
   if ((mode == QImode || mode == HImode) && rclass != R0_REGS
 
33474
       && satisfies_constraint_Sdd (x)
 
33475
-      && disp_addr_displacement (x) <= max_mov_insn_displacement (mode, false))
 
33476
+      && sh_disp_addr_displacement (x)
 
33477
+        <= sh_max_mov_insn_displacement (mode, false))
 
33478
     return R0_REGS;
 
33479
 
 
33480
   /* When reload is trying to address a QImode or HImode subreg on the stack, 
 
33481
Index: gcc/config/sh/constraints.md
 
33482
===================================================================
 
33483
--- a/src/gcc/config/sh/constraints.md  (.../tags/gcc_4_8_2_release)
 
33484
+++ b/src/gcc/config/sh/constraints.md  (.../branches/gcc-4_8-branch)
 
33485
@@ -221,6 +221,7 @@
 
33486
 (define_constraint "Q"
 
33487
   "A pc relative load operand."
 
33488
   (and (match_code "mem")
 
33489
+       (match_test "GET_MODE (op) != QImode")
 
33490
        (match_test "IS_PC_RELATIVE_LOAD_ADDR_P (XEXP (op, 0))")))
 
33491
 
 
33492
 (define_constraint "Bsc"
 
33493
@@ -295,13 +296,15 @@
 
33494
 
 
33495
 (define_memory_constraint "Sdd"
 
33496
   "A memory reference that uses displacement addressing."
 
33497
-  (and (match_test "MEM_P (op) && GET_CODE (XEXP (op, 0)) == PLUS")
 
33498
+  (and (match_code "mem")
 
33499
+       (match_test "GET_CODE (XEXP (op, 0)) == PLUS")
 
33500
        (match_test "REG_P (XEXP (XEXP (op, 0), 0))")
 
33501
        (match_test "CONST_INT_P (XEXP (XEXP (op, 0), 1))")))
 
33502
 
 
33503
 (define_memory_constraint "Snd"
 
33504
   "A memory reference that excludes displacement addressing."
 
33505
-  (match_test "! satisfies_constraint_Sdd (op)"))
 
33506
+  (and (match_code "mem")
 
33507
+       (match_test "! satisfies_constraint_Sdd (op)")))
 
33508
 
 
33509
 (define_memory_constraint "Sbv"
 
33510
   "A memory reference, as used in SH2A bclr.b, bset.b, etc."
 
33511
Index: gcc/config/sh/sh.md
 
33512
===================================================================
 
33513
--- a/src/gcc/config/sh/sh.md   (.../tags/gcc_4_8_2_release)
 
33514
+++ b/src/gcc/config/sh/sh.md   (.../branches/gcc-4_8-branch)
 
33515
@@ -2152,6 +2152,7 @@
 
33516
        (udiv:SI (reg:SI R4_REG) (reg:SI R5_REG)))
 
33517
    (clobber (reg:SI T_REG))
 
33518
    (clobber (reg:SI PR_REG))
 
33519
+   (clobber (reg:SI R1_REG))
 
33520
    (clobber (reg:SI R4_REG))
 
33521
    (use (match_operand:SI 1 "arith_reg_operand" "r"))]
 
33522
   "TARGET_SH1 && TARGET_DIVIDE_CALL_DIV1"
 
33523
@@ -6831,34 +6832,9 @@
 
33524
   prepare_move_operands (operands, QImode);
 
33525
 })
 
33526
 
 
33527
-;; If movqi_reg_reg is specified as an alternative of movqi, movqi will be
 
33528
-;; selected to copy QImode regs.  If one of them happens to be allocated
 
33529
-;; on the stack, reload will stick to movqi insn and generate wrong
 
33530
-;; displacement addressing because of the generic m alternatives.
 
33531
-;; With the movqi_reg_reg being specified before movqi it will be initially
 
33532
-;; picked to load/store regs.  If the regs regs are on the stack reload
 
33533
-;; try other insns and not stick to movqi_reg_reg, unless there were spilled
 
33534
-;; pseudos in which case 'm' constraints pertain.
 
33535
-;; The same applies to the movhi variants.
 
33536
-;;
 
33537
-;; Notice, that T bit is not allowed as a mov src operand here.  This is to
 
33538
-;; avoid things like (set (reg:QI) (subreg:QI (reg:SI T_REG) 0)), which
 
33539
-;; introduces zero extensions after T bit stores and redundant reg copies.
 
33540
-;;
 
33541
-;; FIXME: We can't use 'arith_reg_operand' (which disallows T_REG) as a
 
33542
-;; predicate for the mov src operand because reload will have trouble
 
33543
-;; reloading MAC subregs otherwise.  For that probably special patterns
 
33544
-;; would be required.
 
33545
-(define_insn "*mov<mode>_reg_reg"
 
33546
-  [(set (match_operand:QIHI 0 "arith_reg_dest" "=r,m,*z")
 
33547
-       (match_operand:QIHI 1 "register_operand" "r,*z,m"))]
 
33548
-  "TARGET_SH1 && !t_reg_operand (operands[1], VOIDmode)"
 
33549
-  "@
 
33550
-    mov                %1,%0
 
33551
-    mov.<bw>   %1,%0
 
33552
-    mov.<bw>   %1,%0"
 
33553
-  [(set_attr "type" "move,store,load")])
 
33554
-
 
33555
+;; Specifying the displacement addressing load / store patterns separately
 
33556
+;; before the generic movqi / movhi pattern allows controlling the order
 
33557
+;; in which load / store insns are selected in a more fine grained way.
 
33558
 ;; FIXME: The non-SH2A and SH2A variants should be combined by adding
 
33559
 ;; "enabled" attribute as it is done in other targets.
 
33560
 (define_insn "*mov<mode>_store_mem_disp04"
 
33561
@@ -6908,38 +6884,44 @@
 
33562
   [(set_attr "type" "load")
 
33563
    (set_attr "length" "2,2,4")])
 
33564
 
 
33565
-;; The m constraints basically allow any kind of addresses to be used with any
 
33566
-;; source/target register as the other operand.  This is not true for 
 
33567
-;; displacement addressing modes on anything but SH2A.  That's why the
 
33568
-;; specialized load/store insns are specified above.
 
33569
-(define_insn "*movqi"
 
33570
-  [(set (match_operand:QI 0 "general_movdst_operand" "=r,r,m,r,l")
 
33571
-       (match_operand:QI 1 "general_movsrc_operand"  "i,m,r,l,r"))]
 
33572
+;; The order of the constraint alternatives is important here.
 
33573
+;; Q/r has to come first, otherwise PC relative loads might wrongly get
 
33574
+;; placed into delay slots.  Since there is no QImode PC relative load, the
 
33575
+;; Q constraint and general_movsrc_operand will reject it for QImode.
 
33576
+;; The Snd alternatives should come before Sdd in order to avoid a preference
 
33577
+;; of using r0 als the register operand for addressing modes other than
 
33578
+;; displacement addressing.
 
33579
+;; The Sdd alternatives allow only r0 as register operand, even though on
 
33580
+;; SH2A any register could be allowed by switching to a 32 bit insn.
 
33581
+;; Generally sticking to the r0 is preferrable, since it generates smaller
 
33582
+;; code.  Obvious r0 reloads can then be eliminated with a peephole on SH2A.
 
33583
+(define_insn "*mov<mode>"
 
33584
+  [(set (match_operand:QIHI 0 "general_movdst_operand"
 
33585
+                             "=r,r,r,Snd,r,  Sdd,z,  r,l")
 
33586
+       (match_operand:QIHI 1 "general_movsrc_operand"
 
33587
+                              "Q,r,i,r,  Snd,z,  Sdd,l,r"))]
 
33588
   "TARGET_SH1
 
33589
-   && (arith_reg_operand (operands[0], QImode)
 
33590
-       || arith_reg_operand (operands[1], QImode))"
 
33591
+   && (arith_reg_operand (operands[0], <MODE>mode)
 
33592
+       || arith_reg_operand (operands[1], <MODE>mode))"
 
33593
   "@
 
33594
+       mov.<bw>        %1,%0
 
33595
        mov     %1,%0
 
33596
-       mov.b   %1,%0
 
33597
-       mov.b   %1,%0
 
33598
-       sts     %1,%0
 
33599
-       lds     %1,%0"
 
33600
- [(set_attr "type" "movi8,load,store,prget,prset")])
 
33601
-
 
33602
-(define_insn "*movhi"
 
33603
-  [(set (match_operand:HI 0 "general_movdst_operand" "=r,r,r,m,r,l")
 
33604
-       (match_operand:HI 1 "general_movsrc_operand"  "Q,i,m,r,l,r"))]
 
33605
-  "TARGET_SH1
 
33606
-   && (arith_reg_operand (operands[0], HImode)
 
33607
-       || arith_reg_operand (operands[1], HImode))"
 
33608
-  "@
 
33609
-       mov.w   %1,%0
 
33610
        mov     %1,%0
 
33611
-       mov.w   %1,%0
 
33612
-       mov.w   %1,%0
 
33613
+       mov.<bw>        %1,%0
 
33614
+       mov.<bw>        %1,%0
 
33615
+       mov.<bw>        %1,%0
 
33616
+       mov.<bw>        %1,%0
 
33617
        sts     %1,%0
 
33618
        lds     %1,%0"
 
33619
- [(set_attr "type" "pcload,movi8,load,store,prget,prset")])
 
33620
+  [(set_attr "type" "pcload,move,movi8,store,load,store,load,prget,prset")
 
33621
+   (set (attr "length")
 
33622
+       (cond [(and (match_operand 0 "displacement_mem_operand")
 
33623
+                   (not (match_operand 0 "short_displacement_mem_operand")))
 
33624
+              (const_int 4)
 
33625
+              (and (match_operand 1 "displacement_mem_operand")
 
33626
+                   (not (match_operand 1 "short_displacement_mem_operand")))
 
33627
+              (const_int 4)]
 
33628
+             (const_int 2)))])
 
33629
 
 
33630
 (define_insn "*movqi_media"
 
33631
   [(set (match_operand:QI 0 "general_movdst_operand" "=r,r,r,m")
 
33632
@@ -8427,11 +8409,9 @@
 
33633
 
 
33634
   while (true)
 
33635
     {
 
33636
-      /* It's not safe to go beyond the current basic block after reload.  */
 
33637
       set_of_reg s1 = sh_find_set_of_reg (tested_reg, s0.insn,
 
33638
-                                         reload_completed
 
33639
-                                         ? prev_nonnote_insn_bb
 
33640
-                                         : prev_nonnote_insn);
 
33641
+                                         prev_nonnote_insn);
 
33642
+
 
33643
       if (s1.set_src == NULL_RTX)
 
33644
        break;
 
33645
 
 
33646
@@ -8449,15 +8429,25 @@
 
33647
          continue;
 
33648
        }
 
33649
 
 
33650
-       /* It's only safe to remove the testing insn if the T bit is not
 
33651
-          modified between the testing insn and the insn that stores the
 
33652
-          T bit.  Notice that some T bit stores such as negc also modify
 
33653
-          the T bit.  */
 
33654
-       if (modified_between_p (get_t_reg_rtx (), s1.insn, testing_insn)
 
33655
-           || modified_in_p (get_t_reg_rtx (), s1.insn))
 
33656
-         operands[2] = NULL_RTX;
 
33657
+      /* It's only safe to remove the testing insn if the T bit is not
 
33658
+        modified between the testing insn and the insn that stores the
 
33659
+        T bit.  Notice that some T bit stores such as negc also modify
 
33660
+        the T bit.  */
 
33661
+      if (modified_between_p (get_t_reg_rtx (), s1.insn, testing_insn)
 
33662
+         || modified_in_p (get_t_reg_rtx (), s1.insn)
 
33663
+         || !no_labels_between_p (s1.insn, testing_insn))
 
33664
+       operands[2] = NULL_RTX;
 
33665
+      else
 
33666
+       {
 
33667
+         /* If the insn that sets the tested reg has a REG_DEAD note on
 
33668
+            the T bit remove that note since we're extending the usage
 
33669
+            of the T bit.  */
 
33670
+         rtx n = find_regno_note (s1.insn, REG_DEAD, T_REG);
 
33671
+         if (n != NULL_RTX)
 
33672
+           remove_note (s1.insn, n);
 
33673
+       }
 
33674
 
 
33675
-       break;
 
33676
+      break;
 
33677
     }
 
33678
 
 
33679
   if (operands[2] == NULL_RTX)
 
33680
Index: gcc/config/sh/sh.opt
 
33681
===================================================================
 
33682
--- a/src/gcc/config/sh/sh.opt  (.../tags/gcc_4_8_2_release)
 
33683
+++ b/src/gcc/config/sh/sh.opt  (.../branches/gcc-4_8-branch)
 
33684
@@ -21,7 +21,7 @@
 
33685
 ;; Used for various architecture options.
 
33686
 Mask(SH_E)
 
33687
 
 
33688
-;; Set if the default precision of th FPU is single.
 
33689
+;; Set if the default precision of the FPU is single.
 
33690
 Mask(FPU_SINGLE)
 
33691
 
 
33692
 ;; Set if the a double-precision FPU is present but is restricted to
 
33693
Index: gcc/config/microblaze/predicates.md
 
33694
===================================================================
 
33695
--- a/src/gcc/config/microblaze/predicates.md   (.../tags/gcc_4_8_2_release)
 
33696
+++ b/src/gcc/config/microblaze/predicates.md   (.../branches/gcc-4_8-branch)
 
33697
@@ -85,6 +85,10 @@
 
33698
   (ior (match_operand 0 "const_0_operand")
 
33699
        (match_operand 0 "register_operand")))
 
33700
 
 
33701
+(define_predicate "reg_or_mem_operand"
 
33702
+  (ior (match_operand 0 "memory_operand")
 
33703
+       (match_operand 0 "register_operand")))
 
33704
+
 
33705
 ;;  Return if the operand is either the PC or a label_ref.  
 
33706
 (define_special_predicate "pc_or_label_operand"
 
33707
   (ior (match_code "pc,label_ref")
 
33708
@@ -119,3 +123,7 @@
 
33709
 ;; Test for valid PIC call operand
 
33710
 (define_predicate "call_insn_plt_operand"
 
33711
   (match_test "PLT_ADDR_P (op)"))
 
33712
+
 
33713
+;; Return if the code of this rtx pattern is a comparison.
 
33714
+(define_predicate "cmp_op"
 
33715
+  (match_code "gt,ge,gtu,geu,lt,le,ltu,leu"))
 
33716
Index: gcc/config/microblaze/microblaze.md
 
33717
===================================================================
 
33718
--- a/src/gcc/config/microblaze/microblaze.md   (.../tags/gcc_4_8_2_release)
 
33719
+++ b/src/gcc/config/microblaze/microblaze.md   (.../branches/gcc-4_8-branch)
 
33720
@@ -74,7 +74,7 @@
 
33721
 ;; bshift      Shift operations
 
33722
 
 
33723
 (define_attr "type"
 
33724
-  "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"
 
33725
+  "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"
 
33726
   (const_string "unknown"))
 
33727
 
 
33728
 ;; Main data type used by the insn
 
33729
@@ -365,7 +365,8 @@
 
33730
   [(set (match_operand:HI 0 "register_operand" "=r")
 
33731
         (bswap:HI (match_operand:HI 1 "register_operand" "r")))]
 
33732
   "TARGET_REORDER"
 
33733
-  "swaph %0, %1"
 
33734
+  "swapb %0, %1
 
33735
+   swaph %0, %0"
 
33736
 )
 
33737
 
 
33738
 ;;----------------------------------------------------------------
 
33739
@@ -1118,6 +1119,18 @@
 
33740
   }
 
33741
 )
 
33742
 
 
33743
+;;Load and store reverse
 
33744
+(define_insn "movsi4_rev"
 
33745
+  [(set (match_operand:SI 0 "reg_or_mem_operand" "=r,Q")
 
33746
+        (bswap:SI (match_operand:SF 1 "reg_or_mem_operand" "Q,r")))]
 
33747
+  "TARGET_REORDER"
 
33748
+  "@
 
33749
+   lwr\t%0,%y1,r0
 
33750
+   swr\t%1,%y0,r0"
 
33751
+  [(set_attr "type"     "load,store")
 
33752
+  (set_attr "mode"      "SI")
 
33753
+  (set_attr "length"    "4,4")])
 
33754
+
 
33755
 ;; 32-bit floating point moves
 
33756
 
 
33757
 (define_expand "movsf"
 
33758
@@ -1472,7 +1485,7 @@
 
33759
   (set_attr "length"   "124")]
 
33760
 )
 
33761
 
 
33762
-(define_insn "*ashlri_reg"
 
33763
+(define_insn "*ashrsi_reg"
 
33764
   [(set (match_operand:SI 0 "register_operand" "=&d")
 
33765
        (ashiftrt:SI (match_operand:SI 1 "register_operand"  "d")
 
33766
                    (match_operand:SI 2 "register_operand" "d")))]
 
33767
@@ -1561,7 +1574,7 @@
 
33768
   (set_attr "length"   "124")]
 
33769
 )
 
33770
 
 
33771
-(define_insn "*lshlri_reg"
 
33772
+(define_insn "*lshrsi_reg"
 
33773
   [(set (match_operand:SI 0 "register_operand" "=&d")
 
33774
        (lshiftrt:SI (match_operand:SI 1 "register_operand"  "d")
 
33775
                    (match_operand:SI 2 "register_operand" "d")))]
 
33776
@@ -1622,34 +1635,12 @@
 
33777
   (set_attr "length"   "4")]
 
33778
 )              
 
33779
 
 
33780
-(define_insn "signed_compare"
 
33781
-  [(set (match_operand:SI 0 "register_operand" "=d")
 
33782
-       (unspec
 
33783
-               [(match_operand:SI 1 "register_operand" "d")
 
33784
-                (match_operand:SI 2 "register_operand" "d")] UNSPEC_CMP))]
 
33785
-  ""
 
33786
-  "cmp\t%0,%1,%2"
 
33787
-  [(set_attr "type"    "arith")
 
33788
-  (set_attr "mode"     "SI")
 
33789
-  (set_attr "length"   "4")])
 
33790
-
 
33791
-(define_insn "unsigned_compare"
 
33792
-  [(set (match_operand:SI 0 "register_operand" "=d")
 
33793
-       (unspec 
 
33794
-               [(match_operand:SI 1 "register_operand" "d")
 
33795
-                (match_operand:SI 2 "register_operand" "d")] UNSPEC_CMPU))]
 
33796
-  ""
 
33797
-  "cmpu\t%0,%1,%2"
 
33798
-  [(set_attr "type"    "arith")
 
33799
-  (set_attr "mode"     "SI")
 
33800
-  (set_attr "length"   "4")])
 
33801
-
 
33802
 ;;----------------------------------------------------------------
 
33803
 ;; Setting a register from an floating point comparison. 
 
33804
 ;;----------------------------------------------------------------
 
33805
 (define_insn "cstoresf4"
 
33806
    [(set (match_operand:SI 0 "register_operand" "=r")
 
33807
-        (match_operator 1 "comparison_operator"
 
33808
+        (match_operator:SI 1 "ordered_comparison_operator"
 
33809
              [(match_operand:SF 2 "register_operand" "r")
 
33810
               (match_operand:SF 3 "register_operand" "r")]))]
 
33811
   "TARGET_HARD_FLOAT"
 
33812
@@ -1678,7 +1669,7 @@
 
33813
 
 
33814
 (define_expand "cbranchsf4"
 
33815
   [(set (pc)
 
33816
-       (if_then_else (match_operator 0 "comparison_operator"
 
33817
+       (if_then_else (match_operator 0 "ordered_comparison_operator"
 
33818
                       [(match_operand:SF 1 "register_operand")
 
33819
                        (match_operand:SF 2 "register_operand")])
 
33820
                      (label_ref (match_operand 3 ""))
 
33821
@@ -1717,6 +1708,47 @@
 
33822
    (set_attr "length"  "4")]
 
33823
 )
 
33824
 
 
33825
+(define_insn "branch_compare"
 
33826
+  [(set (pc)
 
33827
+        (if_then_else (match_operator:SI 0 "cmp_op"
 
33828
+                                         [(match_operand:SI 1 "register_operand" "d")
 
33829
+                                          (match_operand:SI 2 "register_operand" "d")
 
33830
+                                         ])
 
33831
+                      (label_ref (match_operand 3))
 
33832
+                      (pc)))
 
33833
+  (clobber(reg:SI R_TMP))]
 
33834
+  ""
 
33835
+  {
 
33836
+    operands[4] = gen_rtx_REG (SImode, MB_ABI_ASM_TEMP_REGNUM);
 
33837
+    enum rtx_code code = GET_CODE (operands[0]);
 
33838
+
 
33839
+    if (code == GT || code == LE)
 
33840
+      {
 
33841
+        output_asm_insn ("cmp\tr18,%z1,%z2", operands);
 
33842
+        code = swap_condition (code);
 
33843
+      }
 
33844
+    else if (code == GTU || code == LEU)
 
33845
+      {
 
33846
+        output_asm_insn ("cmpu\tr18,%z1,%z2", operands);
 
33847
+        code = swap_condition (code);
 
33848
+      }
 
33849
+    else if (code == GE || code == LT)
 
33850
+      {
 
33851
+        output_asm_insn ("cmp\tr18,%z2,%z1", operands);
 
33852
+      }
 
33853
+    else if (code == GEU || code == LTU)
 
33854
+      {
 
33855
+        output_asm_insn ("cmpu\tr18,%z2,%z1", operands);
 
33856
+      }
 
33857
+
 
33858
+    operands[0] = gen_rtx_fmt_ee (signed_condition (code), SImode, operands[4], const0_rtx);
 
33859
+    return "b%C0i%?\tr18,%3";
 
33860
+  }
 
33861
+  [(set_attr "type"     "branch")
 
33862
+   (set_attr "mode"     "none")
 
33863
+   (set_attr "length"   "12")]
 
33864
+)
 
33865
+
 
33866
 ;;----------------------------------------------------------------
 
33867
 ;; Unconditional branches
 
33868
 ;;----------------------------------------------------------------
 
33869
@@ -2201,6 +2233,14 @@
 
33870
   (set_attr "mode"     "none")
 
33871
   (set_attr "length"   "4")])
 
33872
 
 
33873
+;; Trap instruction pattern for __builtin_trap. Same as the glibc ABORT_INSTRUCTION
 
33874
+(define_insn "trap"
 
33875
+  [(trap_if (const_int 1) (const_int 0))]
 
33876
+  ""
 
33877
+  "brki\tr0,-1"
 
33878
+ [(set_attr "type" "trap")]
 
33879
+)
 
33880
+
 
33881
 ;; The insn to set GOT. The hardcoded number "8" accounts for $pc difference
 
33882
 ;; between "mfs" and "addik" instructions.
 
33883
 (define_insn "set_got"
 
33884
Index: gcc/config/microblaze/microblaze.c
 
33885
===================================================================
 
33886
--- a/src/gcc/config/microblaze/microblaze.c    (.../tags/gcc_4_8_2_release)
 
33887
+++ b/src/gcc/config/microblaze/microblaze.c    (.../branches/gcc-4_8-branch)
 
33888
@@ -1609,21 +1609,28 @@
 
33889
 microblaze_version_to_int (const char *version)
 
33890
 {
 
33891
   const char *p, *v;
 
33892
-  const char *tmpl = "vX.YY.Z";
 
33893
+  const char *tmpl = "vXX.YY.Z";
 
33894
   int iver = 0;
 
33895
 
 
33896
   p = version;
 
33897
   v = tmpl;
 
33898
 
 
33899
-  while (*v)
 
33900
+  while (*p)
 
33901
     {
 
33902
       if (*v == 'X')
 
33903
        {                       /* Looking for major  */
 
33904
-         if (!(*p >= '0' && *p <= '9'))
 
33905
-           return -1;
 
33906
-         iver += (int) (*p - '0');
 
33907
-         iver *= 10;
 
33908
-       }
 
33909
+          if (*p == '.')
 
33910
+            {
 
33911
+              *v++;
 
33912
+            }
 
33913
+          else
 
33914
+            {
 
33915
+             if (!(*p >= '0' && *p <= '9'))
 
33916
+               return -1;
 
33917
+             iver += (int) (*p - '0');
 
33918
+              iver *= 10;
 
33919
+            }
 
33920
+        }
 
33921
       else if (*v == 'Y')
 
33922
        {                       /* Looking for minor  */
 
33923
          if (!(*p >= '0' && *p <= '9'))
 
33924
@@ -3064,6 +3071,73 @@
 
33925
   return result;
 
33926
 }
 
33927
 
 
33928
+static void
 
33929
+microblaze_asm_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
 
33930
+        HOST_WIDE_INT delta, HOST_WIDE_INT vcall_offset,
 
33931
+        tree function)
 
33932
+{
 
33933
+  rtx this_rtx, insn, funexp;
 
33934
+
 
33935
+  reload_completed = 1;
 
33936
+  epilogue_completed = 1;
 
33937
+
 
33938
+  /* Mark the end of the (empty) prologue.  */
 
33939
+  emit_note (NOTE_INSN_PROLOGUE_END);
 
33940
+
 
33941
+  /* Find the "this" pointer.  If the function returns a structure,
 
33942
+     the structure return pointer is in MB_ABI_FIRST_ARG_REGNUM.  */
 
33943
+  if (aggregate_value_p (TREE_TYPE (TREE_TYPE (function)), function))
 
33944
+    this_rtx = gen_rtx_REG (Pmode, (MB_ABI_FIRST_ARG_REGNUM + 1));
 
33945
+  else
 
33946
+    this_rtx = gen_rtx_REG (Pmode, MB_ABI_FIRST_ARG_REGNUM);
 
33947
+
 
33948
+  /* Apply the constant offset, if required.  */
 
33949
+  if (delta)
 
33950
+    emit_insn (gen_addsi3 (this_rtx, this_rtx, GEN_INT (delta)));
 
33951
+
 
33952
+  /* Apply the offset from the vtable, if required.  */
 
33953
+  if (vcall_offset)
 
33954
+  {
 
33955
+    rtx vcall_offset_rtx = GEN_INT (vcall_offset);
 
33956
+    rtx temp1 = gen_rtx_REG (Pmode, MB_ABI_TEMP1_REGNUM);
 
33957
+
 
33958
+    emit_move_insn (temp1, gen_rtx_MEM (Pmode, this_rtx));
 
33959
+
 
33960
+    rtx loc = gen_rtx_PLUS (Pmode, temp1, vcall_offset_rtx);
 
33961
+    emit_move_insn (temp1, gen_rtx_MEM (Pmode, loc));
 
33962
+
 
33963
+    emit_insn (gen_addsi3 (this_rtx, this_rtx, temp1));
 
33964
+  }
 
33965
+
 
33966
+  /* Generate a tail call to the target function.  */
 
33967
+  if (!TREE_USED (function))
 
33968
+  {
 
33969
+    assemble_external (function);
 
33970
+    TREE_USED (function) = 1;
 
33971
+  }
 
33972
+
 
33973
+  funexp = XEXP (DECL_RTL (function), 0);
 
33974
+  rtx temp2 = gen_rtx_REG (Pmode, MB_ABI_TEMP2_REGNUM);
 
33975
+
 
33976
+  if (flag_pic)
 
33977
+    emit_move_insn (temp2, expand_pic_symbol_ref (Pmode, funexp));
 
33978
+  else
 
33979
+    emit_move_insn (temp2, funexp);
 
33980
+
 
33981
+  emit_insn (gen_indirect_jump (temp2));
 
33982
+
 
33983
+  /* Run just enough of rest_of_compilation.  This sequence was
 
33984
+     "borrowed" from rs6000.c.  */
 
33985
+  insn = get_insns ();
 
33986
+  shorten_branches (insn);
 
33987
+  final_start_function (insn, file, 1);
 
33988
+  final (insn, file, 1);
 
33989
+  final_end_function ();
 
33990
+
 
33991
+  reload_completed = 0;
 
33992
+  epilogue_completed = 0;
 
33993
+}
 
33994
+
 
33995
 bool
 
33996
 microblaze_expand_move (enum machine_mode mode, rtx operands[])
 
33997
 {
 
33998
@@ -3234,67 +3308,47 @@
 
33999
   emit_move_insn (mem, fnaddr);
 
34000
 }
 
34001
 
 
34002
-/* Emit instruction to perform compare.  
 
34003
-   cmp is (compare_op op0 op1).  */
 
34004
-static rtx
 
34005
-microblaze_emit_compare (enum machine_mode mode, rtx cmp, enum rtx_code *cmp_code)
 
34006
+/* Generate conditional branch -- first, generate test condition,
 
34007
+   second, generate correct branch instruction.  */
 
34008
+
 
34009
+void
 
34010
+microblaze_expand_conditional_branch (enum machine_mode mode, rtx operands[])
 
34011
 {
 
34012
-  rtx cmp_op0 = XEXP (cmp, 0);
 
34013
-  rtx cmp_op1 = XEXP (cmp, 1);
 
34014
+  enum rtx_code code = GET_CODE (operands[0]);
 
34015
+  rtx cmp_op0 = operands[1];
 
34016
+  rtx cmp_op1 = operands[2];
 
34017
+  rtx label1 = operands[3];
 
34018
   rtx comp_reg = gen_reg_rtx (SImode);
 
34019
-  enum rtx_code code = *cmp_code;
 
34020
-  
 
34021
+  rtx condition;
 
34022
+
 
34023
   gcc_assert ((GET_CODE (cmp_op0) == REG) || (GET_CODE (cmp_op0) == SUBREG));
 
34024
 
 
34025
   /* If comparing against zero, just test source reg.  */
 
34026
-  if (cmp_op1 == const0_rtx) 
 
34027
-    return cmp_op0;
 
34028
+  if (cmp_op1 == const0_rtx)
 
34029
+    {
 
34030
+      comp_reg = cmp_op0;
 
34031
+      condition = gen_rtx_fmt_ee (signed_condition (code), SImode, comp_reg, const0_rtx);
 
34032
+      emit_jump_insn (gen_condjump (condition, label1));
 
34033
+    }
 
34034
 
 
34035
-  if (code == EQ || code == NE)
 
34036
+  else if (code == EQ || code == NE)
 
34037
     {
 
34038
       /* Use xor for equal/not-equal comparison.  */
 
34039
       emit_insn (gen_xorsi3 (comp_reg, cmp_op0, cmp_op1));
 
34040
+      condition = gen_rtx_fmt_ee (signed_condition (code), SImode, comp_reg, const0_rtx);
 
34041
+      emit_jump_insn (gen_condjump (condition, label1));
 
34042
     }
 
34043
-  else if (code == GT || code == GTU || code == LE || code == LEU)
 
34044
+  else
 
34045
     {
 
34046
-      /* MicroBlaze compare is not symmetrical.  */
 
34047
-      /* Swap argument order.  */
 
34048
+      /* Generate compare and branch in single instruction. */
 
34049
       cmp_op1 = force_reg (mode, cmp_op1);
 
34050
-      if (code == GT || code == LE) 
 
34051
-        emit_insn (gen_signed_compare (comp_reg, cmp_op0, cmp_op1));
 
34052
-      else
 
34053
-        emit_insn (gen_unsigned_compare (comp_reg, cmp_op0, cmp_op1));
 
34054
-      /* Translate test condition.  */
 
34055
-      *cmp_code = swap_condition (code);
 
34056
+      condition = gen_rtx_fmt_ee (code, mode, cmp_op0, cmp_op1);
 
34057
+      emit_jump_insn (gen_branch_compare(condition, cmp_op0, cmp_op1, label1));
 
34058
     }
 
34059
-  else /* if (code == GE || code == GEU || code == LT || code == LTU) */
 
34060
-    {
 
34061
-      cmp_op1 = force_reg (mode, cmp_op1);
 
34062
-      if (code == GE || code == LT) 
 
34063
-        emit_insn (gen_signed_compare (comp_reg, cmp_op1, cmp_op0));
 
34064
-      else
 
34065
-        emit_insn (gen_unsigned_compare (comp_reg, cmp_op1, cmp_op0));
 
34066
-    }
 
34067
-
 
34068
-  return comp_reg;
 
34069
 }
 
34070
 
 
34071
-/* Generate conditional branch -- first, generate test condition,
 
34072
-   second, generate correct branch instruction.  */
 
34073
 
 
34074
 void
 
34075
-microblaze_expand_conditional_branch (enum machine_mode mode, rtx operands[])
 
34076
-{
 
34077
-  enum rtx_code code = GET_CODE (operands[0]);
 
34078
-  rtx comp;
 
34079
-  rtx condition;
 
34080
-
 
34081
-  comp = microblaze_emit_compare (mode, operands[0], &code);
 
34082
-  condition = gen_rtx_fmt_ee (signed_condition (code), SImode, comp, const0_rtx);
 
34083
-  emit_jump_insn (gen_condjump (condition, operands[3]));
 
34084
-}
 
34085
-
 
34086
-void
 
34087
 microblaze_expand_conditional_branch_sf (rtx operands[])
 
34088
 {
 
34089
   rtx condition;
 
34090
@@ -3501,6 +3555,12 @@
 
34091
 #undef TARGET_SECONDARY_RELOAD
 
34092
 #define TARGET_SECONDARY_RELOAD                microblaze_secondary_reload
 
34093
 
 
34094
+#undef  TARGET_ASM_OUTPUT_MI_THUNK
 
34095
+#define TARGET_ASM_OUTPUT_MI_THUNK      microblaze_asm_output_mi_thunk
 
34096
+
 
34097
+#undef  TARGET_ASM_CAN_OUTPUT_MI_THUNK
 
34098
+#define TARGET_ASM_CAN_OUTPUT_MI_THUNK  hook_bool_const_tree_hwi_hwi_const_tree_true
 
34099
+
 
34100
 #undef TARGET_SCHED_ADJUST_COST
 
34101
 #define TARGET_SCHED_ADJUST_COST       microblaze_adjust_cost
 
34102
 
 
34103
Index: gcc/config/microblaze/microblaze.h
 
34104
===================================================================
 
34105
--- a/src/gcc/config/microblaze/microblaze.h    (.../tags/gcc_4_8_2_release)
 
34106
+++ b/src/gcc/config/microblaze/microblaze.h    (.../branches/gcc-4_8-branch)
 
34107
@@ -213,6 +213,12 @@
 
34108
 #define STRICT_ALIGNMENT        1
 
34109
 #define PCC_BITFIELD_TYPE_MATTERS 1
 
34110
 
 
34111
+#undef SIZE_TYPE
 
34112
+#define SIZE_TYPE "unsigned int"
 
34113
+
 
34114
+#undef PTRDIFF_TYPE
 
34115
+#define PTRDIFF_TYPE "int"
 
34116
+
 
34117
 #define CONSTANT_ALIGNMENT(EXP, ALIGN)                                 \
 
34118
   ((TREE_CODE (EXP) == STRING_CST  || TREE_CODE (EXP) == CONSTRUCTOR)  \
 
34119
    && (ALIGN) < BITS_PER_WORD                                          \
 
34120
@@ -407,9 +413,6 @@
 
34121
          || GET_MODE (X) == VOIDmode)                                  \
 
34122
         ? (GR_REGS) : (CLASS))))
 
34123
 
 
34124
-#define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE)                  \
 
34125
-  (GET_MODE_CLASS (MODE) == MODE_INT)
 
34126
-
 
34127
 /* Stack layout; function entry, exit and calling.  */
 
34128
 
 
34129
 #define STACK_GROWS_DOWNWARD
 
34130
Index: gcc/config/avr/avr.c
 
34131
===================================================================
 
34132
--- a/src/gcc/config/avr/avr.c  (.../tags/gcc_4_8_2_release)
 
34133
+++ b/src/gcc/config/avr/avr.c  (.../branches/gcc-4_8-branch)
 
34134
@@ -587,10 +587,14 @@
 
34135
       const char *name;
 
34136
 
 
34137
       name = DECL_ASSEMBLER_NAME_SET_P (decl)
 
34138
-        /* Remove the leading '*' added in set_user_assembler_name.  */
 
34139
-        ? 1 + IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))
 
34140
+        ? IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))
 
34141
         : IDENTIFIER_POINTER (DECL_NAME (decl));
 
34142
 
 
34143
+      /* Skip a leading '*' that might still prefix the assembler name,
 
34144
+         e.g. in non-LTO runs.  */
 
34145
+
 
34146
+      name = default_strip_name_encoding (name);
 
34147
+
 
34148
       /* Silently ignore 'signal' if 'interrupt' is present.  AVR-LibC startet
 
34149
          using this when it switched from SIGNAL and INTERRUPT to ISR.  */
 
34150
 
 
34151
@@ -6806,8 +6810,8 @@
 
34152
 
 
34153
   /* Work out the shortest sequence.  */
 
34154
 
 
34155
-  avr_out_plus_1 (op, &len_minus, MINUS, &cc_plus, code_sat, sign, out_label);
 
34156
-  avr_out_plus_1 (op, &len_plus, PLUS, &cc_minus, code_sat, sign, out_label);
 
34157
+  avr_out_plus_1 (op, &len_minus, MINUS, &cc_minus, code_sat, sign, out_label);
 
34158
+  avr_out_plus_1 (op, &len_plus, PLUS, &cc_plus, code_sat, sign, out_label);
 
34159
 
 
34160
   if (plen)
 
34161
     {
 
34162
Index: gcc/config/cris/cris.md
 
34163
===================================================================
 
34164
--- a/src/gcc/config/cris/cris.md       (.../tags/gcc_4_8_2_release)
 
34165
+++ b/src/gcc/config/cris/cris.md       (.../branches/gcc-4_8-branch)
 
34166
@@ -758,7 +758,7 @@
 
34167
                      (match_operand:SI 1 "const_int_operand" ""))
 
34168
             (match_operand:SI 2 "register_operand" ""))])
 
34169
          (match_operand 3 "register_operand" ""))
 
34170
-     (set (match_operand:SI 4 "register_operand" "")
 
34171
+     (set (match_operand:SI 4 "cris_nonsp_register_operand" "")
 
34172
          (plus:SI (mult:SI (match_dup 0)
 
34173
                            (match_dup 1))
 
34174
                   (match_dup 2)))])]
 
34175
@@ -859,7 +859,7 @@
 
34176
             (match_operand:SI 0 "cris_bdap_operand" "")
 
34177
             (match_operand:SI 1 "cris_bdap_operand" ""))])
 
34178
          (match_operand 2 "register_operand" ""))
 
34179
-     (set (match_operand:SI 3 "register_operand" "")
 
34180
+     (set (match_operand:SI 3 "cris_nonsp_register_operand" "")
 
34181
          (plus:SI (match_dup 0) (match_dup 1)))])]
 
34182
   "reload_completed && reg_overlap_mentioned_p (operands[3], operands[2])"
 
34183
   [(set (match_dup 4) (match_dup 2))
 
34184
@@ -3960,7 +3960,7 @@
 
34185
 ;; up.
 
34186
 
 
34187
 (define_split
 
34188
-  [(set (match_operand 0 "register_operand" "")
 
34189
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
34190
        (match_operator
 
34191
         4 "cris_operand_extend_operator"
 
34192
         [(match_operand 1 "register_operand" "")
 
34193
@@ -3990,7 +3990,7 @@
 
34194
 ;; Call this op-extend-split-rx=rz
 
34195
 
 
34196
 (define_split
 
34197
-  [(set (match_operand 0 "register_operand" "")
 
34198
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
34199
        (match_operator
 
34200
         4 "cris_plus_or_bound_operator"
 
34201
         [(match_operand 1 "register_operand" "")
 
34202
@@ -4018,7 +4018,7 @@
 
34203
 ;; Call this op-extend-split-swapped
 
34204
 
 
34205
 (define_split
 
34206
-  [(set (match_operand 0 "register_operand" "")
 
34207
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
34208
        (match_operator
 
34209
         4 "cris_plus_or_bound_operator"
 
34210
         [(match_operator
 
34211
@@ -4044,7 +4044,7 @@
 
34212
 ;; bound.  Call this op-extend-split-swapped-rx=rz.
 
34213
 
 
34214
 (define_split
 
34215
-  [(set (match_operand 0 "register_operand" "")
 
34216
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
34217
        (match_operator
 
34218
         4 "cris_plus_or_bound_operator"
 
34219
         [(match_operator
 
34220
@@ -4075,7 +4075,7 @@
 
34221
 ;; Call this op-extend.
 
34222
 
 
34223
 (define_split
 
34224
-  [(set (match_operand 0 "register_operand" "")
 
34225
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
34226
        (match_operator
 
34227
         3 "cris_orthogonal_operator"
 
34228
         [(match_operand 1 "register_operand" "")
 
34229
@@ -4099,7 +4099,7 @@
 
34230
 ;; Call this op-split-rx=rz
 
34231
 
 
34232
 (define_split
 
34233
-  [(set (match_operand 0 "register_operand" "")
 
34234
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
34235
        (match_operator
 
34236
         3 "cris_commutative_orth_op"
 
34237
         [(match_operand 2 "memory_operand" "")
 
34238
@@ -4123,7 +4123,7 @@
 
34239
 ;; Call this op-split-swapped.
 
34240
 
 
34241
 (define_split
 
34242
-  [(set (match_operand 0 "register_operand" "")
 
34243
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
34244
        (match_operator
 
34245
         3 "cris_commutative_orth_op"
 
34246
         [(match_operand 1 "register_operand" "")
 
34247
@@ -4146,7 +4146,7 @@
 
34248
 ;; Call this op-split-swapped-rx=rz.
 
34249
 
 
34250
 (define_split
 
34251
-  [(set (match_operand 0 "register_operand" "")
 
34252
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
34253
        (match_operator
 
34254
         3 "cris_orthogonal_operator"
 
34255
         [(match_operand 2 "memory_operand" "")
 
34256
@@ -4555,10 +4555,11 @@
 
34257
 ;; We're not allowed to generate copies of registers with different mode
 
34258
 ;; until after reload; copying pseudos upsets reload.  CVS as of
 
34259
 ;; 2001-08-24, unwind-dw2-fde.c, _Unwind_Find_FDE ICE in
 
34260
-;; cselib_invalidate_regno.
 
34261
+;; cselib_invalidate_regno.  Also, don't do this for the stack-pointer,
 
34262
+;; as we don't want it set temporarily to an invalid value.
 
34263
 
 
34264
 (define_split ; indir_to_reg_split
 
34265
-  [(set (match_operand 0 "register_operand" "")
 
34266
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
34267
        (match_operand 1 "indirect_operand" ""))]
 
34268
   "reload_completed
 
34269
    && REG_P (operands[0])
 
34270
@@ -4574,7 +4575,7 @@
 
34271
 ;; As the above, but MOVS and MOVU.
 
34272
 
 
34273
 (define_split
 
34274
-  [(set (match_operand 0 "register_operand" "")
 
34275
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
34276
        (match_operator
 
34277
         4 "cris_extend_operator"
 
34278
         [(match_operand 1 "indirect_operand" "")]))]
 
34279
Index: gcc/config/cris/predicates.md
 
34280
===================================================================
 
34281
--- a/src/gcc/config/cris/predicates.md (.../tags/gcc_4_8_2_release)
 
34282
+++ b/src/gcc/config/cris/predicates.md (.../branches/gcc-4_8-branch)
 
34283
@@ -76,6 +76,10 @@
 
34284
            (match_test "cris_simple_address_operand (XEXP (op, 0),
 
34285
                                                      Pmode)"))))
 
34286
 
 
34287
+(define_predicate "cris_nonsp_register_operand"
 
34288
+  (and (match_operand 0 "register_operand")
 
34289
+       (match_test "op != stack_pointer_rtx")))
 
34290
+
 
34291
 ;; The caller needs to use :SI.
 
34292
 (define_predicate "cris_bdap_sign_extend_operand"
 
34293
 ; Disabled until <URL:http://gcc.gnu.org/ml/gcc-patches/2005-10/msg01376.html>
 
34294
Index: gcc/config/m68k/m68k.c
 
34295
===================================================================
 
34296
--- a/src/gcc/config/m68k/m68k.c        (.../tags/gcc_4_8_2_release)
 
34297
+++ b/src/gcc/config/m68k/m68k.c        (.../branches/gcc-4_8-branch)
 
34298
@@ -3325,12 +3325,12 @@
 
34299
        latehalf[1] = adjust_address (operands[1], SImode, 0);
 
34300
     }
 
34301
 
 
34302
-  /* If insn is effectively movd N(sp),-(sp) then we will do the
 
34303
-     high word first.  We should use the adjusted operand 1 (which is N+4(sp))
 
34304
-     for the low word as well, to compensate for the first decrement of sp.  */
 
34305
+  /* If insn is effectively movd N(REG),-(REG) then we will do the high
 
34306
+     word first.  We should use the adjusted operand 1 (which is N+4(REG))
 
34307
+     for the low word as well, to compensate for the first decrement of
 
34308
+     REG.  */
 
34309
   if (optype0 == PUSHOP
 
34310
-      && REGNO (XEXP (XEXP (operands[0], 0), 0)) == STACK_POINTER_REGNUM
 
34311
-      && reg_overlap_mentioned_p (stack_pointer_rtx, operands[1]))
 
34312
+      && reg_overlap_mentioned_p (XEXP (XEXP (operands[0], 0), 0), operands[1]))
 
34313
     operands[1] = middlehalf[1] = latehalf[1];
 
34314
 
 
34315
   /* For (set (reg:DI N) (mem:DI ... (reg:SI N) ...)),
 
34316
Index: gcc/config/aarch64/aarch64-simd.md
 
34317
===================================================================
 
34318
--- a/src/gcc/config/aarch64/aarch64-simd.md    (.../tags/gcc_4_8_2_release)
 
34319
+++ b/src/gcc/config/aarch64/aarch64-simd.md    (.../branches/gcc-4_8-branch)
 
34320
@@ -21,7 +21,7 @@
 
34321
 
 
34322
 ; Main data types used by the insntructions
 
34323
 
 
34324
-(define_attr "simd_mode" "unknown,none,V8QI,V16QI,V4HI,V8HI,V2SI,V4SI,V2DI,V2SF,V4SF,V2DF,OI,CI,XI,DI,DF,SI,HI,QI"
 
34325
+(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"
 
34326
   (const_string "unknown"))
 
34327
 
 
34328
 
 
34329
@@ -1548,12 +1548,12 @@
 
34330
 
 
34331
     case LTU:
 
34332
     case GEU:
 
34333
-      emit_insn (gen_aarch64_cmhs<mode> (mask, operands[4], operands[5]));
 
34334
+      emit_insn (gen_aarch64_cmgeu<mode> (mask, operands[4], operands[5]));
 
34335
       break;
 
34336
 
 
34337
     case LEU:
 
34338
     case GTU:
 
34339
-      emit_insn (gen_aarch64_cmhi<mode> (mask, operands[4], operands[5]));
 
34340
+      emit_insn (gen_aarch64_cmgtu<mode> (mask, operands[4], operands[5]));
 
34341
       break;
 
34342
 
 
34343
     case NE:
 
34344
@@ -3034,48 +3034,181 @@
 
34345
 )
 
34346
 
 
34347
 
 
34348
-;; cm(eq|ge|le|lt|gt)
 
34349
+;; cm(eq|ge|gt|lt|le)
 
34350
+;; Note, we have constraints for Dz and Z as different expanders
 
34351
+;; have different ideas of what should be passed to this pattern.
 
34352
 
 
34353
-(define_insn "aarch64_cm<cmp><mode>"
 
34354
+(define_insn "aarch64_cm<optab><mode>"
 
34355
   [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w,w")
 
34356
-        (unspec:<V_cmp_result>
 
34357
-         [(match_operand:VSDQ_I_DI 1 "register_operand" "w,w")
 
34358
-          (match_operand:VSDQ_I_DI 2 "aarch64_simd_reg_or_zero" "w,Z")]
 
34359
-          VCMP_S))]
 
34360
+       (neg:<V_cmp_result>
 
34361
+         (COMPARISONS:<V_cmp_result>
 
34362
+           (match_operand:VDQ 1 "register_operand" "w,w")
 
34363
+           (match_operand:VDQ 2 "aarch64_simd_reg_or_zero" "w,ZDz")
 
34364
+         )))]
 
34365
   "TARGET_SIMD"
 
34366
   "@
 
34367
-  cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>
 
34368
-  cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, #0"
 
34369
+  cm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>
 
34370
+  cm<optab>\t%<v>0<Vmtype>, %<v>1<Vmtype>, #0"
 
34371
   [(set_attr "simd_type" "simd_cmp")
 
34372
    (set_attr "simd_mode" "<MODE>")]
 
34373
 )
 
34374
 
 
34375
-;; cm(hs|hi|tst)
 
34376
+(define_insn_and_split "aarch64_cm<optab>di"
 
34377
+  [(set (match_operand:DI 0 "register_operand" "=w,w,r")
 
34378
+       (neg:DI
 
34379
+         (COMPARISONS:DI
 
34380
+           (match_operand:DI 1 "register_operand" "w,w,r")
 
34381
+           (match_operand:DI 2 "aarch64_simd_reg_or_zero" "w,ZDz,r")
 
34382
+         )))]
 
34383
+  "TARGET_SIMD"
 
34384
+  "@
 
34385
+  cm<n_optab>\t%d0, %d<cmp_1>, %d<cmp_2>
 
34386
+  cm<optab>\t%d0, %d1, #0
 
34387
+  #"
 
34388
+  "reload_completed
 
34389
+   /* We need to prevent the split from
 
34390
+      happening in the 'w' constraint cases.  */
 
34391
+   && GP_REGNUM_P (REGNO (operands[0]))
 
34392
+   && GP_REGNUM_P (REGNO (operands[1]))"
 
34393
+  [(set (reg:CC CC_REGNUM)
 
34394
+    (compare:CC
 
34395
+      (match_dup 1)
 
34396
+      (match_dup 2)))
 
34397
+  (set (match_dup 0)
 
34398
+    (neg:DI
 
34399
+      (COMPARISONS:DI
 
34400
+       (match_operand 3 "cc_register" "")
 
34401
+       (const_int 0))))]
 
34402
+  {
 
34403
+    enum machine_mode mode = SELECT_CC_MODE (<CMP>, operands[1], operands[2]);
 
34404
+    rtx cc_reg = aarch64_gen_compare_reg (<CMP>, operands[1], operands[2]);
 
34405
+    rtx comparison = gen_rtx_<CMP> (mode, operands[1], operands[2]);
 
34406
+    emit_insn (gen_cstoredi_neg (operands[0], comparison, cc_reg));
 
34407
+    DONE;
 
34408
+  }
 
34409
+  [(set_attr "simd_type" "simd_cmp")
 
34410
+   (set_attr "simd_mode" "DI")]
 
34411
+)
 
34412
 
 
34413
-(define_insn "aarch64_cm<cmp><mode>"
 
34414
+;; cm(hs|hi)
 
34415
+
 
34416
+(define_insn "aarch64_cm<optab><mode>"
 
34417
   [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w")
 
34418
-        (unspec:<V_cmp_result>
 
34419
-         [(match_operand:VSDQ_I_DI 1 "register_operand" "w")
 
34420
-          (match_operand:VSDQ_I_DI 2 "register_operand" "w")]
 
34421
-          VCMP_U))]
 
34422
+       (neg:<V_cmp_result>
 
34423
+         (UCOMPARISONS:<V_cmp_result>
 
34424
+           (match_operand:VDQ 1 "register_operand" "w")
 
34425
+           (match_operand:VDQ 2 "register_operand" "w")
 
34426
+         )))]
 
34427
   "TARGET_SIMD"
 
34428
-  "cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
 
34429
+  "cm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>"
 
34430
   [(set_attr "simd_type" "simd_cmp")
 
34431
    (set_attr "simd_mode" "<MODE>")]
 
34432
 )
 
34433
 
 
34434
-;; fcm(eq|ge|le|lt|gt)
 
34435
+(define_insn_and_split "aarch64_cm<optab>di"
 
34436
+  [(set (match_operand:DI 0 "register_operand" "=w,r")
 
34437
+       (neg:DI
 
34438
+         (UCOMPARISONS:DI
 
34439
+           (match_operand:DI 1 "register_operand" "w,r")
 
34440
+           (match_operand:DI 2 "aarch64_simd_reg_or_zero" "w,r")
 
34441
+         )))]
 
34442
+  "TARGET_SIMD"
 
34443
+  "@
 
34444
+  cm<n_optab>\t%d0, %d<cmp_1>, %d<cmp_2>
 
34445
+  #"
 
34446
+  "reload_completed
 
34447
+   /* We need to prevent the split from
 
34448
+      happening in the 'w' constraint cases.  */
 
34449
+   && GP_REGNUM_P (REGNO (operands[0]))
 
34450
+   && GP_REGNUM_P (REGNO (operands[1]))"
 
34451
+  [(set (reg:CC CC_REGNUM)
 
34452
+    (compare:CC
 
34453
+      (match_dup 1)
 
34454
+      (match_dup 2)))
 
34455
+  (set (match_dup 0)
 
34456
+    (neg:DI
 
34457
+      (UCOMPARISONS:DI
 
34458
+       (match_operand 3 "cc_register" "")
 
34459
+       (const_int 0))))]
 
34460
+  {
 
34461
+    enum machine_mode mode = SELECT_CC_MODE (<CMP>, operands[1], operands[2]);
 
34462
+    rtx cc_reg = aarch64_gen_compare_reg (<CMP>, operands[1], operands[2]);
 
34463
+    rtx comparison = gen_rtx_<CMP> (mode, operands[1], operands[2]);
 
34464
+    emit_insn (gen_cstoredi_neg (operands[0], comparison, cc_reg));
 
34465
+    DONE;
 
34466
+  }
 
34467
+  [(set_attr "simd_type" "simd_cmp")
 
34468
+   (set_attr "simd_mode" "DI")]
 
34469
+)
 
34470
 
 
34471
-(define_insn "aarch64_cm<cmp><mode>"
 
34472
+;; cmtst
 
34473
+
 
34474
+(define_insn "aarch64_cmtst<mode>"
 
34475
+  [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w")
 
34476
+       (neg:<V_cmp_result>
 
34477
+         (ne:<V_cmp_result>
 
34478
+           (and:VDQ
 
34479
+             (match_operand:VDQ 1 "register_operand" "w")
 
34480
+             (match_operand:VDQ 2 "register_operand" "w"))
 
34481
+           (vec_duplicate:<V_cmp_result> (const_int 0)))))]
 
34482
+  "TARGET_SIMD"
 
34483
+  "cmtst\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
 
34484
+  [(set_attr "simd_type" "simd_cmp")
 
34485
+   (set_attr "simd_mode" "<MODE>")]
 
34486
+)
 
34487
+
 
34488
+(define_insn_and_split "aarch64_cmtstdi"
 
34489
+  [(set (match_operand:DI 0 "register_operand" "=w,r")
 
34490
+       (neg:DI
 
34491
+         (ne:DI
 
34492
+           (and:DI
 
34493
+             (match_operand:DI 1 "register_operand" "w,r")
 
34494
+             (match_operand:DI 2 "register_operand" "w,r"))
 
34495
+           (const_int 0))))]
 
34496
+  "TARGET_SIMD"
 
34497
+  "@
 
34498
+  cmtst\t%d0, %d1, %d2
 
34499
+  #"
 
34500
+  "reload_completed
 
34501
+   /* We need to prevent the split from
 
34502
+      happening in the 'w' constraint cases.  */
 
34503
+   && GP_REGNUM_P (REGNO (operands[0]))
 
34504
+   && GP_REGNUM_P (REGNO (operands[1]))"
 
34505
+   [(set (reg:CC_NZ CC_REGNUM)
 
34506
+       (compare:CC_NZ
 
34507
+        (and:DI (match_dup 1)
 
34508
+                 (match_dup 2))
 
34509
+        (const_int 0)))
 
34510
+  (set (match_dup 0)
 
34511
+    (neg:DI
 
34512
+      (ne:DI
 
34513
+       (match_operand 3 "cc_register" "")
 
34514
+       (const_int 0))))]
 
34515
+  {
 
34516
+    rtx and_tree = gen_rtx_AND (DImode, operands[1], operands[2]);
 
34517
+    enum machine_mode mode = SELECT_CC_MODE (NE, and_tree, const0_rtx);
 
34518
+    rtx cc_reg = aarch64_gen_compare_reg (NE, and_tree, const0_rtx);
 
34519
+    rtx comparison = gen_rtx_NE (mode, and_tree, const0_rtx);
 
34520
+    emit_insn (gen_cstoredi_neg (operands[0], comparison, cc_reg));
 
34521
+    DONE;
 
34522
+  }
 
34523
+  [(set_attr "simd_type" "simd_cmp")
 
34524
+   (set_attr "simd_mode" "DI")]
 
34525
+)
 
34526
+
 
34527
+;; fcm(eq|ge|gt|le|lt)
 
34528
+
 
34529
+(define_insn "aarch64_cm<optab><mode>"
 
34530
   [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w,w")
 
34531
-       (unspec:<V_cmp_result>
 
34532
-         [(match_operand:VDQF 1 "register_operand" "w,w")
 
34533
-          (match_operand:VDQF 2 "aarch64_simd_reg_or_zero" "w,Dz")]
 
34534
-          VCMP_S))]
 
34535
+       (neg:<V_cmp_result>
 
34536
+         (COMPARISONS:<V_cmp_result>
 
34537
+           (match_operand:VALLF 1 "register_operand" "w,w")
 
34538
+           (match_operand:VALLF 2 "aarch64_simd_reg_or_zero" "w,YDz")
 
34539
+         )))]
 
34540
   "TARGET_SIMD"
 
34541
   "@
 
34542
-  fcm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>
 
34543
-  fcm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, 0"
 
34544
+  fcm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>
 
34545
+  fcm<optab>\t%<v>0<Vmtype>, %<v>1<Vmtype>, 0"
 
34546
   [(set_attr "simd_type" "simd_fcmp")
 
34547
    (set_attr "simd_mode" "<MODE>")]
 
34548
 )
 
34549
Index: gcc/config/aarch64/predicates.md
 
34550
===================================================================
 
34551
--- a/src/gcc/config/aarch64/predicates.md      (.../tags/gcc_4_8_2_release)
 
34552
+++ b/src/gcc/config/aarch64/predicates.md      (.../branches/gcc-4_8-branch)
 
34553
@@ -31,6 +31,11 @@
 
34554
        (ior (match_operand 0 "register_operand")
 
34555
            (match_test "op == const0_rtx"))))
 
34556
 
 
34557
+(define_predicate "aarch64_reg_or_fp_zero"
 
34558
+  (and (match_code "reg,subreg,const_double")
 
34559
+       (ior (match_operand 0 "register_operand")
 
34560
+           (match_test "aarch64_float_const_zero_rtx_p (op)"))))
 
34561
+
 
34562
 (define_predicate "aarch64_reg_zero_or_m1_or_1"
 
34563
   (and (match_code "reg,subreg,const_int")
 
34564
        (ior (match_operand 0 "register_operand")
 
34565
Index: gcc/config/aarch64/arm_neon.h
 
34566
===================================================================
 
34567
--- a/src/gcc/config/aarch64/arm_neon.h (.../tags/gcc_4_8_2_release)
 
34568
+++ b/src/gcc/config/aarch64/arm_neon.h (.../branches/gcc-4_8-branch)
 
34569
@@ -19551,7 +19551,7 @@
 
34570
 __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
 
34571
 vcge_u8 (uint8x8_t __a, uint8x8_t __b)
 
34572
 {
 
34573
-  return (uint8x8_t) __builtin_aarch64_cmhsv8qi ((int8x8_t) __a,
 
34574
+  return (uint8x8_t) __builtin_aarch64_cmgeuv8qi ((int8x8_t) __a,
 
34575
                                                 (int8x8_t) __b);
 
34576
 }
 
34577
 
 
34578
@@ -19558,7 +19558,7 @@
 
34579
 __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
 
34580
 vcge_u16 (uint16x4_t __a, uint16x4_t __b)
 
34581
 {
 
34582
-  return (uint16x4_t) __builtin_aarch64_cmhsv4hi ((int16x4_t) __a,
 
34583
+  return (uint16x4_t) __builtin_aarch64_cmgeuv4hi ((int16x4_t) __a,
 
34584
                                                  (int16x4_t) __b);
 
34585
 }
 
34586
 
 
34587
@@ -19565,7 +19565,7 @@
 
34588
 __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
 
34589
 vcge_u32 (uint32x2_t __a, uint32x2_t __b)
 
34590
 {
 
34591
-  return (uint32x2_t) __builtin_aarch64_cmhsv2si ((int32x2_t) __a,
 
34592
+  return (uint32x2_t) __builtin_aarch64_cmgeuv2si ((int32x2_t) __a,
 
34593
                                                  (int32x2_t) __b);
 
34594
 }
 
34595
 
 
34596
@@ -19572,7 +19572,7 @@
 
34597
 __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
 
34598
 vcge_u64 (uint64x1_t __a, uint64x1_t __b)
 
34599
 {
 
34600
-  return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __a,
 
34601
+  return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __a,
 
34602
                                                (int64x1_t) __b);
 
34603
 }
 
34604
 
 
34605
@@ -19603,7 +19603,7 @@
 
34606
 __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
 
34607
 vcgeq_u8 (uint8x16_t __a, uint8x16_t __b)
 
34608
 {
 
34609
-  return (uint8x16_t) __builtin_aarch64_cmhsv16qi ((int8x16_t) __a,
 
34610
+  return (uint8x16_t) __builtin_aarch64_cmgeuv16qi ((int8x16_t) __a,
 
34611
                                                   (int8x16_t) __b);
 
34612
 }
 
34613
 
 
34614
@@ -19610,7 +19610,7 @@
 
34615
 __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
 
34616
 vcgeq_u16 (uint16x8_t __a, uint16x8_t __b)
 
34617
 {
 
34618
-  return (uint16x8_t) __builtin_aarch64_cmhsv8hi ((int16x8_t) __a,
 
34619
+  return (uint16x8_t) __builtin_aarch64_cmgeuv8hi ((int16x8_t) __a,
 
34620
                                                  (int16x8_t) __b);
 
34621
 }
 
34622
 
 
34623
@@ -19617,7 +19617,7 @@
 
34624
 __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
 
34625
 vcgeq_u32 (uint32x4_t __a, uint32x4_t __b)
 
34626
 {
 
34627
-  return (uint32x4_t) __builtin_aarch64_cmhsv4si ((int32x4_t) __a,
 
34628
+  return (uint32x4_t) __builtin_aarch64_cmgeuv4si ((int32x4_t) __a,
 
34629
                                                  (int32x4_t) __b);
 
34630
 }
 
34631
 
 
34632
@@ -19624,7 +19624,7 @@
 
34633
 __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
 
34634
 vcgeq_u64 (uint64x2_t __a, uint64x2_t __b)
 
34635
 {
 
34636
-  return (uint64x2_t) __builtin_aarch64_cmhsv2di ((int64x2_t) __a,
 
34637
+  return (uint64x2_t) __builtin_aarch64_cmgeuv2di ((int64x2_t) __a,
 
34638
                                                  (int64x2_t) __b);
 
34639
 }
 
34640
 
 
34641
@@ -19637,7 +19637,7 @@
 
34642
 __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
 
34643
 vcged_u64 (uint64x1_t __a, uint64x1_t __b)
 
34644
 {
 
34645
-  return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __a,
 
34646
+  return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __a,
 
34647
                                                (int64x1_t) __b);
 
34648
 }
 
34649
 
 
34650
@@ -19676,7 +19676,7 @@
 
34651
 __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
 
34652
 vcgt_u8 (uint8x8_t __a, uint8x8_t __b)
 
34653
 {
 
34654
-  return (uint8x8_t) __builtin_aarch64_cmhiv8qi ((int8x8_t) __a,
 
34655
+  return (uint8x8_t) __builtin_aarch64_cmgtuv8qi ((int8x8_t) __a,
 
34656
                                                 (int8x8_t) __b);
 
34657
 }
 
34658
 
 
34659
@@ -19683,7 +19683,7 @@
 
34660
 __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
 
34661
 vcgt_u16 (uint16x4_t __a, uint16x4_t __b)
 
34662
 {
 
34663
-  return (uint16x4_t) __builtin_aarch64_cmhiv4hi ((int16x4_t) __a,
 
34664
+  return (uint16x4_t) __builtin_aarch64_cmgtuv4hi ((int16x4_t) __a,
 
34665
                                                  (int16x4_t) __b);
 
34666
 }
 
34667
 
 
34668
@@ -19690,7 +19690,7 @@
 
34669
 __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
 
34670
 vcgt_u32 (uint32x2_t __a, uint32x2_t __b)
 
34671
 {
 
34672
-  return (uint32x2_t) __builtin_aarch64_cmhiv2si ((int32x2_t) __a,
 
34673
+  return (uint32x2_t) __builtin_aarch64_cmgtuv2si ((int32x2_t) __a,
 
34674
                                                  (int32x2_t) __b);
 
34675
 }
 
34676
 
 
34677
@@ -19697,7 +19697,7 @@
 
34678
 __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
 
34679
 vcgt_u64 (uint64x1_t __a, uint64x1_t __b)
 
34680
 {
 
34681
-  return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __a,
 
34682
+  return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __a,
 
34683
                                                (int64x1_t) __b);
 
34684
 }
 
34685
 
 
34686
@@ -19728,7 +19728,7 @@
 
34687
 __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
 
34688
 vcgtq_u8 (uint8x16_t __a, uint8x16_t __b)
 
34689
 {
 
34690
-  return (uint8x16_t) __builtin_aarch64_cmhiv16qi ((int8x16_t) __a,
 
34691
+  return (uint8x16_t) __builtin_aarch64_cmgtuv16qi ((int8x16_t) __a,
 
34692
                                                   (int8x16_t) __b);
 
34693
 }
 
34694
 
 
34695
@@ -19735,7 +19735,7 @@
 
34696
 __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
 
34697
 vcgtq_u16 (uint16x8_t __a, uint16x8_t __b)
 
34698
 {
 
34699
-  return (uint16x8_t) __builtin_aarch64_cmhiv8hi ((int16x8_t) __a,
 
34700
+  return (uint16x8_t) __builtin_aarch64_cmgtuv8hi ((int16x8_t) __a,
 
34701
                                                  (int16x8_t) __b);
 
34702
 }
 
34703
 
 
34704
@@ -19742,7 +19742,7 @@
 
34705
 __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
 
34706
 vcgtq_u32 (uint32x4_t __a, uint32x4_t __b)
 
34707
 {
 
34708
-  return (uint32x4_t) __builtin_aarch64_cmhiv4si ((int32x4_t) __a,
 
34709
+  return (uint32x4_t) __builtin_aarch64_cmgtuv4si ((int32x4_t) __a,
 
34710
                                                  (int32x4_t) __b);
 
34711
 }
 
34712
 
 
34713
@@ -19749,7 +19749,7 @@
 
34714
 __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
 
34715
 vcgtq_u64 (uint64x2_t __a, uint64x2_t __b)
 
34716
 {
 
34717
-  return (uint64x2_t) __builtin_aarch64_cmhiv2di ((int64x2_t) __a,
 
34718
+  return (uint64x2_t) __builtin_aarch64_cmgtuv2di ((int64x2_t) __a,
 
34719
                                                  (int64x2_t) __b);
 
34720
 }
 
34721
 
 
34722
@@ -19762,7 +19762,7 @@
 
34723
 __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
 
34724
 vcgtd_u64 (uint64x1_t __a, uint64x1_t __b)
 
34725
 {
 
34726
-  return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __a,
 
34727
+  return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __a,
 
34728
                                                (int64x1_t) __b);
 
34729
 }
 
34730
 
 
34731
@@ -19801,7 +19801,7 @@
 
34732
 __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
 
34733
 vcle_u8 (uint8x8_t __a, uint8x8_t __b)
 
34734
 {
 
34735
-  return (uint8x8_t) __builtin_aarch64_cmhsv8qi ((int8x8_t) __b,
 
34736
+  return (uint8x8_t) __builtin_aarch64_cmgeuv8qi ((int8x8_t) __b,
 
34737
                                                 (int8x8_t) __a);
 
34738
 }
 
34739
 
 
34740
@@ -19808,7 +19808,7 @@
 
34741
 __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
 
34742
 vcle_u16 (uint16x4_t __a, uint16x4_t __b)
 
34743
 {
 
34744
-  return (uint16x4_t) __builtin_aarch64_cmhsv4hi ((int16x4_t) __b,
 
34745
+  return (uint16x4_t) __builtin_aarch64_cmgeuv4hi ((int16x4_t) __b,
 
34746
                                                  (int16x4_t) __a);
 
34747
 }
 
34748
 
 
34749
@@ -19815,7 +19815,7 @@
 
34750
 __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
 
34751
 vcle_u32 (uint32x2_t __a, uint32x2_t __b)
 
34752
 {
 
34753
-  return (uint32x2_t) __builtin_aarch64_cmhsv2si ((int32x2_t) __b,
 
34754
+  return (uint32x2_t) __builtin_aarch64_cmgeuv2si ((int32x2_t) __b,
 
34755
                                                  (int32x2_t) __a);
 
34756
 }
 
34757
 
 
34758
@@ -19822,7 +19822,7 @@
 
34759
 __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
 
34760
 vcle_u64 (uint64x1_t __a, uint64x1_t __b)
 
34761
 {
 
34762
-  return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __b,
 
34763
+  return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __b,
 
34764
                                                (int64x1_t) __a);
 
34765
 }
 
34766
 
 
34767
@@ -19853,7 +19853,7 @@
 
34768
 __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
 
34769
 vcleq_u8 (uint8x16_t __a, uint8x16_t __b)
 
34770
 {
 
34771
-  return (uint8x16_t) __builtin_aarch64_cmhsv16qi ((int8x16_t) __b,
 
34772
+  return (uint8x16_t) __builtin_aarch64_cmgeuv16qi ((int8x16_t) __b,
 
34773
                                                   (int8x16_t) __a);
 
34774
 }
 
34775
 
 
34776
@@ -19860,7 +19860,7 @@
 
34777
 __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
 
34778
 vcleq_u16 (uint16x8_t __a, uint16x8_t __b)
 
34779
 {
 
34780
-  return (uint16x8_t) __builtin_aarch64_cmhsv8hi ((int16x8_t) __b,
 
34781
+  return (uint16x8_t) __builtin_aarch64_cmgeuv8hi ((int16x8_t) __b,
 
34782
                                                  (int16x8_t) __a);
 
34783
 }
 
34784
 
 
34785
@@ -19867,7 +19867,7 @@
 
34786
 __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
 
34787
 vcleq_u32 (uint32x4_t __a, uint32x4_t __b)
 
34788
 {
 
34789
-  return (uint32x4_t) __builtin_aarch64_cmhsv4si ((int32x4_t) __b,
 
34790
+  return (uint32x4_t) __builtin_aarch64_cmgeuv4si ((int32x4_t) __b,
 
34791
                                                  (int32x4_t) __a);
 
34792
 }
 
34793
 
 
34794
@@ -19874,7 +19874,7 @@
 
34795
 __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
 
34796
 vcleq_u64 (uint64x2_t __a, uint64x2_t __b)
 
34797
 {
 
34798
-  return (uint64x2_t) __builtin_aarch64_cmhsv2di ((int64x2_t) __b,
 
34799
+  return (uint64x2_t) __builtin_aarch64_cmgeuv2di ((int64x2_t) __b,
 
34800
                                                  (int64x2_t) __a);
 
34801
 }
 
34802
 
 
34803
@@ -19919,7 +19919,7 @@
 
34804
 __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
 
34805
 vclt_u8 (uint8x8_t __a, uint8x8_t __b)
 
34806
 {
 
34807
-  return (uint8x8_t) __builtin_aarch64_cmhiv8qi ((int8x8_t) __b,
 
34808
+  return (uint8x8_t) __builtin_aarch64_cmgtuv8qi ((int8x8_t) __b,
 
34809
                                                 (int8x8_t) __a);
 
34810
 }
 
34811
 
 
34812
@@ -19926,7 +19926,7 @@
 
34813
 __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
 
34814
 vclt_u16 (uint16x4_t __a, uint16x4_t __b)
 
34815
 {
 
34816
-  return (uint16x4_t) __builtin_aarch64_cmhiv4hi ((int16x4_t) __b,
 
34817
+  return (uint16x4_t) __builtin_aarch64_cmgtuv4hi ((int16x4_t) __b,
 
34818
                                                  (int16x4_t) __a);
 
34819
 }
 
34820
 
 
34821
@@ -19933,7 +19933,7 @@
 
34822
 __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
 
34823
 vclt_u32 (uint32x2_t __a, uint32x2_t __b)
 
34824
 {
 
34825
-  return (uint32x2_t) __builtin_aarch64_cmhiv2si ((int32x2_t) __b,
 
34826
+  return (uint32x2_t) __builtin_aarch64_cmgtuv2si ((int32x2_t) __b,
 
34827
                                                  (int32x2_t) __a);
 
34828
 }
 
34829
 
 
34830
@@ -19940,7 +19940,7 @@
 
34831
 __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
 
34832
 vclt_u64 (uint64x1_t __a, uint64x1_t __b)
 
34833
 {
 
34834
-  return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __b,
 
34835
+  return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __b,
 
34836
                                                (int64x1_t) __a);
 
34837
 }
 
34838
 
 
34839
@@ -19971,7 +19971,7 @@
 
34840
 __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
 
34841
 vcltq_u8 (uint8x16_t __a, uint8x16_t __b)
 
34842
 {
 
34843
-  return (uint8x16_t) __builtin_aarch64_cmhiv16qi ((int8x16_t) __b,
 
34844
+  return (uint8x16_t) __builtin_aarch64_cmgtuv16qi ((int8x16_t) __b,
 
34845
                                                   (int8x16_t) __a);
 
34846
 }
 
34847
 
 
34848
@@ -19978,7 +19978,7 @@
 
34849
 __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
 
34850
 vcltq_u16 (uint16x8_t __a, uint16x8_t __b)
 
34851
 {
 
34852
-  return (uint16x8_t) __builtin_aarch64_cmhiv8hi ((int16x8_t) __b,
 
34853
+  return (uint16x8_t) __builtin_aarch64_cmgtuv8hi ((int16x8_t) __b,
 
34854
                                                  (int16x8_t) __a);
 
34855
 }
 
34856
 
 
34857
@@ -19985,7 +19985,7 @@
 
34858
 __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
 
34859
 vcltq_u32 (uint32x4_t __a, uint32x4_t __b)
 
34860
 {
 
34861
-  return (uint32x4_t) __builtin_aarch64_cmhiv4si ((int32x4_t) __b,
 
34862
+  return (uint32x4_t) __builtin_aarch64_cmgtuv4si ((int32x4_t) __b,
 
34863
                                                  (int32x4_t) __a);
 
34864
 }
 
34865
 
 
34866
@@ -19992,7 +19992,7 @@
 
34867
 __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
 
34868
 vcltq_u64 (uint64x2_t __a, uint64x2_t __b)
 
34869
 {
 
34870
-  return (uint64x2_t) __builtin_aarch64_cmhiv2di ((int64x2_t) __b,
 
34871
+  return (uint64x2_t) __builtin_aarch64_cmgtuv2di ((int64x2_t) __b,
 
34872
                                                  (int64x2_t) __a);
 
34873
 }
 
34874
 
 
34875
Index: gcc/config/aarch64/aarch64.md
 
34876
===================================================================
 
34877
--- a/src/gcc/config/aarch64/aarch64.md (.../tags/gcc_4_8_2_release)
 
34878
+++ b/src/gcc/config/aarch64/aarch64.md (.../branches/gcc-4_8-branch)
 
34879
@@ -2211,7 +2211,7 @@
 
34880
    (set_attr "mode" "SI")]
 
34881
 )
 
34882
 
 
34883
-(define_insn "*cstore<mode>_neg"
 
34884
+(define_insn "cstore<mode>_neg"
 
34885
   [(set (match_operand:ALLI 0 "register_operand" "=r")
 
34886
        (neg:ALLI (match_operator:ALLI 1 "aarch64_comparison_operator"
 
34887
                  [(match_operand 2 "cc_register" "") (const_int 0)])))]
 
34888
Index: gcc/config/aarch64/aarch64-simd-builtins.def
 
34889
===================================================================
 
34890
--- a/src/gcc/config/aarch64/aarch64-simd-builtins.def  (.../tags/gcc_4_8_2_release)
 
34891
+++ b/src/gcc/config/aarch64/aarch64-simd-builtins.def  (.../branches/gcc-4_8-branch)
 
34892
@@ -217,8 +217,8 @@
 
34893
   BUILTIN_VSDQ_I_DI (BINOP, cmle)
 
34894
   BUILTIN_VSDQ_I_DI (BINOP, cmlt)
 
34895
   /* Implemented by aarch64_cm<cmp><mode>.  */
 
34896
-  BUILTIN_VSDQ_I_DI (BINOP, cmhs)
 
34897
-  BUILTIN_VSDQ_I_DI (BINOP, cmhi)
 
34898
+  BUILTIN_VSDQ_I_DI (BINOP, cmgeu)
 
34899
+  BUILTIN_VSDQ_I_DI (BINOP, cmgtu)
 
34900
   BUILTIN_VSDQ_I_DI (BINOP, cmtst)
 
34901
 
 
34902
   /* Implemented by aarch64_<fmaxmin><mode>.  */
 
34903
Index: gcc/config/aarch64/aarch64.c
 
34904
===================================================================
 
34905
--- a/src/gcc/config/aarch64/aarch64.c  (.../tags/gcc_4_8_2_release)
 
34906
+++ b/src/gcc/config/aarch64/aarch64.c  (.../branches/gcc-4_8-branch)
 
34907
@@ -2274,7 +2274,7 @@
 
34908
       if (ncount < zcount)
 
34909
        {
 
34910
          emit_move_insn (gen_rtx_REG (Pmode, regnum),
 
34911
-                         GEN_INT ((~val) & 0xffff));
 
34912
+                         GEN_INT (val | ~(HOST_WIDE_INT) 0xffff));
 
34913
          tval = 0xffff;
 
34914
        }
 
34915
       else
 
34916
Index: gcc/config/aarch64/iterators.md
 
34917
===================================================================
 
34918
--- a/src/gcc/config/aarch64/iterators.md       (.../tags/gcc_4_8_2_release)
 
34919
+++ b/src/gcc/config/aarch64/iterators.md       (.../branches/gcc-4_8-branch)
 
34920
@@ -83,6 +83,9 @@
 
34921
 ;; Vector Float modes.
 
34922
 (define_mode_iterator VDQF [V2SF V4SF V2DF])
 
34923
 
 
34924
+;; All Float modes.
 
34925
+(define_mode_iterator VALLF [V2SF V4SF V2DF SF DF])
 
34926
+
 
34927
 ;; Vector Float modes with 2 elements.
 
34928
 (define_mode_iterator V2F [V2SF V2DF])
 
34929
 
 
34930
@@ -213,13 +216,6 @@
 
34931
     UNSPEC_URSHL       ; Used in aarch64-simd.md.
 
34932
     UNSPEC_SQRSHL      ; Used in aarch64-simd.md.
 
34933
     UNSPEC_UQRSHL      ; Used in aarch64-simd.md.
 
34934
-    UNSPEC_CMEQ                ; Used in aarch64-simd.md.
 
34935
-    UNSPEC_CMLE                ; Used in aarch64-simd.md.
 
34936
-    UNSPEC_CMLT                ; Used in aarch64-simd.md.
 
34937
-    UNSPEC_CMGE                ; Used in aarch64-simd.md.
 
34938
-    UNSPEC_CMGT                ; Used in aarch64-simd.md.
 
34939
-    UNSPEC_CMHS                ; Used in aarch64-simd.md.
 
34940
-    UNSPEC_CMHI                ; Used in aarch64-simd.md.
 
34941
     UNSPEC_SSLI                ; Used in aarch64-simd.md.
 
34942
     UNSPEC_USLI                ; Used in aarch64-simd.md.
 
34943
     UNSPEC_SSRI                ; Used in aarch64-simd.md.
 
34944
@@ -227,7 +223,6 @@
 
34945
     UNSPEC_SSHLL       ; Used in aarch64-simd.md.
 
34946
     UNSPEC_USHLL       ; Used in aarch64-simd.md.
 
34947
     UNSPEC_ADDP                ; Used in aarch64-simd.md.
 
34948
-    UNSPEC_CMTST       ; Used in aarch64-simd.md.
 
34949
     UNSPEC_FMAX                ; Used in aarch64-simd.md.
 
34950
     UNSPEC_FMIN                ; Used in aarch64-simd.md.
 
34951
     UNSPEC_BSL         ; Used in aarch64-simd.md.
 
34952
@@ -251,6 +246,7 @@
 
34953
 
 
34954
 ;; For scalar usage of vector/FP registers
 
34955
 (define_mode_attr v [(QI "b") (HI "h") (SI "s") (DI "d")
 
34956
+                   (SF "s") (DF "d")
 
34957
                    (V8QI "") (V16QI "")
 
34958
                    (V4HI "") (V8HI "")
 
34959
                    (V2SI "") (V4SI  "")
 
34960
@@ -305,7 +301,8 @@
 
34961
                         (V4SF ".4s") (V2DF ".2d")
 
34962
                         (DI   "")    (SI   "")
 
34963
                         (HI   "")    (QI   "")
 
34964
-                        (TI   "")])
 
34965
+                        (TI   "")    (SF   "")
 
34966
+                        (DF   "")])
 
34967
 
 
34968
 ;; Register suffix narrowed modes for VQN.
 
34969
 (define_mode_attr Vmntype [(V8HI ".8b") (V4SI ".4h")
 
34970
@@ -444,7 +441,8 @@
 
34971
                                (V2SI "V2SI") (V4SI  "V4SI")
 
34972
                                (DI   "DI")   (V2DI  "V2DI")
 
34973
                                (V2SF "V2SI") (V4SF  "V4SI")
 
34974
-                               (V2DF "V2DI")])
 
34975
+                               (V2DF "V2DI") (DF    "DI")
 
34976
+                               (SF   "SI")])
 
34977
 
 
34978
 ;; Lower case mode of results of comparison operations.
 
34979
 (define_mode_attr v_cmp_result [(V8QI "v8qi") (V16QI "v16qi")
 
34980
@@ -452,7 +450,8 @@
 
34981
                                (V2SI "v2si") (V4SI  "v4si")
 
34982
                                (DI   "di")   (V2DI  "v2di")
 
34983
                                (V2SF "v2si") (V4SF  "v4si")
 
34984
-                               (V2DF "v2di")])
 
34985
+                               (V2DF "v2di") (DF    "di")
 
34986
+                               (SF   "si")])
 
34987
 
 
34988
 ;; Vm for lane instructions is restricted to FP_LO_REGS.
 
34989
 (define_mode_attr vwx [(V4HI "x") (V8HI "x") (HI "x")
 
34990
@@ -543,6 +542,12 @@
 
34991
 ;; Code iterator for signed variants of vector saturating binary ops.
 
34992
 (define_code_iterator SBINQOPS [ss_plus ss_minus])
 
34993
 
 
34994
+;; Comparison operators for <F>CM.
 
34995
+(define_code_iterator COMPARISONS [lt le eq ge gt])
 
34996
+
 
34997
+;; Unsigned comparison operators.
 
34998
+(define_code_iterator UCOMPARISONS [ltu leu geu gtu])
 
34999
+
 
35000
 ;; -------------------------------------------------------------------
 
35001
 ;; Code Attributes
 
35002
 ;; -------------------------------------------------------------------
 
35003
@@ -571,8 +576,29 @@
 
35004
                         (eq "eq")
 
35005
                         (ne "ne")
 
35006
                         (lt "lt")
 
35007
-                        (ge "ge")])
 
35008
+                        (ge "ge")
 
35009
+                        (le "le")
 
35010
+                        (gt "gt")
 
35011
+                        (ltu "ltu")
 
35012
+                        (leu "leu")
 
35013
+                        (geu "geu")
 
35014
+                        (gtu "gtu")])
 
35015
 
 
35016
+;; For comparison operators we use the FCM* and CM* instructions.
 
35017
+;; As there are no CMLE or CMLT instructions which act on 3 vector
 
35018
+;; operands, we must use CMGE or CMGT and swap the order of the
 
35019
+;; source operands.
 
35020
+
 
35021
+(define_code_attr n_optab [(lt "gt") (le "ge") (eq "eq") (ge "ge") (gt "gt")
 
35022
+                          (ltu "hi") (leu "hs") (geu "hs") (gtu "hi")])
 
35023
+(define_code_attr cmp_1   [(lt "2") (le "2") (eq "1") (ge "1") (gt "1")
 
35024
+                          (ltu "2") (leu "2") (geu "1") (gtu "1")])
 
35025
+(define_code_attr cmp_2   [(lt "1") (le "1") (eq "2") (ge "2") (gt "2")
 
35026
+                          (ltu "1") (leu "1") (geu "2") (gtu "2")])
 
35027
+
 
35028
+(define_code_attr CMP [(lt "LT") (le "LE") (eq "EQ") (ge "GE") (gt "GT")
 
35029
+                          (ltu "LTU") (leu "LEU") (geu "GEU") (gtu "GTU")])
 
35030
+
 
35031
 ;; Optab prefix for sign/zero-extending operations
 
35032
 (define_code_attr su_optab [(sign_extend "") (zero_extend "u")
 
35033
                            (div "") (udiv "u")
 
35034
@@ -680,11 +706,6 @@
 
35035
                                UNSPEC_SQSHRN UNSPEC_UQSHRN
 
35036
                                UNSPEC_SQRSHRN UNSPEC_UQRSHRN])
 
35037
 
 
35038
-(define_int_iterator VCMP_S [UNSPEC_CMEQ UNSPEC_CMGE UNSPEC_CMGT
 
35039
-                            UNSPEC_CMLE UNSPEC_CMLT])
 
35040
-
 
35041
-(define_int_iterator VCMP_U [UNSPEC_CMHS UNSPEC_CMHI UNSPEC_CMTST])
 
35042
-
 
35043
 (define_int_iterator PERMUTE [UNSPEC_ZIP1 UNSPEC_ZIP2
 
35044
                              UNSPEC_TRN1 UNSPEC_TRN2
 
35045
                              UNSPEC_UZP1 UNSPEC_UZP2])
 
35046
@@ -768,12 +789,6 @@
 
35047
                         (UNSPEC_RADDHN2 "add")
 
35048
                         (UNSPEC_RSUBHN2 "sub")])
 
35049
 
 
35050
-(define_int_attr cmp [(UNSPEC_CMGE "ge") (UNSPEC_CMGT "gt")
 
35051
-                     (UNSPEC_CMLE "le") (UNSPEC_CMLT "lt")
 
35052
-                      (UNSPEC_CMEQ "eq")
 
35053
-                     (UNSPEC_CMHS "hs") (UNSPEC_CMHI "hi")
 
35054
-                     (UNSPEC_CMTST "tst")])
 
35055
-
 
35056
 (define_int_attr offsetlr [(UNSPEC_SSLI        "1") (UNSPEC_USLI "1")
 
35057
                           (UNSPEC_SSRI "0") (UNSPEC_USRI "0")])
 
35058
 
 
35059
Index: gcc/config/rs6000/rs6000.c
 
35060
===================================================================
 
35061
--- a/src/gcc/config/rs6000/rs6000.c    (.../tags/gcc_4_8_2_release)
 
35062
+++ b/src/gcc/config/rs6000/rs6000.c    (.../branches/gcc-4_8-branch)
 
35063
@@ -5428,12 +5428,13 @@
 
35064
       break;
 
35065
 
 
35066
     case TFmode:
 
35067
-    case TDmode:
 
35068
-    case TImode:
 
35069
       if (TARGET_E500_DOUBLE)
 
35070
        return (SPE_CONST_OFFSET_OK (offset)
 
35071
                && SPE_CONST_OFFSET_OK (offset + 8));
 
35072
+      /* fall through */
 
35073
 
 
35074
+    case TDmode:
 
35075
+    case TImode:
 
35076
       extra = 8;
 
35077
       if (!worst_case)
 
35078
        break;
 
35079
Index: gcc/config/rs6000/rs6000.md
 
35080
===================================================================
 
35081
--- a/src/gcc/config/rs6000/rs6000.md   (.../tags/gcc_4_8_2_release)
 
35082
+++ b/src/gcc/config/rs6000/rs6000.md   (.../branches/gcc-4_8-branch)
 
35083
@@ -2412,7 +2412,7 @@
 
35084
                             (match_operand:SI 2 "gpc_reg_operand" "r,r"))
 
35085
                    (const_int 0)))
 
35086
    (clobber (match_scratch:SI 3 "=r,r"))]
 
35087
-  ""
 
35088
+  "TARGET_32BIT"
 
35089
   "@
 
35090
    mullw. %3,%1,%2
 
35091
    #"
 
35092
@@ -2425,7 +2425,7 @@
 
35093
                             (match_operand:SI 2 "gpc_reg_operand" ""))
 
35094
                    (const_int 0)))
 
35095
    (clobber (match_scratch:SI 3 ""))]
 
35096
-  "reload_completed"
 
35097
+  "TARGET_32BIT && reload_completed"
 
35098
   [(set (match_dup 3)
 
35099
        (mult:SI (match_dup 1) (match_dup 2)))
 
35100
    (set (match_dup 0)
 
35101
@@ -2440,7 +2440,7 @@
 
35102
                    (const_int 0)))
 
35103
    (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
 
35104
        (mult:SI (match_dup 1) (match_dup 2)))]
 
35105
-  ""
 
35106
+  "TARGET_32BIT"
 
35107
   "@
 
35108
    mullw. %0,%1,%2
 
35109
    #"
 
35110
@@ -2454,7 +2454,7 @@
 
35111
                    (const_int 0)))
 
35112
    (set (match_operand:SI 0 "gpc_reg_operand" "")
 
35113
        (mult:SI (match_dup 1) (match_dup 2)))]
 
35114
-  "reload_completed"
 
35115
+  "TARGET_32BIT && reload_completed"
 
35116
   [(set (match_dup 0)
 
35117
        (mult:SI (match_dup 1) (match_dup 2)))
 
35118
    (set (match_dup 3)
 
35119
Index: gcc/config/tilepro/tilepro-c.c
 
35120
===================================================================
 
35121
--- a/src/gcc/config/tilepro/tilepro-c.c        (.../tags/gcc_4_8_2_release)
 
35122
+++ b/src/gcc/config/tilepro/tilepro-c.c        (.../branches/gcc-4_8-branch)
 
35123
@@ -44,6 +44,11 @@
 
35124
   builtin_define ("__tile_chip__=1");
 
35125
   builtin_define ("__tile_chip_rev__=0");
 
35126
 
 
35127
+  builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
 
35128
+  builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
 
35129
+  builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
 
35130
+  builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
 
35131
+
 
35132
   TILEPRO_CPU_CPP_ENDIAN_BUILTINS ();
 
35133
   GNU_USER_TARGET_OS_CPP_BUILTINS ();
 
35134
 }
 
35135
Index: gcc/config/tilepro/tilepro.c
 
35136
===================================================================
 
35137
--- a/src/gcc/config/tilepro/tilepro.c  (.../tags/gcc_4_8_2_release)
 
35138
+++ b/src/gcc/config/tilepro/tilepro.c  (.../branches/gcc-4_8-branch)
 
35139
@@ -3167,6 +3167,12 @@
 
35140
     }
 
35141
   if (!pat)
 
35142
     return NULL_RTX;
 
35143
+
 
35144
+  /* If we are generating a prefetch, tell the scheduler not to move
 
35145
+     it around.  */
 
35146
+  if (GET_CODE (pat) == PREFETCH)
 
35147
+    PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
 
35148
+
 
35149
   emit_insn (pat);
 
35150
 
 
35151
   if (nonvoid)
 
35152
Index: gcc/config/tilepro/tilepro.md
 
35153
===================================================================
 
35154
--- a/src/gcc/config/tilepro/tilepro.md (.../tags/gcc_4_8_2_release)
 
35155
+++ b/src/gcc/config/tilepro/tilepro.md (.../branches/gcc-4_8-branch)
 
35156
@@ -795,7 +795,7 @@
 
35157
 
 
35158
 (define_expand "ctzdi2"
 
35159
   [(set (match_operand:DI 0 "register_operand" "")
 
35160
-       (ctz:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
 
35161
+       (ctz:DI (match_operand:DI 1 "register_operand" "")))]
 
35162
   ""
 
35163
 {
 
35164
   rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, result;
 
35165
@@ -823,7 +823,7 @@
 
35166
 
 
35167
 (define_expand "clzdi2"
 
35168
   [(set (match_operand:DI 0 "register_operand" "")
 
35169
-       (clz:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
 
35170
+       (clz:DI (match_operand:DI 1 "register_operand" "")))]
 
35171
   ""
 
35172
 {
 
35173
   rtx lo, hi, clz_lo, clz_hi, clz_lo_plus_32, result;
 
35174
@@ -851,7 +851,7 @@
 
35175
 
 
35176
 (define_expand "ffsdi2"
 
35177
   [(set (match_operand:DI 0 "register_operand" "")
 
35178
-       (ffs:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
 
35179
+       (ffs:DI (match_operand:DI 1 "register_operand" "")))]
 
35180
   ""
 
35181
 {
 
35182
   rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, ctz, ctz_plus_1,ctz_cond;
 
35183
Index: gcc/config/arm/arm.c
 
35184
===================================================================
 
35185
--- a/src/gcc/config/arm/arm.c  (.../tags/gcc_4_8_2_release)
 
35186
+++ b/src/gcc/config/arm/arm.c  (.../branches/gcc-4_8-branch)
 
35187
@@ -5425,7 +5425,8 @@
 
35188
   if (!crtl->uses_pic_offset_table)
 
35189
     {
 
35190
       gcc_assert (can_create_pseudo_p ());
 
35191
-      if (arm_pic_register != INVALID_REGNUM)
 
35192
+      if (arm_pic_register != INVALID_REGNUM
 
35193
+         && !(TARGET_THUMB1 && arm_pic_register > LAST_LO_REGNUM))
 
35194
        {
 
35195
          if (!cfun->machine->pic_reg)
 
35196
            cfun->machine->pic_reg = gen_rtx_REG (Pmode, arm_pic_register);
 
35197
@@ -5451,7 +5452,12 @@
 
35198
              crtl->uses_pic_offset_table = 1;
 
35199
              start_sequence ();
 
35200
 
 
35201
-             arm_load_pic_register (0UL);
 
35202
+             if (TARGET_THUMB1 && arm_pic_register != INVALID_REGNUM
 
35203
+                 && arm_pic_register > LAST_LO_REGNUM)
 
35204
+               emit_move_insn (cfun->machine->pic_reg,
 
35205
+                               gen_rtx_REG (Pmode, arm_pic_register));
 
35206
+             else
 
35207
+               arm_load_pic_register (0UL);
 
35208
 
 
35209
              seq = get_insns ();
 
35210
              end_sequence ();
 
35211
@@ -5709,6 +5715,14 @@
 
35212
              emit_insn (gen_movsi (pic_offset_table_rtx, pic_tmp));
 
35213
              emit_insn (gen_pic_add_dot_plus_four (pic_reg, pic_reg, labelno));
 
35214
            }
 
35215
+         else if (arm_pic_register != INVALID_REGNUM
 
35216
+                  && arm_pic_register > LAST_LO_REGNUM
 
35217
+                  && REGNO (pic_reg) <= LAST_LO_REGNUM)
 
35218
+           {
 
35219
+             emit_insn (gen_pic_load_addr_unified (pic_reg, pic_rtx, labelno));
 
35220
+             emit_move_insn (gen_rtx_REG (Pmode, arm_pic_register), pic_reg);
 
35221
+             emit_use (gen_rtx_REG (Pmode, arm_pic_register));
 
35222
+           }
 
35223
          else
 
35224
            emit_insn (gen_pic_load_addr_unified (pic_reg, pic_rtx, labelno));
 
35225
        }
 
35226
@@ -21279,7 +21293,11 @@
 
35227
                                                    type_mode);
 
35228
             }
 
35229
 
 
35230
-          op[argc] = expand_normal (arg[argc]);
 
35231
+         /* Use EXPAND_MEMORY for NEON_ARG_MEMORY to ensure a MEM_P
 
35232
+            be returned.  */
 
35233
+         op[argc] = expand_expr (arg[argc], NULL_RTX, VOIDmode,
 
35234
+                                 (thisarg == NEON_ARG_MEMORY
 
35235
+                                  ? EXPAND_MEMORY : EXPAND_NORMAL));
 
35236
 
 
35237
           switch (thisarg)
 
35238
             {
 
35239
@@ -21298,6 +21316,9 @@
 
35240
               break;
 
35241
 
 
35242
             case NEON_ARG_MEMORY:
 
35243
+             /* Check if expand failed.  */
 
35244
+             if (op[argc] == const0_rtx)
 
35245
+               return 0;
 
35246
              gcc_assert (MEM_P (op[argc]));
 
35247
              PUT_MODE (op[argc], mode[argc]);
 
35248
              /* ??? arm_neon.h uses the same built-in functions for signed
 
35249
@@ -23555,6 +23576,7 @@
 
35250
   num_regs = bit_count (saved_regs_mask);
 
35251
   if ((offsets->outgoing_args != (1 + num_regs)) || cfun->calls_alloca)
 
35252
     {
 
35253
+      emit_insn (gen_blockage ());
 
35254
       /* Unwind the stack to just below the saved registers.  */
 
35255
       emit_insn (gen_addsi3 (stack_pointer_rtx,
 
35256
                              hard_frame_pointer_rtx,
 
35257
@@ -23583,8 +23605,8 @@
 
35258
 
 
35259
   if (crtl->calls_eh_return)
 
35260
     emit_insn (gen_addsi3 (stack_pointer_rtx,
 
35261
-               stack_pointer_rtx,
 
35262
-               GEN_INT (ARM_EH_STACKADJ_REGNUM)));
 
35263
+                          stack_pointer_rtx,
 
35264
+                          gen_rtx_REG (SImode, ARM_EH_STACKADJ_REGNUM)));
 
35265
 
 
35266
   if (IS_STACKALIGN (func_type))
 
35267
     /* Restore the original stack pointer.  Before prologue, the stack was
 
35268
Index: gcc/config/arm/arm.h
 
35269
===================================================================
 
35270
--- a/src/gcc/config/arm/arm.h  (.../tags/gcc_4_8_2_release)
 
35271
+++ b/src/gcc/config/arm/arm.h  (.../branches/gcc-4_8-branch)
 
35272
@@ -1213,11 +1213,15 @@
 
35273
    VFPv2.
 
35274
    In big-endian mode, modes greater than word size (i.e. DFmode) are stored in
 
35275
    VFP registers in little-endian order.  We can't describe that accurately to
 
35276
-   GCC, so avoid taking subregs of such values.  */
 
35277
-#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS)      \
 
35278
-  (TARGET_VFP && TARGET_BIG_END                                \
 
35279
-   && (GET_MODE_SIZE (FROM) > UNITS_PER_WORD           \
 
35280
-       || GET_MODE_SIZE (TO) > UNITS_PER_WORD)         \
 
35281
+   GCC, so avoid taking subregs of such values.
 
35282
+   The only exception is going from a 128-bit to a 64-bit type.  In that case
 
35283
+   the data layout happens to be consistent for big-endian, so we explicitly allow
 
35284
+   that case.  */
 
35285
+#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS)              \
 
35286
+  (TARGET_VFP && TARGET_BIG_END                                        \
 
35287
+   && !(GET_MODE_SIZE (FROM) == 16 && GET_MODE_SIZE (TO) == 8) \
 
35288
+   && (GET_MODE_SIZE (FROM) > UNITS_PER_WORD                   \
 
35289
+       || GET_MODE_SIZE (TO) > UNITS_PER_WORD)                 \
 
35290
    && reg_classes_intersect_p (VFP_REGS, (CLASS)))
 
35291
 
 
35292
 /* The class value for index registers, and the one for base regs.  */
 
35293
Index: gcc/config/arm/vfp.md
 
35294
===================================================================
 
35295
--- a/src/gcc/config/arm/vfp.md (.../tags/gcc_4_8_2_release)
 
35296
+++ b/src/gcc/config/arm/vfp.md (.../branches/gcc-4_8-branch)
 
35297
@@ -1264,6 +1264,7 @@
 
35298
   "TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
 
35299
   "vrint<vrint_variant>%?.<V_if_elem>\\t%<V_reg>0, %<V_reg>1"
 
35300
   [(set_attr "predicable" "<vrint_predicable>")
 
35301
+   (set_attr "conds" "<vrint_conds>")
 
35302
    (set_attr "type" "f_rint<vfp_type>")]
 
35303
 )
 
35304
 
 
35305
@@ -1280,7 +1281,8 @@
 
35306
                  (match_operand:SDF 2 "register_operand" "<F_constraint>")))]
 
35307
   "TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
 
35308
   "vmaxnm.<V_if_elem>\\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
 
35309
-  [(set_attr "type" "f_minmax<vfp_type>")]
 
35310
+  [(set_attr "type" "f_minmax<vfp_type>")
 
35311
+   (set_attr "conds" "unconditional")]
 
35312
 )
 
35313
 
 
35314
 (define_insn "smin<mode>3"
 
35315
@@ -1289,7 +1291,8 @@
 
35316
                  (match_operand:SDF 2 "register_operand" "<F_constraint>")))]
 
35317
   "TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
 
35318
   "vminnm.<V_if_elem>\\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
 
35319
-  [(set_attr "type" "f_minmax<vfp_type>")]
 
35320
+  [(set_attr "type" "f_minmax<vfp_type>")
 
35321
+   (set_attr "conds" "unconditional")]
 
35322
 )
 
35323
 
 
35324
 ;; Unimplemented insns:
 
35325
Index: gcc/config/arm/ldmstm.md
 
35326
===================================================================
 
35327
--- a/src/gcc/config/arm/ldmstm.md      (.../tags/gcc_4_8_2_release)
 
35328
+++ b/src/gcc/config/arm/ldmstm.md      (.../branches/gcc-4_8-branch)
 
35329
@@ -23,15 +23,15 @@
 
35330
 
 
35331
 (define_insn "*ldm4_ia"
 
35332
   [(match_parallel 0 "load_multiple_operation"
 
35333
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35334
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
35335
           (mem:SI (match_operand:SI 5 "s_register_operand" "rk")))
 
35336
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35337
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
35338
           (mem:SI (plus:SI (match_dup 5)
 
35339
                   (const_int 4))))
 
35340
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35341
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
35342
           (mem:SI (plus:SI (match_dup 5)
 
35343
                   (const_int 8))))
 
35344
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
35345
+     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
 
35346
           (mem:SI (plus:SI (match_dup 5)
 
35347
                   (const_int 12))))])]
 
35348
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
 
35349
@@ -41,15 +41,15 @@
 
35350
 
 
35351
 (define_insn "*thumb_ldm4_ia"
 
35352
   [(match_parallel 0 "load_multiple_operation"
 
35353
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35354
+    [(set (match_operand:SI 1 "low_register_operand" "")
 
35355
           (mem:SI (match_operand:SI 5 "s_register_operand" "l")))
 
35356
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35357
+     (set (match_operand:SI 2 "low_register_operand" "")
 
35358
           (mem:SI (plus:SI (match_dup 5)
 
35359
                   (const_int 4))))
 
35360
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35361
+     (set (match_operand:SI 3 "low_register_operand" "")
 
35362
           (mem:SI (plus:SI (match_dup 5)
 
35363
                   (const_int 8))))
 
35364
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
35365
+     (set (match_operand:SI 4 "low_register_operand" "")
 
35366
           (mem:SI (plus:SI (match_dup 5)
 
35367
                   (const_int 12))))])]
 
35368
   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
 
35369
@@ -60,15 +60,15 @@
 
35370
   [(match_parallel 0 "load_multiple_operation"
 
35371
     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
 
35372
           (plus:SI (match_dup 5) (const_int 16)))
 
35373
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35374
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
35375
           (mem:SI (match_dup 5)))
 
35376
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35377
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
35378
           (mem:SI (plus:SI (match_dup 5)
 
35379
                   (const_int 4))))
 
35380
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35381
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
35382
           (mem:SI (plus:SI (match_dup 5)
 
35383
                   (const_int 8))))
 
35384
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
35385
+     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
 
35386
           (mem:SI (plus:SI (match_dup 5)
 
35387
                   (const_int 12))))])]
 
35388
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
 
35389
@@ -80,15 +80,15 @@
 
35390
   [(match_parallel 0 "load_multiple_operation"
 
35391
     [(set (match_operand:SI 5 "s_register_operand" "+&l")
 
35392
           (plus:SI (match_dup 5) (const_int 16)))
 
35393
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35394
+     (set (match_operand:SI 1 "low_register_operand" "")
 
35395
           (mem:SI (match_dup 5)))
 
35396
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35397
+     (set (match_operand:SI 2 "low_register_operand" "")
 
35398
           (mem:SI (plus:SI (match_dup 5)
 
35399
                   (const_int 4))))
 
35400
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35401
+     (set (match_operand:SI 3 "low_register_operand" "")
 
35402
           (mem:SI (plus:SI (match_dup 5)
 
35403
                   (const_int 8))))
 
35404
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
35405
+     (set (match_operand:SI 4 "low_register_operand" "")
 
35406
           (mem:SI (plus:SI (match_dup 5)
 
35407
                   (const_int 12))))])]
 
35408
   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 5"
 
35409
@@ -98,13 +98,13 @@
 
35410
 (define_insn "*stm4_ia"
 
35411
   [(match_parallel 0 "store_multiple_operation"
 
35412
     [(set (mem:SI (match_operand:SI 5 "s_register_operand" "rk"))
 
35413
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
35414
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
35415
      (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
 
35416
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
35417
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
35418
      (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
 
35419
-          (match_operand:SI 3 "arm_hard_register_operand" ""))
 
35420
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
 
35421
      (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
 
35422
-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
 
35423
+          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
 
35424
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
 
35425
   "stm%(ia%)\t%5, {%1, %2, %3, %4}"
 
35426
   [(set_attr "type" "store4")
 
35427
@@ -115,13 +115,13 @@
 
35428
     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
 
35429
           (plus:SI (match_dup 5) (const_int 16)))
 
35430
      (set (mem:SI (match_dup 5))
 
35431
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
35432
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
35433
      (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
 
35434
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
35435
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
35436
      (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
 
35437
-          (match_operand:SI 3 "arm_hard_register_operand" ""))
 
35438
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
 
35439
      (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
 
35440
-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
 
35441
+          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
 
35442
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
 
35443
   "stm%(ia%)\t%5!, {%1, %2, %3, %4}"
 
35444
   [(set_attr "type" "store4")
 
35445
@@ -132,13 +132,13 @@
 
35446
     [(set (match_operand:SI 5 "s_register_operand" "+&l")
 
35447
           (plus:SI (match_dup 5) (const_int 16)))
 
35448
      (set (mem:SI (match_dup 5))
 
35449
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
35450
+          (match_operand:SI 1 "low_register_operand" ""))
 
35451
      (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
 
35452
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
35453
+          (match_operand:SI 2 "low_register_operand" ""))
 
35454
      (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
 
35455
-          (match_operand:SI 3 "arm_hard_register_operand" ""))
 
35456
+          (match_operand:SI 3 "low_register_operand" ""))
 
35457
      (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
 
35458
-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
 
35459
+          (match_operand:SI 4 "low_register_operand" ""))])]
 
35460
   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 5"
 
35461
   "stm%(ia%)\t%5!, {%1, %2, %3, %4}"
 
35462
   [(set_attr "type" "store4")])
 
35463
@@ -145,16 +145,16 @@
 
35464
 
 
35465
 (define_insn "*ldm4_ib"
 
35466
   [(match_parallel 0 "load_multiple_operation"
 
35467
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35468
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
35469
           (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
 
35470
                   (const_int 4))))
 
35471
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35472
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
35473
           (mem:SI (plus:SI (match_dup 5)
 
35474
                   (const_int 8))))
 
35475
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35476
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
35477
           (mem:SI (plus:SI (match_dup 5)
 
35478
                   (const_int 12))))
 
35479
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
35480
+     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
 
35481
           (mem:SI (plus:SI (match_dup 5)
 
35482
                   (const_int 16))))])]
 
35483
   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
 
35484
@@ -166,16 +166,16 @@
 
35485
   [(match_parallel 0 "load_multiple_operation"
 
35486
     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
 
35487
           (plus:SI (match_dup 5) (const_int 16)))
 
35488
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35489
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
35490
           (mem:SI (plus:SI (match_dup 5)
 
35491
                   (const_int 4))))
 
35492
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35493
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
35494
           (mem:SI (plus:SI (match_dup 5)
 
35495
                   (const_int 8))))
 
35496
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35497
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
35498
           (mem:SI (plus:SI (match_dup 5)
 
35499
                   (const_int 12))))
 
35500
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
35501
+     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
 
35502
           (mem:SI (plus:SI (match_dup 5)
 
35503
                   (const_int 16))))])]
 
35504
   "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
 
35505
@@ -186,13 +186,13 @@
 
35506
 (define_insn "*stm4_ib"
 
35507
   [(match_parallel 0 "store_multiple_operation"
 
35508
     [(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int 4)))
 
35509
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
35510
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
35511
      (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
 
35512
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
35513
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
35514
      (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
 
35515
-          (match_operand:SI 3 "arm_hard_register_operand" ""))
 
35516
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
 
35517
      (set (mem:SI (plus:SI (match_dup 5) (const_int 16)))
 
35518
-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
 
35519
+          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
 
35520
   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
 
35521
   "stm%(ib%)\t%5, {%1, %2, %3, %4}"
 
35522
   [(set_attr "type" "store4")
 
35523
@@ -203,13 +203,13 @@
 
35524
     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
 
35525
           (plus:SI (match_dup 5) (const_int 16)))
 
35526
      (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
 
35527
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
35528
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
35529
      (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
 
35530
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
35531
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
35532
      (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
 
35533
-          (match_operand:SI 3 "arm_hard_register_operand" ""))
 
35534
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
 
35535
      (set (mem:SI (plus:SI (match_dup 5) (const_int 16)))
 
35536
-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
 
35537
+          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
 
35538
   "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
 
35539
   "stm%(ib%)\t%5!, {%1, %2, %3, %4}"
 
35540
   [(set_attr "type" "store4")
 
35541
@@ -217,16 +217,16 @@
 
35542
 
 
35543
 (define_insn "*ldm4_da"
 
35544
   [(match_parallel 0 "load_multiple_operation"
 
35545
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35546
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
35547
           (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
 
35548
                   (const_int -12))))
 
35549
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35550
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
35551
           (mem:SI (plus:SI (match_dup 5)
 
35552
                   (const_int -8))))
 
35553
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35554
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
35555
           (mem:SI (plus:SI (match_dup 5)
 
35556
                   (const_int -4))))
 
35557
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
35558
+     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
 
35559
           (mem:SI (match_dup 5)))])]
 
35560
   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
 
35561
   "ldm%(da%)\t%5, {%1, %2, %3, %4}"
 
35562
@@ -237,16 +237,16 @@
 
35563
   [(match_parallel 0 "load_multiple_operation"
 
35564
     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
 
35565
           (plus:SI (match_dup 5) (const_int -16)))
 
35566
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35567
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
35568
           (mem:SI (plus:SI (match_dup 5)
 
35569
                   (const_int -12))))
 
35570
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35571
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
35572
           (mem:SI (plus:SI (match_dup 5)
 
35573
                   (const_int -8))))
 
35574
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35575
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
35576
           (mem:SI (plus:SI (match_dup 5)
 
35577
                   (const_int -4))))
 
35578
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
35579
+     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
 
35580
           (mem:SI (match_dup 5)))])]
 
35581
   "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
 
35582
   "ldm%(da%)\t%5!, {%1, %2, %3, %4}"
 
35583
@@ -256,13 +256,13 @@
 
35584
 (define_insn "*stm4_da"
 
35585
   [(match_parallel 0 "store_multiple_operation"
 
35586
     [(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int -12)))
 
35587
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
35588
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
35589
      (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
 
35590
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
35591
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
35592
      (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
 
35593
-          (match_operand:SI 3 "arm_hard_register_operand" ""))
 
35594
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
 
35595
      (set (mem:SI (match_dup 5))
 
35596
-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
 
35597
+          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
 
35598
   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
 
35599
   "stm%(da%)\t%5, {%1, %2, %3, %4}"
 
35600
   [(set_attr "type" "store4")
 
35601
@@ -273,13 +273,13 @@
 
35602
     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
 
35603
           (plus:SI (match_dup 5) (const_int -16)))
 
35604
      (set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
 
35605
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
35606
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
35607
      (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
 
35608
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
35609
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
35610
      (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
 
35611
-          (match_operand:SI 3 "arm_hard_register_operand" ""))
 
35612
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
 
35613
      (set (mem:SI (match_dup 5))
 
35614
-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
 
35615
+          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
 
35616
   "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
 
35617
   "stm%(da%)\t%5!, {%1, %2, %3, %4}"
 
35618
   [(set_attr "type" "store4")
 
35619
@@ -287,16 +287,16 @@
 
35620
 
 
35621
 (define_insn "*ldm4_db"
 
35622
   [(match_parallel 0 "load_multiple_operation"
 
35623
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35624
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
35625
           (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
 
35626
                   (const_int -16))))
 
35627
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35628
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
35629
           (mem:SI (plus:SI (match_dup 5)
 
35630
                   (const_int -12))))
 
35631
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35632
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
35633
           (mem:SI (plus:SI (match_dup 5)
 
35634
                   (const_int -8))))
 
35635
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
35636
+     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
 
35637
           (mem:SI (plus:SI (match_dup 5)
 
35638
                   (const_int -4))))])]
 
35639
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
 
35640
@@ -308,16 +308,16 @@
 
35641
   [(match_parallel 0 "load_multiple_operation"
 
35642
     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
 
35643
           (plus:SI (match_dup 5) (const_int -16)))
 
35644
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35645
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
35646
           (mem:SI (plus:SI (match_dup 5)
 
35647
                   (const_int -16))))
 
35648
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35649
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
35650
           (mem:SI (plus:SI (match_dup 5)
 
35651
                   (const_int -12))))
 
35652
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35653
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
35654
           (mem:SI (plus:SI (match_dup 5)
 
35655
                   (const_int -8))))
 
35656
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
35657
+     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
 
35658
           (mem:SI (plus:SI (match_dup 5)
 
35659
                   (const_int -4))))])]
 
35660
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
 
35661
@@ -328,13 +328,13 @@
 
35662
 (define_insn "*stm4_db"
 
35663
   [(match_parallel 0 "store_multiple_operation"
 
35664
     [(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int -16)))
 
35665
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
35666
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
35667
      (set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
 
35668
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
35669
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
35670
      (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
 
35671
-          (match_operand:SI 3 "arm_hard_register_operand" ""))
 
35672
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
 
35673
      (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
 
35674
-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
 
35675
+          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
 
35676
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
 
35677
   "stm%(db%)\t%5, {%1, %2, %3, %4}"
 
35678
   [(set_attr "type" "store4")
 
35679
@@ -345,13 +345,13 @@
 
35680
     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
 
35681
           (plus:SI (match_dup 5) (const_int -16)))
 
35682
      (set (mem:SI (plus:SI (match_dup 5) (const_int -16)))
 
35683
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
35684
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
35685
      (set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
 
35686
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
35687
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
35688
      (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
 
35689
-          (match_operand:SI 3 "arm_hard_register_operand" ""))
 
35690
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
 
35691
      (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
 
35692
-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
 
35693
+          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
 
35694
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
 
35695
   "stm%(db%)\t%5!, {%1, %2, %3, %4}"
 
35696
   [(set_attr "type" "store4")
 
35697
@@ -466,12 +466,12 @@
 
35698
 
 
35699
 (define_insn "*ldm3_ia"
 
35700
   [(match_parallel 0 "load_multiple_operation"
 
35701
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35702
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
35703
           (mem:SI (match_operand:SI 4 "s_register_operand" "rk")))
 
35704
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35705
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
35706
           (mem:SI (plus:SI (match_dup 4)
 
35707
                   (const_int 4))))
 
35708
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35709
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
35710
           (mem:SI (plus:SI (match_dup 4)
 
35711
                   (const_int 8))))])]
 
35712
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
 
35713
@@ -481,12 +481,12 @@
 
35714
 
 
35715
 (define_insn "*thumb_ldm3_ia"
 
35716
   [(match_parallel 0 "load_multiple_operation"
 
35717
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35718
+    [(set (match_operand:SI 1 "low_register_operand" "")
 
35719
           (mem:SI (match_operand:SI 4 "s_register_operand" "l")))
 
35720
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35721
+     (set (match_operand:SI 2 "low_register_operand" "")
 
35722
           (mem:SI (plus:SI (match_dup 4)
 
35723
                   (const_int 4))))
 
35724
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35725
+     (set (match_operand:SI 3 "low_register_operand" "")
 
35726
           (mem:SI (plus:SI (match_dup 4)
 
35727
                   (const_int 8))))])]
 
35728
   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
 
35729
@@ -497,12 +497,12 @@
 
35730
   [(match_parallel 0 "load_multiple_operation"
 
35731
     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
 
35732
           (plus:SI (match_dup 4) (const_int 12)))
 
35733
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35734
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
35735
           (mem:SI (match_dup 4)))
 
35736
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35737
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
35738
           (mem:SI (plus:SI (match_dup 4)
 
35739
                   (const_int 4))))
 
35740
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35741
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
35742
           (mem:SI (plus:SI (match_dup 4)
 
35743
                   (const_int 8))))])]
 
35744
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
 
35745
@@ -514,12 +514,12 @@
 
35746
   [(match_parallel 0 "load_multiple_operation"
 
35747
     [(set (match_operand:SI 4 "s_register_operand" "+&l")
 
35748
           (plus:SI (match_dup 4) (const_int 12)))
 
35749
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35750
+     (set (match_operand:SI 1 "low_register_operand" "")
 
35751
           (mem:SI (match_dup 4)))
 
35752
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35753
+     (set (match_operand:SI 2 "low_register_operand" "")
 
35754
           (mem:SI (plus:SI (match_dup 4)
 
35755
                   (const_int 4))))
 
35756
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35757
+     (set (match_operand:SI 3 "low_register_operand" "")
 
35758
           (mem:SI (plus:SI (match_dup 4)
 
35759
                   (const_int 8))))])]
 
35760
   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
 
35761
@@ -529,11 +529,11 @@
 
35762
 (define_insn "*stm3_ia"
 
35763
   [(match_parallel 0 "store_multiple_operation"
 
35764
     [(set (mem:SI (match_operand:SI 4 "s_register_operand" "rk"))
 
35765
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
35766
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
35767
      (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
 
35768
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
35769
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
35770
      (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
 
35771
-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
 
35772
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
 
35773
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
 
35774
   "stm%(ia%)\t%4, {%1, %2, %3}"
 
35775
   [(set_attr "type" "store3")
 
35776
@@ -544,11 +544,11 @@
 
35777
     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
 
35778
           (plus:SI (match_dup 4) (const_int 12)))
 
35779
      (set (mem:SI (match_dup 4))
 
35780
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
35781
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
35782
      (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
 
35783
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
35784
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
35785
      (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
 
35786
-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
 
35787
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
 
35788
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
 
35789
   "stm%(ia%)\t%4!, {%1, %2, %3}"
 
35790
   [(set_attr "type" "store3")
 
35791
@@ -559,11 +559,11 @@
 
35792
     [(set (match_operand:SI 4 "s_register_operand" "+&l")
 
35793
           (plus:SI (match_dup 4) (const_int 12)))
 
35794
      (set (mem:SI (match_dup 4))
 
35795
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
35796
+          (match_operand:SI 1 "low_register_operand" ""))
 
35797
      (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
 
35798
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
35799
+          (match_operand:SI 2 "low_register_operand" ""))
 
35800
      (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
 
35801
-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
 
35802
+          (match_operand:SI 3 "low_register_operand" ""))])]
 
35803
   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
 
35804
   "stm%(ia%)\t%4!, {%1, %2, %3}"
 
35805
   [(set_attr "type" "store3")])
 
35806
@@ -570,13 +570,13 @@
 
35807
 
 
35808
 (define_insn "*ldm3_ib"
 
35809
   [(match_parallel 0 "load_multiple_operation"
 
35810
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35811
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
35812
           (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
 
35813
                   (const_int 4))))
 
35814
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35815
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
35816
           (mem:SI (plus:SI (match_dup 4)
 
35817
                   (const_int 8))))
 
35818
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35819
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
35820
           (mem:SI (plus:SI (match_dup 4)
 
35821
                   (const_int 12))))])]
 
35822
   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
 
35823
@@ -588,13 +588,13 @@
 
35824
   [(match_parallel 0 "load_multiple_operation"
 
35825
     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
 
35826
           (plus:SI (match_dup 4) (const_int 12)))
 
35827
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35828
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
35829
           (mem:SI (plus:SI (match_dup 4)
 
35830
                   (const_int 4))))
 
35831
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35832
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
35833
           (mem:SI (plus:SI (match_dup 4)
 
35834
                   (const_int 8))))
 
35835
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35836
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
35837
           (mem:SI (plus:SI (match_dup 4)
 
35838
                   (const_int 12))))])]
 
35839
   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
 
35840
@@ -605,11 +605,11 @@
 
35841
 (define_insn "*stm3_ib"
 
35842
   [(match_parallel 0 "store_multiple_operation"
 
35843
     [(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int 4)))
 
35844
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
35845
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
35846
      (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
 
35847
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
35848
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
35849
      (set (mem:SI (plus:SI (match_dup 4) (const_int 12)))
 
35850
-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
 
35851
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
 
35852
   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
 
35853
   "stm%(ib%)\t%4, {%1, %2, %3}"
 
35854
   [(set_attr "type" "store3")
 
35855
@@ -620,11 +620,11 @@
 
35856
     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
 
35857
           (plus:SI (match_dup 4) (const_int 12)))
 
35858
      (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
 
35859
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
35860
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
35861
      (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
 
35862
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
35863
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
35864
      (set (mem:SI (plus:SI (match_dup 4) (const_int 12)))
 
35865
-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
 
35866
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
 
35867
   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
 
35868
   "stm%(ib%)\t%4!, {%1, %2, %3}"
 
35869
   [(set_attr "type" "store3")
 
35870
@@ -632,13 +632,13 @@
 
35871
 
 
35872
 (define_insn "*ldm3_da"
 
35873
   [(match_parallel 0 "load_multiple_operation"
 
35874
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35875
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
35876
           (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
 
35877
                   (const_int -8))))
 
35878
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35879
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
35880
           (mem:SI (plus:SI (match_dup 4)
 
35881
                   (const_int -4))))
 
35882
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35883
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
35884
           (mem:SI (match_dup 4)))])]
 
35885
   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
 
35886
   "ldm%(da%)\t%4, {%1, %2, %3}"
 
35887
@@ -649,13 +649,13 @@
 
35888
   [(match_parallel 0 "load_multiple_operation"
 
35889
     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
 
35890
           (plus:SI (match_dup 4) (const_int -12)))
 
35891
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35892
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
35893
           (mem:SI (plus:SI (match_dup 4)
 
35894
                   (const_int -8))))
 
35895
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35896
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
35897
           (mem:SI (plus:SI (match_dup 4)
 
35898
                   (const_int -4))))
 
35899
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35900
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
35901
           (mem:SI (match_dup 4)))])]
 
35902
   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
 
35903
   "ldm%(da%)\t%4!, {%1, %2, %3}"
 
35904
@@ -665,11 +665,11 @@
 
35905
 (define_insn "*stm3_da"
 
35906
   [(match_parallel 0 "store_multiple_operation"
 
35907
     [(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int -8)))
 
35908
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
35909
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
35910
      (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
 
35911
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
35912
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
35913
      (set (mem:SI (match_dup 4))
 
35914
-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
 
35915
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
 
35916
   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
 
35917
   "stm%(da%)\t%4, {%1, %2, %3}"
 
35918
   [(set_attr "type" "store3")
 
35919
@@ -680,11 +680,11 @@
 
35920
     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
 
35921
           (plus:SI (match_dup 4) (const_int -12)))
 
35922
      (set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
 
35923
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
35924
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
35925
      (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
 
35926
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
35927
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
35928
      (set (mem:SI (match_dup 4))
 
35929
-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
 
35930
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
 
35931
   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
 
35932
   "stm%(da%)\t%4!, {%1, %2, %3}"
 
35933
   [(set_attr "type" "store3")
 
35934
@@ -692,13 +692,13 @@
 
35935
 
 
35936
 (define_insn "*ldm3_db"
 
35937
   [(match_parallel 0 "load_multiple_operation"
 
35938
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35939
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
35940
           (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
 
35941
                   (const_int -12))))
 
35942
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35943
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
35944
           (mem:SI (plus:SI (match_dup 4)
 
35945
                   (const_int -8))))
 
35946
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35947
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
35948
           (mem:SI (plus:SI (match_dup 4)
 
35949
                   (const_int -4))))])]
 
35950
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
 
35951
@@ -710,13 +710,13 @@
 
35952
   [(match_parallel 0 "load_multiple_operation"
 
35953
     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
 
35954
           (plus:SI (match_dup 4) (const_int -12)))
 
35955
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
35956
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
35957
           (mem:SI (plus:SI (match_dup 4)
 
35958
                   (const_int -12))))
 
35959
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
35960
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
35961
           (mem:SI (plus:SI (match_dup 4)
 
35962
                   (const_int -8))))
 
35963
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
35964
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
35965
           (mem:SI (plus:SI (match_dup 4)
 
35966
                   (const_int -4))))])]
 
35967
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
 
35968
@@ -727,11 +727,11 @@
 
35969
 (define_insn "*stm3_db"
 
35970
   [(match_parallel 0 "store_multiple_operation"
 
35971
     [(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int -12)))
 
35972
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
35973
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
35974
      (set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
 
35975
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
35976
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
35977
      (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
 
35978
-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
 
35979
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
 
35980
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
 
35981
   "stm%(db%)\t%4, {%1, %2, %3}"
 
35982
   [(set_attr "type" "store3")
 
35983
@@ -742,11 +742,11 @@
 
35984
     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
 
35985
           (plus:SI (match_dup 4) (const_int -12)))
 
35986
      (set (mem:SI (plus:SI (match_dup 4) (const_int -12)))
 
35987
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
35988
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
35989
      (set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
 
35990
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
35991
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
35992
      (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
 
35993
-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
 
35994
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
 
35995
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
 
35996
   "stm%(db%)\t%4!, {%1, %2, %3}"
 
35997
   [(set_attr "type" "store3")
 
35998
@@ -847,9 +847,9 @@
 
35999
 
 
36000
 (define_insn "*ldm2_ia"
 
36001
   [(match_parallel 0 "load_multiple_operation"
 
36002
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
36003
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
36004
           (mem:SI (match_operand:SI 3 "s_register_operand" "rk")))
 
36005
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
36006
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
36007
           (mem:SI (plus:SI (match_dup 3)
 
36008
                   (const_int 4))))])]
 
36009
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
 
36010
@@ -859,9 +859,9 @@
 
36011
 
 
36012
 (define_insn "*thumb_ldm2_ia"
 
36013
   [(match_parallel 0 "load_multiple_operation"
 
36014
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
36015
+    [(set (match_operand:SI 1 "low_register_operand" "")
 
36016
           (mem:SI (match_operand:SI 3 "s_register_operand" "l")))
 
36017
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
36018
+     (set (match_operand:SI 2 "low_register_operand" "")
 
36019
           (mem:SI (plus:SI (match_dup 3)
 
36020
                   (const_int 4))))])]
 
36021
   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 2"
 
36022
@@ -872,9 +872,9 @@
 
36023
   [(match_parallel 0 "load_multiple_operation"
 
36024
     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
 
36025
           (plus:SI (match_dup 3) (const_int 8)))
 
36026
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
36027
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
36028
           (mem:SI (match_dup 3)))
 
36029
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
36030
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
36031
           (mem:SI (plus:SI (match_dup 3)
 
36032
                   (const_int 4))))])]
 
36033
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
 
36034
@@ -886,9 +886,9 @@
 
36035
   [(match_parallel 0 "load_multiple_operation"
 
36036
     [(set (match_operand:SI 3 "s_register_operand" "+&l")
 
36037
           (plus:SI (match_dup 3) (const_int 8)))
 
36038
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
36039
+     (set (match_operand:SI 1 "low_register_operand" "")
 
36040
           (mem:SI (match_dup 3)))
 
36041
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
36042
+     (set (match_operand:SI 2 "low_register_operand" "")
 
36043
           (mem:SI (plus:SI (match_dup 3)
 
36044
                   (const_int 4))))])]
 
36045
   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
 
36046
@@ -898,9 +898,9 @@
 
36047
 (define_insn "*stm2_ia"
 
36048
   [(match_parallel 0 "store_multiple_operation"
 
36049
     [(set (mem:SI (match_operand:SI 3 "s_register_operand" "rk"))
 
36050
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
36051
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
36052
      (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
 
36053
-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
 
36054
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
 
36055
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
 
36056
   "stm%(ia%)\t%3, {%1, %2}"
 
36057
   [(set_attr "type" "store2")
 
36058
@@ -911,9 +911,9 @@
 
36059
     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
 
36060
           (plus:SI (match_dup 3) (const_int 8)))
 
36061
      (set (mem:SI (match_dup 3))
 
36062
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
36063
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
36064
      (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
 
36065
-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
 
36066
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
 
36067
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
 
36068
   "stm%(ia%)\t%3!, {%1, %2}"
 
36069
   [(set_attr "type" "store2")
 
36070
@@ -924,9 +924,9 @@
 
36071
     [(set (match_operand:SI 3 "s_register_operand" "+&l")
 
36072
           (plus:SI (match_dup 3) (const_int 8)))
 
36073
      (set (mem:SI (match_dup 3))
 
36074
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
36075
+          (match_operand:SI 1 "low_register_operand" ""))
 
36076
      (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
 
36077
-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
 
36078
+          (match_operand:SI 2 "low_register_operand" ""))])]
 
36079
   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
 
36080
   "stm%(ia%)\t%3!, {%1, %2}"
 
36081
   [(set_attr "type" "store2")])
 
36082
@@ -933,10 +933,10 @@
 
36083
 
 
36084
 (define_insn "*ldm2_ib"
 
36085
   [(match_parallel 0 "load_multiple_operation"
 
36086
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
36087
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
36088
           (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
 
36089
                   (const_int 4))))
 
36090
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
36091
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
36092
           (mem:SI (plus:SI (match_dup 3)
 
36093
                   (const_int 8))))])]
 
36094
   "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
 
36095
@@ -948,10 +948,10 @@
 
36096
   [(match_parallel 0 "load_multiple_operation"
 
36097
     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
 
36098
           (plus:SI (match_dup 3) (const_int 8)))
 
36099
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
36100
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
36101
           (mem:SI (plus:SI (match_dup 3)
 
36102
                   (const_int 4))))
 
36103
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
36104
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
36105
           (mem:SI (plus:SI (match_dup 3)
 
36106
                   (const_int 8))))])]
 
36107
   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
 
36108
@@ -962,9 +962,9 @@
 
36109
 (define_insn "*stm2_ib"
 
36110
   [(match_parallel 0 "store_multiple_operation"
 
36111
     [(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int 4)))
 
36112
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
36113
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
36114
      (set (mem:SI (plus:SI (match_dup 3) (const_int 8)))
 
36115
-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
 
36116
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
 
36117
   "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
 
36118
   "stm%(ib%)\t%3, {%1, %2}"
 
36119
   [(set_attr "type" "store2")
 
36120
@@ -975,9 +975,9 @@
 
36121
     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
 
36122
           (plus:SI (match_dup 3) (const_int 8)))
 
36123
      (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
 
36124
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
36125
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
36126
      (set (mem:SI (plus:SI (match_dup 3) (const_int 8)))
 
36127
-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
 
36128
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
 
36129
   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
 
36130
   "stm%(ib%)\t%3!, {%1, %2}"
 
36131
   [(set_attr "type" "store2")
 
36132
@@ -985,10 +985,10 @@
 
36133
 
 
36134
 (define_insn "*ldm2_da"
 
36135
   [(match_parallel 0 "load_multiple_operation"
 
36136
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
36137
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
36138
           (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
 
36139
                   (const_int -4))))
 
36140
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
36141
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
36142
           (mem:SI (match_dup 3)))])]
 
36143
   "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
 
36144
   "ldm%(da%)\t%3, {%1, %2}"
 
36145
@@ -999,10 +999,10 @@
 
36146
   [(match_parallel 0 "load_multiple_operation"
 
36147
     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
 
36148
           (plus:SI (match_dup 3) (const_int -8)))
 
36149
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
36150
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
36151
           (mem:SI (plus:SI (match_dup 3)
 
36152
                   (const_int -4))))
 
36153
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
36154
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
36155
           (mem:SI (match_dup 3)))])]
 
36156
   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
 
36157
   "ldm%(da%)\t%3!, {%1, %2}"
 
36158
@@ -1012,9 +1012,9 @@
 
36159
 (define_insn "*stm2_da"
 
36160
   [(match_parallel 0 "store_multiple_operation"
 
36161
     [(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int -4)))
 
36162
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
36163
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
36164
      (set (mem:SI (match_dup 3))
 
36165
-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
 
36166
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
 
36167
   "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
 
36168
   "stm%(da%)\t%3, {%1, %2}"
 
36169
   [(set_attr "type" "store2")
 
36170
@@ -1025,9 +1025,9 @@
 
36171
     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
 
36172
           (plus:SI (match_dup 3) (const_int -8)))
 
36173
      (set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
 
36174
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
36175
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
36176
      (set (mem:SI (match_dup 3))
 
36177
-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
 
36178
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
 
36179
   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
 
36180
   "stm%(da%)\t%3!, {%1, %2}"
 
36181
   [(set_attr "type" "store2")
 
36182
@@ -1035,10 +1035,10 @@
 
36183
 
 
36184
 (define_insn "*ldm2_db"
 
36185
   [(match_parallel 0 "load_multiple_operation"
 
36186
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
36187
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
36188
           (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
 
36189
                   (const_int -8))))
 
36190
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
36191
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
36192
           (mem:SI (plus:SI (match_dup 3)
 
36193
                   (const_int -4))))])]
 
36194
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
 
36195
@@ -1050,10 +1050,10 @@
 
36196
   [(match_parallel 0 "load_multiple_operation"
 
36197
     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
 
36198
           (plus:SI (match_dup 3) (const_int -8)))
 
36199
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
36200
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
36201
           (mem:SI (plus:SI (match_dup 3)
 
36202
                   (const_int -8))))
 
36203
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
36204
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
36205
           (mem:SI (plus:SI (match_dup 3)
 
36206
                   (const_int -4))))])]
 
36207
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
 
36208
@@ -1064,9 +1064,9 @@
 
36209
 (define_insn "*stm2_db"
 
36210
   [(match_parallel 0 "store_multiple_operation"
 
36211
     [(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int -8)))
 
36212
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
36213
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
36214
      (set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
 
36215
-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
 
36216
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
 
36217
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
 
36218
   "stm%(db%)\t%3, {%1, %2}"
 
36219
   [(set_attr "type" "store2")
 
36220
@@ -1077,9 +1077,9 @@
 
36221
     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
 
36222
           (plus:SI (match_dup 3) (const_int -8)))
 
36223
      (set (mem:SI (plus:SI (match_dup 3) (const_int -8)))
 
36224
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
36225
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
36226
      (set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
 
36227
-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
 
36228
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
 
36229
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
 
36230
   "stm%(db%)\t%3!, {%1, %2}"
 
36231
   [(set_attr "type" "store2")
 
36232
Index: gcc/config/arm/predicates.md
 
36233
===================================================================
 
36234
--- a/src/gcc/config/arm/predicates.md  (.../tags/gcc_4_8_2_release)
 
36235
+++ b/src/gcc/config/arm/predicates.md  (.../branches/gcc-4_8-branch)
 
36236
@@ -31,11 +31,11 @@
 
36237
              || REGNO_REG_CLASS (REGNO (op)) != NO_REGS));
 
36238
 })
 
36239
 
 
36240
-;; Any hard register.
 
36241
-(define_predicate "arm_hard_register_operand"
 
36242
+;; Any general register.
 
36243
+(define_predicate "arm_hard_general_register_operand"
 
36244
   (match_code "reg")
 
36245
 {
 
36246
-  return REGNO (op) < FIRST_PSEUDO_REGISTER;
 
36247
+  return REGNO (op) <= LAST_ARM_REGNUM;
 
36248
 })
 
36249
 
 
36250
 ;; A low register.
 
36251
@@ -76,6 +76,12 @@
 
36252
                  && REGNO_REG_CLASS (REGNO (op)) == VFP_REGS)));
 
36253
 })
 
36254
 
 
36255
+(define_predicate "vfp_hard_register_operand"
 
36256
+  (match_code "reg")
 
36257
+{
 
36258
+  return (IS_VFP_REGNUM (REGNO (op)));
 
36259
+})
 
36260
+
 
36261
 (define_predicate "zero_operand"
 
36262
   (and (match_code "const_int,const_double,const_vector")
 
36263
        (match_test "op == CONST0_RTX (mode)")))
 
36264
Index: gcc/config/arm/arm-ldmstm.ml
 
36265
===================================================================
 
36266
--- a/src/gcc/config/arm/arm-ldmstm.ml  (.../tags/gcc_4_8_2_release)
 
36267
+++ b/src/gcc/config/arm/arm-ldmstm.ml  (.../branches/gcc-4_8-branch)
 
36268
@@ -67,10 +67,13 @@
 
36269
     Printf.sprintf ("(match_operand:SI %d \"s_register_operand\" \"%s%s\")")
 
36270
       (nregs + 1) (inout_constr op_type) (constr thumb)
 
36271
 
 
36272
+let reg_predicate thumb =
 
36273
+  if thumb then "low_register_operand" else "arm_hard_general_register_operand"
 
36274
+
 
36275
 let write_ldm_set thumb nregs offset opnr first =
 
36276
   let indent = "     " in
 
36277
   Printf.printf "%s" (if first then "    [" else indent);
 
36278
-  Printf.printf "(set (match_operand:SI %d \"arm_hard_register_operand\" \"\")\n" opnr;
 
36279
+  Printf.printf "(set (match_operand:SI %d \"%s\" \"\")\n" opnr (reg_predicate thumb);
 
36280
   Printf.printf "%s     (mem:SI " indent;
 
36281
   begin if offset != 0 then Printf.printf "(plus:SI " end;
 
36282
   Printf.printf "%s" (destreg nregs first IN thumb);
 
36283
@@ -84,7 +87,7 @@
 
36284
   begin if offset != 0 then Printf.printf "(plus:SI " end;
 
36285
   Printf.printf "%s" (destreg nregs first IN thumb);
 
36286
   begin if offset != 0 then Printf.printf " (const_int %d))" offset end;
 
36287
-  Printf.printf ")\n%s     (match_operand:SI %d \"arm_hard_register_operand\" \"\"))" indent opnr 
 
36288
+  Printf.printf ")\n%s     (match_operand:SI %d \"%s\" \"\"))" indent opnr (reg_predicate thumb)
 
36289
 
 
36290
 let write_ldm_peep_set extra_indent nregs opnr first =
 
36291
   let indent = "   " ^ extra_indent in
 
36292
Index: gcc/config/arm/iterators.md
 
36293
===================================================================
 
36294
--- a/src/gcc/config/arm/iterators.md   (.../tags/gcc_4_8_2_release)
 
36295
+++ b/src/gcc/config/arm/iterators.md   (.../branches/gcc-4_8-branch)
 
36296
@@ -493,6 +493,10 @@
 
36297
                                   (UNSPEC_VRINTA "no") (UNSPEC_VRINTM "no")
 
36298
                                   (UNSPEC_VRINTR "yes") (UNSPEC_VRINTX "yes")])
 
36299
 
 
36300
+(define_int_attr vrint_conds [(UNSPEC_VRINTZ "nocond") (UNSPEC_VRINTP "unconditional")
 
36301
+                              (UNSPEC_VRINTA "unconditional") (UNSPEC_VRINTM "unconditional")
 
36302
+                              (UNSPEC_VRINTR "nocond") (UNSPEC_VRINTX "nocond")])
 
36303
+
 
36304
 (define_int_attr nvrint_variant [(UNSPEC_NVRINTZ "z") (UNSPEC_NVRINTP "p")
 
36305
                                 (UNSPEC_NVRINTA "a") (UNSPEC_NVRINTM "m")
 
36306
                                 (UNSPEC_NVRINTX "x") (UNSPEC_NVRINTN "n")])
 
36307
Index: gcc/config/arm/arm.md
 
36308
===================================================================
 
36309
--- a/src/gcc/config/arm/arm.md (.../tags/gcc_4_8_2_release)
 
36310
+++ b/src/gcc/config/arm/arm.md (.../branches/gcc-4_8-branch)
 
36311
@@ -11036,7 +11036,7 @@
 
36312
     [(set (match_operand:SI 1 "s_register_operand" "+rk")
 
36313
           (plus:SI (match_dup 1)
 
36314
                    (match_operand:SI 2 "const_int_operand" "I")))
 
36315
-     (set (match_operand:DF 3 "arm_hard_register_operand" "")
 
36316
+     (set (match_operand:DF 3 "vfp_hard_register_operand" "")
 
36317
           (mem:DF (match_dup 1)))])]
 
36318
   "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
 
36319
   "*
 
36320
@@ -11270,7 +11270,9 @@
 
36321
             (match_operand:SI 1 "" "")
 
36322
             (match_operand:SI 2 "" ""))]
 
36323
   "TARGET_32BIT && arm_arch5e"
 
36324
-  "pld\\t%a0")
 
36325
+  "pld\\t%a0"
 
36326
+  [(set_attr "type" "load1")]
 
36327
+)
 
36328
 
 
36329
 ;; General predication pattern
 
36330
 
 
36331
Index: gcc/config/pa/pa.c
 
36332
===================================================================
 
36333
--- a/src/gcc/config/pa/pa.c    (.../tags/gcc_4_8_2_release)
 
36334
+++ b/src/gcc/config/pa/pa.c    (.../branches/gcc-4_8-branch)
 
36335
@@ -912,9 +912,12 @@
 
36336
 legitimize_tls_address (rtx addr)
 
36337
 {
 
36338
   rtx ret, insn, tmp, t1, t2, tp;
 
36339
-  enum tls_model model = SYMBOL_REF_TLS_MODEL (addr);
 
36340
 
 
36341
-  switch (model) 
 
36342
+  /* Currently, we can't handle anything but a SYMBOL_REF.  */
 
36343
+  if (GET_CODE (addr) != SYMBOL_REF)
 
36344
+    return addr;
 
36345
+
 
36346
+  switch (SYMBOL_REF_TLS_MODEL (addr)) 
 
36347
     {
 
36348
       case TLS_MODEL_GLOBAL_DYNAMIC:
 
36349
        tmp = gen_reg_rtx (Pmode);
 
36350
@@ -1035,7 +1038,7 @@
 
36351
       && !REG_POINTER (XEXP (x, 1)))
 
36352
     return gen_rtx_PLUS (Pmode, XEXP (x, 1), XEXP (x, 0));
 
36353
 
 
36354
-  if (PA_SYMBOL_REF_TLS_P (x))
 
36355
+  if (pa_tls_referenced_p (x))
 
36356
     return legitimize_tls_address (x);
 
36357
   else if (flag_pic)
 
36358
     return legitimize_pic_address (x, mode, gen_reg_rtx (Pmode));
 
36359
@@ -1916,9 +1919,10 @@
 
36360
      not consider them legitimate constants.  Loop optimizations can
 
36361
      call the emit_move_xxx with one as a source.  */
 
36362
   if ((GET_CODE (operand1) != HIGH && immediate_operand (operand1, mode))
 
36363
+      || (GET_CODE (operand1) == HIGH
 
36364
+         && symbolic_operand (XEXP (operand1, 0), mode))
 
36365
       || function_label_operand (operand1, VOIDmode)
 
36366
-      || (GET_CODE (operand1) == HIGH
 
36367
-         && symbolic_operand (XEXP (operand1, 0), mode)))
 
36368
+      || pa_tls_referenced_p (operand1))
 
36369
     {
 
36370
       int ishighonly = 0;
 
36371
 
 
36372
@@ -2625,7 +2629,7 @@
 
36373
   if (optype0 == REGOP)
 
36374
     latehalf[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
 
36375
   else if (optype0 == OFFSOP)
 
36376
-    latehalf[0] = adjust_address (operands[0], SImode, 4);
 
36377
+    latehalf[0] = adjust_address_nv (operands[0], SImode, 4);
 
36378
   else
 
36379
     latehalf[0] = operands[0];
 
36380
 
 
36381
@@ -2632,7 +2636,7 @@
 
36382
   if (optype1 == REGOP)
 
36383
     latehalf[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
 
36384
   else if (optype1 == OFFSOP)
 
36385
-    latehalf[1] = adjust_address (operands[1], SImode, 4);
 
36386
+    latehalf[1] = adjust_address_nv (operands[1], SImode, 4);
 
36387
   else if (optype1 == CNSTOP)
 
36388
     split_double (operands[1], &operands[1], &latehalf[1]);
 
36389
   else
 
36390
@@ -7539,7 +7543,7 @@
 
36391
       if (!TARGET_LONG_CALLS && distance < MAX_PCREL17F_OFFSET)
 
36392
        return 8;
 
36393
 
 
36394
-      if (TARGET_LONG_ABS_CALL && !flag_pic)
 
36395
+      if (!flag_pic)
 
36396
        return 12;
 
36397
 
 
36398
       return 24;
 
36399
@@ -8104,7 +8108,8 @@
 
36400
     return 12;
 
36401
 
 
36402
   if (TARGET_FAST_INDIRECT_CALLS
 
36403
-      || (!TARGET_PORTABLE_RUNTIME
 
36404
+      || (!TARGET_LONG_CALLS
 
36405
+         && !TARGET_PORTABLE_RUNTIME
 
36406
          && ((TARGET_PA_20 && !TARGET_SOM && distance < 7600000)
 
36407
              || distance < MAX_PCREL17F_OFFSET)))
 
36408
     return 8;
 
36409
@@ -10397,7 +10402,7 @@
 
36410
   /* TLS_MODEL_GLOBAL_DYNAMIC and TLS_MODEL_LOCAL_DYNAMIC are not
 
36411
      legitimate constants.  The other variants can't be handled by
 
36412
      the move patterns after reload starts.  */
 
36413
-  if (PA_SYMBOL_REF_TLS_P (x))
 
36414
+  if (pa_tls_referenced_p (x))
 
36415
     return false;
 
36416
 
 
36417
   if (TARGET_64BIT && GET_CODE (x) == CONST_DOUBLE)
 
36418
@@ -10522,13 +10527,13 @@
 
36419
 
 
36420
          /* When INT14_OK_STRICT is false, a secondary reload is needed
 
36421
             to adjust the displacement of SImode and DImode floating point
 
36422
-            instructions.  So, we return false when STRICT is true.  We
 
36423
+            instructions but this may fail when the register also needs
 
36424
+            reloading.  So, we return false when STRICT is true.  We
 
36425
             also reject long displacements for float mode addresses since
 
36426
             the majority of accesses will use floating point instructions
 
36427
             that don't support 14-bit offsets.  */
 
36428
          if (!INT14_OK_STRICT
 
36429
-             && reload_in_progress
 
36430
-             && strict
 
36431
+             && (strict || !(reload_in_progress || reload_completed))
 
36432
              && mode != QImode
 
36433
              && mode != HImode)
 
36434
            return false;
 
36435
@@ -10588,8 +10593,7 @@
 
36436
            return true;
 
36437
 
 
36438
          if (!INT14_OK_STRICT
 
36439
-             && reload_in_progress
 
36440
-             && strict
 
36441
+             && (strict || !(reload_in_progress || reload_completed))
 
36442
              && mode != QImode
 
36443
              && mode != HImode)
 
36444
            return false;
 
36445
Index: gcc/config/pa/pa.h
 
36446
===================================================================
 
36447
--- a/src/gcc/config/pa/pa.h    (.../tags/gcc_4_8_2_release)
 
36448
+++ b/src/gcc/config/pa/pa.h    (.../branches/gcc-4_8-branch)
 
36449
@@ -784,9 +784,9 @@
 
36450
 
 
36451
 #define MAX_REGS_PER_ADDRESS 2
 
36452
 
 
36453
-/* Non-TLS symbolic references.  */
 
36454
-#define PA_SYMBOL_REF_TLS_P(RTX) \
 
36455
-  (GET_CODE (RTX) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (RTX) != 0)
 
36456
+/* TLS symbolic reference.  */
 
36457
+#define PA_SYMBOL_REF_TLS_P(X) \
 
36458
+  (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (X) != 0)
 
36459
 
 
36460
 /* Recognize any constant value that is a valid address except
 
36461
    for symbolic addresses.  We get better CSE by rejecting them
 
36462
@@ -796,7 +796,8 @@
 
36463
 #define CONSTANT_ADDRESS_P(X) \
 
36464
   ((GET_CODE (X) == LABEL_REF                                          \
 
36465
    || (GET_CODE (X) == SYMBOL_REF && !SYMBOL_REF_TLS_MODEL (X))                \
 
36466
-   || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST               \
 
36467
+   || GET_CODE (X) == CONST_INT                                                \
 
36468
+   || (GET_CODE (X) == CONST && !pa_tls_referenced_p (X))              \
 
36469
    || GET_CODE (X) == HIGH)                                            \
 
36470
    && (reload_in_progress || reload_completed                          \
 
36471
        || ! pa_symbolic_expression_p (X)))
 
36472
Index: gcc/config/mips/driver-native.c
 
36473
===================================================================
 
36474
--- a/src/gcc/config/mips/driver-native.c       (.../tags/gcc_4_8_2_release)
 
36475
+++ b/src/gcc/config/mips/driver-native.c       (.../branches/gcc-4_8-branch)
 
36476
@@ -58,11 +58,17 @@
 
36477
     if (strncmp (buf, "cpu model", sizeof ("cpu model") - 1) == 0)
 
36478
       {
 
36479
        if (strstr (buf, "Godson2 V0.2") != NULL
 
36480
-           || strstr (buf, "Loongson-2 V0.2") != NULL)
 
36481
+           || strstr (buf, "Loongson-2 V0.2") != NULL
 
36482
+           || strstr (buf, "Loongson-2E") != NULL)
 
36483
          cpu = "loongson2e";
 
36484
        else if (strstr (buf, "Godson2 V0.3") != NULL
 
36485
-                || strstr (buf, "Loongson-2 V0.3") != NULL)
 
36486
+                || strstr (buf, "Loongson-2 V0.3") != NULL
 
36487
+                || strstr (buf, "Loongson-2F") != NULL)
 
36488
          cpu = "loongson2f";
 
36489
+       else if (strstr (buf, "Godson3 V0.5") != NULL
 
36490
+                || strstr (buf, "Loongson-3 V0.5") != NULL
 
36491
+                || strstr (buf, "Loongson-3A") != NULL)
 
36492
+         cpu = "loongson3a";
 
36493
        else if (strstr (buf, "SiByte SB1") != NULL)
 
36494
          cpu = "sb1";
 
36495
        else if (strstr (buf, "R5000") != NULL)
 
36496
Index: gcc/config/mips/mips.md
 
36497
===================================================================
 
36498
--- a/src/gcc/config/mips/mips.md       (.../tags/gcc_4_8_2_release)
 
36499
+++ b/src/gcc/config/mips/mips.md       (.../branches/gcc-4_8-branch)
 
36500
@@ -73,6 +73,11 @@
 
36501
   UNSPEC_STORE_LEFT
 
36502
   UNSPEC_STORE_RIGHT
 
36503
 
 
36504
+  ;; Integer operations that are too cumbersome to describe directly.
 
36505
+  UNSPEC_WSBH
 
36506
+  UNSPEC_DSBH
 
36507
+  UNSPEC_DSHD
 
36508
+
 
36509
   ;; Floating-point moves.
 
36510
   UNSPEC_LOAD_LOW
 
36511
   UNSPEC_LOAD_HIGH
 
36512
@@ -1294,20 +1299,32 @@
 
36513
 
 
36514
 ;; Combiner patterns for unsigned byte-add.
 
36515
 
 
36516
-(define_insn "*baddu_si"
 
36517
+(define_insn "*baddu_si_eb"
 
36518
   [(set (match_operand:SI 0 "register_operand" "=d")
 
36519
         (zero_extend:SI
 
36520
-        (plus:QI (match_operand:QI 1 "register_operand" "d")
 
36521
-                 (match_operand:QI 2 "register_operand" "d"))))]
 
36522
-  "ISA_HAS_BADDU"
 
36523
+        (subreg:QI
 
36524
+         (plus:SI (match_operand:SI 1 "register_operand" "d")
 
36525
+                  (match_operand:SI 2 "register_operand" "d")) 3)))]
 
36526
+  "ISA_HAS_BADDU && BYTES_BIG_ENDIAN"
 
36527
   "baddu\\t%0,%1,%2"
 
36528
   [(set_attr "alu_type" "add")])
 
36529
 
 
36530
+(define_insn "*baddu_si_el"
 
36531
+  [(set (match_operand:SI 0 "register_operand" "=d")
 
36532
+        (zero_extend:SI
 
36533
+        (subreg:QI
 
36534
+         (plus:SI (match_operand:SI 1 "register_operand" "d")
 
36535
+                  (match_operand:SI 2 "register_operand" "d")) 0)))]
 
36536
+  "ISA_HAS_BADDU && !BYTES_BIG_ENDIAN"
 
36537
+  "baddu\\t%0,%1,%2"
 
36538
+  [(set_attr "alu_type" "add")])
 
36539
+
 
36540
 (define_insn "*baddu_di<mode>"
 
36541
   [(set (match_operand:GPR 0 "register_operand" "=d")
 
36542
         (zero_extend:GPR
 
36543
-        (plus:QI (truncate:QI (match_operand:DI 1 "register_operand" "d"))
 
36544
-                 (truncate:QI (match_operand:DI 2 "register_operand" "d")))))]
 
36545
+        (truncate:QI
 
36546
+         (plus:DI (match_operand:DI 1 "register_operand" "d")
 
36547
+                  (match_operand:DI 2 "register_operand" "d")))))]
 
36548
   "ISA_HAS_BADDU && TARGET_64BIT"
 
36549
   "baddu\\t%0,%1,%2"
 
36550
   [(set_attr "alu_type" "add")])
 
36551
@@ -5367,6 +5384,56 @@
 
36552
 }
 
36553
   [(set_attr "type" "shift")
 
36554
    (set_attr "mode" "<MODE>")])
 
36555
+
 
36556
+(define_insn "bswaphi2"
 
36557
+  [(set (match_operand:HI 0 "register_operand" "=d")
 
36558
+       (bswap:HI (match_operand:HI 1 "register_operand" "d")))]
 
36559
+  "ISA_HAS_WSBH"
 
36560
+  "wsbh\t%0,%1"
 
36561
+  [(set_attr "type" "shift")])
 
36562
+
 
36563
+(define_insn_and_split "bswapsi2"
 
36564
+  [(set (match_operand:SI 0 "register_operand" "=d")
 
36565
+       (bswap:SI (match_operand:SI 1 "register_operand" "d")))]
 
36566
+  "ISA_HAS_WSBH && ISA_HAS_ROR"
 
36567
+  "#"
 
36568
+  ""
 
36569
+  [(set (match_dup 0) (unspec:SI [(match_dup 1)] UNSPEC_WSBH))
 
36570
+   (set (match_dup 0) (rotatert:SI (match_dup 0) (const_int 16)))]
 
36571
+  ""
 
36572
+  [(set_attr "length" "8")])
 
36573
+
 
36574
+(define_insn_and_split "bswapdi2"
 
36575
+  [(set (match_operand:DI 0 "register_operand" "=d")
 
36576
+       (bswap:DI (match_operand:DI 1 "register_operand" "d")))]
 
36577
+  "TARGET_64BIT && ISA_HAS_WSBH"
 
36578
+  "#"
 
36579
+  ""
 
36580
+  [(set (match_dup 0) (unspec:DI [(match_dup 1)] UNSPEC_DSBH))
 
36581
+   (set (match_dup 0) (unspec:DI [(match_dup 0)] UNSPEC_DSHD))]
 
36582
+  ""
 
36583
+  [(set_attr "length" "8")])
 
36584
+
 
36585
+(define_insn "wsbh"
 
36586
+  [(set (match_operand:SI 0 "register_operand" "=d")
 
36587
+       (unspec:SI [(match_operand:SI 1 "register_operand" "d")] UNSPEC_WSBH))]
 
36588
+  "ISA_HAS_WSBH"
 
36589
+  "wsbh\t%0,%1"
 
36590
+  [(set_attr "type" "shift")])
 
36591
+
 
36592
+(define_insn "dsbh"
 
36593
+  [(set (match_operand:DI 0 "register_operand" "=d")
 
36594
+       (unspec:DI [(match_operand:DI 1 "register_operand" "d")] UNSPEC_DSBH))]
 
36595
+  "TARGET_64BIT && ISA_HAS_WSBH"
 
36596
+  "dsbh\t%0,%1"
 
36597
+  [(set_attr "type" "shift")])
 
36598
+
 
36599
+(define_insn "dshd"
 
36600
+  [(set (match_operand:DI 0 "register_operand" "=d")
 
36601
+       (unspec:DI [(match_operand:DI 1 "register_operand" "d")] UNSPEC_DSHD))]
 
36602
+  "TARGET_64BIT && ISA_HAS_WSBH"
 
36603
+  "dshd\t%0,%1"
 
36604
+  [(set_attr "type" "shift")])
 
36605
 
 
36606
 ;;
 
36607
 ;;  ....................
 
36608
Index: gcc/config/mips/mips.c
 
36609
===================================================================
 
36610
--- a/src/gcc/config/mips/mips.c        (.../tags/gcc_4_8_2_release)
 
36611
+++ b/src/gcc/config/mips/mips.c        (.../branches/gcc-4_8-branch)
 
36612
@@ -3560,17 +3560,6 @@
 
36613
     }
 
36614
 }
 
36615
 
 
36616
-/* Return the cost of an operand X that can be trucated for free.
 
36617
-   SPEED says whether we're optimizing for size or speed.  */
 
36618
-
 
36619
-static int
 
36620
-mips_truncated_op_cost (rtx x, bool speed)
 
36621
-{
 
36622
-  if (GET_CODE (x) == TRUNCATE)
 
36623
-    x = XEXP (x, 0);
 
36624
-  return set_src_cost (x, speed);
 
36625
-}
 
36626
-
 
36627
 /* Implement TARGET_RTX_COSTS.  */
 
36628
 
 
36629
 static bool
 
36630
@@ -3951,13 +3940,12 @@
 
36631
     case ZERO_EXTEND:
 
36632
       if (outer_code == SET
 
36633
          && ISA_HAS_BADDU
 
36634
+         && (GET_CODE (XEXP (x, 0)) == TRUNCATE
 
36635
+             || GET_CODE (XEXP (x, 0)) == SUBREG)
 
36636
          && GET_MODE (XEXP (x, 0)) == QImode
 
36637
-         && GET_CODE (XEXP (x, 0)) == PLUS)
 
36638
+         && GET_CODE (XEXP (XEXP (x, 0), 0)) == PLUS)
 
36639
        {
 
36640
-         rtx plus = XEXP (x, 0);
 
36641
-         *total = (COSTS_N_INSNS (1)
 
36642
-                   + mips_truncated_op_cost (XEXP (plus, 0), speed)
 
36643
-                   + mips_truncated_op_cost (XEXP (plus, 1), speed));
 
36644
+         *total = set_src_cost (XEXP (XEXP (x, 0), 0), speed);
 
36645
          return true;
 
36646
        }
 
36647
       *total = mips_zero_extend_cost (mode, XEXP (x, 0));
 
36648
@@ -8057,7 +8045,7 @@
 
36649
     case 't':
 
36650
       {
 
36651
        int truth = (code == NE) == (letter == 'T');
 
36652
-       fputc ("zfnt"[truth * 2 + (GET_MODE (op) == CCmode)], file);
 
36653
+       fputc ("zfnt"[truth * 2 + ST_REG_P (REGNO (XEXP (op, 0)))], file);
 
36654
       }
 
36655
       break;
 
36656
 
 
36657
Index: gcc/config/mips/mips.h
 
36658
===================================================================
 
36659
--- a/src/gcc/config/mips/mips.h        (.../tags/gcc_4_8_2_release)
 
36660
+++ b/src/gcc/config/mips/mips.h        (.../branches/gcc-4_8-branch)
 
36661
@@ -949,6 +949,11 @@
 
36662
                                  || TARGET_SMARTMIPS)                  \
 
36663
                                 && !TARGET_MIPS16)
 
36664
 
 
36665
+/* ISA has the WSBH (word swap bytes within halfwords) instruction.
 
36666
+   64-bit targets also provide DSBH and DSHD.  */
 
36667
+#define ISA_HAS_WSBH           ((ISA_MIPS32R2 || ISA_MIPS64R2)         \
 
36668
+                                && !TARGET_MIPS16)
 
36669
+
 
36670
 /* ISA has data prefetch instructions.  This controls use of 'pref'.  */
 
36671
 #define ISA_HAS_PREFETCH       ((ISA_MIPS4                             \
 
36672
                                  || TARGET_LOONGSON_2EF                \
 
36673
Index: gcc/params.def
 
36674
===================================================================
 
36675
--- a/src/gcc/params.def        (.../tags/gcc_4_8_2_release)
 
36676
+++ b/src/gcc/params.def        (.../branches/gcc-4_8-branch)
 
36677
@@ -1014,6 +1014,12 @@
 
36678
          "strength reduction",
 
36679
          50, 1, 999999)
 
36680
 
 
36681
+DEFPARAM (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS,
 
36682
+         "uninit-control-dep-attempts",
 
36683
+         "Maximum number of nested calls to search for control dependencies "
 
36684
+         "during uninitialized variable analysis",
 
36685
+         1000, 1, 0)
 
36686
+
 
36687
 /*
 
36688
 Local variables:
 
36689
 mode:c
 
36690
Index: gcc/regcprop.c
 
36691
===================================================================
 
36692
--- a/src/gcc/regcprop.c        (.../tags/gcc_4_8_2_release)
 
36693
+++ b/src/gcc/regcprop.c        (.../branches/gcc-4_8-branch)
 
36694
@@ -747,6 +747,7 @@
 
36695
       int n_ops, i, alt, predicated;
 
36696
       bool is_asm, any_replacements;
 
36697
       rtx set;
 
36698
+      rtx link;
 
36699
       bool replaced[MAX_RECOG_OPERANDS];
 
36700
       bool changed = false;
 
36701
       struct kill_set_value_data ksvd;
 
36702
@@ -815,6 +816,23 @@
 
36703
        if (recog_op_alt[i][alt].earlyclobber)
 
36704
          kill_value (recog_data.operand[i], vd);
 
36705
 
 
36706
+      /* If we have dead sets in the insn, then we need to note these as we
 
36707
+        would clobbers.  */
 
36708
+      for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
 
36709
+       {
 
36710
+         if (REG_NOTE_KIND (link) == REG_UNUSED)
 
36711
+           {
 
36712
+             kill_value (XEXP (link, 0), vd);
 
36713
+             /* Furthermore, if the insn looked like a single-set,
 
36714
+                but the dead store kills the source value of that
 
36715
+                set, then we can no-longer use the plain move
 
36716
+                special case below.  */
 
36717
+             if (set
 
36718
+                 && reg_overlap_mentioned_p (XEXP (link, 0), SET_SRC (set)))
 
36719
+               set = NULL;
 
36720
+           }
 
36721
+       }
 
36722
+
 
36723
       /* Special-case plain move instructions, since we may well
 
36724
         be able to do the move from a different register class.  */
 
36725
       if (set && REG_P (SET_SRC (set)))
 
36726
Index: libgo/configure
 
36727
===================================================================
 
36728
--- a/src/libgo/configure       (.../tags/gcc_4_8_2_release)
 
36729
+++ b/src/libgo/configure       (.../branches/gcc-4_8-branch)
 
36730
@@ -14700,7 +14700,7 @@
 
36731
 fi
 
36732
 
 
36733
 
 
36734
-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
 
36735
+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
 
36736
 do :
 
36737
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 
36738
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
 
36739
Index: libgo/Makefile.in
 
36740
===================================================================
 
36741
--- a/src/libgo/Makefile.in     (.../tags/gcc_4_8_2_release)
 
36742
+++ b/src/libgo/Makefile.in     (.../branches/gcc-4_8-branch)
 
36743
@@ -195,7 +195,7 @@
 
36744
 @LIBGO_IS_LINUX_TRUE@am__objects_5 = getncpu-linux.lo
 
36745
 am__objects_6 = go-append.lo go-assert.lo go-assert-interface.lo \
 
36746
        go-byte-array-to-string.lo go-breakpoint.lo go-caller.lo \
 
36747
-       go-callers.lo go-can-convert-interface.lo go-cgo.lo \
 
36748
+       go-callers.lo go-can-convert-interface.lo go-cdiv.lo go-cgo.lo \
 
36749
        go-check-interface.lo go-construct-map.lo \
 
36750
        go-convert-interface.lo go-copy.lo go-defer.lo \
 
36751
        go-deferred-recover.lo go-eface-compare.lo \
 
36752
@@ -757,6 +757,7 @@
 
36753
        runtime/go-caller.c \
 
36754
        runtime/go-callers.c \
 
36755
        runtime/go-can-convert-interface.c \
 
36756
+       runtime/go-cdiv.c \
 
36757
        runtime/go-cgo.c \
 
36758
        runtime/go-check-interface.c \
 
36759
        runtime/go-construct-map.c \
 
36760
@@ -1446,7 +1447,7 @@
 
36761
        go/go/build/build.go \
 
36762
        go/go/build/doc.go \
 
36763
        go/go/build/read.go \
 
36764
-       syslist.go
 
36765
+       go/go/build/syslist.go
 
36766
 
 
36767
 go_go_doc_files = \
 
36768
        go/go/doc/comment.go \
 
36769
@@ -2368,6 +2369,7 @@
 
36770
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-caller.Plo@am__quote@
 
36771
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-callers.Plo@am__quote@
 
36772
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-can-convert-interface.Plo@am__quote@
 
36773
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-cdiv.Plo@am__quote@
 
36774
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-cgo.Plo@am__quote@
 
36775
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-check-interface.Plo@am__quote@
 
36776
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-construct-map.Plo@am__quote@
 
36777
@@ -2554,6 +2556,13 @@
 
36778
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 
36779
 @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
 
36780
 
 
36781
+go-cdiv.lo: runtime/go-cdiv.c
 
36782
+@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
 
36783
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/go-cdiv.Tpo $(DEPDIR)/go-cdiv.Plo
 
36784
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='runtime/go-cdiv.c' object='go-cdiv.lo' libtool=yes @AMDEPBACKSLASH@
 
36785
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 
36786
+@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
 
36787
+
 
36788
 go-cgo.lo: runtime/go-cgo.c
 
36789
 @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
 
36790
 @am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/go-cgo.Tpo $(DEPDIR)/go-cgo.Plo
 
36791
@@ -5062,15 +5071,6 @@
 
36792
        @$(CHECK)
 
36793
 .PHONY: go/build/check
 
36794
 
 
36795
-syslist.go: s-syslist; @true
 
36796
-s-syslist: Makefile
 
36797
-       echo '// Generated automatically by make.' >syslist.go.tmp
 
36798
-       echo 'package build' >>syslist.go.tmp
 
36799
-       echo 'const goosList = "$(GOOS)"' >>syslist.go.tmp
 
36800
-       echo 'const goarchList = "$(GOARCH)"' >>syslist.go.tmp
 
36801
-       $(SHELL) $(srcdir)/../move-if-change syslist.go.tmp syslist.go
 
36802
-       $(STAMP) $@
 
36803
-
 
36804
 @go_include@ go/doc.lo.dep
 
36805
 go/doc.lo.dep: $(go_go_doc_files)
 
36806
        $(BUILDDEPS)
 
36807
Index: libgo/runtime/go-defer.c
 
36808
===================================================================
 
36809
--- a/src/libgo/runtime/go-defer.c      (.../tags/gcc_4_8_2_release)
 
36810
+++ b/src/libgo/runtime/go-defer.c      (.../branches/gcc-4_8-branch)
 
36811
@@ -27,6 +27,7 @@
 
36812
   n->__pfn = pfn;
 
36813
   n->__arg = arg;
 
36814
   n->__retaddr = NULL;
 
36815
+  n->__makefunc_can_recover = 0;
 
36816
   g->defer = n;
 
36817
 }
 
36818
 
 
36819
Index: libgo/runtime/go-defer.h
 
36820
===================================================================
 
36821
--- a/src/libgo/runtime/go-defer.h      (.../tags/gcc_4_8_2_release)
 
36822
+++ b/src/libgo/runtime/go-defer.h      (.../branches/gcc-4_8-branch)
 
36823
@@ -34,4 +34,10 @@
 
36824
      set by __go_set_defer_retaddr which is called by the thunks
 
36825
      created by defer statements.  */
 
36826
   const void *__retaddr;
 
36827
+
 
36828
+  /* Set to true if a function created by reflect.MakeFunc is
 
36829
+     permitted to recover.  The return address of such a function
 
36830
+     function will be somewhere in libffi, so __retaddr is not
 
36831
+     useful.  */
 
36832
+  _Bool __makefunc_can_recover;
 
36833
 };
 
36834
Index: libgo/runtime/go-int-array-to-string.c
 
36835
===================================================================
 
36836
--- a/src/libgo/runtime/go-int-array-to-string.c        (.../tags/gcc_4_8_2_release)
 
36837
+++ b/src/libgo/runtime/go-int-array-to-string.c        (.../branches/gcc-4_8-branch)
 
36838
@@ -30,6 +30,8 @@
 
36839
 
 
36840
       if (v < 0 || v > 0x10ffff)
 
36841
        v = 0xfffd;
 
36842
+      else if (0xd800 <= v && v <= 0xdfff)
 
36843
+       v = 0xfffd;
 
36844
 
 
36845
       if (v <= 0x7f)
 
36846
        slen += 1;
 
36847
@@ -56,6 +58,8 @@
 
36848
         character.  */
 
36849
       if (v < 0 || v > 0x10ffff)
 
36850
        v = 0xfffd;
 
36851
+      else if (0xd800 <= v && v <= 0xdfff)
 
36852
+       v = 0xfffd;
 
36853
 
 
36854
       if (v <= 0x7f)
 
36855
        *s++ = v;
 
36856
Index: libgo/runtime/go-nosys.c
 
36857
===================================================================
 
36858
--- a/src/libgo/runtime/go-nosys.c      (.../tags/gcc_4_8_2_release)
 
36859
+++ b/src/libgo/runtime/go-nosys.c      (.../branches/gcc-4_8-branch)
 
36860
@@ -43,6 +43,17 @@
 
36861
 }
 
36862
 #endif
 
36863
 
 
36864
+#ifndef HAVE_DUP3
 
36865
+int
 
36866
+dup3 (int oldfd __attribute__ ((unused)),
 
36867
+      int newfd __attribute__ ((unused)),
 
36868
+      int flags __attribute__ ((unused)))
 
36869
+{
 
36870
+  errno = ENOSYS;
 
36871
+  return -1;
 
36872
+}
 
36873
+#endif
 
36874
+
 
36875
 #ifndef HAVE_EPOLL_CREATE1
 
36876
 int
 
36877
 epoll_create1 (int flags __attribute__ ((unused)))
 
36878
@@ -112,6 +123,18 @@
 
36879
 }
 
36880
 #endif
 
36881
 
 
36882
+#ifndef HAVE_GETXATTR
 
36883
+ssize_t
 
36884
+getxattr (const char *path __attribute__ ((unused)),
 
36885
+         const char *name __attribute__ ((unused)),
 
36886
+         void *value __attribute__ ((unused)),
 
36887
+         size_t size __attribute__ ((unused)))
 
36888
+{
 
36889
+  errno = ENOSYS;
 
36890
+  return -1;
 
36891
+}
 
36892
+#endif
 
36893
+
 
36894
 #ifndef HAVE_INOTIFY_ADD_WATCH
 
36895
 int
 
36896
 inotify_add_watch (int fd __attribute__ ((unused)),
 
36897
@@ -151,6 +174,17 @@
 
36898
 }
 
36899
 #endif
 
36900
 
 
36901
+#ifndef HAVE_LISTXATTR
 
36902
+ssize_t
 
36903
+listxattr (const char *path __attribute__ ((unused)),
 
36904
+          char *list __attribute__ ((unused)),
 
36905
+          size_t size __attribute__ ((unused)))
 
36906
+{
 
36907
+  errno = ENOSYS;
 
36908
+  return -1;
 
36909
+}
 
36910
+#endif
 
36911
+
 
36912
 #ifndef HAVE_MKDIRAT
 
36913
 int
 
36914
 mkdirat (int dirfd __attribute__ ((unused)),
 
36915
@@ -196,6 +230,16 @@
 
36916
 }
 
36917
 #endif
 
36918
 
 
36919
+#ifndef HAVE_REMOVEXATTR
 
36920
+int
 
36921
+removexattr (const char *path __attribute__ ((unused)),
 
36922
+            const char *name __attribute__ ((unused)))
 
36923
+{
 
36924
+  errno = ENOSYS;
 
36925
+  return -1;
 
36926
+}
 
36927
+#endif
 
36928
+
 
36929
 #ifndef HAVE_RENAMEAT
 
36930
 int
 
36931
 renameat (int olddirfd __attribute__ ((unused)),
 
36932
@@ -208,6 +252,19 @@
 
36933
 }
 
36934
 #endif
 
36935
 
 
36936
+#ifndef HAVE_SETXATTR
 
36937
+int
 
36938
+setxattr (const char *path __attribute__ ((unused)),
 
36939
+         const char *name __attribute__ ((unused)),
 
36940
+         const void *value __attribute__ ((unused)),
 
36941
+         size_t size __attribute__ ((unused)),
 
36942
+         int flags __attribute__ ((unused)))
 
36943
+{
 
36944
+  errno = ENOSYS;
 
36945
+  return -1;
 
36946
+}
 
36947
+#endif
 
36948
+
 
36949
 #ifndef HAVE_SPLICE
 
36950
 int
 
36951
 splice (int fd __attribute__ ((unused)),
 
36952
Index: libgo/runtime/runtime.h
 
36953
===================================================================
 
36954
--- a/src/libgo/runtime/runtime.h       (.../tags/gcc_4_8_2_release)
 
36955
+++ b/src/libgo/runtime/runtime.h       (.../branches/gcc-4_8-branch)
 
36956
@@ -440,7 +440,7 @@
 
36957
 };
 
36958
 void   runtime_hashinit(void);
 
36959
 
 
36960
-void   runtime_traceback();
 
36961
+void   runtime_traceback(void);
 
36962
 void   runtime_tracebackothers(G*);
 
36963
 
 
36964
 /*
 
36965
@@ -756,6 +756,7 @@
 
36966
 extern _Bool __go_file_line(uintptr, String*, String*, intgo *);
 
36967
 extern byte* runtime_progname();
 
36968
 extern void runtime_main(void*);
 
36969
+extern uint32 runtime_in_callers;
 
36970
 
 
36971
 int32 getproccount(void);
 
36972
 
 
36973
Index: libgo/runtime/proc.c
 
36974
===================================================================
 
36975
--- a/src/libgo/runtime/proc.c  (.../tags/gcc_4_8_2_release)
 
36976
+++ b/src/libgo/runtime/proc.c  (.../branches/gcc-4_8-branch)
 
36977
@@ -1716,10 +1716,30 @@
 
36978
 // entersyscall is going to return immediately after.
 
36979
 
 
36980
 void runtime_entersyscall(void) __attribute__ ((no_split_stack));
 
36981
+static void doentersyscall(void) __attribute__ ((no_split_stack, noinline));
 
36982
 
 
36983
 void
 
36984
 runtime_entersyscall()
 
36985
 {
 
36986
+       // Save the registers in the g structure so that any pointers
 
36987
+       // held in registers will be seen by the garbage collector.
 
36988
+       getcontext(&g->gcregs);
 
36989
+
 
36990
+       // Do the work in a separate function, so that this function
 
36991
+       // doesn't save any registers on its own stack.  If this
 
36992
+       // function does save any registers, we might store the wrong
 
36993
+       // value in the call to getcontext.
 
36994
+       //
 
36995
+       // FIXME: This assumes that we do not need to save any
 
36996
+       // callee-saved registers to access the TLS variable g.  We
 
36997
+       // don't want to put the ucontext_t on the stack because it is
 
36998
+       // large and we can not split the stack here.
 
36999
+       doentersyscall();
 
37000
+}
 
37001
+
 
37002
+static void
 
37003
+doentersyscall()
 
37004
+{
 
37005
        if(m->profilehz > 0)
 
37006
                runtime_setprof(false);
 
37007
 
 
37008
@@ -1736,10 +1756,6 @@
 
37009
        }
 
37010
 #endif
 
37011
 
 
37012
-       // Save the registers in the g structure so that any pointers
 
37013
-       // held in registers will be seen by the garbage collector.
 
37014
-       getcontext(&g->gcregs);
 
37015
-
 
37016
        g->status = Gsyscall;
 
37017
 
 
37018
        if(runtime_atomicload(&runtime_sched.sysmonwait)) {  // TODO: fast atomic
 
37019
@@ -2239,6 +2255,14 @@
 
37020
        if(prof.fn == nil || prof.hz == 0)
 
37021
                return;
 
37022
 
 
37023
+       if(runtime_atomicload(&runtime_in_callers) > 0) {
 
37024
+               // If SIGPROF arrived while already fetching runtime
 
37025
+               // callers we can have trouble on older systems
 
37026
+               // because the unwind library calls dl_iterate_phdr
 
37027
+               // which was not recursive in the past.
 
37028
+               return;
 
37029
+       }
 
37030
+
 
37031
        runtime_lock(&prof);
 
37032
        if(prof.fn == nil) {
 
37033
                runtime_unlock(&prof);
 
37034
Index: libgo/runtime/mgc0.c
 
37035
===================================================================
 
37036
--- a/src/libgo/runtime/mgc0.c  (.../tags/gcc_4_8_2_release)
 
37037
+++ b/src/libgo/runtime/mgc0.c  (.../branches/gcc-4_8-branch)
 
37038
@@ -174,7 +174,7 @@
 
37039
        Obj     *roots;
 
37040
        uint32  nroot;
 
37041
        uint32  rootcap;
 
37042
-} work;
 
37043
+} work __attribute__((aligned(8)));
 
37044
 
 
37045
 enum {
 
37046
        GC_DEFAULT_PTR = GC_NUM_INSTR,
 
37047
@@ -239,8 +239,7 @@
 
37048
        // (Manually inlined copy of MHeap_LookupMaybe.)
 
37049
        k = (uintptr)obj>>PageShift;
 
37050
        x = k;
 
37051
-       if(sizeof(void*) == 8)
 
37052
-               x -= (uintptr)runtime_mheap->arena_start>>PageShift;
 
37053
+       x -= (uintptr)runtime_mheap->arena_start>>PageShift;
 
37054
        s = runtime_mheap->map[x];
 
37055
        if(s == nil || k < s->start || k - s->start >= s->npages || s->state != MSpanInUse)
 
37056
                return false;
 
37057
@@ -418,8 +417,7 @@
 
37058
                        // (Manually inlined copy of MHeap_LookupMaybe.)
 
37059
                        k = (uintptr)obj>>PageShift;
 
37060
                        x = k;
 
37061
-                       if(sizeof(void*) == 8)
 
37062
-                               x -= (uintptr)arena_start>>PageShift;
 
37063
+                       x -= (uintptr)arena_start>>PageShift;
 
37064
                        s = runtime_mheap->map[x];
 
37065
                        if(s == nil || k < s->start || k - s->start >= s->npages || s->state != MSpanInUse)
 
37066
                                continue;
 
37067
@@ -466,8 +464,7 @@
 
37068
                        // Ask span about size class.
 
37069
                        // (Manually inlined copy of MHeap_Lookup.)
 
37070
                        x = (uintptr)obj >> PageShift;
 
37071
-                       if(sizeof(void*) == 8)
 
37072
-                               x -= (uintptr)arena_start>>PageShift;
 
37073
+                       x -= (uintptr)arena_start>>PageShift;
 
37074
                        s = runtime_mheap->map[x];
 
37075
 
 
37076
                        PREFETCH(obj);
 
37077
@@ -585,8 +582,7 @@
 
37078
        if(t == nil)
 
37079
                return;
 
37080
        x = (uintptr)obj >> PageShift;
 
37081
-       if(sizeof(void*) == 8)
 
37082
-               x -= (uintptr)(runtime_mheap->arena_start)>>PageShift;
 
37083
+       x -= (uintptr)(runtime_mheap->arena_start)>>PageShift;
 
37084
        s = runtime_mheap->map[x];
 
37085
        objstart = (byte*)((uintptr)s->start<<PageShift);
 
37086
        if(s->sizeclass != 0) {
 
37087
Index: libgo/runtime/go-signal.c
 
37088
===================================================================
 
37089
--- a/src/libgo/runtime/go-signal.c     (.../tags/gcc_4_8_2_release)
 
37090
+++ b/src/libgo/runtime/go-signal.c     (.../branches/gcc-4_8-branch)
 
37091
@@ -234,7 +234,7 @@
 
37092
          G *g;
 
37093
 
 
37094
          g = runtime_g ();
 
37095
-         runtime_traceback (g);
 
37096
+         runtime_traceback ();
 
37097
          runtime_tracebackothers (g);
 
37098
 
 
37099
          /* The gc library calls runtime_dumpregs here, and provides
 
37100
@@ -399,6 +399,9 @@
 
37101
 {
 
37102
   G *gp;
 
37103
   M *mp;
 
37104
+#ifdef USING_SPLIT_STACK
 
37105
+  void *stack_context[10];
 
37106
+#endif
 
37107
 
 
37108
   /* We are now running on the stack registered via sigaltstack.
 
37109
      (Actually there is a small span of time between runtime_siginit
 
37110
@@ -409,7 +412,7 @@
 
37111
   if (gp != NULL)
 
37112
     {
 
37113
 #ifdef USING_SPLIT_STACK
 
37114
-      __splitstack_getcontext (&gp->stack_context[0]);
 
37115
+      __splitstack_getcontext (&stack_context[0]);
 
37116
 #endif
 
37117
     }
 
37118
 
 
37119
@@ -432,7 +435,7 @@
 
37120
   if (gp != NULL)
 
37121
     {
 
37122
 #ifdef USING_SPLIT_STACK
 
37123
-      __splitstack_setcontext (&gp->stack_context[0]);
 
37124
+      __splitstack_setcontext (&stack_context[0]);
 
37125
 #endif
 
37126
     }
 
37127
 }
 
37128
Index: libgo/runtime/go-callers.c
 
37129
===================================================================
 
37130
--- a/src/libgo/runtime/go-callers.c    (.../tags/gcc_4_8_2_release)
 
37131
+++ b/src/libgo/runtime/go-callers.c    (.../branches/gcc-4_8-branch)
 
37132
@@ -11,6 +11,13 @@
 
37133
 #include "runtime.h"
 
37134
 #include "array.h"
 
37135
 
 
37136
+/* This is set to non-zero when calling backtrace_full.  This is used
 
37137
+   to avoid getting hanging on a recursive lock in dl_iterate_phdr on
 
37138
+   older versions of glibc when a SIGPROF signal arrives while
 
37139
+   collecting a backtrace.  */
 
37140
+
 
37141
+uint32 runtime_in_callers;
 
37142
+
 
37143
 /* Argument passed to callback function.  */
 
37144
 
 
37145
 struct callers_data
 
37146
@@ -111,8 +118,10 @@
 
37147
   data.skip = skip + 1;
 
37148
   data.index = 0;
 
37149
   data.max = m;
 
37150
+  runtime_xadd (&runtime_in_callers, 1);
 
37151
   backtrace_full (__go_get_backtrace_state (), 0, callback, error_callback,
 
37152
                  &data);
 
37153
+  runtime_xadd (&runtime_in_callers, -1);
 
37154
   return data.index;
 
37155
 }
 
37156
 
 
37157
Index: libgo/runtime/go-cdiv.c
 
37158
===================================================================
 
37159
--- a/src/libgo/runtime/go-cdiv.c       (.../tags/gcc_4_8_2_release)
 
37160
+++ b/src/libgo/runtime/go-cdiv.c       (.../branches/gcc-4_8-branch)
 
37161
@@ -0,0 +1,46 @@
 
37162
+/* go-cdiv.c -- complex division routines
 
37163
+
 
37164
+   Copyright 2013 The Go Authors. All rights reserved.
 
37165
+   Use of this source code is governed by a BSD-style
 
37166
+   license that can be found in the LICENSE file.  */
 
37167
+
 
37168
+/* Calls to these functions are generated by the Go frontend for
 
37169
+   division of complex64 or complex128.  We use these because Go's
 
37170
+   complex division expects slightly different results from the GCC
 
37171
+   default.  When dividing NaN+1.0i / 0+0i, Go expects NaN+NaNi but
 
37172
+   GCC generates NaN+Infi.  NaN+Infi seems wrong seems the rules of
 
37173
+   C99 Annex G specify that if either side of a complex number is Inf,
 
37174
+   the the whole number is Inf, but an operation involving NaN ought
 
37175
+   to result in NaN, not Inf.  */
 
37176
+
 
37177
+__complex float
 
37178
+__go_complex64_div (__complex float a, __complex float b)
 
37179
+{
 
37180
+  if (__builtin_expect (b == 0+0i, 0))
 
37181
+    {
 
37182
+      if (!__builtin_isinff (__real__ a)
 
37183
+         && !__builtin_isinff (__imag__ a)
 
37184
+         && (__builtin_isnanf (__real__ a) || __builtin_isnanf (__imag__ a)))
 
37185
+       {
 
37186
+         /* Pass "1" to nanf to match math/bits.go.  */
 
37187
+         return __builtin_nanf("1") + __builtin_nanf("1")*1i;
 
37188
+       }
 
37189
+    }
 
37190
+  return a / b;
 
37191
+}
 
37192
+
 
37193
+__complex double
 
37194
+__go_complex128_div (__complex double a, __complex double b)
 
37195
+{
 
37196
+  if (__builtin_expect (b == 0+0i, 0))
 
37197
+    {
 
37198
+      if (!__builtin_isinf (__real__ a)
 
37199
+         && !__builtin_isinf (__imag__ a)
 
37200
+         && (__builtin_isnan (__real__ a) || __builtin_isnan (__imag__ a)))
 
37201
+       {
 
37202
+         /* Pass "1" to nan to match math/bits.go.  */
 
37203
+         return __builtin_nan("1") + __builtin_nan("1")*1i;
 
37204
+       }
 
37205
+    }
 
37206
+  return a / b;
 
37207
+}
 
37208
Index: libgo/runtime/go-reflect-call.c
 
37209
===================================================================
 
37210
--- a/src/libgo/runtime/go-reflect-call.c       (.../tags/gcc_4_8_2_release)
 
37211
+++ b/src/libgo/runtime/go-reflect-call.c       (.../branches/gcc-4_8-branch)
 
37212
@@ -98,9 +98,12 @@
 
37213
   const struct __go_struct_field *fields;
 
37214
   int i;
 
37215
 
 
37216
+  field_count = descriptor->__fields.__count;
 
37217
+  if (field_count == 0) {
 
37218
+    return &ffi_type_void;
 
37219
+  }
 
37220
   ret = (ffi_type *) __go_alloc (sizeof (ffi_type));
 
37221
   ret->type = FFI_TYPE_STRUCT;
 
37222
-  field_count = descriptor->__fields.__count;
 
37223
   fields = (const struct __go_struct_field *) descriptor->__fields.__values;
 
37224
   ret->elements = (ffi_type **) __go_alloc ((field_count + 1)
 
37225
                                            * sizeof (ffi_type *));
 
37226
Index: libgo/runtime/go-recover.c
 
37227
===================================================================
 
37228
--- a/src/libgo/runtime/go-recover.c    (.../tags/gcc_4_8_2_release)
 
37229
+++ b/src/libgo/runtime/go-recover.c    (.../branches/gcc-4_8-branch)
 
37230
@@ -16,12 +16,14 @@
 
37231
    __go_can_recover--this is, the thunk.  */
 
37232
 
 
37233
 _Bool
 
37234
-__go_can_recover (const void* retaddr)
 
37235
+__go_can_recover (const void *retaddr)
 
37236
 {
 
37237
   G *g;
 
37238
   struct __go_defer_stack *d;
 
37239
   const char* ret;
 
37240
   const char* dret;
 
37241
+  Location loc;
 
37242
+  const byte *name;
 
37243
 
 
37244
   g = runtime_g ();
 
37245
 
 
37246
@@ -52,9 +54,80 @@
 
37247
 #endif
 
37248
 
 
37249
   dret = (const char *) d->__retaddr;
 
37250
-  return ret <= dret && ret + 16 >= dret;
 
37251
+  if (ret <= dret && ret + 16 >= dret)
 
37252
+    return 1;
 
37253
+
 
37254
+  /* If the function calling recover was created by reflect.MakeFunc,
 
37255
+     then RETADDR will be somewhere in libffi.  Our caller is
 
37256
+     permitted to recover if it was called from libffi.  */
 
37257
+  if (!d->__makefunc_can_recover)
 
37258
+    return 0;
 
37259
+
 
37260
+  if (runtime_callers (2, &loc, 1) < 1)
 
37261
+    return 0;
 
37262
+
 
37263
+  /* If we have no function name, then we weren't called by Go code.
 
37264
+     Guess that we were called by libffi.  */
 
37265
+  if (loc.function.len == 0)
 
37266
+    return 1;
 
37267
+
 
37268
+  if (loc.function.len < 4)
 
37269
+    return 0;
 
37270
+  name = loc.function.str;
 
37271
+  if (*name == '_')
 
37272
+    {
 
37273
+      if (loc.function.len < 5)
 
37274
+       return 0;
 
37275
+      ++name;
 
37276
+    }
 
37277
+
 
37278
+  if (name[0] == 'f' && name[1] == 'f' && name[2] == 'i' && name[3] == '_')
 
37279
+    return 1;
 
37280
+
 
37281
+  /* We may also be called by reflect.makeFuncImpl.call, for a
 
37282
+     function created by reflect.MakeFunc.  */
 
37283
+  if (__builtin_strstr ((const char *) name, "makeFuncImpl") != NULL)
 
37284
+    return 1;
 
37285
+
 
37286
+  return 0;
 
37287
 }
 
37288
 
 
37289
+/* This function is called when code is about to enter a function
 
37290
+   created by reflect.MakeFunc.  It is called by the function stub
 
37291
+   used by MakeFunc.  If the stub is permitted to call recover, then a
 
37292
+   real MakeFunc function is permitted to call recover.  */
 
37293
+
 
37294
+void
 
37295
+__go_makefunc_can_recover (const void *retaddr)
 
37296
+{
 
37297
+  struct __go_defer_stack *d;
 
37298
+
 
37299
+  d = runtime_g ()->defer;
 
37300
+  if (d != NULL
 
37301
+      && !d->__makefunc_can_recover
 
37302
+      && __go_can_recover (retaddr))
 
37303
+    d->__makefunc_can_recover = 1;
 
37304
+}
 
37305
+
 
37306
+/* This function is called when code is about to exit a function
 
37307
+   created by reflect.MakeFunc.  It is called by the function stub
 
37308
+   used by MakeFunc.  It clears the __makefunc_can_recover field.
 
37309
+   It's OK to always clear this field, because __go_can_recover will
 
37310
+   only be called by a stub created for a function that calls recover.
 
37311
+   That stub will not call a function created by reflect.MakeFunc, so
 
37312
+   by the time we get here any caller higher up on the call stack no
 
37313
+   longer needs the information.  */
 
37314
+
 
37315
+void
 
37316
+__go_makefunc_returning (void)
 
37317
+{
 
37318
+  struct __go_defer_stack *d;
 
37319
+
 
37320
+  d = runtime_g ()->defer;
 
37321
+  if (d != NULL)
 
37322
+    d->__makefunc_can_recover = 0;
 
37323
+}
 
37324
+
 
37325
 /* This is only called when it is valid for the caller to recover the
 
37326
    value on top of the panic stack, if there is one.  */
 
37327
 
 
37328
Index: libgo/runtime/malloc.goc
 
37329
===================================================================
 
37330
--- a/src/libgo/runtime/malloc.goc      (.../tags/gcc_4_8_2_release)
 
37331
+++ b/src/libgo/runtime/malloc.goc      (.../branches/gcc-4_8-branch)
 
37332
@@ -541,8 +541,7 @@
 
37333
 
 
37334
                // (Manually inlined copy of runtime_MHeap_Lookup)
 
37335
                p = (uintptr)v>>PageShift;
 
37336
-               if(sizeof(void*) == 8)
 
37337
-                       p -= (uintptr)runtime_mheap->arena_start >> PageShift;
 
37338
+               p -= (uintptr)runtime_mheap->arena_start >> PageShift;
 
37339
                s = runtime_mheap->map[p];
 
37340
 
 
37341
                if(s->sizeclass == 0) {
 
37342
Index: libgo/runtime/go-make-slice.c
 
37343
===================================================================
 
37344
--- a/src/libgo/runtime/go-make-slice.c (.../tags/gcc_4_8_2_release)
 
37345
+++ b/src/libgo/runtime/go-make-slice.c (.../branches/gcc-4_8-branch)
 
37346
@@ -34,7 +34,10 @@
 
37347
   std = (const struct __go_slice_type *) td;
 
37348
 
 
37349
   ilen = (intgo) len;
 
37350
-  if (ilen < 0 || (uintptr_t) ilen != len)
 
37351
+  if (ilen < 0
 
37352
+      || (uintptr_t) ilen != len
 
37353
+      || (std->__element_type->__size > 0
 
37354
+         && len > MaxMem / std->__element_type->__size))
 
37355
     runtime_panicstring ("makeslice: len out of range");
 
37356
 
 
37357
   icap = (intgo) cap;
 
37358
Index: libgo/runtime/mheap.c
 
37359
===================================================================
 
37360
--- a/src/libgo/runtime/mheap.c (.../tags/gcc_4_8_2_release)
 
37361
+++ b/src/libgo/runtime/mheap.c (.../branches/gcc-4_8-branch)
 
37362
@@ -150,8 +150,7 @@
 
37363
                runtime_MSpan_Init(t, s->start + npage, s->npages - npage);
 
37364
                s->npages = npage;
 
37365
                p = t->start;
 
37366
-               if(sizeof(void*) == 8)
 
37367
-                       p -= ((uintptr)h->arena_start>>PageShift);
 
37368
+               p -= ((uintptr)h->arena_start>>PageShift);
 
37369
                if(p > 0)
 
37370
                        h->map[p-1] = s;
 
37371
                h->map[p] = t;
 
37372
@@ -169,8 +168,7 @@
 
37373
        s->elemsize = (sizeclass==0 ? s->npages<<PageShift : (uintptr)runtime_class_to_size[sizeclass]);
 
37374
        s->types.compression = MTypes_Empty;
 
37375
        p = s->start;
 
37376
-       if(sizeof(void*) == 8)
 
37377
-               p -= ((uintptr)h->arena_start>>PageShift);
 
37378
+       p -= ((uintptr)h->arena_start>>PageShift);
 
37379
        for(n=0; n<npage; n++)
 
37380
                h->map[p+n] = s;
 
37381
        return s;
 
37382
@@ -241,8 +239,7 @@
 
37383
        mstats.mspan_sys = h->spanalloc.sys;
 
37384
        runtime_MSpan_Init(s, (uintptr)v>>PageShift, ask>>PageShift);
 
37385
        p = s->start;
 
37386
-       if(sizeof(void*) == 8)
 
37387
-               p -= ((uintptr)h->arena_start>>PageShift);
 
37388
+       p -= ((uintptr)h->arena_start>>PageShift);
 
37389
        h->map[p] = s;
 
37390
        h->map[p + s->npages - 1] = s;
 
37391
        s->state = MSpanInUse;
 
37392
@@ -259,8 +256,7 @@
 
37393
        uintptr p;
 
37394
        
 
37395
        p = (uintptr)v;
 
37396
-       if(sizeof(void*) == 8)
 
37397
-               p -= (uintptr)h->arena_start;
 
37398
+       p -= (uintptr)h->arena_start;
 
37399
        return h->map[p >> PageShift];
 
37400
 }
 
37401
 
 
37402
@@ -281,8 +277,7 @@
 
37403
                return nil;
 
37404
        p = (uintptr)v>>PageShift;
 
37405
        q = p;
 
37406
-       if(sizeof(void*) == 8)
 
37407
-               q -= (uintptr)h->arena_start >> PageShift;
 
37408
+       q -= (uintptr)h->arena_start >> PageShift;
 
37409
        s = h->map[q];
 
37410
        if(s == nil || p < s->start || p - s->start >= s->npages)
 
37411
                return nil;
 
37412
@@ -332,8 +327,7 @@
 
37413
 
 
37414
        // Coalesce with earlier, later spans.
 
37415
        p = s->start;
 
37416
-       if(sizeof(void*) == 8)
 
37417
-               p -= (uintptr)h->arena_start >> PageShift;
 
37418
+       p -= (uintptr)h->arena_start >> PageShift;
 
37419
        if(p > 0 && (t = h->map[p-1]) != nil && t->state != MSpanInUse) {
 
37420
                tp = (uintptr*)(t->start<<PageShift);
 
37421
                *tp |= *sp;     // propagate "needs zeroing" mark
 
37422
Index: libgo/mksysinfo.sh
 
37423
===================================================================
 
37424
--- a/src/libgo/mksysinfo.sh    (.../tags/gcc_4_8_2_release)
 
37425
+++ b/src/libgo/mksysinfo.sh    (.../branches/gcc-4_8-branch)
 
37426
@@ -1035,6 +1035,10 @@
 
37427
 grep '^const _LOCK_' gen-sysinfo.go |
 
37428
     sed -e 's/^\(const \)_\(LOCK_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
 
37429
 
 
37430
+# The PRIO constants.
 
37431
+grep '^const _PRIO_' gen-sysinfo.go | \
 
37432
+  sed -e 's/^\(const \)_\(PRIO_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
 
37433
+
 
37434
 # The GNU/Linux LINUX_REBOOT flags.
 
37435
 grep '^const _LINUX_REBOOT_' gen-sysinfo.go |
 
37436
     sed -e 's/^\(const \)_\(LINUX_REBOOT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
 
37437
Index: libgo/config.h.in
 
37438
===================================================================
 
37439
--- a/src/libgo/config.h.in     (.../tags/gcc_4_8_2_release)
 
37440
+++ b/src/libgo/config.h.in     (.../branches/gcc-4_8-branch)
 
37441
@@ -39,6 +39,9 @@
 
37442
 /* Define to 1 if you have the `dl_iterate_phdr' function. */
 
37443
 #undef HAVE_DL_ITERATE_PHDR
 
37444
 
 
37445
+/* Define to 1 if you have the `dup3' function. */
 
37446
+#undef HAVE_DUP3
 
37447
+
 
37448
 /* Define to 1 if you have the `epoll_create1' function. */
 
37449
 #undef HAVE_EPOLL_CREATE1
 
37450
 
 
37451
@@ -66,6 +69,9 @@
 
37452
 /* Define if _Unwind_GetIPInfo is available. */
 
37453
 #undef HAVE_GETIPINFO
 
37454
 
 
37455
+/* Define to 1 if you have the `getxattr' function. */
 
37456
+#undef HAVE_GETXATTR
 
37457
+
 
37458
 /* Define to 1 if you have the `inotify_add_watch' function. */
 
37459
 #undef HAVE_INOTIFY_ADD_WATCH
 
37460
 
 
37461
@@ -111,6 +117,9 @@
 
37462
 /* Define to 1 if you have the <linux/rtnetlink.h> header file. */
 
37463
 #undef HAVE_LINUX_RTNETLINK_H
 
37464
 
 
37465
+/* Define to 1 if you have the `listxattr' function. */
 
37466
+#undef HAVE_LISTXATTR
 
37467
+
 
37468
 /* Define to 1 if the system has the type `loff_t'. */
 
37469
 #undef HAVE_LOFF_T
 
37470
 
 
37471
@@ -171,6 +180,9 @@
 
37472
 /* Define to 1 if you have the `pipe2' function. */
 
37473
 #undef HAVE_PIPE2
 
37474
 
 
37475
+/* Define to 1 if you have the `removexattr' function. */
 
37476
+#undef HAVE_REMOVEXATTR
 
37477
+
 
37478
 /* Define to 1 if you have the `renameat' function. */
 
37479
 #undef HAVE_RENAMEAT
 
37480
 
 
37481
@@ -180,6 +192,9 @@
 
37482
 /* Define to 1 if you have the `setenv' function. */
 
37483
 #undef HAVE_SETENV
 
37484
 
 
37485
+/* Define to 1 if you have the `setxattr' function. */
 
37486
+#undef HAVE_SETXATTR
 
37487
+
 
37488
 /* Define to 1 if you have the `sinl' function. */
 
37489
 #undef HAVE_SINL
 
37490
 
 
37491
Index: libgo/configure.ac
 
37492
===================================================================
 
37493
--- a/src/libgo/configure.ac    (.../tags/gcc_4_8_2_release)
 
37494
+++ b/src/libgo/configure.ac    (.../branches/gcc-4_8-branch)
 
37495
@@ -503,7 +503,7 @@
 
37496
 AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
 
37497
 AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
 
37498
 
 
37499
-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)
 
37500
+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)
 
37501
 AC_TYPE_OFF_T
 
37502
 AC_CHECK_TYPES([loff_t])
 
37503
 
 
37504
Index: libgo/go/reflect/value.go
 
37505
===================================================================
 
37506
--- a/src/libgo/go/reflect/value.go     (.../tags/gcc_4_8_2_release)
 
37507
+++ b/src/libgo/go/reflect/value.go     (.../branches/gcc-4_8-branch)
 
37508
@@ -98,6 +98,7 @@
 
37509
        flagIndir
 
37510
        flagAddr
 
37511
        flagMethod
 
37512
+       flagMethodFn         // gccgo: first fn parameter is always pointer
 
37513
        flagKindShift        = iota
 
37514
        flagKindWidth        = 5 // there are 27 kinds
 
37515
        flagKindMask    flag = 1<<flagKindWidth - 1
 
37516
@@ -433,7 +434,7 @@
 
37517
        if v.flag&flagMethod != 0 {
 
37518
                nin++
 
37519
        }
 
37520
-       firstPointer := len(in) > 0 && t.In(0).Kind() != Ptr && v.flag&flagMethod == 0 && isMethod(v.typ)
 
37521
+       firstPointer := len(in) > 0 && t.In(0).Kind() != Ptr && v.flag&flagMethodFn != 0
 
37522
        params := make([]unsafe.Pointer, nin)
 
37523
        off := 0
 
37524
        if v.flag&flagMethod != 0 {
 
37525
@@ -484,33 +485,6 @@
 
37526
        return ret
 
37527
 }
 
37528
 
 
37529
-// gccgo specific test to see if typ is a method.  We can tell by
 
37530
-// looking at the string to see if there is a receiver.  We need this
 
37531
-// because for gccgo all methods take pointer receivers.
 
37532
-func isMethod(t *rtype) bool {
 
37533
-       if Kind(t.kind) != Func {
 
37534
-               return false
 
37535
-       }
 
37536
-       s := *t.string
 
37537
-       parens := 0
 
37538
-       params := 0
 
37539
-       sawRet := false
 
37540
-       for i, c := range s {
 
37541
-               if c == '(' {
 
37542
-                       if parens == 0 {
 
37543
-                               params++
 
37544
-                       }
 
37545
-                       parens++
 
37546
-               } else if c == ')' {
 
37547
-                       parens--
 
37548
-               } else if parens == 0 && c == ' ' && s[i+1] != '(' && !sawRet {
 
37549
-                       params++
 
37550
-                       sawRet = true
 
37551
-               }
 
37552
-       }
 
37553
-       return params > 2
 
37554
-}
 
37555
-
 
37556
 // methodReceiver returns information about the receiver
 
37557
 // described by v. The Value v may or may not have the
 
37558
 // flagMethod bit set, so the kind cached in v.flag should
 
37559
@@ -917,6 +891,16 @@
 
37560
                v = makeMethodValue("Interface", v)
 
37561
        }
 
37562
 
 
37563
+       if v.flag&flagMethodFn != 0 {
 
37564
+               if v.typ.Kind() != Func {
 
37565
+                       panic("reflect: MethodFn of non-Func")
 
37566
+               }
 
37567
+               ft := (*funcType)(unsafe.Pointer(v.typ))
 
37568
+               if ft.in[0].Kind() != Ptr {
 
37569
+                       v = makeValueMethod(v)
 
37570
+               }
 
37571
+       }
 
37572
+
 
37573
        k := v.kind()
 
37574
        if k == Interface {
 
37575
                // Special case: return the element inside the interface.
 
37576
@@ -1230,8 +1214,7 @@
 
37577
                        // created via reflect have the same underlying code pointer,
 
37578
                        // so their Pointers are equal. The function used here must
 
37579
                        // match the one used in makeMethodValue.
 
37580
-                       // This is not properly implemented for gccgo.
 
37581
-                       f := Zero
 
37582
+                       f := makeFuncStub
 
37583
                        return **(**uintptr)(unsafe.Pointer(&f))
 
37584
                }
 
37585
                p := v.val
 
37586
Index: libgo/go/reflect/makefuncgo_386.go
 
37587
===================================================================
 
37588
--- a/src/libgo/go/reflect/makefuncgo_386.go    (.../tags/gcc_4_8_2_release)
 
37589
+++ b/src/libgo/go/reflect/makefuncgo_386.go    (.../branches/gcc-4_8-branch)
 
37590
@@ -14,8 +14,10 @@
 
37591
 // registers that might hold result values.
 
37592
 type i386Regs struct {
 
37593
        esp uint32
 
37594
-       eax uint32 // Value to return in %eax.
 
37595
-       st0 uint64 // Value to return in %st(0).
 
37596
+       eax uint32  // Value to return in %eax.
 
37597
+       st0 float64 // Value to return in %st(0).
 
37598
+       sr  bool    // Set to true if hidden struct pointer.
 
37599
+       sf  bool    // Set to true if returning float
 
37600
 }
 
37601
 
 
37602
 // MakeFuncStubGo implements the 386 calling convention for MakeFunc.
 
37603
@@ -56,10 +58,13 @@
 
37604
        in := make([]Value, 0, len(ftyp.in))
 
37605
        ap := uintptr(regs.esp)
 
37606
 
 
37607
+       regs.sr = false
 
37608
+       regs.sf = false
 
37609
        var retPtr unsafe.Pointer
 
37610
        if retStruct {
 
37611
                retPtr = *(*unsafe.Pointer)(unsafe.Pointer(ap))
 
37612
                ap += ptrSize
 
37613
+               regs.sr = true
 
37614
        }
 
37615
 
 
37616
        for _, rt := range ftyp.in {
 
37617
@@ -77,7 +82,7 @@
 
37618
 
 
37619
        // Call the real function.
 
37620
 
 
37621
-       out := c.fn(in)
 
37622
+       out := c.call(in)
 
37623
 
 
37624
        if len(out) != len(ftyp.out) {
 
37625
                panic("reflect: wrong return count from function created by MakeFunc")
 
37626
@@ -123,13 +128,16 @@
 
37627
 
 
37628
        v := out[0]
 
37629
        w := v.iword()
 
37630
-       if v.Kind() != Ptr && v.Kind() != UnsafePointer {
 
37631
-               w = loadIword(unsafe.Pointer(w), v.typ.size)
 
37632
-       }
 
37633
        switch v.Kind() {
 
37634
-       case Float32, Float64:
 
37635
-               regs.st0 = uint64(uintptr(w))
 
37636
+       case Ptr, UnsafePointer:
 
37637
+               regs.eax = uint32(uintptr(w))
 
37638
+       case Float32:
 
37639
+               regs.st0 = float64(*(*float32)(unsafe.Pointer(w)))
 
37640
+               regs.sf = true
 
37641
+       case Float64:
 
37642
+               regs.st0 = *(*float64)(unsafe.Pointer(w))
 
37643
+               regs.sf = true
 
37644
        default:
 
37645
-               regs.eax = uint32(uintptr(w))
 
37646
+               regs.eax = uint32(uintptr(loadIword(unsafe.Pointer(w), v.typ.size)))
 
37647
        }
 
37648
 }
 
37649
Index: libgo/go/reflect/makefunc_amd64.S
 
37650
===================================================================
 
37651
--- a/src/libgo/go/reflect/makefunc_amd64.S     (.../tags/gcc_4_8_2_release)
 
37652
+++ b/src/libgo/go/reflect/makefunc_amd64.S     (.../branches/gcc-4_8-branch)
 
37653
@@ -61,6 +61,14 @@
 
37654
        movdqa  %xmm6, 0xa0(%rsp)
 
37655
        movdqa  %xmm7, 0xb0(%rsp)
 
37656
 
 
37657
+       /* For MakeFunc functions that call recover.  */
 
37658
+       movq    8(%rbp), %rdi
 
37659
+#ifdef __PIC__
 
37660
+       call    __go_makefunc_can_recover@PLT
 
37661
+#else
 
37662
+       call    __go_makefunc_can_recover
 
37663
+#endif
 
37664
+
 
37665
        # Get function type.
 
37666
 #ifdef __PIC__
 
37667
        call    __go_get_closure@PLT
 
37668
@@ -77,6 +85,13 @@
 
37669
        call    reflect.MakeFuncStubGo
 
37670
 #endif
 
37671
 
 
37672
+       /* MakeFunc functions can no longer call recover.  */
 
37673
+#ifdef __PIC__
 
37674
+       call __go_makefunc_returning@PLT
 
37675
+#else
 
37676
+       call __go_makefunc_returning
 
37677
+#endif
 
37678
+
 
37679
        # The structure will be updated with any return values.  Load
 
37680
        # all possible return registers before returning to the caller.
 
37681
 
 
37682
Index: libgo/go/reflect/type.go
 
37683
===================================================================
 
37684
--- a/src/libgo/go/reflect/type.go      (.../tags/gcc_4_8_2_release)
 
37685
+++ b/src/libgo/go/reflect/type.go      (.../branches/gcc-4_8-branch)
 
37686
@@ -508,7 +508,7 @@
 
37687
        m.Type = toType(mt)
 
37688
        x := new(unsafe.Pointer)
 
37689
        *x = unsafe.Pointer(&p.tfn)
 
37690
-       m.Func = Value{mt, unsafe.Pointer(x), fl | flagIndir}
 
37691
+       m.Func = Value{mt, unsafe.Pointer(x), fl | flagIndir | flagMethodFn}
 
37692
        m.Index = i
 
37693
        return
 
37694
 }
 
37695
Index: libgo/go/reflect/makefunc_386.S
 
37696
===================================================================
 
37697
--- a/src/libgo/go/reflect/makefunc_386.S       (.../tags/gcc_4_8_2_release)
 
37698
+++ b/src/libgo/go/reflect/makefunc_386.S       (.../branches/gcc-4_8-branch)
 
37699
@@ -25,9 +25,13 @@
 
37700
           struct {
 
37701
             esp uint32         // 0x0
 
37702
             eax uint32         // 0x4
 
37703
-            st0 uint64         // 0x8
 
37704
+            st0 float64        // 0x8
 
37705
+            sr  bool           // 0x10
 
37706
+            sf  bool           // 0x11
 
37707
           }
 
37708
-       */
 
37709
+          The sr field is set by the function to a non-zero value if
 
37710
+          the function takes a struct hidden pointer that must be
 
37711
+          popped off the stack.  */
 
37712
 
 
37713
        pushl   %ebp
 
37714
 .LCFI0:
 
37715
@@ -45,7 +49,16 @@
 
37716
        leal    8(%ebp), %eax   /* Set esp field in struct.  */
 
37717
        movl    %eax, -24(%ebp)
 
37718
 
 
37719
+       /* For MakeFunc functions that call recover.  */
 
37720
+       movl    4(%ebp), %eax
 
37721
+       movl    %eax, (%esp)
 
37722
 #ifdef __PIC__
 
37723
+       call    __go_makefunc_can_recover@PLT
 
37724
+#else
 
37725
+       call    __go_makefunc_can_recover
 
37726
+#endif
 
37727
+
 
37728
+#ifdef __PIC__
 
37729
        call    __go_get_closure@PLT
 
37730
 #else
 
37731
        call    __go_get_closure
 
37732
@@ -62,9 +75,20 @@
 
37733
        call    reflect.MakeFuncStubGo
 
37734
 #endif
 
37735
 
 
37736
+       /* MakeFunc functions can no longer call recover.  */
 
37737
+#ifdef __PIC__
 
37738
+       call __go_makefunc_returning@PLT
 
37739
+#else
 
37740
+       call __go_makefunc_returning
 
37741
+#endif
 
37742
+
 
37743
        /* Set return registers.  */
 
37744
 
 
37745
        movl    -20(%ebp), %eax
 
37746
+
 
37747
+       cmpb    $0, -7(%ebp)
 
37748
+       je      2f
 
37749
+
 
37750
        fldl    -16(%ebp)
 
37751
 
 
37752
 #ifdef __SSE2__
 
37753
@@ -73,12 +97,20 @@
 
37754
        movsd   -16(%ebp), %xmm0
 
37755
 #endif
 
37756
 
 
37757
+2:
 
37758
+       movb    -8(%ebp), %dl
 
37759
+
 
37760
        addl    $36, %esp
 
37761
        popl    %ebx
 
37762
 .LCFI3:
 
37763
        popl    %ebp
 
37764
 .LCFI4:
 
37765
+
 
37766
+       testb   %dl,%dl
 
37767
+       jne     1f
 
37768
        ret
 
37769
+1:
 
37770
+       ret     $4
 
37771
 .LFE1:
 
37772
 #ifdef __ELF__
 
37773
        .size   reflect.makeFuncStub, . - reflect.makeFuncStub
 
37774
Index: libgo/go/reflect/all_test.go
 
37775
===================================================================
 
37776
--- a/src/libgo/go/reflect/all_test.go  (.../tags/gcc_4_8_2_release)
 
37777
+++ b/src/libgo/go/reflect/all_test.go  (.../branches/gcc-4_8-branch)
 
37778
@@ -1430,6 +1430,46 @@
 
37779
        }
 
37780
 }
 
37781
 
 
37782
+type emptyStruct struct{}
 
37783
+
 
37784
+type nonEmptyStruct struct {
 
37785
+       member int
 
37786
+}
 
37787
+
 
37788
+func returnEmpty() emptyStruct {
 
37789
+       return emptyStruct{}
 
37790
+}
 
37791
+
 
37792
+func takesEmpty(e emptyStruct) {
 
37793
+}
 
37794
+
 
37795
+func returnNonEmpty(i int) nonEmptyStruct {
 
37796
+       return nonEmptyStruct{member: i}
 
37797
+}
 
37798
+
 
37799
+func takesNonEmpty(n nonEmptyStruct) int {
 
37800
+       return n.member
 
37801
+}
 
37802
+
 
37803
+func TestCallWithStruct(t *testing.T) {
 
37804
+       r := ValueOf(returnEmpty).Call([]Value{})
 
37805
+       if len(r) != 1 || r[0].Type() != TypeOf(emptyStruct{}) {
 
37806
+               t.Errorf("returning empty struct returned %s instead", r)
 
37807
+       }
 
37808
+       r = ValueOf(takesEmpty).Call([]Value{ValueOf(emptyStruct{})})
 
37809
+       if len(r) != 0 {
 
37810
+               t.Errorf("takesEmpty returned values: %s", r)
 
37811
+       }
 
37812
+       r = ValueOf(returnNonEmpty).Call([]Value{ValueOf(42)})
 
37813
+       if len(r) != 1 || r[0].Type() != TypeOf(nonEmptyStruct{}) || r[0].Field(0).Int() != 42 {
 
37814
+               t.Errorf("returnNonEmpty returned %s", r)
 
37815
+       }
 
37816
+       r = ValueOf(takesNonEmpty).Call([]Value{ValueOf(nonEmptyStruct{member: 42})})
 
37817
+       if len(r) != 1 || r[0].Type() != TypeOf(1) || r[0].Int() != 42 {
 
37818
+               t.Errorf("takesNonEmpty returned %s", r)
 
37819
+       }
 
37820
+}
 
37821
+
 
37822
 func TestMakeFunc(t *testing.T) {
 
37823
        switch runtime.GOARCH {
 
37824
        case "amd64", "386":
 
37825
@@ -1587,9 +1627,13 @@
 
37826
        }
 
37827
 }
 
37828
 
 
37829
-/* Not yet implemented for gccgo
 
37830
+func TestMethodValue(t *testing.T) {
 
37831
+       switch runtime.GOARCH {
 
37832
+       case "amd64", "386":
 
37833
+       default:
 
37834
+               t.Skip("reflect method values not implemented for " + runtime.GOARCH)
 
37835
+       }
 
37836
 
 
37837
-func TestMethodValue(t *testing.T) {
 
37838
        p := Point{3, 4}
 
37839
        var i int64
 
37840
 
 
37841
@@ -1658,8 +1702,6 @@
 
37842
        }
 
37843
 }
 
37844
 
 
37845
-*/
 
37846
-
 
37847
 // Reflect version of $GOROOT/test/method5.go
 
37848
 
 
37849
 // Concrete types implementing M method.
 
37850
@@ -1744,7 +1786,12 @@
 
37851
 func (t4 Tm4) M(x int, b byte) (byte, int) { return b, x + 40 }
 
37852
 
 
37853
 func TestMethod5(t *testing.T) {
 
37854
-       /* Not yet used for gccgo
 
37855
+       switch runtime.GOARCH {
 
37856
+       case "amd64", "386":
 
37857
+       default:
 
37858
+               t.Skip("reflect method values not implemented for " + runtime.GOARCH)
 
37859
+       }
 
37860
+
 
37861
        CheckF := func(name string, f func(int, byte) (byte, int), inc int) {
 
37862
                b, x := f(1000, 99)
 
37863
                if b != 99 || x != 1000+inc {
 
37864
@@ -1751,7 +1798,6 @@
 
37865
                        t.Errorf("%s(1000, 99) = %v, %v, want 99, %v", name, b, x, 1000+inc)
 
37866
                }
 
37867
        }
 
37868
-       */
 
37869
 
 
37870
        CheckV := func(name string, i Value, inc int) {
 
37871
                bx := i.Method(0).Call([]Value{ValueOf(1000), ValueOf(byte(99))})
 
37872
@@ -1761,9 +1807,7 @@
 
37873
                        t.Errorf("direct %s.M(1000, 99) = %v, %v, want 99, %v", name, b, x, 1000+inc)
 
37874
                }
 
37875
 
 
37876
-               /* Not yet implemented for gccgo
 
37877
                CheckF(name+".M", i.Method(0).Interface().(func(int, byte) (byte, int)), inc)
 
37878
-               */
 
37879
        }
 
37880
 
 
37881
        var TinterType = TypeOf(new(Tinter)).Elem()
 
37882
Index: libgo/go/reflect/makefunc.go
 
37883
===================================================================
 
37884
--- a/src/libgo/go/reflect/makefunc.go  (.../tags/gcc_4_8_2_release)
 
37885
+++ b/src/libgo/go/reflect/makefunc.go  (.../branches/gcc-4_8-branch)
 
37886
@@ -17,6 +17,11 @@
 
37887
        code uintptr
 
37888
        typ  *funcType
 
37889
        fn   func([]Value) []Value
 
37890
+
 
37891
+       // For gccgo we use the same entry point for functions and for
 
37892
+       // method values.
 
37893
+       method int
 
37894
+       rcvr   Value
 
37895
 }
 
37896
 
 
37897
 // MakeFunc returns a new function of the given Type
 
37898
@@ -61,7 +66,7 @@
 
37899
        dummy := makeFuncStub
 
37900
        code := **(**uintptr)(unsafe.Pointer(&dummy))
 
37901
 
 
37902
-       impl := &makeFuncImpl{code: code, typ: ftyp, fn: fn}
 
37903
+       impl := &makeFuncImpl{code: code, typ: ftyp, fn: fn, method: -1}
 
37904
 
 
37905
        return Value{t, unsafe.Pointer(&impl), flag(Func<<flagKindShift) | flagIndir}
 
37906
 }
 
37907
@@ -85,15 +90,94 @@
 
37908
                panic("reflect: internal error: invalid use of makePartialFunc")
 
37909
        }
 
37910
 
 
37911
+       switch runtime.GOARCH {
 
37912
+       case "amd64", "386":
 
37913
+       default:
 
37914
+               panic("reflect.makeMethodValue not implemented for " + runtime.GOARCH)
 
37915
+       }
 
37916
+
 
37917
        // Ignoring the flagMethod bit, v describes the receiver, not the method type.
 
37918
        fl := v.flag & (flagRO | flagAddr | flagIndir)
 
37919
        fl |= flag(v.typ.Kind()) << flagKindShift
 
37920
        rcvr := Value{v.typ, v.val, fl}
 
37921
 
 
37922
+       // v.Type returns the actual type of the method value.
 
37923
+       ft := v.Type().(*rtype)
 
37924
+
 
37925
+       // Indirect Go func value (dummy) to obtain
 
37926
+       // actual code address. (A Go func value is a pointer
 
37927
+       // to a C function pointer. http://golang.org/s/go11func.)
 
37928
+       dummy := makeFuncStub
 
37929
+       code := **(**uintptr)(unsafe.Pointer(&dummy))
 
37930
+
 
37931
        // Cause panic if method is not appropriate.
 
37932
        // The panic would still happen during the call if we omit this,
 
37933
        // but we want Interface() and other operations to fail early.
 
37934
-       methodReceiver(op, rcvr, int(v.flag)>>flagMethodShift)
 
37935
+       t, _, _ := methodReceiver(op, rcvr, int(v.flag)>>flagMethodShift)
 
37936
 
 
37937
-       panic("reflect makeMethodValue not implemented")
 
37938
+       fv := &makeFuncImpl{
 
37939
+               code:   code,
 
37940
+               typ:    (*funcType)(unsafe.Pointer(t)),
 
37941
+               method: int(v.flag) >> flagMethodShift,
 
37942
+               rcvr:   rcvr,
 
37943
+       }
 
37944
+
 
37945
+       return Value{ft, unsafe.Pointer(&fv), v.flag&flagRO | flag(Func)<<flagKindShift | flagIndir}
 
37946
 }
 
37947
+
 
37948
+// makeValueMethod takes a method function and returns a function that
 
37949
+// takes a value receiver and calls the real method with a pointer to
 
37950
+// it.
 
37951
+func makeValueMethod(v Value) Value {
 
37952
+       typ := v.typ
 
37953
+       if typ.Kind() != Func {
 
37954
+               panic("reflect: call of makeValueMethod with non-Func type")
 
37955
+       }
 
37956
+       if v.flag&flagMethodFn == 0 {
 
37957
+               panic("reflect: call of makeValueMethod with non-MethodFn")
 
37958
+       }
 
37959
+
 
37960
+       switch runtime.GOARCH {
 
37961
+       case "amd64", "386":
 
37962
+       default:
 
37963
+               panic("reflect.makeValueMethod not implemented for " + runtime.GOARCH)
 
37964
+       }
 
37965
+
 
37966
+       t := typ.common()
 
37967
+       ftyp := (*funcType)(unsafe.Pointer(t))
 
37968
+
 
37969
+       // Indirect Go func value (dummy) to obtain
 
37970
+       // actual code address. (A Go func value is a pointer
 
37971
+       // to a C function pointer. http://golang.org/s/go11func.)
 
37972
+       dummy := makeFuncStub
 
37973
+       code := **(**uintptr)(unsafe.Pointer(&dummy))
 
37974
+
 
37975
+       impl := &makeFuncImpl{
 
37976
+               code:   code,
 
37977
+               typ:    ftyp,
 
37978
+               method: -2,
 
37979
+               rcvr:   v,
 
37980
+       }
 
37981
+
 
37982
+       return Value{t, unsafe.Pointer(&impl), flag(Func<<flagKindShift) | flagIndir}
 
37983
+}
 
37984
+
 
37985
+// Call the function represented by a makeFuncImpl.
 
37986
+func (c *makeFuncImpl) call(in []Value) []Value {
 
37987
+       if c.method == -1 {
 
37988
+               return c.fn(in)
 
37989
+       } else if c.method == -2 {
 
37990
+               if c.typ.IsVariadic() {
 
37991
+                       return c.rcvr.CallSlice(in)
 
37992
+               } else {
 
37993
+                       return c.rcvr.Call(in)
 
37994
+               }
 
37995
+       } else {
 
37996
+               m := c.rcvr.Method(c.method)
 
37997
+               if c.typ.IsVariadic() {
 
37998
+                       return m.CallSlice(in)
 
37999
+               } else {
 
38000
+                       return m.Call(in)
 
38001
+               }
 
38002
+       }
 
38003
+}
 
38004
Index: libgo/go/reflect/makefuncgo_amd64.go
 
38005
===================================================================
 
38006
--- a/src/libgo/go/reflect/makefuncgo_amd64.go  (.../tags/gcc_4_8_2_release)
 
38007
+++ b/src/libgo/go/reflect/makefuncgo_amd64.go  (.../branches/gcc-4_8-branch)
 
38008
@@ -319,7 +319,7 @@
 
38009
        // All the real arguments have been found and turned into
 
38010
        // Value's.  Call the real function.
 
38011
 
 
38012
-       out := c.fn(in)
 
38013
+       out := c.call(in)
 
38014
 
 
38015
        if len(out) != len(ftyp.out) {
 
38016
                panic("reflect: wrong return count from function created by MakeFunc")
 
38017
Index: libgo/go/net/fd_unix.go
 
38018
===================================================================
 
38019
--- a/src/libgo/go/net/fd_unix.go       (.../tags/gcc_4_8_2_release)
 
38020
+++ b/src/libgo/go/net/fd_unix.go       (.../branches/gcc-4_8-branch)
 
38021
@@ -9,6 +9,7 @@
 
38022
 import (
 
38023
        "io"
 
38024
        "os"
 
38025
+       "runtime"
 
38026
        "sync"
 
38027
        "syscall"
 
38028
        "time"
 
38029
@@ -90,6 +91,16 @@
 
38030
                if err == nil || err == syscall.EISCONN {
 
38031
                        break
 
38032
                }
 
38033
+
 
38034
+               // On Solaris we can see EINVAL if the socket has
 
38035
+               // already been accepted and closed by the server.
 
38036
+               // Treat this as a successful connection--writes to
 
38037
+               // the socket will see EOF.  For details and a test
 
38038
+               // case in C see http://golang.org/issue/6828.
 
38039
+               if runtime.GOOS == "solaris" && err == syscall.EINVAL {
 
38040
+                       break
 
38041
+               }
 
38042
+
 
38043
                if err != syscall.EINPROGRESS && err != syscall.EALREADY && err != syscall.EINTR {
 
38044
                        return err
 
38045
                }
 
38046
Index: libgo/go/go/build/build.go
 
38047
===================================================================
 
38048
--- a/src/libgo/go/go/build/build.go    (.../tags/gcc_4_8_2_release)
 
38049
+++ b/src/libgo/go/go/build/build.go    (.../branches/gcc-4_8-branch)
 
38050
@@ -429,7 +429,7 @@
 
38051
        switch ctxt.Compiler {
 
38052
        case "gccgo":
 
38053
                dir, elem := pathpkg.Split(p.ImportPath)
 
38054
-               pkga = "pkg/gccgo/" + dir + "lib" + elem + ".a"
 
38055
+               pkga = "pkg/gccgo_" + ctxt.GOOS + "_" + ctxt.GOARCH + "/" + dir + "lib" + elem + ".a"
 
38056
        case "gc":
 
38057
                suffix := ""
 
38058
                if ctxt.InstallSuffix != "" {
 
38059
Index: libgo/go/go/build/syslist.go
 
38060
===================================================================
 
38061
--- a/src/libgo/go/go/build/syslist.go  (.../tags/gcc_4_8_2_release)
 
38062
+++ b/src/libgo/go/go/build/syslist.go  (.../branches/gcc-4_8-branch)
 
38063
@@ -0,0 +1,8 @@
 
38064
+// Copyright 2011 The Go Authors.  All rights reserved.
 
38065
+// Use of this source code is governed by a BSD-style
 
38066
+// license that can be found in the LICENSE file.
 
38067
+
 
38068
+package build
 
38069
+
 
38070
+const goosList = "darwin dragonfly freebsd linux netbsd openbsd plan9 windows solaris "
 
38071
+const goarchList = "386 amd64 arm alpha m68k mipso32 mipsn32 mipsn64 mipso64 ppc ppc64 sparc sparc64 "
 
38072
Index: libgo/go/syscall/libcall_linux.go
 
38073
===================================================================
 
38074
--- a/src/libgo/go/syscall/libcall_linux.go     (.../tags/gcc_4_8_2_release)
 
38075
+++ b/src/libgo/go/syscall/libcall_linux.go     (.../branches/gcc-4_8-branch)
 
38076
@@ -190,6 +190,9 @@
 
38077
 //sys  Adjtimex(buf *Timex) (state int, err error)
 
38078
 //adjtimex(buf *Timex) _C_int
 
38079
 
 
38080
+//sysnb        Dup3(oldfd int, newfd int, flags int) (err error)
 
38081
+//dup3(oldfd _C_int, newfd _C_int, flags _C_int) _C_int
 
38082
+
 
38083
 //sys  Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
 
38084
 //faccessat(dirfd _C_int, pathname *byte, mode _C_int, flags _C_int) _C_int
 
38085
 
 
38086
@@ -268,6 +271,9 @@
 
38087
        return origlen - len(buf), count, names
 
38088
 }
 
38089
 
 
38090
+//sys  Getxattr(path string, attr string, dest []byte) (sz int, err error)
 
38091
+//getxattr(path *byte, attr *byte, buf *byte, count Size_t) Ssize_t
 
38092
+
 
38093
 //sys  InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error)
 
38094
 //inotify_add_watch(fd _C_int, pathname *byte, mask uint32) _C_int
 
38095
 
 
38096
@@ -283,6 +289,9 @@
 
38097
 //sys  Klogctl(typ int, buf []byte) (n int, err error)
 
38098
 //klogctl(typ _C_int, bufp *byte, len _C_int) _C_int
 
38099
 
 
38100
+//sys  Listxattr(path string, dest []byte) (sz int, err error)
 
38101
+//listxattr(path *byte, list *byte, size Size_t) Ssize_t
 
38102
+
 
38103
 //sys  Mkdirat(dirfd int, path string, mode uint32) (err error)
 
38104
 //mkdirat(dirfd _C_int, path *byte, mode Mode_t) _C_int
 
38105
 
 
38106
@@ -305,6 +314,9 @@
 
38107
 //sys  PivotRoot(newroot string, putold string) (err error)
 
38108
 //pivot_root(newroot *byte, putold *byte) _C_int
 
38109
 
 
38110
+//sys  Removexattr(path string, attr string) (err error)
 
38111
+//removexattr(path *byte, name *byte) _C_int
 
38112
+
 
38113
 //sys  Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
 
38114
 //renameat(olddirfd _C_int, oldpath *byte, newdirfd _C_int, newpath *byte) _C_int
 
38115
 
 
38116
@@ -338,6 +350,9 @@
 
38117
 //sysnb        Setresuid(ruid int, eguid int, suid int) (err error)
 
38118
 //setresuid(ruid Uid_t, euid Uid_t, suid Uid_t) _C_int
 
38119
 
 
38120
+//sys  Setxattr(path string, attr string, data []byte, flags int) (err error)
 
38121
+//setxattr(path *byte, name *byte, value *byte, size Size_t, flags _C_int) _C_int
 
38122
+
 
38123
 //sys  splice(rfd int, roff *_loff_t, wfd int, woff *_loff_t, len int, flags int) (n int64, err error)
 
38124
 //splice(rfd _C_int, roff *_loff_t, wfd _C_int, woff *_loff_t, len Size_t, flags _C_uint) Ssize_t
 
38125
 func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
 
38126
Index: libgo/go/syscall/socket.go
 
38127
===================================================================
 
38128
--- a/src/libgo/go/syscall/socket.go    (.../tags/gcc_4_8_2_release)
 
38129
+++ b/src/libgo/go/syscall/socket.go    (.../branches/gcc-4_8-branch)
 
38130
@@ -25,7 +25,7 @@
 
38131
        Pad  [96]int8
 
38132
 }
 
38133
 
 
38134
-const SizeofSockaddrAny = 0x1c
 
38135
+const SizeofSockaddrAny = 0x6c
 
38136
 
 
38137
 type SockaddrInet4 struct {
 
38138
        Port int
 
38139
Index: libgo/go/syscall/libcall_posix.go
 
38140
===================================================================
 
38141
--- a/src/libgo/go/syscall/libcall_posix.go     (.../tags/gcc_4_8_2_release)
 
38142
+++ b/src/libgo/go/syscall/libcall_posix.go     (.../branches/gcc-4_8-branch)
 
38143
@@ -238,6 +238,9 @@
 
38144
 //sysnb        Getppid() (ppid int)
 
38145
 //getppid() Pid_t
 
38146
 
 
38147
+//sys Getpriority(which int, who int) (prio int, err error)
 
38148
+//getpriority(which _C_int, who _C_int) _C_int
 
38149
+
 
38150
 //sysnb        Getrlimit(resource int, rlim *Rlimit) (err error)
 
38151
 //getrlimit(resource _C_int, rlim *Rlimit) _C_int
 
38152
 
 
38153
@@ -307,6 +310,9 @@
 
38154
 //sysnb        Setpgid(pid int, pgid int) (err error)
 
38155
 //setpgid(pid Pid_t, pgid Pid_t) _C_int
 
38156
 
 
38157
+//sys Setpriority(which int, who int, prio int) (err error)
 
38158
+//setpriority(which _C_int, who _C_int, prio _C_int) _C_int
 
38159
+
 
38160
 //sysnb        Setreuid(ruid int, euid int) (err error)
 
38161
 //setreuid(ruid Uid_t, euid Uid_t) _C_int
 
38162
 
 
38163
Index: libgo/Makefile.am
 
38164
===================================================================
 
38165
--- a/src/libgo/Makefile.am     (.../tags/gcc_4_8_2_release)
 
38166
+++ b/src/libgo/Makefile.am     (.../branches/gcc-4_8-branch)
 
38167
@@ -424,6 +424,7 @@
 
38168
        runtime/go-caller.c \
 
38169
        runtime/go-callers.c \
 
38170
        runtime/go-can-convert-interface.c \
 
38171
+       runtime/go-cdiv.c \
 
38172
        runtime/go-cgo.c \
 
38173
        runtime/go-check-interface.c \
 
38174
        runtime/go-construct-map.c \
 
38175
@@ -1254,7 +1255,7 @@
 
38176
        go/go/build/build.go \
 
38177
        go/go/build/doc.go \
 
38178
        go/go/build/read.go \
 
38179
-       syslist.go
 
38180
+       go/go/build/syslist.go
 
38181
 go_go_doc_files = \
 
38182
        go/go/doc/comment.go \
 
38183
        go/go/doc/doc.go \
 
38184
@@ -2712,15 +2713,6 @@
 
38185
        @$(CHECK)
 
38186
 .PHONY: go/build/check
 
38187
 
 
38188
-syslist.go: s-syslist; @true
 
38189
-s-syslist: Makefile
 
38190
-       echo '// Generated automatically by make.' >syslist.go.tmp
 
38191
-       echo 'package build' >>syslist.go.tmp
 
38192
-       echo 'const goosList = "$(GOOS)"' >>syslist.go.tmp
 
38193
-       echo 'const goarchList = "$(GOARCH)"' >>syslist.go.tmp
 
38194
-       $(SHELL) $(srcdir)/../move-if-change syslist.go.tmp syslist.go
 
38195
-       $(STAMP) $@
 
38196
-
 
38197
 @go_include@ go/doc.lo.dep
 
38198
 go/doc.lo.dep: $(go_go_doc_files)
 
38199
        $(BUILDDEPS)
 
38200
Index: libgfortran/ChangeLog
 
38201
===================================================================
 
38202
--- a/src/libgfortran/ChangeLog (.../tags/gcc_4_8_2_release)
 
38203
+++ b/src/libgfortran/ChangeLog (.../branches/gcc-4_8-branch)
 
38204
@@ -1,3 +1,56 @@
 
38205
+2014-03-15  Dominique d'Humieres  <dominiq@lps.ens.fr>
 
38206
+
 
38207
+       Backport from mainline
 
38208
+       PR libgfortran/60128
 
38209
+       * io/write_float.def (output_float): Remove unused variable
 
38210
+       nzero_real. Replace a double space with a single one.
 
38211
+       (determine_en_precision): Fix wrong handling of the EN format.
 
38212
+
 
38213
+2014-03-15  Jerry DeLisle  <jvdelisle@gcc.gnu>
 
38214
+
 
38215
+       Backport from mainline
 
38216
+       PR libfortran/58324
 
38217
+       PR libfortran/38199
 
38218
+       * io/list_read.c (finish_list_read): Read one character to check
 
38219
+       for the end of the file.  If it is the end, then issue the file
 
38220
+       end error message.  If not, use eat_line to reach the end
 
38221
+       without giving error.  The next attempt to read will then
 
38222
+       issue the error as described above.
 
38223
+       * io/read.c (read_decimal): Quickly skip spaces to avoid calls
 
38224
+       to next_char.
 
38225
+       * io/unit.c (is_trim_ok): New helper function to check various
 
38226
+       conditions to see if its OK to trim the internal unit string.
 
38227
+       (get_internal_unit): Use LEN_TRIM to shorten selected internal
 
38228
+       unit strings for optimizing READ. Enable this optimization for
 
38229
+       formatted READ.
 
38230
+
 
38231
+2014-02-21  Jerry DeLisle  <jvdelisle@gcc.gnu>
 
38232
+           Dominique d'Humieres  <dominiq@lps.ens.fr>
 
38233
+           Steven G. Kargl  <kargl@gcc.gnu.org>
 
38234
+
 
38235
+       Backport from mainline
 
38236
+       PR libfortran/59700
 
38237
+       PR libfortran/59764
 
38238
+       * io/io.h (struct st_parameter_dt): Assign expanded_read flag to
 
38239
+       unused bit. Define new variable line_buffer_pos.
 
38240
+       * io/list_read.c (free_saved, next_char, l_push_char,
 
38241
+       read_logical, read_real): Replace use of item_count with
 
38242
+       line_buffer_pos for line_buffer look ahead.
 
38243
+       (read_logical, read_integer, parse_real, read_real, check_type):
 
38244
+       Adjust location of free_line to after generating error messages
 
38245
+       to retain the correct item count for the message. 
 
38246
+
 
38247
+2014-02-15  Jerry DeLisle  <jvdelisle@gcc.gnu>
 
38248
+           Dominique d'Humieres  <dominiq@lps.ens.fr>
 
38249
+
 
38250
+       Backport from mainline
 
38251
+       PR libfortran/59771
 
38252
+       PR libfortran/59774
 
38253
+       PR libfortran/59836
 
38254
+       * io/write_float.def (output_float): Fix wrong handling of the
 
38255
+       Fw.0 format.
 
38256
+       (output_float_FMT_G_): Fixes rounding issues with -m32.
 
38257
+
 
38258
 2013-10-16  Release Manager
 
38259
 
 
38260
        * GCC 4.8.2 released.
 
38261
Index: libgfortran/io/list_read.c
 
38262
===================================================================
 
38263
--- a/src/libgfortran/io/list_read.c    (.../tags/gcc_4_8_2_release)
 
38264
+++ b/src/libgfortran/io/list_read.c    (.../branches/gcc-4_8-branch)
 
38265
@@ -118,7 +118,7 @@
 
38266
 static void
 
38267
 free_line (st_parameter_dt *dtp)
 
38268
 {
 
38269
-  dtp->u.p.item_count = 0;
 
38270
+  dtp->u.p.line_buffer_pos = 0;
 
38271
   dtp->u.p.line_buffer_enabled = 0;
 
38272
 
 
38273
   if (dtp->u.p.line_buffer == NULL)
 
38274
@@ -150,15 +150,15 @@
 
38275
     {
 
38276
       dtp->u.p.at_eol = 0;
 
38277
 
 
38278
-      c = dtp->u.p.line_buffer[dtp->u.p.item_count];
 
38279
-      if (c != '\0' && dtp->u.p.item_count < 64)
 
38280
+      c = dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos];
 
38281
+      if (c != '\0' && dtp->u.p.line_buffer_pos < 64)
 
38282
        {
 
38283
-         dtp->u.p.line_buffer[dtp->u.p.item_count] = '\0';
 
38284
-         dtp->u.p.item_count++;
 
38285
+         dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos] = '\0';
 
38286
+         dtp->u.p.line_buffer_pos++;
 
38287
          goto done;
 
38288
        }
 
38289
 
 
38290
-      dtp->u.p.item_count = 0;
 
38291
+      dtp->u.p.line_buffer_pos = 0;
 
38292
       dtp->u.p.line_buffer_enabled = 0;
 
38293
     }    
 
38294
 
 
38295
@@ -640,7 +640,7 @@
 
38296
   if (dtp->u.p.line_buffer == NULL)
 
38297
     dtp->u.p.line_buffer = xcalloc (SCRATCH_SIZE, 1);
 
38298
 
 
38299
-  dtp->u.p.line_buffer[dtp->u.p.item_count++] = c;
 
38300
+  dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos++] = c;
 
38301
 }
 
38302
 
 
38303
 
 
38304
@@ -750,7 +750,7 @@
 
38305
        {
 
38306
          dtp->u.p.nml_read_error = 1;
 
38307
          dtp->u.p.line_buffer_enabled = 1;
 
38308
-         dtp->u.p.item_count = 0;
 
38309
+         dtp->u.p.line_buffer_pos = 0;
 
38310
          return;
 
38311
        }
 
38312
       
 
38313
@@ -758,14 +758,17 @@
 
38314
 
 
38315
  bad_logical:
 
38316
 
 
38317
-  free_line (dtp);
 
38318
-
 
38319
   if (nml_bad_return (dtp, c))
 
38320
-    return;
 
38321
+    {
 
38322
+      free_line (dtp);
 
38323
+      return;
 
38324
+    }
 
38325
 
 
38326
+
 
38327
   free_saved (dtp);
 
38328
   if (c == EOF)
 
38329
     {
 
38330
+      free_line (dtp);
 
38331
       hit_eof (dtp);
 
38332
       return;
 
38333
     }
 
38334
@@ -773,6 +776,7 @@
 
38335
     eat_line (dtp);
 
38336
   snprintf (message, MSGLEN, "Bad logical value while reading item %d",
 
38337
              dtp->u.p.item_count);
 
38338
+  free_line (dtp);
 
38339
   generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
 
38340
   return;
 
38341
 
 
38342
@@ -913,9 +917,9 @@
 
38343
   else if (c != '\n')
 
38344
     eat_line (dtp);
 
38345
 
 
38346
-  free_line (dtp);
 
38347
   snprintf (message, MSGLEN, "Bad integer for item %d in list input",
 
38348
              dtp->u.p.item_count);
 
38349
+  free_line (dtp);
 
38350
   generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
 
38351
 
 
38352
   return;
 
38353
@@ -1298,9 +1302,9 @@
 
38354
   else if (c != '\n')
 
38355
     eat_line (dtp);
 
38356
 
 
38357
-  free_line (dtp);
 
38358
   snprintf (message, MSGLEN, "Bad floating point number for item %d",
 
38359
              dtp->u.p.item_count);
 
38360
+  free_line (dtp);
 
38361
   generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
 
38362
 
 
38363
   return 1;
 
38364
@@ -1406,9 +1410,9 @@
 
38365
   else if (c != '\n')   
 
38366
     eat_line (dtp);
 
38367
 
 
38368
-  free_line (dtp);
 
38369
   snprintf (message, MSGLEN, "Bad complex value in item %d of list input",
 
38370
              dtp->u.p.item_count);
 
38371
+  free_line (dtp);
 
38372
   generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
 
38373
 }
 
38374
 
 
38375
@@ -1770,7 +1774,7 @@
 
38376
     {
 
38377
       dtp->u.p.nml_read_error = 1;
 
38378
       dtp->u.p.line_buffer_enabled = 1;
 
38379
-      dtp->u.p.item_count = 0;
 
38380
+      dtp->u.p.line_buffer_pos = 0;
 
38381
       return;
 
38382
     }
 
38383
 
 
38384
@@ -1789,9 +1793,9 @@
 
38385
   else if (c != '\n')
 
38386
     eat_line (dtp);
 
38387
 
 
38388
-  free_line (dtp);
 
38389
   snprintf (message, MSGLEN, "Bad real number in item %d of list input",
 
38390
              dtp->u.p.item_count);
 
38391
+  free_line (dtp);
 
38392
   generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
 
38393
 }
 
38394
 
 
38395
@@ -1806,11 +1810,10 @@
 
38396
 
 
38397
   if (dtp->u.p.saved_type != BT_UNKNOWN && dtp->u.p.saved_type != type)
 
38398
     {
 
38399
-      free_line (dtp);
 
38400
       snprintf (message, MSGLEN, "Read type %s where %s was expected for item %d",
 
38401
                  type_name (dtp->u.p.saved_type), type_name (type),
 
38402
                  dtp->u.p.item_count);
 
38403
-
 
38404
+      free_line (dtp);
 
38405
       generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
 
38406
       return 1;
 
38407
     }
 
38408
@@ -1820,12 +1823,12 @@
 
38409
 
 
38410
   if (dtp->u.p.saved_length != len)
 
38411
     {
 
38412
-      free_line (dtp);
 
38413
       snprintf (message, MSGLEN,
 
38414
                  "Read kind %d %s where kind %d is required for item %d",
 
38415
                  dtp->u.p.saved_length, type_name (dtp->u.p.saved_type), len,
 
38416
                  dtp->u.p.item_count);
 
38417
       generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
 
38418
+      free_line (dtp);
 
38419
       return 1;
 
38420
     }
 
38421
 
 
38422
@@ -2031,8 +2034,6 @@
 
38423
 void
 
38424
 finish_list_read (st_parameter_dt *dtp)
 
38425
 {
 
38426
-  int err;
 
38427
-
 
38428
   free_saved (dtp);
 
38429
 
 
38430
   fbuf_flush (dtp->u.p.current_unit, dtp->u.p.mode);
 
38431
@@ -2043,12 +2044,22 @@
 
38432
       return;
 
38433
     }
 
38434
 
 
38435
-  err = eat_line (dtp);
 
38436
-  if (err == LIBERROR_END)
 
38437
+  if (!is_internal_unit (dtp))
 
38438
     {
 
38439
-      free_line (dtp);
 
38440
-      hit_eof (dtp);
 
38441
+      int c;
 
38442
+      c = next_char (dtp);
 
38443
+      if (c == EOF)
 
38444
+       {
 
38445
+         free_line (dtp);
 
38446
+         hit_eof (dtp);
 
38447
+         return;
 
38448
+       }
 
38449
+      if (c != '\n')
 
38450
+       eat_line (dtp);
 
38451
     }
 
38452
+
 
38453
+  free_line (dtp);
 
38454
+
 
38455
 }
 
38456
 
 
38457
 /*                     NAMELIST INPUT
 
38458
Index: libgfortran/io/read.c
 
38459
===================================================================
 
38460
--- a/src/libgfortran/io/read.c (.../tags/gcc_4_8_2_release)
 
38461
+++ b/src/libgfortran/io/read.c (.../branches/gcc-4_8-branch)
 
38462
@@ -655,7 +655,13 @@
 
38463
        
 
38464
       if (c == ' ')
 
38465
         {
 
38466
-         if (dtp->u.p.blank_status == BLANK_NULL) continue;
 
38467
+         if (dtp->u.p.blank_status == BLANK_NULL)
 
38468
+           {
 
38469
+             /* Skip spaces.  */
 
38470
+             for ( ; w > 0; p++, w--)
 
38471
+               if (*p != ' ') break; 
 
38472
+             continue;
 
38473
+           }
 
38474
          if (dtp->u.p.blank_status == BLANK_ZERO) c = '0';
 
38475
         }
 
38476
         
 
38477
Index: libgfortran/io/io.h
 
38478
===================================================================
 
38479
--- a/src/libgfortran/io/io.h   (.../tags/gcc_4_8_2_release)
 
38480
+++ b/src/libgfortran/io/io.h   (.../branches/gcc-4_8-branch)
 
38481
@@ -424,7 +424,10 @@
 
38482
          unsigned g0_no_blanks : 1;
 
38483
          /* Used to signal use of free_format_data.  */
 
38484
          unsigned format_not_saved : 1;
 
38485
-         /* 14 unused bits.  */
 
38486
+         /* A flag used to identify when a non-standard expanded namelist read
 
38487
+            has occurred.  */
 
38488
+         unsigned expanded_read : 1;
 
38489
+         /* 13 unused bits.  */
 
38490
 
 
38491
          /* Used for ungetc() style functionality. Possible values
 
38492
             are an unsigned char, EOF, or EOF - 1 used to mark the
 
38493
@@ -441,9 +444,8 @@
 
38494
          char *line_buffer;
 
38495
          struct format_data *fmt;
 
38496
          namelist_info *ionml;
 
38497
-         /* A flag used to identify when a non-standard expanded namelist read
 
38498
-            has occurred.  */
 
38499
-         int expanded_read;
 
38500
+         /* Current position within the look-ahead line buffer.  */
 
38501
+         int line_buffer_pos;
 
38502
          /* Storage area for values except for strings.  Must be
 
38503
             large enough to hold a complex value (two reals) of the
 
38504
             largest kind.  */
 
38505
Index: libgfortran/io/unit.c
 
38506
===================================================================
 
38507
--- a/src/libgfortran/io/unit.c (.../tags/gcc_4_8_2_release)
 
38508
+++ b/src/libgfortran/io/unit.c (.../branches/gcc-4_8-branch)
 
38509
@@ -29,6 +29,7 @@
 
38510
 #include "unix.h"
 
38511
 #include <stdlib.h>
 
38512
 #include <string.h>
 
38513
+#include <stdbool.h>
 
38514
 
 
38515
 
 
38516
 /* IO locking rules:
 
38517
@@ -375,6 +376,38 @@
 
38518
 }
 
38519
 
 
38520
 
 
38521
+/* Helper function to check rank, stride, format string, and namelist.
 
38522
+   This is used for optimization. You can't trim out blanks or shorten
 
38523
+   the string if trailing spaces are significant.  */
 
38524
+static bool
 
38525
+is_trim_ok (st_parameter_dt *dtp)
 
38526
+{
 
38527
+  /* Check rank and stride.  */
 
38528
+  if (dtp->internal_unit_desc
 
38529
+      && (GFC_DESCRIPTOR_RANK (dtp->internal_unit_desc) > 1
 
38530
+         || GFC_DESCRIPTOR_STRIDE(dtp->internal_unit_desc, 0) != 1))
 
38531
+    return false;
 
38532
+  /* Format strings can not have 'BZ' or '/'.  */
 
38533
+  if (dtp->common.flags & IOPARM_DT_HAS_FORMAT)
 
38534
+    {
 
38535
+      char *p = dtp->format;
 
38536
+      off_t i;
 
38537
+      if (dtp->common.flags & IOPARM_DT_HAS_BLANK)
 
38538
+       return false;
 
38539
+      for (i = 0; i < dtp->format_len; i++)
 
38540
+       {
 
38541
+         if (p[i] == '/') return false;
 
38542
+         if (p[i] == 'b' || p[i] == 'B')
 
38543
+           if (p[i+1] == 'z' || p[i+1] == 'Z')
 
38544
+             return false;
 
38545
+       }
 
38546
+    }
 
38547
+  if (dtp->u.p.ionml) /* A namelist.  */
 
38548
+    return false;
 
38549
+  return true;
 
38550
+}
 
38551
+
 
38552
+
 
38553
 gfc_unit *
 
38554
 get_internal_unit (st_parameter_dt *dtp)
 
38555
 {
 
38556
@@ -402,6 +435,22 @@
 
38557
      some other file I/O unit.  */
 
38558
   iunit->unit_number = -1;
 
38559
 
 
38560
+  /* As an optimization, adjust the unit record length to not
 
38561
+     include trailing blanks. This will not work under certain conditions
 
38562
+     where trailing blanks have significance.  */
 
38563
+  if (dtp->u.p.mode == READING && is_trim_ok (dtp))
 
38564
+    {
 
38565
+      int len;
 
38566
+      if (dtp->common.unit == 0)
 
38567
+         len = string_len_trim (dtp->internal_unit_len,
 
38568
+                                                  dtp->internal_unit);
 
38569
+      else
 
38570
+         len = string_len_trim_char4 (dtp->internal_unit_len,
 
38571
+                             (const gfc_char4_t*) dtp->internal_unit);
 
38572
+      dtp->internal_unit_len = len; 
 
38573
+      iunit->recl = dtp->internal_unit_len;
 
38574
+    }
 
38575
+
 
38576
   /* Set up the looping specification from the array descriptor, if any.  */
 
38577
 
 
38578
   if (is_array_io (dtp))
 
38579
@@ -414,27 +463,6 @@
 
38580
 
 
38581
       start_record *= iunit->recl;
 
38582
     }
 
38583
-  else
 
38584
-    {
 
38585
-      /* If we are not processing an array, adjust the unit record length not
 
38586
-        to include trailing blanks for list-formatted reads.  */
 
38587
-      if (dtp->u.p.mode == READING && !(dtp->common.flags & IOPARM_DT_HAS_FORMAT))
 
38588
-       {
 
38589
-         if (dtp->common.unit == 0)
 
38590
-           {
 
38591
-             dtp->internal_unit_len =
 
38592
-               string_len_trim (dtp->internal_unit_len, dtp->internal_unit);
 
38593
-             iunit->recl = dtp->internal_unit_len;
 
38594
-           }
 
38595
-         else
 
38596
-           {
 
38597
-             dtp->internal_unit_len =
 
38598
-               string_len_trim_char4 (dtp->internal_unit_len,
 
38599
-                                      (const gfc_char4_t*) dtp->internal_unit);
 
38600
-             iunit->recl = dtp->internal_unit_len;
 
38601
-           }
 
38602
-       }
 
38603
-    }
 
38604
 
 
38605
   /* Set initial values for unit parameters.  */
 
38606
   if (dtp->common.unit)
 
38607
Index: libgfortran/io/write_float.def
 
38608
===================================================================
 
38609
--- a/src/libgfortran/io/write_float.def        (.../tags/gcc_4_8_2_release)
 
38610
+++ b/src/libgfortran/io/write_float.def        (.../branches/gcc-4_8-branch)
 
38611
@@ -125,8 +125,6 @@
 
38612
   int nzero;
 
38613
   /* Number of digits after the decimal point.  */
 
38614
   int nafter;
 
38615
-  /* Number of zeros after the decimal point, whatever the precision.  */
 
38616
-  int nzero_real;
 
38617
   int leadzero;
 
38618
   int nblanks;
 
38619
   int ndigits, edigits;
 
38620
@@ -138,7 +136,6 @@
 
38621
   p = dtp->u.p.scale_factor;
 
38622
 
 
38623
   rchar = '5';
 
38624
-  nzero_real = -1;
 
38625
 
 
38626
   /* We should always know the field width and precision.  */
 
38627
   if (d < 0)
 
38628
@@ -191,7 +188,7 @@
 
38629
              if (nafter < 0)
 
38630
                nafter = 0;
 
38631
              nafter = d;
 
38632
-             nzero = nzero_real = 0;
 
38633
+             nzero = 0;
 
38634
            }
 
38635
          else /* p < 0  */
 
38636
            {
 
38637
@@ -211,7 +208,6 @@
 
38638
                  nafter = d + nbefore;
 
38639
                  nbefore = 0;
 
38640
                }
 
38641
-             nzero_real = nzero;
 
38642
              if (nzero > d)
 
38643
                nzero = d;
 
38644
            }
 
38645
@@ -218,7 +214,7 @@
 
38646
        }
 
38647
       else
 
38648
        {
 
38649
-         nzero = nzero_real = 0;
 
38650
+         nzero = 0;
 
38651
          nafter = d;
 
38652
        }
 
38653
 
 
38654
@@ -373,7 +369,7 @@
 
38655
   updown:
 
38656
 
 
38657
   rchar = '0';
 
38658
-  if (w > 0 && d == 0 && p == 0)
 
38659
+  if (ft != FMT_F && w > 0 && d == 0 && p == 0)
 
38660
     nbefore = 1;
 
38661
   /* Scan for trailing zeros to see if we really need to round it.  */
 
38662
   for(i = nbefore + nafter; i < ndigits; i++)
 
38663
@@ -386,13 +382,14 @@
 
38664
   do_rnd:
 
38665
  
 
38666
   if (nbefore + nafter == 0)
 
38667
+    /* Handle the case Fw.0 and value < 1.0 */
 
38668
     {
 
38669
       ndigits = 0;
 
38670
-      if (nzero_real == d && digits[0] >= rchar)
 
38671
+      if (digits[0] >= rchar)
 
38672
        {
 
38673
          /* We rounded to zero but shouldn't have */
 
38674
-         nzero--;
 
38675
-         nafter = 1;
 
38676
+         nbefore = 1;
 
38677
+         digits--;
 
38678
          digits[0] = '1';
 
38679
          ndigits = 1;
 
38680
        }
 
38681
@@ -990,7 +987,7 @@
 
38682
   int d = f->u.real.d;\
 
38683
   int w = f->u.real.w;\
 
38684
   fnode newf;\
 
38685
-  GFC_REAL_ ## x rexp_d, r = 0.5;\
 
38686
+  GFC_REAL_ ## x exp_d, r = 0.5, r_sc;\
 
38687
   int low, high, mid;\
 
38688
   int ubound, lbound;\
 
38689
   char *p, pad = ' ';\
 
38690
@@ -997,6 +994,7 @@
 
38691
   int save_scale_factor, nb = 0;\
 
38692
   try result;\
 
38693
   int nprinted, precision;\
 
38694
+  volatile GFC_REAL_ ## x temp;\
 
38695
 \
 
38696
   save_scale_factor = dtp->u.p.scale_factor;\
 
38697
 \
 
38698
@@ -1015,10 +1013,13 @@
 
38699
        break;\
 
38700
     }\
 
38701
 \
 
38702
-  rexp_d = calculate_exp_ ## x (-d);\
 
38703
-  if ((m > 0.0 && ((m < 0.1 - 0.1 * r * rexp_d) || (rexp_d * (m + r) >= 1.0)))\
 
38704
+  exp_d = calculate_exp_ ## x (d);\
 
38705
+  r_sc = (1 - r / exp_d);\
 
38706
+  temp = 0.1 * r_sc;\
 
38707
+  if ((m > 0.0 && ((m < temp) || (r >= (exp_d - m))))\
 
38708
       || ((m == 0.0) && !(compile_options.allow_std\
 
38709
-                         & (GFC_STD_F2003 | GFC_STD_F2008))))\
 
38710
+                         & (GFC_STD_F2003 | GFC_STD_F2008)))\
 
38711
+      ||  d == 0)\
 
38712
     { \
 
38713
       newf.format = FMT_E;\
 
38714
       newf.u.real.w = w;\
 
38715
@@ -1038,10 +1039,9 @@
 
38716
 \
 
38717
   while (low <= high)\
 
38718
     { \
 
38719
-      volatile GFC_REAL_ ## x temp;\
 
38720
       mid = (low + high) / 2;\
 
38721
 \
 
38722
-      temp = (calculate_exp_ ## x (mid - 1) * (1 - r * rexp_d));\
 
38723
+      temp = (calculate_exp_ ## x (mid - 1) * r_sc);\
 
38724
 \
 
38725
       if (m < temp)\
 
38726
         { \
 
38727
@@ -1121,14 +1121,36 @@
 
38728
 /* EN format is tricky since the number of significant digits depends
 
38729
    on the magnitude.  Solve it by first printing a temporary value and
 
38730
    figure out the number of significant digits from the printed
 
38731
-   exponent.  */
 
38732
+   exponent.  Values y, 0.95*10.0**e <= y <10.0**e, are rounded to
 
38733
+   10.0**e even when the final result will not be rounded to 10.0**e.
 
38734
+   For these values the exponent returned by atoi has to be decremented
 
38735
+   by one. The values y in the ranges
 
38736
+       (1000.0-0.5*10.0**(-d))*10.0**(3*n) <= y < 10.0*(3*(n+1))  
 
38737
+        (100.0-0.5*10.0**(-d))*10.0**(3*n) <= y < 10.0*(3*n+2)
 
38738
+         (10.0-0.5*10.0**(-d))*10.0**(3*n) <= y < 10.0*(3*n+1)
 
38739
+   are correctly rounded respectively to 1.0...0*10.0*(3*(n+1)),
 
38740
+   100.0...0*10.0*(3*n), and 10.0...0*10.0*(3*n), where 0...0
 
38741
+   represents d zeroes, by the lines 279 to 297. */
 
38742
 
 
38743
 #define EN_PREC(x,y)\
 
38744
 {\
 
38745
-    GFC_REAL_ ## x tmp;                                \
 
38746
-    tmp = * (GFC_REAL_ ## x *)source;                          \
 
38747
+    volatile GFC_REAL_ ## x tmp, one = 1.0;\
 
38748
+    tmp = * (GFC_REAL_ ## x *)source;\
 
38749
     if (isfinite (tmp))                                                \
 
38750
-      nprinted = DTOA(y,0,tmp);                                        \
 
38751
+      {\
 
38752
+       nprinted = DTOA(y,0,tmp);\
 
38753
+       int e = atoi (&buffer[4]);\
 
38754
+       if (buffer[1] == '1')\
 
38755
+         {\
 
38756
+           tmp = (calculate_exp_ ## x (-e)) * tmp;\
 
38757
+           tmp = one - (tmp < 0 ? -tmp : tmp); \
 
38758
+           if (tmp > 0)\
 
38759
+             e = e - 1;\
 
38760
+         }\
 
38761
+       nbefore = e%3;\
 
38762
+       if (nbefore < 0)\
 
38763
+         nbefore = 3 + nbefore;\
 
38764
+      }\
 
38765
     else\
 
38766
       nprinted = -1;\
 
38767
 }\
 
38768
@@ -1140,6 +1162,7 @@
 
38769
   int nprinted;
 
38770
   char buffer[10];
 
38771
   const size_t size = 10;
 
38772
+  int nbefore; /* digits before decimal point - 1.  */
 
38773
 
 
38774
   switch (len)
 
38775
     {
 
38776
@@ -1172,16 +1195,6 @@
 
38777
   if (nprinted == -1)
 
38778
     return -1;
 
38779
 
 
38780
-  int e = atoi (&buffer[5]);
 
38781
-  int nbefore; /* digits before decimal point - 1.  */
 
38782
-  if (e >= 0)
 
38783
-    nbefore = e % 3;
 
38784
-  else
 
38785
-    {
 
38786
-      nbefore = (-e) % 3;
 
38787
-      if (nbefore != 0)
 
38788
-       nbefore = 3 - nbefore;
 
38789
-    }
 
38790
   int prec = f->u.real.d + nbefore;
 
38791
   if (dtp->u.p.current_unit->round_status != ROUND_UNSPECIFIED
 
38792
       && dtp->u.p.current_unit->round_status != ROUND_PROCDEFINED)
 
38793
Index: libcpp/macro.c
 
38794
===================================================================
 
38795
--- a/src/libcpp/macro.c        (.../tags/gcc_4_8_2_release)
 
38796
+++ b/src/libcpp/macro.c        (.../branches/gcc-4_8-branch)
 
38797
@@ -1108,21 +1108,22 @@
 
38798
 
 
38799
       if (macro->paramc == 0)
 
38800
        {
 
38801
+         unsigned tokens_count = macro_real_token_count (macro);
 
38802
          if (CPP_OPTION (pfile, track_macro_expansion))
 
38803
            {
 
38804
-             unsigned int i, count = macro->count;
 
38805
+             unsigned int i;
 
38806
              const cpp_token *src = macro->exp.tokens;
 
38807
              const struct line_map *map;
 
38808
              source_location *virt_locs = NULL;
 
38809
-             _cpp_buff *macro_tokens =
 
38810
-               tokens_buff_new (pfile, count, &virt_locs);
 
38811
+             _cpp_buff *macro_tokens
 
38812
+               = tokens_buff_new (pfile, tokens_count, &virt_locs);
 
38813
 
 
38814
              /* Create a macro map to record the locations of the
 
38815
                 tokens that are involved in the expansion. LOCATION
 
38816
                 is the location of the macro expansion point.  */
 
38817
-             map  = linemap_enter_macro (pfile->line_table,
 
38818
-                                         node, location, count);
 
38819
-             for (i = 0; i < count; ++i)
 
38820
+             map = linemap_enter_macro (pfile->line_table,
 
38821
+                                        node, location, tokens_count);
 
38822
+             for (i = 0; i < tokens_count; ++i)
 
38823
                {
 
38824
                  tokens_buff_add_token (macro_tokens, virt_locs,
 
38825
                                         src, src->src_loc,
 
38826
@@ -1134,16 +1135,12 @@
 
38827
                                            virt_locs,
 
38828
                                            (const cpp_token **)
 
38829
                                            macro_tokens->base,
 
38830
-                                           count);
 
38831
-             num_macro_tokens_counter += count;
 
38832
+                                           tokens_count);
 
38833
            }
 
38834
          else
 
38835
-           {
 
38836
-             unsigned tokens_count = macro_real_token_count (macro);
 
38837
-             _cpp_push_token_context (pfile, node, macro->exp.tokens,
 
38838
-                                      tokens_count);
 
38839
-             num_macro_tokens_counter += tokens_count;
 
38840
-           }
 
38841
+           _cpp_push_token_context (pfile, node, macro->exp.tokens,
 
38842
+                                    tokens_count);
 
38843
+         num_macro_tokens_counter += tokens_count;
 
38844
        }
 
38845
 
 
38846
       if (pragma_buff)
 
38847
Index: libcpp/line-map.c
 
38848
===================================================================
 
38849
--- a/src/libcpp/line-map.c     (.../tags/gcc_4_8_2_release)
 
38850
+++ b/src/libcpp/line-map.c     (.../branches/gcc-4_8-branch)
 
38851
@@ -1024,6 +1024,11 @@
 
38852
   bool pre_virtual_p, post_virtual_p;
 
38853
   source_location l0 = pre, l1 = post;
 
38854
 
 
38855
+  if (IS_ADHOC_LOC (l0))
 
38856
+    l0 = set->location_adhoc_data_map.data[l0 & MAX_SOURCE_LOCATION].locus;
 
38857
+  if (IS_ADHOC_LOC (l1))
 
38858
+    l1 = set->location_adhoc_data_map.data[l1 & MAX_SOURCE_LOCATION].locus;
 
38859
+
 
38860
   if (l0 == l1)
 
38861
     return 0;
 
38862
 
 
38863
Index: libcpp/files.c
 
38864
===================================================================
 
38865
--- a/src/libcpp/files.c        (.../tags/gcc_4_8_2_release)
 
38866
+++ b/src/libcpp/files.c        (.../branches/gcc-4_8-branch)
 
38867
@@ -983,6 +983,7 @@
 
38868
 {
 
38869
   struct cpp_dir *dir;
 
38870
   _cpp_file *file;
 
38871
+  bool stacked;
 
38872
 
 
38873
   dir = search_path_head (pfile, fname, angle_brackets, type);
 
38874
   if (!dir)
 
38875
@@ -993,19 +994,26 @@
 
38876
   if (type == IT_DEFAULT && file == NULL)
 
38877
     return false;
 
38878
 
 
38879
-  /* Compensate for the increment in linemap_add that occurs in
 
38880
-     _cpp_stack_file.  In the case of a normal #include, we're
 
38881
-     currently at the start of the line *following* the #include.  A
 
38882
-     separate source_location for this location makes no sense (until
 
38883
-     we do the LC_LEAVE), and complicates LAST_SOURCE_LINE_LOCATION.
 
38884
-     This does not apply if we found a PCH file (in which case
 
38885
-     linemap_add is not called) or we were included from the
 
38886
-     command-line.  */
 
38887
+  /* Compensate for the increment in linemap_add that occurs if
 
38888
+      _cpp_stack_file actually stacks the file.  In the case of a
 
38889
+     normal #include, we're currently at the start of the line
 
38890
+     *following* the #include.  A separate source_location for this
 
38891
+     location makes no sense (until we do the LC_LEAVE), and
 
38892
+     complicates LAST_SOURCE_LINE_LOCATION.  This does not apply if we
 
38893
+     found a PCH file (in which case linemap_add is not called) or we
 
38894
+     were included from the command-line.  */
 
38895
   if (file->pchname == NULL && file->err_no == 0
 
38896
       && type != IT_CMDLINE && type != IT_DEFAULT)
 
38897
     pfile->line_table->highest_location--;
 
38898
 
 
38899
-  return _cpp_stack_file (pfile, file, type == IT_IMPORT);
 
38900
+  stacked = _cpp_stack_file (pfile, file, type == IT_IMPORT);
 
38901
+
 
38902
+  if (!stacked)
 
38903
+    /* _cpp_stack_file didn't stack the file, so let's rollback the
 
38904
+       compensation dance we performed above.  */
 
38905
+    pfile->line_table->highest_location++;
 
38906
+
 
38907
+  return stacked;
 
38908
 }
 
38909
 
 
38910
 /* Could not open FILE.  The complication is dependency output.  */
 
38911
Index: libcpp/ChangeLog
 
38912
===================================================================
 
38913
--- a/src/libcpp/ChangeLog      (.../tags/gcc_4_8_2_release)
 
38914
+++ b/src/libcpp/ChangeLog      (.../branches/gcc-4_8-branch)
 
38915
@@ -1,3 +1,29 @@
 
38916
+2014-03-06  Jakub Jelinek  <jakub@redhat.com>
 
38917
+
 
38918
+       Backport from mainline
 
38919
+       2014-02-19  Jakub Jelinek  <jakub@redhat.com>
 
38920
+
 
38921
+       PR preprocessor/58844
 
38922
+       * macro.c (enter_macro_context): Only push
 
38923
+       macro_real_token_count (macro) tokens rather than
 
38924
+       macro->count tokens, regardless of
 
38925
+       CPP_OPTION (pfile, track-macro-expansion).
 
38926
+
 
38927
+       2014-02-07  Jakub Jelinek  <jakub@redhat.com>
 
38928
+
 
38929
+       PR preprocessor/56824
 
38930
+       * line-map.c (linemap_compare_locations): Look through adhoc locations
 
38931
+       for both l0 and l1.
 
38932
+
 
38933
+2014-03-06  Jakub Jelinek  <jakub@redhat.com>
 
38934
+
 
38935
+       PR preprocessor/60400
 
38936
+       Backport from mainline
 
38937
+       2013-06-24  Dehao Chen  <dehao@google.com>
 
38938
+
 
38939
+       * files.c (_cpp_stack_include): Fix the highest_location when header
 
38940
+       file is guarded by #ifndef and is included twice.
 
38941
+
 
38942
 2013-10-16  Release Manager
 
38943
 
 
38944
        * GCC 4.8.2 released.
 
38945
Index: libcpp/po/pt_BR.po
 
38946
===================================================================
 
38947
--- a/src/libcpp/po/pt_BR.po    (.../tags/gcc_4_8_2_release)
 
38948
+++ b/src/libcpp/po/pt_BR.po    (.../branches/gcc-4_8-branch)
 
38949
@@ -0,0 +1,908 @@
 
38950
+# Brazilian Portuguese translation for cpplib
 
38951
+# Copyright (C) 2013 Free Software Foundation, Inc.
 
38952
+# This file is distributed under the same license as the gcc package.
 
38953
+# Rafael Ferreira <rafael.f.f1@gmail.com>, 2013.
 
38954
+#
 
38955
+msgid ""
 
38956
+msgstr ""
 
38957
+"Project-Id-Version: cpplib 4.8.0\n"
 
38958
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
 
38959
+"POT-Creation-Date: 2013-03-15 17:42+0000\n"
 
38960
+"PO-Revision-Date: 2013-12-18 03:12-0300\n"
 
38961
+"Last-Translator: Rafael Ferreira <rafael.f.f1@gmail.com>\n"
 
38962
+"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\n"
 
38963
+"Language: pt_BR\n"
 
38964
+"MIME-Version: 1.0\n"
 
38965
+"Content-Type: text/plain; charset=UTF-8\n"
 
38966
+"Content-Transfer-Encoding: 8bit\n"
 
38967
+"X-Generator: Poedit 1.5.7\n"
 
38968
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
38969
+
 
38970
+#: charset.c:673
 
38971
+#, c-format
 
38972
+msgid "conversion from %s to %s not supported by iconv"
 
38973
+msgstr "sem suporte a conversão de %s para %s por iconv"
 
38974
+
 
38975
+#: charset.c:676
 
38976
+msgid "iconv_open"
 
38977
+msgstr "iconv_open"
 
38978
+
 
38979
+#: charset.c:684
 
38980
+#, c-format
 
38981
+msgid "no iconv implementation, cannot convert from %s to %s"
 
38982
+msgstr "nenhuma implementação iconv, não foi possível converter de %s para %s"
 
38983
+
 
38984
+#: charset.c:780
 
38985
+#, c-format
 
38986
+msgid "character 0x%lx is not in the basic source character set\n"
 
38987
+msgstr "caractere 0x%lx não está no conjunto de caracteres fonte básico\n"
 
38988
+
 
38989
+#: charset.c:797 charset.c:1443
 
38990
+msgid "converting to execution character set"
 
38991
+msgstr "convertendo para conjunto de caracteres da execução"
 
38992
+
 
38993
+#: charset.c:803
 
38994
+#, c-format
 
38995
+msgid "character 0x%lx is not unibyte in execution character set"
 
38996
+msgstr "caractere 0x%lx não é unibyte no conjunto de caracteres de execução"
 
38997
+
 
38998
+#: charset.c:927
 
38999
+#, c-format
 
39000
+msgid "Character %x might not be NFKC"
 
39001
+msgstr "Caractere %x pode não ser NFKC"
 
39002
+
 
39003
+#: charset.c:993
 
39004
+msgid "universal character names are only valid in C++ and C99"
 
39005
+msgstr "nomes de caractere universais são válidos apenas em C++ e C99"
 
39006
+
 
39007
+#: charset.c:996
 
39008
+#, c-format
 
39009
+msgid "the meaning of '\\%c' is different in traditional C"
 
39010
+msgstr "o significado de \"\\%c\" é diferente em C tradicional"
 
39011
+
 
39012
+#: charset.c:1005
 
39013
+msgid "In _cpp_valid_ucn but not a UCN"
 
39014
+msgstr "Em _cpp_valid_ucn, mas não é um UCN"
 
39015
+
 
39016
+#: charset.c:1030
 
39017
+#, c-format
 
39018
+msgid "incomplete universal character name %.*s"
 
39019
+msgstr "nome de caractere universal incompleto %.*s"
 
39020
+
 
39021
+#: charset.c:1045
 
39022
+#, c-format
 
39023
+msgid "%.*s is not a valid universal character"
 
39024
+msgstr "%.*s não é um caractere universal válido"
 
39025
+
 
39026
+#: charset.c:1055 lex.c:1117
 
39027
+msgid "'$' in identifier or number"
 
39028
+msgstr "\"$\" em identificador ou número"
 
39029
+
 
39030
+#: charset.c:1065
 
39031
+#, c-format
 
39032
+msgid "universal character %.*s is not valid in an identifier"
 
39033
+msgstr "caractere universal %.*s não é válido em um identificador"
 
39034
+
 
39035
+#: charset.c:1069
 
39036
+#, c-format
 
39037
+msgid "universal character %.*s is not valid at the start of an identifier"
 
39038
+msgstr "caractere universal %.*s não é válido no começo de um identificador"
 
39039
+
 
39040
+#: charset.c:1101 charset.c:1673
 
39041
+msgid "converting UCN to source character set"
 
39042
+msgstr "convertendo UCN para conjunto de caracteres fonte"
 
39043
+
 
39044
+#: charset.c:1105
 
39045
+msgid "converting UCN to execution character set"
 
39046
+msgstr "convertendo UCN para conjunto de caracteres de execução"
 
39047
+
 
39048
+#: charset.c:1177
 
39049
+msgid "the meaning of '\\x' is different in traditional C"
 
39050
+msgstr "o significado de \"\\x\" é diferente em C tradicional"
 
39051
+
 
39052
+#: charset.c:1194
 
39053
+msgid "\\x used with no following hex digits"
 
39054
+msgstr "\\x usado com nenhum dígito hexa"
 
39055
+
 
39056
+#: charset.c:1201
 
39057
+msgid "hex escape sequence out of range"
 
39058
+msgstr "sequência de escape hexa fora de alcance"
 
39059
+
 
39060
+#: charset.c:1239
 
39061
+msgid "octal escape sequence out of range"
 
39062
+msgstr "sequência de escape octal fora de alcance"
 
39063
+
 
39064
+#: charset.c:1305
 
39065
+msgid "the meaning of '\\a' is different in traditional C"
 
39066
+msgstr "o significado de \"\\a\" é diferente em C tradicional"
 
39067
+
 
39068
+#: charset.c:1312
 
39069
+#, c-format
 
39070
+msgid "non-ISO-standard escape sequence, '\\%c'"
 
39071
+msgstr "sequência de escape não padrão ISO, \"\\%c\""
 
39072
+
 
39073
+#: charset.c:1320
 
39074
+#, c-format
 
39075
+msgid "unknown escape sequence: '\\%c'"
 
39076
+msgstr "sequência de escape desconhecida: \"\\%c\""
 
39077
+
 
39078
+#: charset.c:1328
 
39079
+#, c-format
 
39080
+msgid "unknown escape sequence: '\\%s'"
 
39081
+msgstr "sequência de escape desconhecida: \"\\%s\""
 
39082
+
 
39083
+#: charset.c:1335
 
39084
+msgid "converting escape sequence to execution character set"
 
39085
+msgstr "convertendo sequência de escape para conjunto de caracteres de execução"
 
39086
+
 
39087
+#: charset.c:1508 charset.c:1572
 
39088
+msgid "character constant too long for its type"
 
39089
+msgstr "constante caractere muito longa para seu tipo"
 
39090
+
 
39091
+#: charset.c:1511
 
39092
+msgid "multi-character character constant"
 
39093
+msgstr "constante de caractere multi-caractere"
 
39094
+
 
39095
+#: charset.c:1611
 
39096
+msgid "empty character constant"
 
39097
+msgstr "constante caractere vazia"
 
39098
+
 
39099
+#: charset.c:1720
 
39100
+#, c-format
 
39101
+msgid "failure to convert %s to %s"
 
39102
+msgstr "falha ao converter %s para %s"
 
39103
+
 
39104
+#: directives.c:224 directives.c:250
 
39105
+#, c-format
 
39106
+msgid "extra tokens at end of #%s directive"
 
39107
+msgstr "tokens extras ao final da diretiva %#s"
 
39108
+
 
39109
+#: directives.c:357
 
39110
+#, c-format
 
39111
+msgid "#%s is a GCC extension"
 
39112
+msgstr "#%s é uma extensão GCC"
 
39113
+
 
39114
+#: directives.c:362
 
39115
+#, c-format
 
39116
+msgid "#%s is a deprecated GCC extension"
 
39117
+msgstr "#%s é uma extensão GCC obsoleta"
 
39118
+
 
39119
+#: directives.c:375
 
39120
+msgid "suggest not using #elif in traditional C"
 
39121
+msgstr "sugere-se não usar #elif em C tradicional"
 
39122
+
 
39123
+#: directives.c:378
 
39124
+#, c-format
 
39125
+msgid "traditional C ignores #%s with the # indented"
 
39126
+msgstr "C tradicional ignora #%s com o # com recuo"
 
39127
+
 
39128
+#: directives.c:382
 
39129
+#, c-format
 
39130
+msgid "suggest hiding #%s from traditional C with an indented #"
 
39131
+msgstr "sugere-se ocultar #%s do C tradicional com um # com recuo"
 
39132
+
 
39133
+#: directives.c:408
 
39134
+msgid "embedding a directive within macro arguments is not portable"
 
39135
+msgstr "embutir uma diretiva dentro de argumentos macro não é portátil"
 
39136
+
 
39137
+#: directives.c:428
 
39138
+msgid "style of line directive is a GCC extension"
 
39139
+msgstr "estilo de diretiva de linha é uma extensão GCC"
 
39140
+
 
39141
+#: directives.c:483
 
39142
+#, c-format
 
39143
+msgid "invalid preprocessing directive #%s"
 
39144
+msgstr "diretiva de preprocessamento inválida #%s"
 
39145
+
 
39146
+#: directives.c:551
 
39147
+msgid "\"defined\" cannot be used as a macro name"
 
39148
+msgstr "\"defined\" não pode ser usado como um nome de macro"
 
39149
+
 
39150
+#: directives.c:557
 
39151
+#, c-format
 
39152
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
 
39153
+msgstr "\"%s\" não pode ser usado como um nome de macro, pois é um operador em C++"
 
39154
+
 
39155
+#: directives.c:560
 
39156
+#, c-format
 
39157
+msgid "no macro name given in #%s directive"
 
39158
+msgstr "nenhum nome de macro fornecido na diretiva #%s"
 
39159
+
 
39160
+#: directives.c:563
 
39161
+msgid "macro names must be identifiers"
 
39162
+msgstr "nomes de macro devem ser identificadores"
 
39163
+
 
39164
+#: directives.c:612
 
39165
+#, c-format
 
39166
+msgid "undefining \"%s\""
 
39167
+msgstr "removendo definição de \"%s\""
 
39168
+
 
39169
+#: directives.c:667
 
39170
+msgid "missing terminating > character"
 
39171
+msgstr "faltando caractere terminador >"
 
39172
+
 
39173
+#: directives.c:726
 
39174
+#, c-format
 
39175
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
 
39176
+msgstr "#%s espera \"NOME DE ARQUIVO\" OU <NOME DE ARQUIVO>"
 
39177
+
 
39178
+#: directives.c:772
 
39179
+#, c-format
 
39180
+msgid "empty filename in #%s"
 
39181
+msgstr "nome de arquivo vazio em #%s"
 
39182
+
 
39183
+#: directives.c:782
 
39184
+msgid "#include nested too deeply"
 
39185
+msgstr "#include aninhado profundo demais"
 
39186
+
 
39187
+#: directives.c:823
 
39188
+msgid "#include_next in primary source file"
 
39189
+msgstr "#include_next no arquivo fonte primário"
 
39190
+
 
39191
+#: directives.c:849
 
39192
+#, c-format
 
39193
+msgid "invalid flag \"%s\" in line directive"
 
39194
+msgstr "opção inválida \"%s\" na diretiva line"
 
39195
+
 
39196
+#: directives.c:909
 
39197
+msgid "unexpected end of file after #line"
 
39198
+msgstr "fim de arquivo inesperado após #line"
 
39199
+
 
39200
+#: directives.c:912
 
39201
+#, c-format
 
39202
+msgid "\"%s\" after #line is not a positive integer"
 
39203
+msgstr "\"%s\" após #line não é um inteiro positivo"
 
39204
+
 
39205
+#: directives.c:918 directives.c:920
 
39206
+msgid "line number out of range"
 
39207
+msgstr "número da linha fora de alcance"
 
39208
+
 
39209
+#: directives.c:933 directives.c:1013
 
39210
+#, c-format
 
39211
+msgid "\"%s\" is not a valid filename"
 
39212
+msgstr "\"%s\" não é um nome de arquivo válido"
 
39213
+
 
39214
+#: directives.c:973
 
39215
+#, c-format
 
39216
+msgid "\"%s\" after # is not a positive integer"
 
39217
+msgstr "\"%s\" após # não é um inteiro positivo"
 
39218
+
 
39219
+#: directives.c:1068 directives.c:1070 directives.c:1072 directives.c:1658
 
39220
+#, c-format
 
39221
+msgid "%s"
 
39222
+msgstr "%s"
 
39223
+
 
39224
+#: directives.c:1096
 
39225
+#, c-format
 
39226
+msgid "invalid #%s directive"
 
39227
+msgstr "diretiva inválida #%s"
 
39228
+
 
39229
+#: directives.c:1159
 
39230
+#, c-format
 
39231
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
 
39232
+msgstr "registrando pragmas em espaço de nomes \"%s\" com expansão de nome incompatível"
 
39233
+
 
39234
+#: directives.c:1168
 
39235
+#, c-format
 
39236
+msgid "registering pragma \"%s\" with name expansion and no namespace"
 
39237
+msgstr "registrando pragma \"%s\" com expansão de nome e nenhum espaço de nomes"
 
39238
+
 
39239
+#: directives.c:1186
 
39240
+#, c-format
 
39241
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
 
39242
+msgstr "registrando \"%s\" como tanto um pragma e um espaço de nomes de pragma"
 
39243
+
 
39244
+#: directives.c:1189
 
39245
+#, c-format
 
39246
+msgid "#pragma %s %s is already registered"
 
39247
+msgstr "#pragma %s %s já está registrado"
 
39248
+
 
39249
+#: directives.c:1192
 
39250
+#, c-format
 
39251
+msgid "#pragma %s is already registered"
 
39252
+msgstr "#pragma %s já está registrado"
 
39253
+
 
39254
+#: directives.c:1222
 
39255
+msgid "registering pragma with NULL handler"
 
39256
+msgstr "registrando pragma com manipulador NULO"
 
39257
+
 
39258
+#: directives.c:1439
 
39259
+msgid "#pragma once in main file"
 
39260
+msgstr "#pragma ocorre uma vez no arquivo principal"
 
39261
+
 
39262
+#: directives.c:1462
 
39263
+msgid "invalid #pragma push_macro directive"
 
39264
+msgstr "diretiva inválida #pragma push_macro"
 
39265
+
 
39266
+#: directives.c:1517
 
39267
+msgid "invalid #pragma pop_macro directive"
 
39268
+msgstr "diretiva inválida #pragma pop_macro"
 
39269
+
 
39270
+#: directives.c:1572
 
39271
+msgid "invalid #pragma GCC poison directive"
 
39272
+msgstr "diretiva inválida #pragma GCC poison"
 
39273
+
 
39274
+#: directives.c:1581
 
39275
+#, c-format
 
39276
+msgid "poisoning existing macro \"%s\""
 
39277
+msgstr "envenenando macro existente \"%s\""
 
39278
+
 
39279
+#: directives.c:1600
 
39280
+msgid "#pragma system_header ignored outside include file"
 
39281
+msgstr "#pragma system_header ignorado fora do arquivo include"
 
39282
+
 
39283
+#: directives.c:1625
 
39284
+#, c-format
 
39285
+msgid "cannot find source file %s"
 
39286
+msgstr "não foi possível localizar o arquivo fonte %s"
 
39287
+
 
39288
+#: directives.c:1629
 
39289
+#, c-format
 
39290
+msgid "current file is older than %s"
 
39291
+msgstr "arquivo atual é mais velho do que %s"
 
39292
+
 
39293
+#: directives.c:1653
 
39294
+#, c-format
 
39295
+msgid "invalid \"#pragma GCC %s\" directive"
 
39296
+msgstr "diretiva inválida \"#pragma GCC %s\""
 
39297
+
 
39298
+#: directives.c:1847
 
39299
+msgid "_Pragma takes a parenthesized string literal"
 
39300
+msgstr "_Pragma leva uma literal de string entre parenteses"
 
39301
+
 
39302
+#: directives.c:1968
 
39303
+msgid "#else without #if"
 
39304
+msgstr "#else sem #if"
 
39305
+
 
39306
+#: directives.c:1973
 
39307
+msgid "#else after #else"
 
39308
+msgstr "#else após #else"
 
39309
+
 
39310
+#: directives.c:1975 directives.c:2008
 
39311
+msgid "the conditional began here"
 
39312
+msgstr "a condicional começou aqui"
 
39313
+
 
39314
+#: directives.c:2001
 
39315
+msgid "#elif without #if"
 
39316
+msgstr "#elif sem #if"
 
39317
+
 
39318
+#: directives.c:2006
 
39319
+msgid "#elif after #else"
 
39320
+msgstr "#elif após #else"
 
39321
+
 
39322
+#: directives.c:2044
 
39323
+msgid "#endif without #if"
 
39324
+msgstr "#endif sem #if"
 
39325
+
 
39326
+#: directives.c:2124
 
39327
+msgid "missing '(' after predicate"
 
39328
+msgstr "faltando \"(\" após predicado"
 
39329
+
 
39330
+#: directives.c:2139
 
39331
+msgid "missing ')' to complete answer"
 
39332
+msgstr "faltando \")\" para uma resposta completa"
 
39333
+
 
39334
+#: directives.c:2159
 
39335
+msgid "predicate's answer is empty"
 
39336
+msgstr "resposta do predicado está vazia"
 
39337
+
 
39338
+#: directives.c:2186
 
39339
+msgid "assertion without predicate"
 
39340
+msgstr "asserção sem predicado"
 
39341
+
 
39342
+#: directives.c:2189
 
39343
+msgid "predicate must be an identifier"
 
39344
+msgstr "predicado deve ser um identificador"
 
39345
+
 
39346
+#: directives.c:2275
 
39347
+#, c-format
 
39348
+msgid "\"%s\" re-asserted"
 
39349
+msgstr "\"%s\" re-assertado"
 
39350
+
 
39351
+#: directives.c:2567
 
39352
+#, c-format
 
39353
+msgid "unterminated #%s"
 
39354
+msgstr "#%s não terminado"
 
39355
+
 
39356
+#: directives-only.c:221 lex.c:2234 traditional.c:162
 
39357
+msgid "unterminated comment"
 
39358
+msgstr "comentário não terminado"
 
39359
+
 
39360
+#: errors.c:234
 
39361
+msgid "stdout"
 
39362
+msgstr "saída padrão"
 
39363
+
 
39364
+#: errors.c:236
 
39365
+#, c-format
 
39366
+msgid "%s: %s"
 
39367
+msgstr "%s: %s"
 
39368
+
 
39369
+#: expr.c:479 expr.c:577
 
39370
+msgid "fixed-point constants are a GCC extension"
 
39371
+msgstr "constantes de ponto fixo (fixed-point constants) é uma extensão GCC"
 
39372
+
 
39373
+#: expr.c:504
 
39374
+msgid "invalid prefix \"0b\" for floating constant"
 
39375
+msgstr "prefixo inválido \"0b\" para constante flutuante"
 
39376
+
 
39377
+#: expr.c:514
 
39378
+msgid "use of C99 hexadecimal floating constant"
 
39379
+msgstr "uso de constante flutuante hexadecimal de C99"
 
39380
+
 
39381
+#: expr.c:545
 
39382
+#, c-format
 
39383
+msgid "invalid suffix \"%.*s\" on floating constant"
 
39384
+msgstr "sufixo inválido \"%.*s\" na constante flutuante"
 
39385
+
 
39386
+#: expr.c:556 expr.c:616
 
39387
+#, c-format
 
39388
+msgid "traditional C rejects the \"%.*s\" suffix"
 
39389
+msgstr "C tradicional rejeita o sufixo \"%.*s\""
 
39390
+
 
39391
+#: expr.c:564
 
39392
+msgid "suffix for double constant is a GCC extension"
 
39393
+msgstr "sufixo para constante dupla (suffix for double constant) é uma extensão GCC"
 
39394
+
 
39395
+#: expr.c:570
 
39396
+#, c-format
 
39397
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
 
39398
+msgstr "sufixo inválido \"%.*s\" com constante flutuante hexadecimal"
 
39399
+
 
39400
+#: expr.c:581
 
39401
+msgid "decimal float constants are a GCC extension"
 
39402
+msgstr "constantes flutuante decimais (decimal float constants) é uma extensão GCC"
 
39403
+
 
39404
+#: expr.c:599
 
39405
+#, c-format
 
39406
+msgid "invalid suffix \"%.*s\" on integer constant"
 
39407
+msgstr "sufixo inválido \"%.*s\" em constante inteiro"
 
39408
+
 
39409
+#: expr.c:624
 
39410
+msgid "use of C++0x long long integer constant"
 
39411
+msgstr "uso de constante longo longo inteiro de C++0x"
 
39412
+
 
39413
+#: expr.c:625
 
39414
+msgid "use of C99 long long integer constant"
 
39415
+msgstr "uso de constante longo longo inteiro de C99"
 
39416
+
 
39417
+#: expr.c:641
 
39418
+msgid "imaginary constants are a GCC extension"
 
39419
+msgstr "constantes imaginárias (imaginary constants) é uma extensão GCC"
 
39420
+
 
39421
+#: expr.c:644
 
39422
+msgid "binary constants are a GCC extension"
 
39423
+msgstr "constantes binárias (binary constants) é uma extensão GCC"
 
39424
+
 
39425
+#: expr.c:737
 
39426
+msgid "integer constant is too large for its type"
 
39427
+msgstr "constante inteira é muito grande para seu tipo"
 
39428
+
 
39429
+#: expr.c:768
 
39430
+msgid "integer constant is so large that it is unsigned"
 
39431
+msgstr "constante inteira é tão grande que não está assinada"
 
39432
+
 
39433
+#: expr.c:863
 
39434
+msgid "missing ')' after \"defined\""
 
39435
+msgstr "faltando \")\" após \"defined\""
 
39436
+
 
39437
+#: expr.c:870
 
39438
+msgid "operator \"defined\" requires an identifier"
 
39439
+msgstr "operador \"defined\" requer um identificador"
 
39440
+
 
39441
+#: expr.c:878
 
39442
+#, c-format
 
39443
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
 
39444
+msgstr "(\"%s\" é um token alternativo para \"%s\" em C++)"
 
39445
+
 
39446
+#: expr.c:888
 
39447
+msgid "this use of \"defined\" may not be portable"
 
39448
+msgstr "esse uso de \"defined\" pode não ser portátil"
 
39449
+
 
39450
+#: expr.c:948
 
39451
+msgid "user-defined literal in preprocessor expression"
 
39452
+msgstr "literal definida pelo usuário em expressão do preprocessador"
 
39453
+
 
39454
+#: expr.c:953
 
39455
+msgid "floating constant in preprocessor expression"
 
39456
+msgstr "constante flutuante em expressão do preprocessador"
 
39457
+
 
39458
+#: expr.c:959
 
39459
+msgid "imaginary number in preprocessor expression"
 
39460
+msgstr "número imaginário em expressão do preprocessador"
 
39461
+
 
39462
+#: expr.c:1007
 
39463
+#, c-format
 
39464
+msgid "\"%s\" is not defined"
 
39465
+msgstr "\"%s\" não está definido"
 
39466
+
 
39467
+#: expr.c:1020
 
39468
+msgid "assertions are a GCC extension"
 
39469
+msgstr "asserções (assertions) é uma extensão GCC"
 
39470
+
 
39471
+#: expr.c:1023
 
39472
+msgid "assertions are a deprecated extension"
 
39473
+msgstr "asserções (assertions) é uma extensão obsoleta"
 
39474
+
 
39475
+#: expr.c:1268
 
39476
+#, c-format
 
39477
+msgid "unbalanced stack in %s"
 
39478
+msgstr "pilha não balanceada em %s"
 
39479
+
 
39480
+#: expr.c:1288
 
39481
+#, c-format
 
39482
+msgid "impossible operator '%u'"
 
39483
+msgstr "operador impossível \"%u\""
 
39484
+
 
39485
+#: expr.c:1389
 
39486
+msgid "missing ')' in expression"
 
39487
+msgstr "faltando \")\" na expressão"
 
39488
+
 
39489
+#: expr.c:1418
 
39490
+msgid "'?' without following ':'"
 
39491
+msgstr "\"?\" sem estar seguido por \":\""
 
39492
+
 
39493
+#: expr.c:1428
 
39494
+msgid "integer overflow in preprocessor expression"
 
39495
+msgstr "estouro de inteiro em expressão do preprocessador"
 
39496
+
 
39497
+#: expr.c:1433
 
39498
+msgid "missing '(' in expression"
 
39499
+msgstr "faltando \"(\" na expressão"
 
39500
+
 
39501
+#: expr.c:1465
 
39502
+#, c-format
 
39503
+msgid "the left operand of \"%s\" changes sign when promoted"
 
39504
+msgstr "o operador à esquerda de \"%s\" altera o sinal quando promovido"
 
39505
+
 
39506
+#: expr.c:1470
 
39507
+#, c-format
 
39508
+msgid "the right operand of \"%s\" changes sign when promoted"
 
39509
+msgstr "o operador à direita de \"%s\" altera o sinal quando promovido"
 
39510
+
 
39511
+#: expr.c:1729
 
39512
+msgid "traditional C rejects the unary plus operator"
 
39513
+msgstr "C tradicional rejeita o operador unário mais"
 
39514
+
 
39515
+#: expr.c:1812
 
39516
+msgid "comma operator in operand of #if"
 
39517
+msgstr "operador vírgula em operando de #if"
 
39518
+
 
39519
+#: expr.c:1948
 
39520
+msgid "division by zero in #if"
 
39521
+msgstr "divisão por zero em #if"
 
39522
+
 
39523
+#: files.c:505
 
39524
+msgid "NULL directory in find_file"
 
39525
+msgstr "diretório NULO em find_file"
 
39526
+
 
39527
+#: files.c:553
 
39528
+msgid "one or more PCH files were found, but they were invalid"
 
39529
+msgstr "um ou mais arquivos PCH foram encontrados, mas são inválidos"
 
39530
+
 
39531
+#: files.c:556
 
39532
+msgid "use -Winvalid-pch for more information"
 
39533
+msgstr "use -Winvalid-pch para mais informações"
 
39534
+
 
39535
+#: files.c:660
 
39536
+#, c-format
 
39537
+msgid "%s is a block device"
 
39538
+msgstr "%s é um dispositivo de bloco"
 
39539
+
 
39540
+#: files.c:677
 
39541
+#, c-format
 
39542
+msgid "%s is too large"
 
39543
+msgstr "%s é muito grande"
 
39544
+
 
39545
+#: files.c:717
 
39546
+#, c-format
 
39547
+msgid "%s is shorter than expected"
 
39548
+msgstr "%s é muito menor do que esperado"
 
39549
+
 
39550
+#: files.c:953
 
39551
+#, c-format
 
39552
+msgid "no include path in which to search for %s"
 
39553
+msgstr "não foi incluído nenhum caminho no qual se possa procurar por %s"
 
39554
+
 
39555
+#: files.c:1381
 
39556
+msgid "Multiple include guards may be useful for:\n"
 
39557
+msgstr "Múltiplos include guards podem ser úteis para:\n"
 
39558
+
 
39559
+#: init.c:524
 
39560
+msgid "cppchar_t must be an unsigned type"
 
39561
+msgstr "cppchar_t deve ser um tipo não assinado"
 
39562
+
 
39563
+#: init.c:528
 
39564
+#, c-format
 
39565
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
 
39566
+msgstr "aritmética do preprocessador possui uma precisão máxima de %lu bits; o alvo requer %lu bits"
 
39567
+
 
39568
+#: init.c:535
 
39569
+msgid "CPP arithmetic must be at least as precise as a target int"
 
39570
+msgstr "aritmética do CPP deve ser pelo menos tão precisa quanto um int alvo"
 
39571
+
 
39572
+#: init.c:538
 
39573
+msgid "target char is less than 8 bits wide"
 
39574
+msgstr "char alvo é menor do que 8 bits"
 
39575
+
 
39576
+#: init.c:542
 
39577
+msgid "target wchar_t is narrower than target char"
 
39578
+msgstr "wchar_t alvo é mais estreito do que o char alvo"
 
39579
+
 
39580
+#: init.c:546
 
39581
+msgid "target int is narrower than target char"
 
39582
+msgstr "int alvo é mais estreito do que o char alvo"
 
39583
+
 
39584
+#: init.c:551
 
39585
+msgid "CPP half-integer narrower than CPP character"
 
39586
+msgstr "meio-inteiro do CPP é mais estreito do que o caractere do CPP"
 
39587
+
 
39588
+#: init.c:555
 
39589
+#, c-format
 
39590
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
 
39591
+msgstr "CPP nesta máquina não consegue manipular constantes de wide character acima de %lu bits, mas o alvo requer %lu bits"
 
39592
+
 
39593
+#: lex.c:910
 
39594
+msgid "backslash and newline separated by space"
 
39595
+msgstr "barra invertida e nova linha separadas por espaço"
 
39596
+
 
39597
+#: lex.c:915
 
39598
+msgid "backslash-newline at end of file"
 
39599
+msgstr "barra invertida e nova linha no final do arquivo"
 
39600
+
 
39601
+#: lex.c:931
 
39602
+#, c-format
 
39603
+msgid "trigraph ??%c converted to %c"
 
39604
+msgstr "trígrafo ??%c convertido para %c"
 
39605
+
 
39606
+#: lex.c:939
 
39607
+#, c-format
 
39608
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
 
39609
+msgstr "trígrafo ??%c ignorado, use -trigraphs para habilitá-lo"
 
39610
+
 
39611
+#: lex.c:988
 
39612
+msgid "\"/*\" within comment"
 
39613
+msgstr "\"/*\" dentro de comentário"
 
39614
+
 
39615
+#: lex.c:1046
 
39616
+#, c-format
 
39617
+msgid "%s in preprocessing directive"
 
39618
+msgstr "%s em diretiva de preprocessamento"
 
39619
+
 
39620
+#: lex.c:1055
 
39621
+msgid "null character(s) ignored"
 
39622
+msgstr "um ou mais caracteres nulos ignorados"
 
39623
+
 
39624
+#: lex.c:1092
 
39625
+#, c-format
 
39626
+msgid "`%.*s' is not in NFKC"
 
39627
+msgstr "\"%.*s\" não está em NFKC"
 
39628
+
 
39629
+#: lex.c:1095
 
39630
+#, c-format
 
39631
+msgid "`%.*s' is not in NFC"
 
39632
+msgstr "\"%.*s\" não está em NFC"
 
39633
+
 
39634
+#: lex.c:1164 lex.c:1241
 
39635
+#, c-format
 
39636
+msgid "attempt to use poisoned \"%s\""
 
39637
+msgstr "tentativa de usar \"%s\" envenenado"
 
39638
+
 
39639
+#: lex.c:1172 lex.c:1249
 
39640
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
 
39641
+msgstr "__VA_ARGS__ pode aparecer apenas na expansão de uma macro variádica C99"
 
39642
+
 
39643
+#: lex.c:1178 lex.c:1255
 
39644
+#, c-format
 
39645
+msgid "identifier \"%s\" is a special operator name in C++"
 
39646
+msgstr "identificador \"%s\" é o nome de um operador especial em C++"
 
39647
+
 
39648
+#: lex.c:1399
 
39649
+msgid "raw string delimiter longer than 16 characters"
 
39650
+msgstr "delimitador de string não tratada (raw) maior do que 16 caracteres"
 
39651
+
 
39652
+#: lex.c:1402
 
39653
+#, c-format
 
39654
+msgid "invalid character '%c' in raw string delimiter"
 
39655
+msgstr "caractere inválido \"%c\" em delimitador de string não tratada (raw)"
 
39656
+
 
39657
+#: lex.c:1525 lex.c:1547
 
39658
+msgid "unterminated raw string"
 
39659
+msgstr "string não tratada (raw) não terminada"
 
39660
+
 
39661
+#: lex.c:1573 lex.c:1706
 
39662
+msgid "invalid suffix on literal; C++11 requires a space between literal and identifier"
 
39663
+msgstr "sufixo inválido em literal; C++11 requer um espaço entre literal e identificador"
 
39664
+
 
39665
+#: lex.c:1684
 
39666
+msgid "null character(s) preserved in literal"
 
39667
+msgstr "um ou mais caracteres nulos preservados em literal"
 
39668
+
 
39669
+#: lex.c:1687
 
39670
+#, c-format
 
39671
+msgid "missing terminating %c character"
 
39672
+msgstr "faltando o caractere de terminação %c"
 
39673
+
 
39674
+#: lex.c:2245
 
39675
+msgid "C++ style comments are not allowed in ISO C90"
 
39676
+msgstr "comentários no estilo C++ não são permitidos em ISO C90"
 
39677
+
 
39678
+#: lex.c:2247
 
39679
+msgid "(this will be reported only once per input file)"
 
39680
+msgstr "(isso será relatado apenas uma vez por arquivo de entrada)"
 
39681
+
 
39682
+#: lex.c:2252
 
39683
+msgid "multi-line comment"
 
39684
+msgstr "comentário multilinha"
 
39685
+
 
39686
+#: lex.c:2583
 
39687
+#, c-format
 
39688
+msgid "unspellable token %s"
 
39689
+msgstr "token %s impronunciável"
 
39690
+
 
39691
+#: macro.c:191
 
39692
+#, c-format
 
39693
+msgid "macro \"%s\" is not used"
 
39694
+msgstr "macro \"%s\" não é usada"
 
39695
+
 
39696
+#: macro.c:229 macro.c:426
 
39697
+#, c-format
 
39698
+msgid "invalid built-in macro \"%s\""
 
39699
+msgstr "macro interna inválida \"%s\""
 
39700
+
 
39701
+#: macro.c:263
 
39702
+msgid "could not determine file timestamp"
 
39703
+msgstr "não foi possível determinar o arquivo de marca de tempo"
 
39704
+
 
39705
+#: macro.c:361
 
39706
+msgid "could not determine date and time"
 
39707
+msgstr "não foi possível determinar a data e a hora"
 
39708
+
 
39709
+#: macro.c:377
 
39710
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
 
39711
+msgstr "__COUNTER__ expandido dentro diretiva com -fdirectives-only"
 
39712
+
 
39713
+#: macro.c:535
 
39714
+msgid "invalid string literal, ignoring final '\\'"
 
39715
+msgstr "literal de string inválida, ignorando final \"\\\""
 
39716
+
 
39717
+#: macro.c:597
 
39718
+#, c-format
 
39719
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
 
39720
+msgstr "colar \"%s\" em \"%s\" não resulta em nenhum token de preprocessamento válido"
 
39721
+
 
39722
+#: macro.c:719
 
39723
+msgid "ISO C99 requires rest arguments to be used"
 
39724
+msgstr "ISO C99 requer que argumentos restantes sejam usados"
 
39725
+
 
39726
+#: macro.c:724
 
39727
+#, c-format
 
39728
+msgid "macro \"%s\" requires %u arguments, but only %u given"
 
39729
+msgstr "macro \"%s\" requer %u argumentos, mas apenas %u foram fornecidos"
 
39730
+
 
39731
+#: macro.c:729
 
39732
+#, c-format
 
39733
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
 
39734
+msgstr "macro \"%s\" passou %u argumentos, mas usa apenas %u"
 
39735
+
 
39736
+#: macro.c:923 traditional.c:680
 
39737
+#, c-format
 
39738
+msgid "unterminated argument list invoking macro \"%s\""
 
39739
+msgstr "lista de argumentos interminável chamando macro \"%s\""
 
39740
+
 
39741
+#: macro.c:1074
 
39742
+#, c-format
 
39743
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
 
39744
+msgstr "macro \"%s\" do tipo função deve ser usada com argumento em C tradicional"
 
39745
+
 
39746
+# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33305
 
39747
+#: macro.c:1746
 
39748
+#, c-format
 
39749
+msgid "invoking macro %s argument %d: empty macro arguments are undefined in ISO C90 and ISO C++98"
 
39750
+msgstr "chamando macro %s argumento %d: argumentos de macro vazios estão indefinidos em ISO C90 e ISO C++98"
 
39751
+
 
39752
+#: macro.c:2708
 
39753
+#, c-format
 
39754
+msgid "duplicate macro parameter \"%s\""
 
39755
+msgstr "parâmetro de macro \"%s\" duplicado"
 
39756
+
 
39757
+#: macro.c:2754
 
39758
+#, c-format
 
39759
+msgid "\"%s\" may not appear in macro parameter list"
 
39760
+msgstr "\"%s\" não pode aparecer na lista de parâmetros de macro"
 
39761
+
 
39762
+#: macro.c:2762
 
39763
+msgid "macro parameters must be comma-separated"
 
39764
+msgstr "parâmetros de macro devem ser separados por vírgula"
 
39765
+
 
39766
+#: macro.c:2779
 
39767
+msgid "parameter name missing"
 
39768
+msgstr "faltando nome de parâmetro"
 
39769
+
 
39770
+#: macro.c:2797
 
39771
+msgid "anonymous variadic macros were introduced in C99"
 
39772
+msgstr "macros variádicas anônimas foram introduzidas em C99"
 
39773
+
 
39774
+#: macro.c:2802
 
39775
+msgid "ISO C does not permit named variadic macros"
 
39776
+msgstr "ISO C não permite macros variádicas nomeadas"
 
39777
+
 
39778
+#: macro.c:2811
 
39779
+msgid "missing ')' in macro parameter list"
 
39780
+msgstr "faltando \")\" na lista de parâmetros de macro"
 
39781
+
 
39782
+#: macro.c:2860
 
39783
+msgid "'##' cannot appear at either end of a macro expansion"
 
39784
+msgstr "\"##\" não pode aparecer no final da expansão de macro"
 
39785
+
 
39786
+#: macro.c:2895
 
39787
+msgid "ISO C99 requires whitespace after the macro name"
 
39788
+msgstr "ISO C99 requer espaço em branco após o nome de macro"
 
39789
+
 
39790
+#: macro.c:2919
 
39791
+msgid "missing whitespace after the macro name"
 
39792
+msgstr "faltando espaço em branco após o nome de macro"
 
39793
+
 
39794
+#: macro.c:2953
 
39795
+msgid "'#' is not followed by a macro parameter"
 
39796
+msgstr "\"#\" não está seguido por um parâmetro de macro"
 
39797
+
 
39798
+#: macro.c:3111
 
39799
+#, c-format
 
39800
+msgid "\"%s\" redefined"
 
39801
+msgstr "\"%s\" re-definido"
 
39802
+
 
39803
+#: macro.c:3117
 
39804
+msgid "this is the location of the previous definition"
 
39805
+msgstr "essa é a localização da definição anterior"
 
39806
+
 
39807
+#: macro.c:3178
 
39808
+#, c-format
 
39809
+msgid "macro argument \"%s\" would be stringified in traditional C"
 
39810
+msgstr "argumento de macro \"%s\" estaria em uma string no C tradicional"
 
39811
+
 
39812
+#: macro.c:3205
 
39813
+#, c-format
 
39814
+msgid "invalid hash type %d in cpp_macro_definition"
 
39815
+msgstr "tipo de hash inválido %d em cpp_macro_definition"
 
39816
+
 
39817
+#: pch.c:87 pch.c:345 pch.c:359 pch.c:377 pch.c:383 pch.c:392 pch.c:399
 
39818
+msgid "while writing precompiled header"
 
39819
+msgstr "enquanto realizava escrita de header pré-compilado"
 
39820
+
 
39821
+#: pch.c:619
 
39822
+#, c-format
 
39823
+msgid "%s: not used because `%.*s' is poisoned"
 
39824
+msgstr "%s: não usado porque \"%.*s\" está envenenado"
 
39825
+
 
39826
+#: pch.c:641
 
39827
+#, c-format
 
39828
+msgid "%s: not used because `%.*s' not defined"
 
39829
+msgstr "%s: não usado porque \"%.*s\" não está definido"
 
39830
+
 
39831
+#: pch.c:653
 
39832
+#, c-format
 
39833
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
 
39834
+msgstr "%s: não usado porque \"%.*s\" está definido como \"%s\", e não \"%.*s\""
 
39835
+
 
39836
+#: pch.c:694
 
39837
+#, c-format
 
39838
+msgid "%s: not used because `%s' is defined"
 
39839
+msgstr "%s: não usado porque \"%s\" está definido"
 
39840
+
 
39841
+#: pch.c:714
 
39842
+#, c-format
 
39843
+msgid "%s: not used because `__COUNTER__' is invalid"
 
39844
+msgstr "%s: não usado porque \"__COUNTER__\" é inválido"
 
39845
+
 
39846
+#: pch.c:723 pch.c:898
 
39847
+msgid "while reading precompiled header"
 
39848
+msgstr "enquanto realizava leitura de header pré-compilado"
 
39849
+
 
39850
+#: traditional.c:750
 
39851
+#, c-format
 
39852
+msgid "detected recursion whilst expanding macro \"%s\""
 
39853
+msgstr "detectada recursão enquanto expandia macro \"%s\""
 
39854
+
 
39855
+#: traditional.c:968
 
39856
+msgid "syntax error in macro parameter list"
 
39857
+msgstr "erro de sintaxe na lista de parâmetros de macro"
 
39858
Index: libcpp/po/ChangeLog
 
39859
===================================================================
 
39860
--- a/src/libcpp/po/ChangeLog   (.../tags/gcc_4_8_2_release)
 
39861
+++ b/src/libcpp/po/ChangeLog   (.../branches/gcc-4_8-branch)
 
39862
@@ -1,3 +1,11 @@
 
39863
+2013-12-18  Joseph Myers  <joseph@codesourcery.com>
 
39864
+
 
39865
+       * pt_BR.po: New.
 
39866
+
 
39867
+2013-11-01  Joseph Myers  <joseph@codesourcery.com>
 
39868
+
 
39869
+       * tr.po: Update.
 
39870
+
 
39871
 2013-10-16  Release Manager
 
39872
 
 
39873
        * GCC 4.8.2 released.
 
39874
Index: libcpp/po/tr.po
 
39875
===================================================================
 
39876
--- a/src/libcpp/po/tr.po       (.../tags/gcc_4_8_2_release)
 
39877
+++ b/src/libcpp/po/tr.po       (.../branches/gcc-4_8-branch)
 
39878
@@ -1,20 +1,22 @@
 
39879
 # Turkish translations for cpplib messages.
 
39880
 # Copyright (C) 2007 Free Software Foundation, Inc.
 
39881
+# This file is distributed under the same license as the gcc package.
 
39882
 #
 
39883
 # Nilgün Belma Bugüner <nilgun@buguner.name.tr>, 2001, ..., 2007.
 
39884
+# Volkan Gezer <vlkngzr@gmail.com>, 2013.
 
39885
 msgid ""
 
39886
 msgstr ""
 
39887
-"Project-Id-Version: cpplib 4.2.0\n"
 
39888
+"Project-Id-Version: cpplib 4.8.0\n"
 
39889
 "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
 
39890
-"POT-Creation-Date: 2013-02-24 01:05+0000\n"
 
39891
-"PO-Revision-Date: 2007-05-23 01:17+0300\n"
 
39892
-"Last-Translator: Nilgün Belma Bugüner <nilgun@buguner.name.tr>\n"
 
39893
+"POT-Creation-Date: 2013-03-15 17:42+0000\n"
 
39894
+"PO-Revision-Date: 2013-11-01 22:29+0100\n"
 
39895
+"Last-Translator: Volkan Gezer <vlkngzr@gmail.com>\n"
 
39896
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
 
39897
 "Language: tr\n"
 
39898
 "MIME-Version: 1.0\n"
 
39899
 "Content-Type: text/plain; charset=UTF-8\n"
 
39900
 "Content-Transfer-Encoding: 8bit\n"
 
39901
-"X-Generator: KBabel 1.11.4\n"
 
39902
+"X-Generator: Lokalize 1.5\n"
 
39903
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
39904
 
 
39905
 #: charset.c:673
 
39906
@@ -121,10 +123,9 @@
 
39907
 msgstr "ISO standardı olmayan önceleme dizgesi, '\\%c'"
 
39908
 
 
39909
 #: charset.c:1320
 
39910
-#, fuzzy, c-format
 
39911
-#| msgid "unknown escape sequence '\\%c'"
 
39912
+#, c-format
 
39913
 msgid "unknown escape sequence: '\\%c'"
 
39914
-msgstr "bilinmeyen önceleme dizgesi '\\%c'"
 
39915
+msgstr "bilinmeyen kaçış dizgesi: '\\%c'"
 
39916
 
 
39917
 #: charset.c:1328
 
39918
 #, c-format
 
39919
@@ -163,10 +164,9 @@
 
39920
 msgstr "#%s bir GCC uzantısıdır"
 
39921
 
 
39922
 #: directives.c:362
 
39923
-#, fuzzy, c-format
 
39924
-#| msgid "#%s is a GCC extension"
 
39925
+#, c-format
 
39926
 msgid "#%s is a deprecated GCC extension"
 
39927
-msgstr "#%s bir GCC uzantısıdır"
 
39928
+msgstr "#%s eskimiş bir GCC uzantısıdır"
 
39929
 
 
39930
 #: directives.c:375
 
39931
 msgid "suggest not using #elif in traditional C"
 
39932
@@ -247,7 +247,7 @@
 
39933
 
 
39934
 #: directives.c:909
 
39935
 msgid "unexpected end of file after #line"
 
39936
-msgstr ""
 
39937
+msgstr "#line satırından sonra beklenmeyen dosya sonu"
 
39938
 
 
39939
 #: directives.c:912
 
39940
 #, c-format
 
39941
@@ -271,7 +271,7 @@
 
39942
 #: directives.c:1068 directives.c:1070 directives.c:1072 directives.c:1658
 
39943
 #, c-format
 
39944
 msgid "%s"
 
39945
-msgstr ""
 
39946
+msgstr "%s"
 
39947
 
 
39948
 #: directives.c:1096
 
39949
 #, c-format
 
39950
@@ -312,16 +312,12 @@
 
39951
 msgstr "main dosyasında '#pragma once'"
 
39952
 
 
39953
 #: directives.c:1462
 
39954
-#, fuzzy
 
39955
-#| msgid "invalid #pragma GCC poison directive"
 
39956
 msgid "invalid #pragma push_macro directive"
 
39957
-msgstr "geçersiz #pragma GCC poison yönergesi"
 
39958
+msgstr "geçersiz #pragma güdümlü_makro yönergesi"
 
39959
 
 
39960
 #: directives.c:1517
 
39961
-#, fuzzy
 
39962
-#| msgid "invalid #pragma GCC poison directive"
 
39963
 msgid "invalid #pragma pop_macro directive"
 
39964
-msgstr "geçersiz #pragma GCC poison yönergesi"
 
39965
+msgstr "geçersiz #pragma güdümlü_makro yönergesi"
 
39966
 
 
39967
 #: directives.c:1572
 
39968
 msgid "invalid #pragma GCC poison directive"
 
39969
@@ -347,10 +343,9 @@
 
39970
 msgstr "mevcut dosya %s den daha eski"
 
39971
 
 
39972
 #: directives.c:1653
 
39973
-#, fuzzy, c-format
 
39974
-#| msgid "invalid #pragma GCC poison directive"
 
39975
+#, c-format
 
39976
 msgid "invalid \"#pragma GCC %s\" directive"
 
39977
-msgstr "geçersiz #pragma GCC poison yönergesi"
 
39978
+msgstr "geçersiz \"#pragma GCC %s\" yönergesi"
 
39979
 
 
39980
 #: directives.c:1847
 
39981
 msgid "_Pragma takes a parenthesized string literal"
 
39982
@@ -405,7 +400,7 @@
 
39983
 msgid "\"%s\" re-asserted"
 
39984
 msgstr "\"%s\" tekrar olumlanmış"
 
39985
 
 
39986
-#: directives.c:2566
 
39987
+#: directives.c:2567
 
39988
 #, c-format
 
39989
 msgid "unterminated #%s"
 
39990
 msgstr "sonlandırılmamış #%s"
 
39991
@@ -424,16 +419,12 @@
 
39992
 msgstr "%s: %s"
 
39993
 
 
39994
 #: expr.c:479 expr.c:577
 
39995
-#, fuzzy
 
39996
-#| msgid "imaginary constants are a GCC extension"
 
39997
 msgid "fixed-point constants are a GCC extension"
 
39998
-msgstr "sanal sabitler bir GCC genişletmesidir"
 
39999
+msgstr "sabit noktalı sabitler bir GCC uzantısıdır"
 
40000
 
 
40001
 #: expr.c:504
 
40002
-#, fuzzy
 
40003
-#| msgid "invalid suffix \"%.*s\" on floating constant"
 
40004
 msgid "invalid prefix \"0b\" for floating constant"
 
40005
-msgstr "gerçel sabitin \"%.*s\" soneki geçersiz"
 
40006
+msgstr "kayan nokta için geçerisz \"0b\" öntakısı"
 
40007
 
 
40008
 #: expr.c:514
 
40009
 msgid "use of C99 hexadecimal floating constant"
 
40010
@@ -450,10 +441,8 @@
 
40011
 msgstr "geleneksel C \"%.*s\" sonekini kullanmaz"
 
40012
 
 
40013
 #: expr.c:564
 
40014
-#, fuzzy
 
40015
-#| msgid "imaginary constants are a GCC extension"
 
40016
 msgid "suffix for double constant is a GCC extension"
 
40017
-msgstr "sanal sabitler bir GCC genişletmesidir"
 
40018
+msgstr "çift sabit için öntakı bir GCC uzantısıdır"
 
40019
 
 
40020
 #: expr.c:570
 
40021
 #, c-format
 
40022
@@ -461,10 +450,8 @@
 
40023
 msgstr "onaltılık kayan sabitli \"%.*s\" soneki geçersiz"
 
40024
 
 
40025
 #: expr.c:581
 
40026
-#, fuzzy
 
40027
-#| msgid "imaginary constants are a GCC extension"
 
40028
 msgid "decimal float constants are a GCC extension"
 
40029
-msgstr "sanal sabitler bir GCC genişletmesidir"
 
40030
+msgstr "onluk kayan sabitler bir GCC uzantısıdır"
 
40031
 
 
40032
 #: expr.c:599
 
40033
 #, c-format
 
40034
@@ -472,10 +459,8 @@
 
40035
 msgstr "tamsayı sabitte sonek \"%.*s\" soneki geçersiz"
 
40036
 
 
40037
 #: expr.c:624
 
40038
-#, fuzzy
 
40039
-#| msgid "use of C99 long long integer constant"
 
40040
 msgid "use of C++0x long long integer constant"
 
40041
-msgstr "ISO C99 long long tamsayı sabitleri yasaklar"
 
40042
+msgstr "ISO C++0x long long tamsayı sabitlerinin kullanımı"
 
40043
 
 
40044
 #: expr.c:625
 
40045
 msgid "use of C99 long long integer constant"
 
40046
@@ -486,10 +471,8 @@
 
40047
 msgstr "sanal sabitler bir GCC genişletmesidir"
 
40048
 
 
40049
 #: expr.c:644
 
40050
-#, fuzzy
 
40051
-#| msgid "imaginary constants are a GCC extension"
 
40052
 msgid "binary constants are a GCC extension"
 
40053
-msgstr "sanal sabitler bir GCC genişletmesidir"
 
40054
+msgstr "ikili sabitler bir GCC uzantısıdır"
 
40055
 
 
40056
 #: expr.c:737
 
40057
 msgid "integer constant is too large for its type"
 
40058
@@ -517,10 +500,8 @@
 
40059
 msgstr "\"defined\" bu kullanımıyla uyarlanabilir olmayabilir"
 
40060
 
 
40061
 #: expr.c:948
 
40062
-#, fuzzy
 
40063
-#| msgid "integer overflow in preprocessor expression"
 
40064
 msgid "user-defined literal in preprocessor expression"
 
40065
-msgstr "önişlemci ifadesinde tamsayı taşması"
 
40066
+msgstr "önişleyici ifadesinde kullanıcı tanımlı bağımlı"
 
40067
 
 
40068
 #: expr.c:953
 
40069
 msgid "floating constant in preprocessor expression"
 
40070
@@ -536,20 +517,17 @@
 
40071
 msgstr "\"%s\" tanımlı değil"
 
40072
 
 
40073
 #: expr.c:1020
 
40074
-#, fuzzy
 
40075
-#| msgid "#%s is a GCC extension"
 
40076
 msgid "assertions are a GCC extension"
 
40077
-msgstr "#%s bir GCC uzantısıdır"
 
40078
+msgstr "belirteçler bir GCC uzantısıdır"
 
40079
 
 
40080
 #: expr.c:1023
 
40081
 msgid "assertions are a deprecated extension"
 
40082
-msgstr ""
 
40083
+msgstr "belirteçler artık kullanılmayan bir ifadedir"
 
40084
 
 
40085
 #: expr.c:1268
 
40086
-#, fuzzy, c-format
 
40087
-#| msgid "unbalanced stack in #if"
 
40088
+#, c-format
 
40089
 msgid "unbalanced stack in %s"
 
40090
-msgstr "#if ifadesinde karşılıksız yığın"
 
40091
+msgstr "%s içinde dengelenmemiş yığın"
 
40092
 
 
40093
 #: expr.c:1288
 
40094
 #, c-format
 
40095
@@ -594,39 +572,39 @@
 
40096
 msgid "division by zero in #if"
 
40097
 msgstr "#if içinde sıfırla bölme"
 
40098
 
 
40099
-#: files.c:504
 
40100
+#: files.c:505
 
40101
 msgid "NULL directory in find_file"
 
40102
 msgstr "find_file içinde boş dizin"
 
40103
 
 
40104
-#: files.c:542
 
40105
+#: files.c:553
 
40106
 msgid "one or more PCH files were found, but they were invalid"
 
40107
 msgstr "bir veya daha fazla PCH dosyası bulundu ama bunlar geçersiz"
 
40108
 
 
40109
-#: files.c:545
 
40110
+#: files.c:556
 
40111
 msgid "use -Winvalid-pch for more information"
 
40112
 msgstr "daha fazla bilgi almak için -Winvalid-pch kullanın"
 
40113
 
 
40114
-#: files.c:643
 
40115
+#: files.c:660
 
40116
 #, c-format
 
40117
 msgid "%s is a block device"
 
40118
 msgstr "%s bir blok aygıtıdır"
 
40119
 
 
40120
-#: files.c:660
 
40121
+#: files.c:677
 
40122
 #, c-format
 
40123
 msgid "%s is too large"
 
40124
 msgstr "%s çok büyük"
 
40125
 
 
40126
-#: files.c:700
 
40127
+#: files.c:717
 
40128
 #, c-format
 
40129
 msgid "%s is shorter than expected"
 
40130
 msgstr "%s beklenenden daha kısa"
 
40131
 
 
40132
-#: files.c:935
 
40133
+#: files.c:953
 
40134
 #, c-format
 
40135
 msgid "no include path in which to search for %s"
 
40136
 msgstr "%s için aranacaklar içinde başlık dosyaları yolu yok"
 
40137
 
 
40138
-#: files.c:1363
 
40139
+#: files.c:1381
 
40140
 msgid "Multiple include guards may be useful for:\n"
 
40141
 msgstr "Çoklu include önlemleri aşağıdakiler için kullanışlı olabilir:\n"
 
40142
 
 
40143
@@ -717,27 +695,24 @@
 
40144
 #: lex.c:1178 lex.c:1255
 
40145
 #, c-format
 
40146
 msgid "identifier \"%s\" is a special operator name in C++"
 
40147
-msgstr ""
 
40148
+msgstr "\"%s\" belirteci, C++'da özel bir işleç adıdır"
 
40149
 
 
40150
 #: lex.c:1399
 
40151
 msgid "raw string delimiter longer than 16 characters"
 
40152
-msgstr ""
 
40153
+msgstr "ham dizge ayracı 16 karakterden uzun"
 
40154
 
 
40155
 #: lex.c:1402
 
40156
-#, fuzzy, c-format
 
40157
-#| msgid "universal character %.*s is not valid in an identifier"
 
40158
+#, c-format
 
40159
 msgid "invalid character '%c' in raw string delimiter"
 
40160
-msgstr "evrensel karakter %.*s bir belirteç içinde geçerli değil"
 
40161
+msgstr "ham dizge ayracında geçersiz karakter '%c'"
 
40162
 
 
40163
 #: lex.c:1525 lex.c:1547
 
40164
-#, fuzzy
 
40165
-#| msgid "unterminated #%s"
 
40166
 msgid "unterminated raw string"
 
40167
-msgstr "sonlandırılmamış #%s"
 
40168
+msgstr "bitirilmemiş ham dizge"
 
40169
 
 
40170
 #: lex.c:1573 lex.c:1706
 
40171
 msgid "invalid suffix on literal; C++11 requires a space between literal and identifier"
 
40172
-msgstr ""
 
40173
+msgstr "geçersiz ifade soneki; C++11 ifade ve tanımlayıcı arasında bir boşluk gerektirir"
 
40174
 
 
40175
 #: lex.c:1684
 
40176
 msgid "null character(s) preserved in literal"
 
40177
@@ -785,7 +760,7 @@
 
40178
 
 
40179
 #: macro.c:377
 
40180
 msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
 
40181
-msgstr ""
 
40182
+msgstr "__COUNTER__ -fdirectives-only ile talimat içerisinde genişletildi"
 
40183
 
 
40184
 #: macro.c:535
 
40185
 msgid "invalid string literal, ignoring final '\\'"
 
40186
@@ -823,7 +798,7 @@
 
40187
 #: macro.c:1746
 
40188
 #, c-format
 
40189
 msgid "invoking macro %s argument %d: empty macro arguments are undefined in ISO C90 and ISO C++98"
 
40190
-msgstr ""
 
40191
+msgstr "%s makrosu %d argümanı uygulanıyor: ISO C90 ve ISO C++98 içerisinde boş makro argümanları tanımsızdır"
 
40192
 
 
40193
 #: macro.c:2708
 
40194
 #, c-format
 
40195
@@ -890,38 +865,36 @@
 
40196
 msgid "invalid hash type %d in cpp_macro_definition"
 
40197
 msgstr "cpp_macro_definition içindeki isimli yapı türü %d geçersiz"
 
40198
 
 
40199
-#: pch.c:87 pch.c:335 pch.c:347 pch.c:365 pch.c:371 pch.c:380 pch.c:387
 
40200
+#: pch.c:87 pch.c:345 pch.c:359 pch.c:377 pch.c:383 pch.c:392 pch.c:399
 
40201
 msgid "while writing precompiled header"
 
40202
 msgstr "önderlemeli başlık yazılırken"
 
40203
 
 
40204
-#: pch.c:607
 
40205
-#, fuzzy, c-format
 
40206
-#| msgid "%s: not used because `%s' is defined"
 
40207
+#: pch.c:619
 
40208
+#, c-format
 
40209
 msgid "%s: not used because `%.*s' is poisoned"
 
40210
-msgstr "%s: `%s' tanımlı olduğundan kullanılmadı"
 
40211
+msgstr "%s: `%.*s' zehirli olduğu için kullanılmadı"
 
40212
 
 
40213
-#: pch.c:629
 
40214
+#: pch.c:641
 
40215
 #, c-format
 
40216
 msgid "%s: not used because `%.*s' not defined"
 
40217
 msgstr "%s: `%.*s' tanımlı olmadığından kullanılmadı"
 
40218
 
 
40219
-#: pch.c:641
 
40220
+#: pch.c:653
 
40221
 #, c-format
 
40222
 msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
 
40223
 msgstr "%s: `%.*s' kullanılmadı çünkü `%s' olarak tanımlı, `%.*s' değil"
 
40224
 
 
40225
-#: pch.c:682
 
40226
+#: pch.c:694
 
40227
 #, c-format
 
40228
 msgid "%s: not used because `%s' is defined"
 
40229
 msgstr "%s: `%s' tanımlı olduğundan kullanılmadı"
 
40230
 
 
40231
-#: pch.c:702
 
40232
-#, fuzzy, c-format
 
40233
-#| msgid "%s: not used because `%s' is defined"
 
40234
+#: pch.c:714
 
40235
+#, c-format
 
40236
 msgid "%s: not used because `__COUNTER__' is invalid"
 
40237
-msgstr "%s: `%s' tanımlı olduğundan kullanılmadı"
 
40238
+msgstr "%s: `__COUNTER__' geçersiz olduğundan kullanılmadı"
 
40239
 
 
40240
-#: pch.c:711 pch.c:886
 
40241
+#: pch.c:723 pch.c:898
 
40242
 msgid "while reading precompiled header"
 
40243
 msgstr "önderlemeli başlık okunurken"
 
40244
 
 
40245
Index: .
 
40246
===================================================================
 
40247
--- a/src/.     (.../tags/gcc_4_8_2_release)
 
40248
+++ b/src/.     (.../branches/gcc-4_8-branch)
 
40249
 
 
40250
Property changes on: .
 
40251
___________________________________________________________________
 
40252
Modified: svn:mergeinfo
 
40253
   Merged /trunk:r202766,204547,206123-206126,206395,206628,207387