1
# DP: updates from the 4.8 branch upto 20140403 (r209054).
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)
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'
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)
20
+2014-03-26 Jakub Jelinek <jakub@redhat.com>
22
+ * config/linux/futex_bits.h: Include errno.h.
23
+ (sys_futex0): If syscall returns -1, return -errno rather than
26
+2014-03-03 Peter Bergner <bergner@vnet.ibm.com>
28
+ Backport from mainline
29
+ 2013-06-20 Torvald Riegel <triegel@redhat.com>
31
+ * query.cc (_ITM_inTransaction): Abort when using the HTM fastpath.
32
+ (_ITM_getTransactionId): Same.
33
+ * config/x86/target.h (htm_transaction_active): New.
35
+ 2013-06-20 Torvald Riegel <triegel@redhat.com>
38
+ * beginend.cc (gtm_thread::begin_transaction): Handle reentrancy in
41
2013-10-16 Release Manager
45
2013-08-02 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
47
* configure.tgt: Add -msoft-float to XCFLAGS.
50
2013-08-14 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
52
* config/s390/sjlj.S: Add file missing from last commit.
53
* config/s390/target.h: Likewise.
56
2013-08-02 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
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)
64
_ITM_howExecuting ITM_REGPARM
65
_ITM_inTransaction (void)
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())
76
struct gtm_thread *tx = gtm_thr();
77
if (tx && (tx->nesting > 0))
80
_ITM_transactionId_t ITM_REGPARM
81
_ITM_getTransactionId (void)
83
+#if defined(USE_HTM_FASTPATH)
84
+ // See ITM_inTransaction.
85
+ if (htm_fastpath && htm_transaction_active())
88
struct gtm_thread *tx = gtm_thr();
89
return (tx && (tx->nesting > 0)) ? tx->id : _ITM_noTransactionId;
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)
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()))
105
tx = new gtm_thread();
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
113
+ if (tx->nesting > 0)
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)
126
#include <sys/syscall.h>
130
sys_futex0 (std::atomic<int> *addr, long op, long val)
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))
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)
144
return begin_ret & _XABORT_RETRY;
147
+/* Returns true iff a hardware transaction is currently being executed. */
149
+htm_transaction_active ()
151
+ return _xtest() != 0;
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)
161
+2014-04-02 Richard Henderson <rth@redhat.com>
163
+ * config/linux/futex.h (futex_wait): Get error value from errno.
164
+ (futex_wake): Likewise.
166
+2013-12-12 Jakub Jelinek <jakub@redhat.com>
169
+ * testsuite/libgomp.fortran/crayptr2.f90: Add private (d) clause to
172
2013-10-16 Release Manager
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)
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
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)
194
futex_wait (int *addr, int val)
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))
201
gomp_futex_wait &= ~FUTEX_PRIVATE_FLAG;
202
gomp_futex_wake &= ~FUTEX_PRIVATE_FLAG;
205
futex_wake (int *addr, int count)
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))
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 @@
221
# For libtool versioning info, format is CURRENT:REVISION:AGE
222
-libtool_VERSION=6:18:0
223
+libtool_VERSION=6:19:0
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)
235
- ::sleep(__s.count() + (__ns >= 1000000));
236
+ ::sleep(__s.count() + (__ns.count() >= 1000000));
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)
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>
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>
259
Note 1: Error should be libstdc++.so.3.0.3.
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>
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 @@
276
+ <?dbhtml bgcolor="#B0B0B0" ?>
277
<entry>20.9.7.6</entry>
278
<entry>Other transformations</entry>
281
+ <entry>Partial</entry>
282
+ <entry>Missing <code>aligned_union</code>.</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)
296
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">FSF</link>
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)
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)
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)
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 ©
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">
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)
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
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.
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.
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.
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.
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.
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.
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)
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 ©
383
<a class="link" href="http://www.fsf.org/" target="_top">FSF
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
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)
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.
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)
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.
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.
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.
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>
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)
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)
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.
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)
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.
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)
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.
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)
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)
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.
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.
496
This page describes the C++ support in mainline GCC SVN, not in any
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>
505
This page describes the C++11 support in mainline GCC SVN, not in any
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>
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"><ratio></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"><scoped_allocator></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"><ratio></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"><scoped_allocator></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>
523
This page describes the TR1 support in mainline GCC SVN, not in any particular
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"><functional></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"><memory></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"><functional></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"><memory></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">
529
<a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">boost::shared_ptr</a>.
532
This page describes the TR 24733 support in mainline GCC SVN, not in any
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)
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)
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
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)
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
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
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
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
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
619
This library contains a container tag hierarchy corresponding to the
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>.
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 -
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
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">
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
654
implement using the low
655
level % (modulo) operation (for any m), or the
656
low level & (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">
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 & 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
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 =
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>
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>,
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">
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>)
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 ) =
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>
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>
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,
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>
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>.
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
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?
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
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<Cntnr></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)
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.
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
871
several <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Invoking-GCC.html" target="_top">GCC
873
enumerated and detailed in the table below.
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 <thread>, <future>,
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 <thread>, <future>,
878
<mutex>, or <condition_variable>.</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)
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)
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.
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
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)
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 <ext/concurrence.h>
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)
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.
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)
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.
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)
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>.
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)
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.
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.
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.
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)
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.
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)
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.
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
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
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
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
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
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
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.
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.
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
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
1072
</em>. </span><span class="date">
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)
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.
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)
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
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 -> 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 -> 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)
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.
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.
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>
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
1128
for this group is quite useful.
1129
</p></li><li class="listitem"><p>
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)
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.
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)
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.
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.
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)
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.
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)
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.
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)
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).
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)
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.
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)
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.
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"><ext/concurrence.h></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"><ext/concurrence.h></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)
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.
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.
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.
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.
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)
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.
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)
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.
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)
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.
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.
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.
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<></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)
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.
1320
{ this->_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)
1326
@@ -274,39 +274,39 @@
1327
. </span><span class="copyright">Copyright © 2008
1328
The Open Group/The Institute of Electrical and Electronics
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
1335
</em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams </span>. </span><span class="publisher"><span class="publishername">
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
1342
</em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams</span>. </span><span class="publisher"><span class="publishername">
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
1349
</em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
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
1356
</em>. </span><span class="author"><span class="firstname">Richard</span> <span class="surname">Henderson</span>. </span><span class="publisher"><span class="publishername">
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
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">
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
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)
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)
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)
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
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">
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
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)
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)
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
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
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
1440
</em>. </span><span class="subtitle">
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
1447
</em>. </span><span class="subtitle">
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)
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.
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.
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)
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)
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.
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.
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.
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)
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
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)
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
1528
In addition, there are the following diagnostics classes,
1529
used to report errors specific to this library's data
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)
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)
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
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)
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.
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)
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)
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.
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.
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.
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.
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.
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.
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.
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.
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)
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.
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.
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.
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)
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.
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>
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
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
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++
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?
1689
</em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
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
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
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">
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">
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">
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>
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<T></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
1726
aliasing constructor, make_shared & 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>
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
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>
1744
There is a single <code class="classname">_Sp_counted_base</code> class,
1745
which is a template parameterized on the enum
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
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>
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.
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
1780
</em>. </span><span class="subtitle">
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
1787
</em>. </span><span class="subtitle">
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++
1794
</em>. </span><span class="subtitle">
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
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)
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
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>
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<T></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<T></code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template<int></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator<T></code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc<T></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc<T></code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template<bool,int></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc<T></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<T></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<T></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<T></code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template<int></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator<T></code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc<T></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc<T></code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template<bool,int></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc<T></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<T></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<T></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<T></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<T></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<T></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.
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)
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.
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)
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.
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)
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.
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)
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.
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)
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.
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)
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.
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)
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.
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)
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.
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.
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.
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)
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.
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)
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_<diagnostic></code>.
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">
1961
Quick Sort for a particular call context.
1962
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
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>.
1970
Keep a shadow for each container. Record iterator dereferences and
1971
container member accesses. Issue advice for elements referenced by
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)
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)
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.
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)
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
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>
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
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>
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"><i></td><td align="left">@a word</td></tr><tr><td align="left"><b></td><td align="left">@b word</td></tr><tr><td align="left"><code></td><td align="left">@c word</td></tr><tr><td align="left"><em></td><td align="left">@a word</td></tr><tr><td align="left"><em></td><td align="left"><em>two words or more</em></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"><i></td><td align="left">@a word</td></tr><tr><td align="left"><b></td><td align="left">@b word</td></tr><tr><td align="left"><code></td><td align="left">@c word</td></tr><tr><td align="left"><em></td><td align="left">@a word</td></tr><tr><td align="left"><em></td><td align="left"><em>two words or more</em></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"><p></td><td align="left"><para></td></tr><tr><td align="left"><pre></td><td align="left"><computeroutput>, <programlisting>,
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"><p></td><td align="left"><para></td></tr><tr><td align="left"><pre></td><td align="left"><computeroutput>, <programlisting>,
2047
<literallayout></td></tr><tr><td align="left"><ul></td><td align="left"><itemizedlist></td></tr><tr><td align="left"><ol></td><td align="left"><orderedlist></td></tr><tr><td align="left"><il></td><td align="left"><listitem></td></tr><tr><td align="left"><dl></td><td align="left"><variablelist></td></tr><tr><td align="left"><dt></td><td align="left"><term></td></tr><tr><td align="left"><dd></td><td align="left"><listitem></td></tr><tr><td align="left"><a href=""></td><td align="left"><ulink url=""></td></tr><tr><td align="left"><code></td><td align="left"><literal>, <programlisting></td></tr><tr><td align="left"><strong></td><td align="left"><emphasis></td></tr><tr><td align="left"><em></td><td align="left"><emphasis></td></tr><tr><td align="left">"</td><td align="left"><quote></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"><structname></td><td align="left"><structname>char_traits</structname></td></tr><tr><td align="left"><classname></td><td align="left"><classname>string</classname></td></tr><tr><td align="left"><function></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"><structname></td><td align="left"><structname>char_traits</structname></td></tr><tr><td align="left"><classname></td><td align="left"><classname>string</classname></td></tr><tr><td align="left"><function></td><td align="left">
2052
<p><function>clear()</function></p>
2053
<p><function>fs.clear()</function></p>
2054
</td></tr><tr><td align="left"><type></td><td align="left"><type>long long</type></td></tr><tr><td align="left"><varname></td><td align="left"><varname>fs</varname></td></tr><tr><td align="left"><literal></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)
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.
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.
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)
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
2086
mode or with debug mode. The
2087
following table provides the names and headers of the debugging
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"><debug/bitset></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"><debug/deque></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"><debug/list></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"><debug/map></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"><debug/map></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"><debug/set></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"><debug/set></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"><debug/string></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"><debug/string></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"><debug/string></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"><debug/vector></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"><debug/bitset></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"><debug/deque></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"><debug/list></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"><debug/map></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"><debug/map></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"><debug/set></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"><debug/set></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"><debug/string></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"><debug/string></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"><debug/string></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"><debug/vector></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"><debug/unordered_map></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"><debug/unordered_map></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"><debug/unordered_set></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"><debug/unordered_set></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"><debug/unordered_map></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"><debug/unordered_map></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"><debug/unordered_set></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"><debug/unordered_set></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)
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.
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.
2110
Several of the standard algorithms, for instance
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)
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)
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.
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)
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
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
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
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
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)
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.
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)
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)
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.
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<wchar_t, char, mbstate_t> ,
2216
conversions are made between the internal character set (always UCS4
2217
on GNU/Linux) and whatever the currently selected locale for the
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">
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">
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)
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">
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">
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">
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)
2273
@@ -426,25 +426,25 @@
2274
</em>. </span><span class="copyright">Copyright © 2008
2275
The Open Group/The Institute of Electrical and Electronics
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">
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
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">
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
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
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">
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">
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)
2326
@@ -706,23 +706,23 @@
2327
</em>. </span><span class="copyright">Copyright © 2008
2328
The Open Group/The Institute of Electrical and Electronics
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">
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
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
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)
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.
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.
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.
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)
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)
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
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.
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)
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.
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.
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.
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
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)
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
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.
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
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">
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
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)
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)
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)
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.
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<T1,T2></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)
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
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>
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)
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)
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
2537
the 1998 standard as updated for 2003, and the current 2011 standard.
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)
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)
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
2586
<a class="link" href="http://valgrind.org/docs/manual/hg-manual.html" target="_top">
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>.
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)
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.
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.
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.
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,
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">
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">
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)
2639
@@ -420,11 +420,11 @@
2640
</em>. </span><span class="copyright">Copyright © 2008
2641
The Open Group/The Institute of Electrical and Electronics
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">
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)
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.
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)
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.
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)
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)
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)
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)
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.
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)
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.
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.
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.
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)
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.
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.
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.
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
<iostream> 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)
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.
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.
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.
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.
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.
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.
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 @@
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.
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)
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.
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)
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.
2851
The precise terms and conditions for copying, distribution and modification
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>
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
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)
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.
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)
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.
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)
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.
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.
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.
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());
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>
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)
2930
while (__first != __last && *__first < __value)
2932
@@ -362,38 +364,11 @@
2933
return __first == __last;
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>
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)
2946
- return __check_partitioned_lower_aux(__first.base(), __last.base(),
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>
2955
- __check_partitioned_lower(_ForwardIterator __first,
2956
+ __check_partitioned_upper(_ForwardIterator __first,
2957
_ForwardIterator __last, const _Tp& __value)
2959
- return __check_partitioned_lower_aux(__first, __last, __value,
2960
- std::__iterator_category(__first));
2963
- template<typename _ForwardIterator, typename _Tp>
2965
- __check_partitioned_upper_aux(_ForwardIterator __first,
2966
- _ForwardIterator __last, const _Tp& __value,
2967
- std::forward_iterator_tag)
2969
while (__first != __last && !(__value < *__first))
2971
if (__first != __last)
2972
@@ -405,35 +380,12 @@
2973
return __first == __last;
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>
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)
2986
- return __check_partitioned_upper_aux(__first.base(), __last.base(),
2990
- template<typename _ForwardIterator, typename _Tp>
2992
- __check_partitioned_upper(_ForwardIterator __first,
2993
- _ForwardIterator __last, const _Tp& __value)
2995
- return __check_partitioned_upper_aux(__first, __last, __value,
2996
- std::__iterator_category(__first));
2999
+ // Determine if a sequence is partitioned w.r.t. this element.
3000
template<typename _ForwardIterator, typename _Tp, typename _Pred>
3002
- __check_partitioned_lower_aux(_ForwardIterator __first,
3003
- _ForwardIterator __last, const _Tp& __value,
3005
- std::forward_iterator_tag)
3006
+ __check_partitioned_lower(_ForwardIterator __first,
3007
+ _ForwardIterator __last, const _Tp& __value,
3010
while (__first != __last && bool(__pred(*__first, __value)))
3012
@@ -446,39 +398,12 @@
3013
return __first == __last;
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>
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)
3027
- return __check_partitioned_lower_aux(__first.base(), __last.base(),
3028
- __value, __pred, __tag);
3031
- // Determine if a sequence is partitioned w.r.t. this element.
3032
template<typename _ForwardIterator, typename _Tp, typename _Pred>
3034
- __check_partitioned_lower(_ForwardIterator __first,
3035
+ __check_partitioned_upper(_ForwardIterator __first,
3036
_ForwardIterator __last, const _Tp& __value,
3039
- return __check_partitioned_lower_aux(__first, __last, __value, __pred,
3040
- std::__iterator_category(__first));
3043
- template<typename _ForwardIterator, typename _Tp, typename _Pred>
3045
- __check_partitioned_upper_aux(_ForwardIterator __first,
3046
- _ForwardIterator __last, const _Tp& __value,
3048
- std::forward_iterator_tag)
3050
while (__first != __last && !bool(__pred(__value, *__first)))
3052
if (__first != __last)
3053
@@ -490,31 +415,6 @@
3054
return __first == __last;
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>
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)
3068
- return __check_partitioned_upper_aux(__first.base(), __last.base(),
3069
- __value, __pred, __tag);
3072
- template<typename _ForwardIterator, typename _Tp, typename _Pred>
3074
- __check_partitioned_upper(_ForwardIterator __first,
3075
- _ForwardIterator __last, const _Tp& __value,
3078
- return __check_partitioned_upper_aux(__first, __last, __value, __pred,
3079
- std::__iterator_category(__first));
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 @@
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)
3097
+ // Initialize with a version number of 1 and no iterators
3098
+ _Safe_unordered_container_base(const _Safe_unordered_container_base&)
3100
+ : _Safe_unordered_container_base() { }
3102
+ _Safe_unordered_container_base(_Safe_unordered_container_base&& __x)
3104
+ : _Safe_unordered_container_base()
3105
+ { this->_M_swap(__x); }
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)
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, \
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) \
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, \
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) \
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, \
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) \
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, \
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...)>
3170
- _Task_state(_Fn&& __fn, const _Alloc& __a)
3171
- : _Task_state_base<_Res(_Args...)>(__a), _M_impl(std::move(__fn), __a)
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)
3181
@@ -1292,19 +1294,21 @@
3183
struct _Impl : _Alloc
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)) { }
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)
3198
- typedef __future_base::_Task_state<_Fn, _Alloc, _Signature> _State;
3199
- return std::allocate_shared<_State>(__a, std::move(__fn), __a);
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)
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);
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>
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))
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 @@
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); }
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); }
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 @@
3246
_M_move_assign(vector&& __x, std::true_type) noexcept
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)
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);
3267
@@ -2291,7 +2291,7 @@
3268
_RandomAccessIterator __last, _Compare __comp)
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,
3274
return std::__unguarded_partition(__first + 1, __last, *__first, __comp);
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)
3283
// Perform lock-free add-if-not-zero operation.
3284
- _Atomic_word __count = _M_use_count;
3285
+ _Atomic_word __count = _M_get_use_count();
3291
template<typename... _Args>
3292
_Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
3293
- : _M_impl(__a), _M_storage()
3296
_M_impl._M_ptr = static_cast<_Tp*>(static_cast<void*>(&_M_storage));
3297
// _GLIBCXX_RESOLVE_LIB_DEFECTS
3299
: _M_ptr(__r.get()), _M_refcount()
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);
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)
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)
3324
+2014-03-26 Jonathan Wakely <jwakely@redhat.com>
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.
3331
+2014-03-25 Jonathan Wakely <jwakely@redhat.com>
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.
3338
+2014-03-18 Jonathan Wakely <jwakely@redhat.com>
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.
3347
+2014-03-12 Roland McGrath <mcgrathr@google.com>
3348
+ Mark Seaborn <mseaborn@google.com>
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.
3356
+2014-03-11 Jonathan Wakely <jwakely@redhat.com>
3358
+ Backport from mainline.
3359
+ 2014-01-09 Jonathan Wakely <jwakely@redhat.com>
3361
+ PR libstdc++/59680
3362
+ * src/c++11/thread.cc (__sleep_for): Fix call to ::sleep.
3364
+2014-03-11 Jonathan Wakely <jwakely@redhat.com>
3366
+ Backport from mainline.
3367
+ 2014-01-27 Jonathan Wakely <jwakely@redhat.com>
3369
+ PR libstdc++/59215
3370
+ * include/bits/shared_ptr_base.h
3371
+ (_Sp_counted_base<_S_atomic>::_M_add_ref_lock()): Use relaxed atomic
3374
+2014-03-11 Jonathan Wakely <jwakely@redhat.com>
3376
+ Backport from mainline.
3378
+ 2014-01-09 Jonathan Wakely <jwakely@redhat.com>
3380
+ PR libstdc++/59738
3381
+ * include/bits/stl_vector.h (vector<>::_M_move_assign): Restore
3382
+ support for non-Movable types.
3384
+ 2014-01-08 François Dumont <fdumont@gcc.gnu.org>
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.
3395
+ 2013-11-15 Jonathan Wakely <jwakely.gcc@gmail.com>
3397
+ * testsuite/23_containers/vector/allocator/move.cc: New
3399
+2014-01-27 Jason Merrill <jason@redhat.com>
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.
3408
+2013-12-15 H.J. Lu <hongjiu.lu@intel.com>
3410
+ * config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt: Update.
3412
+2013-11-22 Jonathan Wakely <jwakely.gcc@gmail.com>
3414
+ * acinclude.m4 (libtool_VERSION): Bump.
3415
+ * configure: Regenerate.
3416
+ * doc/xml/manual/abi.xml: Update version information.
3418
+2013-11-05 Jonathan Wakely <jwakely.gcc@gmail.com>
3420
+ * doc/xml/manual/status_cxx2011.xml: Document aligned_union as
3423
+ * doc/xml/manual/spine.xml: Update copyright years.
3424
+ * doc/html/*: Regenerate.
3426
+2013-11-01 Paolo Carlini <paolo.carlini@oracle.com>
3428
+ PR libstdc++/58952
3429
+ * include/c_global/cstdio: Undef getchar.
3431
+2013-10-31 Jonathan Wakely <jwakely.gcc@gmail.com>
3433
+ * testsuite/20_util/shared_ptr/cons/58839.cc: Do not use
3434
+ default_delete<void>.
3436
+2013-10-30 Chris Studholme <cvs@cs.utoronto.ca>
3438
+ PR libstdc++/58912
3439
+ * include/bits/shared_ptr_base.h (_Sp_counted_ptr_inplace): Remove
3440
+ unnecessary initialization of storage buffer.
3442
+2013-10-29 Jonathan Wakely <jwakely.gcc@gmail.com>
3444
+ PR libstdc++/58839
3445
+ * include/bits/shared_ptr_base.h
3446
+ (__shared_ptr<T>::__shared_ptr(unique_ptr<U,D>&&)): Do not dereference
3448
+ * testsuite/20_util/shared_ptr/cons/58839.cc: New.
3450
+2013-10-20 Chris Jefferson <chris@bubblescope.net>
3451
+ Paolo Carlini <paolo.carlini@oracle.com>
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
3458
+2013-10-16 François Dumont <fdumont@gcc.gnu.org>
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
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.
3471
2013-10-16 Release Manager
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;
3486
if (foreign_exception)
3489
__unexpected(unexpectedHandler);
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;
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.
3505
+ if (catch_type->__do_catch(&bad_exc, &obj, 1))
3506
bad_exception_allowed = true;
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();
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 @@
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;
3533
memset (ret, 0, sizeof (__cxa_refcounted_exception));
3535
return (void *)((char *)ret + sizeof (__cxa_refcounted_exception));
3536
@@ -191,12 +185,6 @@
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;
3546
memset (ret, 0, sizeof (__cxa_dependent_exception));
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)
3555
PROBE2 (throw, obj, tinfo);
3557
+ __cxa_eh_globals *globals = __cxa_get_globals ();
3558
+ globals->uncaughtExceptions += 1;
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)
3568
+// Copyright (C) 2013 Free Software Foundation, Inc.
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.
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.
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/>.
3585
+// 25.3.2 [lib.alg.nth.element]
3587
+// { dg-options "-std=gnu++11" }
3589
+#include <algorithm>
3590
+#include <testsuite_hooks.h>
3591
+#include <testsuite_iterators.h>
3593
+using __gnu_test::test_container;
3594
+using __gnu_test::random_access_iterator_wrapper;
3596
+typedef test_container<int, random_access_iterator_wrapper> Container;
3600
+ std::vector<int> v = {
3610
+ Container con(v.data(), v.data() + 7);
3612
+ std::nth_element(con.begin(), con.begin() + 3, con.end());
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)
3625
+// Copyright (C) 2014 Free Software Foundation, Inc.
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.
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.
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/>.
3642
+#include <exception>
3646
+class unexpected {};
3647
+class from_handler {};
3649
+static void func_with_exception_spec() throw(expected)
3651
+ throw unexpected();
3654
+static void unexpected_handler()
3656
+ throw from_handler();
3659
+static void terminate_handler()
3667
+ std::set_unexpected(unexpected_handler);
3668
+ std::set_terminate(terminate_handler);
3670
+ func_with_exception_spec();
3671
+ } catch (expected&) {
3677
Property changes on: libstdc++-v3/testsuite/18_support/bad_exception/59392.cc
3678
___________________________________________________________________
3679
Added: svn:eol-style
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)
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 "" }
3696
+// Copyright (C) 2014 Free Software Foundation, Inc.
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.
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.
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/>.
3715
+#include <testsuite_hooks.h>
3720
+ X(const X&) = default;
3721
+ X(X&& x) { x.moved = true; }
3723
+ void operator()() const { }
3725
+ bool moved = false;
3731
+ std::packaged_task<void()> p(x);
3732
+ VERIFY( !x.moved );
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)
3744
+// { dg-require-atomic-builtins "" }
3745
+// { dg-options "-std=gnu++11" }
3747
+// Copyright (C) 2014 Free Software Foundation, Inc.
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.
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.
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/>.
3765
+#include <testsuite_hooks.h>
3780
+ bool test __attribute__((unused)) = true;
3782
+ std::atomic<Foo*> a;
3783
+ std::atomic<Bar*> b;
3785
+ VERIFY (a.is_lock_free() == b.is_lock_free());
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)
3792
+// { dg-options "-std=gnu++11" }
3793
+// { dg-do compile }
3794
+// { dg-require-debug-mode "" }
3796
+// Copyright (C) 2014 Free Software Foundation, Inc.
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.
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.
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/>.
3815
+#include <unordered_map>
3819
+ std::unordered_map<int,int> foo{ {0,1} };
3820
+ auto i = foo.begin();
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)
3831
+// Copyright (C) 2013 Free Software Foundation, Inc.
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.
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.
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/>.
3848
+// { dg-options "-std=gnu++11" }
3851
+#include <testsuite_hooks.h>
3852
+#include <testsuite_allocator.h>
3854
+struct T { int i; };
3856
+using __gnu_test::uneq_allocator;
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));
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() );
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));
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());
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)
3895
typedef std::vector<T, alloc_type> test_type;
3896
test_type v1(alloc_type(1));
3898
+ auto it = v1.begin();
3899
test_type v2(alloc_type(2));
3900
+ v2.push_back(T());
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());
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());
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)
3936
+// { dg-options "-std=gnu++11" }
3937
+// { dg-do compile }
3939
+// Copyright (C) 2013 Free Software Foundation, Inc.
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.
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.
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/>.
3961
+ void operator()(void*) const noexcept { }
3966
+ std::unique_ptr<void, D> y;
3967
+ std::shared_ptr<void> x = std::move(y);
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)
3974
+// Copyright (C) 2010-2014 Free Software Foundation, Inc.
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.
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.
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/>.
3991
+// 20.7.11 Function template bind
3994
+// { dg-do compile }
3995
+// { dg-options -std=c++11 }
3997
+#include <functional>
3999
+using std::placeholders::_1;
4001
+struct S { int i; };
4007
+ const S& operator()(const P& p) const { return p.s; }
4010
+int gi(const S& s) { return s.i; }
4012
+bool cmp(int, int) { return true; }
4017
+ auto f1 = bind(gs, _1);
4018
+ auto f2 = bind(gi, f1);
4019
+ auto f3 = bind(cmp, f2, 5);
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)
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
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 @@
4113
# For libtool versioning info, format is CURRENT:REVISION:AGE
4114
-libtool_VERSION=6:18:0
4115
+libtool_VERSION=6:19:0
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
4127
+# if defined(__powerpc64__)
4128
+# define ALIGNMENT 8
4129
+# define CPP_WORDSZ 64
4131
+# define HBLKSIZE 4096
4134
# define ALIGNMENT 4
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)
4144
+2013-12-29 Andreas Tobler <andreast@gcc.gnu.org>
4147
+ * include/private/gcconfig.h: Add FreeBSD powerpc64 defines.
4149
2013-10-16 Release Manager
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)
4157
+2013-10-21 Mike Stump <mikestump@comcast.net>
4159
+ * gcc_update (configure): Update to handle svn 1.8.1.
4161
2013-10-16 Release Manager
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)
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:/ {
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)
4182
#if !DONE && N <= WORDSIZE && defined(atomic_compare_exchange_w)
4184
SIZE(libat_compare_exchange) (UTYPE *mptr, UTYPE *eptr, UTYPE newval,
4185
- int smodel, int fmodel UNUSED)
4186
+ int smodel, int fmodel)
4188
UWORD mask, shift, weval, woldval, wnewval, t, *wptr;
4191
pre_barrier (smodel);
4195
while (!atomic_compare_exchange_w (wptr, &woldval, t, true,
4196
__ATOMIC_RELAXED, __ATOMIC_RELAXED));
4198
+ post_barrier (smodel);
4202
*eptr = woldval >> shift;
4204
- post_barrier (smodel);
4206
+ post_barrier (fmodel);
4211
@@ -102,18 +102,17 @@
4218
pre_seq_barrier (smodel);
4219
magic = protect_start (mptr);
4222
- if (oldval == *eptr)
4228
+ ret = (oldval == *eptr);
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)
4241
+2014-02-20 Richard Henderson <rth@redhat.com>
4244
+ * cas_n.c (libat_compare_exchange): Conditionalize on failure
4245
+ the store back to EPTR.
4247
2013-10-16 Release Manager
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 @@
4258
-if ac_fn_c_try_compile "$LINENO"; then :
4259
+if ac_fn_c_try_link "$LINENO"; then :
4260
have_unwind_getipinfo=yes
4262
have_unwind_getipinfo=no
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)
4277
# Makefile.am -- Backtrace Makefile.
4278
-# Copyright (C) 2012 Free Software Foundation, Inc.
4279
+# Copyright (C) 2012-2013 Free Software Foundation, Inc.
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)
4291
- addrs = (struct function_addrs *) pfvec->vec.base;
4292
addrs_count = pfvec->count;
4295
@@ -2514,12 +2513,17 @@
4297
if (!backtrace_vector_release (state, &lvec.vec, error_callback, data))
4299
+ addrs = (struct function_addrs *) pfvec->vec.base;
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)
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)
4319
+2014-02-07 Misty De Meo <misty@brew.sh>
4322
+ * configure.ac: Use AC_LINK_IFELSE in check for
4323
+ _Unwind_GetIPInfo.
4324
+ * configure: Regenerate.
4326
+2013-12-05 Ian Lance Taylor <iant@google.com>
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.
4336
+2013-11-30 Ian Lance Taylor <iant@google.com>
4338
+ Backport from mainline:
4339
+ 2013-10-17 Ian Lance Taylor <iant@google.com>
4341
+ * elf.c (elf_add): Don't get the wrong offsets if a debug section
4344
2013-10-16 Release Manager
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)
4355
+ if (sections[i].size == 0)
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 @@
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));
4367
+ if (sections[i].size == 0)
4368
+ sections[i].data = NULL;
4370
+ sections[i].data = ((const unsigned char *) debug_view.data
4371
+ + (sections[i].offset - min_offset));
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);
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
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,
4396
-/* Release any extra space allocated for VEC. Returns 1 on success, 0
4398
+/* Release any extra space allocated for VEC. This may change
4399
+ VEC->base. Returns 1 on success, 0 on failure. */
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)
4408
ac_save_CFFLAGS="$CFLAGS"
4409
CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
4410
AC_MSG_CHECKING([for _Unwind_GetIPInfo])
4411
- AC_COMPILE_IFELSE(
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 @@
4422
/* Finish the current allocation on VEC. */
4425
-backtrace_vector_finish (struct backtrace_state *state ATTRIBUTE_UNUSED,
4426
- struct backtrace_vector *vec)
4428
+backtrace_vector_finish (struct backtrace_state *state,
4429
+ struct backtrace_vector *vec,
4430
+ backtrace_error_callback error_callback,
4433
- vec->base = (char *) vec->base + vec->size;
4436
+ /* With this allocator we call realloc in backtrace_vector_grow,
4437
+ which means we can't easily reuse the memory here. So just
4439
+ if (!backtrace_vector_release (state, vec, error_callback, data))
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 @@
4455
/* Finish the current allocation on VEC. */
4458
-backtrace_vector_finish (struct backtrace_state *state ATTRIBUTE_UNUSED,
4459
- struct backtrace_vector *vec)
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)
4470
vec->base = (char *) vec->base + vec->size;
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)
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)
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
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)
4517
+2013-11-29 Matthias Klose <doko@ubuntu.com>
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.
4523
2013-03-22 Jakub Jelinek <jakub@redhat.com>
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)
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)
4540
+2014-04-01 Dominique d'Humieres <dominiq@lps.ens.fr>
4541
+ Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
4544
+ * testsuite/libjava.lang/sourcelocation.xfail: New file.
4546
+2014-03-11 Uros Bizjak <ubizjak@gmail.com>
4548
+ * java/lang/natObject.cc (_Jv_MonitorEnter): Add missing parenthesis
4549
+ around comparison with (address | LOCKED) in JvAssert.
4551
2013-10-16 Release Manager
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)
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)
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);
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 ))
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
# -------------------------
4590
- alpha*-dec-vx*) # Unlike all other Vxworks
4592
+ TOOLS_TARGET_PAIRS="\
4593
+ mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
4594
+ indepsw.adb<indepsw-aix.adb"
4597
- | powerpc*-wrs-vxworks \
4598
- | sparc*-wrs-vx* \
4599
- | *86-wrs-vxworks \
4601
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb"
4603
+ TOOLS_TARGET_PAIRS="\
4604
+ mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \
4605
+ indepsw.adb<indepsw-darwin.adb"
4607
- sparc-sun-solaris*)
4608
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
4610
+ TOOLS_TARGET_PAIRS="\
4611
+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
4612
+ indepsw.adb<indepsw-gnu.adb"
4614
- *86-*-solaris2* | x86_64-*-solaris2.1[0-9]*)
4615
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
4618
- | powerpc*-*-linux* \
4619
- | *ia64-*-linux* \
4620
- | alpha*-*-linux* \
4621
- | sparc*-*-linux* \
4622
- | hppa*-*-linux* \
4623
- | *x86_64-*-linux*)
4625
TOOLS_TARGET_PAIRS="\
4626
mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
4627
indepsw.adb<indepsw-gnu.adb"
4630
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb"
4632
+ TOOLS_TARGET_PAIRS="\
4633
+ mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
4634
+ indepsw.adb<indepsw-gnu.adb"
4638
+ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
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"
4646
- hppa*-hp-hpux10*) # Unlike hpux11
4650
TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-hpux.adb"
4653
- TOOLS_TARGET_PAIRS="\
4654
- mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
4655
- indepsw.adb<indepsw-aix.adb"
4657
+ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-ia64-hpux.adb"
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"
4667
EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
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"
4677
EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
4679
*-*-cygwin32* | *-*-mingw32* | *-*-pe)
4680
@@ -2097,14 +2090,6 @@
4681
indepsw.adb<indepsw-mingw.adb"
4682
EXTRA_GNATTOOLS='../../gnatdll$(exeext)'
4685
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb"
4688
- TOOLS_TARGET_PAIRS="\
4689
- mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
4690
- indepsw.adb<indepsw-gnu.adb"
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)
4704
+host_alias = @host_alias@
4707
INSTALL_DATA = @INSTALL_DATA@
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)" \
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
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
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 )))
4736
TOOLS_FLAGS_TO_PASS_CROSS= \
4738
"CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
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)" \
4752
@@ -179,11 +198,6 @@
4753
$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
4754
$(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools
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
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)
4769
# Per-target case statement
4770
# -------------------------
4772
- alpha*-dec-vx*) # Unlike all other Vxworks
4774
+ TOOLS_TARGET_PAIRS="\
4775
+ mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
4776
+ indepsw.adb<indepsw-aix.adb"
4779
- | powerpc*-wrs-vxworks \
4780
- | sparc*-wrs-vx* \
4781
- | *86-wrs-vxworks \
4783
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb"
4785
+ TOOLS_TARGET_PAIRS="\
4786
+ mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \
4787
+ indepsw.adb<indepsw-darwin.adb"
4789
- sparc-sun-solaris*)
4790
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
4792
+ TOOLS_TARGET_PAIRS="\
4793
+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
4794
+ indepsw.adb<indepsw-gnu.adb"
4796
- *86-*-solaris2* | x86_64-*-solaris2.1[[0-9]]*)
4797
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
4800
- | powerpc*-*-linux* \
4801
- | *ia64-*-linux* \
4802
- | alpha*-*-linux* \
4803
- | sparc*-*-linux* \
4804
- | hppa*-*-linux* \
4805
- | *x86_64-*-linux*)
4807
TOOLS_TARGET_PAIRS="\
4808
mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
4809
indepsw.adb<indepsw-gnu.adb"
4812
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb"
4814
+ TOOLS_TARGET_PAIRS="\
4815
+ mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
4816
+ indepsw.adb<indepsw-gnu.adb"
4820
+ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
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"
4828
- hppa*-hp-hpux10*) # Unlike hpux11
4832
TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-hpux.adb"
4835
- TOOLS_TARGET_PAIRS="\
4836
- mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
4837
- indepsw.adb<indepsw-aix.adb"
4839
+ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-ia64-hpux.adb"
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"
4849
EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
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"
4859
EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
4861
*-*-cygwin32* | *-*-mingw32* | *-*-pe)
4862
@@ -137,14 +130,6 @@
4863
indepsw.adb<indepsw-mingw.adb"
4864
EXTRA_GNATTOOLS='../../gnatdll$(exeext)'
4867
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb"
4870
- TOOLS_TARGET_PAIRS="\
4871
- mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
4872
- indepsw.adb<indepsw-gnu.adb"
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)
4882
+2013-12-12 Eric Botcazou <ebotcazou@adacore.com>
4883
+ Iain Sandoe <iain@codesourcery.com>
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.
4896
+2013-12-04 Eric Botcazou <ebotcazou@adacore.com>
4899
+ * configure.ac (target parameterization): Rewrite.
4900
+ * configure: Regenerate.
4902
2013-10-16 Release Manager
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)
4910
+2014-02-01 Dmitry Gorbachev <d.g.gorbachev@gmail.com>
4913
+ * gcc_release: Avoid printing empty line to generated MD5SUMS files.
4914
+ Bump copyright year.
4916
2013-10-16 Release Manager
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)
4925
# Script to create a GCC release.
4927
-# Copyright (c) 2001, 2002, 2006, 2009, 2010, 2011 Free Software Foundation.
4928
+# Copyright (c) 2001-2014 Free Software Foundation.
4930
# This file is part of GCC.
4935
# md5sum -c MD5SUMS | grep -v \"OK$\"
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 @@
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"
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"
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"
4965
mips*-*-netbsd*) # NetBSD/mips, either endian.
4967
mips*-*-linux*) # Linux MIPS, either endian.
4968
@@ -1081,7 +1085,7 @@
4969
md_unwind_header=tilepro/linux-unwind.h
4972
- tmake_file="v850/t-v850 t-fdpbit"
4973
+ tmake_file="${tmake_file} v850/t-v850 t-fdpbit"
4976
tmake_file="$tmake_file vax/t-linux"
4977
@@ -1098,7 +1102,7 @@
4978
extra_parts="$extra_parts crti.o crtn.o"
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
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)
4991
+2014-03-20 Joel Sherrill <joel.sherrill@oarcorp.com>
4993
+ * config.host (v850*-*-*): Add to tmake_file instead of resetting it.
4995
+2014-02-28 Joey Ye <joey.ye@arm.com>
4997
+ Backport from mainline r208229
4998
+ 2014-02-28 Joey Ye <joey.ye@arm.com>
5001
+ * config/arm/sfp-machine.h (_FP_NANFRAC_H,
5002
+ _FP_NANFRAC_S, _FP_NANFRAC_D, _FP_NANFRAC_Q):
5005
+2014-02-18 Kai Tietz <ktietz@redhat.com>
5006
+ Jonathan Schleifer <js@webkeks.org>
5009
+ * unwind-seh.c (_GCC_specific_handler): Pass proper
5010
+ value to unwind-handler.
5012
+2014-01-25 Walter Lee <walt@tilera.com>
5014
+ Backport from mainline
5015
+ 2014-01-25 Walter Lee <walt@tilera.com>
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.
5097
+2014-01-25 Walter Lee <walt@tilera.com>
5099
+ Backport from mainline
5100
+ 2014-01-25 Walter Lee <walt@tilera.com>
5102
+ * config/tilepro/atomic.c (BIT_OFFSET): Define.
5103
+ (__atomic_subword_cmpxchg): Use BIT_OFFSET.
5104
+ (__atomic_subword): Ditto.
5106
+2014-01-25 Walter Lee <walt@tilera.com>
5108
+ Backport from mainline
5109
+ 2014-01-25 Walter Lee <walt@tilera.com>
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.
5116
+2014-01-21 Baruch Siach <barch@tkos.co.il>
5118
+ * config.host (tmake_file): add t-slibgcc-libgcc for xtensa*-*-linux*.
5120
+2014-01-03 Joseph Myers <joseph@codesourcery.com>
5122
+ * config/rs6000/ibm-ldouble.c (__gcc_qdiv): Scale up arguments in
5123
+ case of small numerator and finite nonzero result.
5125
+2013-12-12 Zhenqiang Chen <zhenqiang.chen@arm.com>
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.
5131
+2013-12-10 Uros Bizjak <ubizjak@gmail.com>
5133
+ * config/i386/sfp-exceptions.c (__sfp_handle_exceptions): Emit SSE
5134
+ instructions when __SSE_MATH__ is defined.
5136
+2013-12-06 Ralf Corsépius <ralf.corsepius@rtems.org>
5138
+ * config.host (microblaze-*-rtems*): New.
5140
+2013-11-10 Kai Tietz <ktietz@redhat.com>
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.
5150
+2013-11-07 Uros Bizjak <ubizjak@gmail.com>
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.
5158
2013-10-16 Release Manager
5160
* GCC 4.8.2 released.
5162
* config/mips/crtn.S (fini, init): New labels.
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
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)
5175
if (_fex & FP_EX_INVALID)
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. */
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. */
5189
+ if (_fex & FP_EX_DENORM)
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");
5197
if (_fex & FP_EX_DIVZERO)
5199
float f = 1.0f, g = 0.0f;
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. */
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. */
5211
if (_fex & FP_EX_OVERFLOW)
5214
if (_fex & FP_EX_INEXACT)
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. */
5227
+ asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g));
5228
+ /* No need for fwait, exception is triggered by emitted fstp. */
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)
5240
static struct object obj;
5242
+/* Handle of libgcc's DLL reference. */
5243
+HANDLE hmod_libgcc;
5246
#if TARGET_USE_JCR_SECTION
5249
void (*register_frame_fn) (const void *, struct object *);
5250
HANDLE h = GetModuleHandle (LIBGCC_SONAME);
5253
- register_frame_fn = (void (*) (const void *, struct object *))
5254
- GetProcAddress (h, "__register_frame_info");
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");
5262
register_frame_fn = __register_frame_info;
5263
if (register_frame_fn)
5265
deregister_frame_fn = __deregister_frame_info;
5266
if (deregister_frame_fn)
5267
deregister_frame_fn (__EH_FRAME_BEGIN__);
5269
+ FreeLibrary (hmod_libgcc);
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 @@
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)
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)
5299
/* This code should be inlined by the compiler, but for now support
5300
it as out-of-line methods in libgcc. */
5304
pre_atomic_barrier (int model)
5306
switch ((enum memmodel) model)
5313
post_atomic_barrier (int model)
5315
switch ((enum memmodel) model)
5318
#define __unused __attribute__((unused))
5320
-#define __atomic_fetch_and_do(type, size, opname) \
5322
-__atomic_fetch_##opname##_##size(type* p, type i, int model) \
5323
+#define __fetch_and_do(proto, type, size, opname, top, bottom) \
5326
- pre_atomic_barrier(model); \
5328
type rv = arch_atomic_##opname(p, i); \
5329
- post_atomic_barrier(model); \
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)) \
5340
__atomic_fetch_and_do (int, 4, add)
5341
__atomic_fetch_and_do (int, 4, sub)
5342
__atomic_fetch_and_do (int, 4, or)
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) \
5349
-__atomic_##opname##_fetch_##size(type* p, type i, int model) \
5351
- pre_atomic_barrier(model); \
5352
- type rv = arch_atomic_##opname(p, i) op i; \
5353
- post_atomic_barrier(model); \
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())
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)
5375
+#define __do_and_fetch(proto, type, size, opname, op, op2, top, bottom) \
5379
+ type rv = op2 (arch_atomic_##opname(p, i) op i); \
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, &)
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)) \
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, &, ~)
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()) \
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, &, ~)
5434
#define __atomic_exchange_methods(type, size) \
5436
__atomic_compare_exchange_##size(volatile type* ptr, type* oldvalp, \
5437
@@ -128,49 +179,117 @@
5438
post_atomic_barrier(model); \
5442
__atomic_exchange_methods (int, 4)
5443
__atomic_exchange_methods (long long, 8)
5445
+#define __sync_exchange_methods(type, size) \
5447
+__sync_val_compare_and_swap_##size(type* ptr, type oldval, type newval) \
5449
+ arch_atomic_write_barrier(); \
5450
+ type retval = arch_atomic_val_compare_and_exchange(ptr, oldval, newval); \
5451
+ arch_atomic_read_barrier(); \
5456
+__sync_bool_compare_and_swap_##size(type* ptr, type oldval, type newval) \
5458
+ arch_atomic_write_barrier(); \
5459
+ bool retval = arch_atomic_bool_compare_and_exchange(ptr, oldval, newval); \
5460
+ arch_atomic_read_barrier(); \
5465
+__sync_lock_test_and_set_##size(type* ptr, type val) \
5467
+ type retval = arch_atomic_exchange(ptr, val); \
5468
+ arch_atomic_acquire_barrier_value(retval); \
5472
+__sync_exchange_methods (int, 4)
5473
+__sync_exchange_methods (long long, 8)
5475
+#ifdef __LITTLE_ENDIAN__
5476
+#define BIT_OFFSET(n, type) ((n) * 8)
5478
+#define BIT_OFFSET(n, type) ((4 - sizeof(type) - (n)) * 8)
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
5487
+#define __subword_cmpxchg_body(type, size, ptr, guess, val) \
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; \
5503
#define __atomic_subword_cmpxchg(type, size) \
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) \
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; \
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; \
5533
__atomic_subword_cmpxchg (u8, 1)
5534
__atomic_subword_cmpxchg (u16, 2)
5536
+#define __sync_subword_cmpxchg(type, size) \
5539
+__sync_val_compare_and_swap_##size(type* ptr, type guess, type val) \
5541
+ arch_atomic_write_barrier(); \
5542
+ type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val); \
5543
+ arch_atomic_read_barrier(); \
5548
+__sync_bool_compare_and_swap_##size(type* ptr, type guess, type val) \
5550
+ type oldval = __sync_val_compare_and_swap_##size(ptr, guess, val); \
5551
+ return oldval == guess; \
5554
+__sync_subword_cmpxchg (u8, 1)
5555
+__sync_subword_cmpxchg (u16, 2)
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
5560
-#define __atomic_subword(type, proto, top, expr, bottom) \
5561
+#define __subword(type, proto, top, expr, bottom) \
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)); \
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);, \
5581
- post_atomic_barrier(model); return retval;)
5583
+ type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
5584
+ pre_atomic_barrier(model);, \
5586
+ post_atomic_barrier(model); return retval;)
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)
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)
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)
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)
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)
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)
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)
5620
+#define __sync_subword_fetch(type, funcname, expr, retval) \
5622
+ type __sync_ ## funcname(type *ptr, type i), \
5623
+ arch_atomic_read_barrier();, \
5625
+ arch_atomic_write_barrier(); return retval;)
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)
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)
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)
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)
5655
#define __atomic_subword_lock(type, size) \
5657
-__atomic_subword(type, \
5658
- type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
5659
- pre_atomic_barrier(model);, \
5661
- post_atomic_barrier(model); return oldval;)
5663
+ type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
5664
+ pre_atomic_barrier(model);, \
5666
+ post_atomic_barrier(model); return oldval;)
5668
__atomic_subword_lock (u8, 1)
5669
__atomic_subword_lock (u16, 2)
5671
+#define __sync_subword_lock(type, size) \
5673
+ type __sync_lock_test_and_set_##size(type* ptr, type nval), \
5676
+ arch_atomic_acquire_barrier_value(oldval); return oldval;)
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)
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)
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)
5706
ms_exc->ExceptionInformation[3] = gcc_context.reg[1];
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);
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 @@
5723
else if (CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (op_def)))
5725
- /* Recurse through the type conversion. */
5726
- retval |= register_edge_assert_for_1 (gimple_assign_rhs1 (op_def),
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);
5738
@@ -7453,7 +7457,8 @@
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)
5746
/* [ ( ] ) or [ ]( ) */
5747
if (*vr0type == VR_RANGE
5748
@@ -7487,7 +7492,8 @@
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)
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)
5767
for (i = 0; i < 2; i++)
5769
op[i] = XEXP (test, i);
5770
@@ -205,11 +206,15 @@
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)
5780
+ gcc_assert (mode == iv.mode);
5783
- mode = GET_MODE (op[0]);
5784
- if (mode == VOIDmode)
5785
- mode = GET_MODE (op[1]);
5786
if (GET_MODE_CLASS (mode) == MODE_CC)
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);
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. */
5802
+arith_code_with_undefined_signed_overflow (tree_code code)
5810
+ case POINTER_PLUS_EXPR:
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.
5822
+ Returns a sequence of statements that replace STMT and also contain
5823
+ a modified form of STMT itself. */
5826
+rewrite_to_defined_overflow (gimple stmt)
5828
+ if (dump_file && (dump_flags & TDF_DETAILS))
5830
+ fprintf (dump_file, "rewriting stmt with undefined signed "
5832
+ print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
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)
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);
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);
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 @@
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));
5880
+ gsi_insert_on_edge (e, stmt);
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)
5890
def_operand_p def_p;
5892
- if (gimple_has_side_effects (stmt))
5893
+ if (gimple_has_side_effects (stmt)
5894
+ || gimple_vdef (stmt) != NULL_TREE)
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)
5903
decl = get_base_var (*tp);
5904
if (TREE_CODE (decl) == FUNCTION_DECL)
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,
5913
struct cgraph_node *per_node;
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);
5920
@@ -218,12 +218,12 @@
5921
/* Mark address taken in STMT. */
5924
-mark_address (gimple stmt, tree addr, void *data)
5925
+mark_address (gimple stmt, tree addr, tree, void *data)
5927
addr = get_base_address (addr);
5928
if (TREE_CODE (addr) == FUNCTION_DECL)
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,
5936
/* Mark load of T. */
5939
-mark_load (gimple stmt, tree t, void *data)
5940
+mark_load (gimple stmt, tree t, tree, void *data)
5942
t = get_base_address (t);
5943
if (t && TREE_CODE (t) == FUNCTION_DECL)
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,
5954
/* Mark store of T. */
5957
-mark_store (gimple stmt, tree t, void *data)
5958
+mark_store (gimple stmt, tree t, tree, void *data)
5960
t = get_base_address (t);
5961
if (t && TREE_CODE (t) == VAR_DECL
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);
5970
if (gimple_code (stmt) == GIMPLE_OMP_TASK)
5971
@@ -338,12 +338,12 @@
5972
tree fn = gimple_omp_task_child_fn (stmt);
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);
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);
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)
5991
#include "hashtab.h"
5992
#include "tree-pass.h"
5993
#include "diagnostic-core.h"
5994
+#include "params.h"
5996
/* This implements the pass that does predicate aware warning on uses of
5997
possibly uninitialized variables. The pass first collects the set of
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. */
6010
compute_control_dep_chain (basic_block bb, basic_block dep_bb,
6011
vec<edge> *cd_chains,
6013
- vec<edge> *cur_cd_chain)
6014
+ vec<edge> *cur_cd_chain,
6019
@@ -267,6 +269,10 @@
6020
if (EDGE_COUNT (bb->succs) < 2)
6023
+ if (*num_calls > PARAM_VALUE (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS))
6027
/* Could use a set instead. */
6028
cur_chain_len = cur_cd_chain->length ();
6029
if (cur_chain_len > MAX_CHAIN_LEN)
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))
6037
found_cd_chain = true;
6039
@@ -438,14 +444,12 @@
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;
6050
- typedef vec<edge> vec_edge_heap;
6051
- dep_chains = XCNEWVEC (vec_edge_heap, MAX_NUM_CHAINS);
6053
/* First find the closest bb that is control equivalent to PHI_BB
6054
that also dominates USE_BB. */
6056
@@ -458,20 +462,16 @@
6060
- compute_control_dep_chain (cd_root, use_bb,
6061
- dep_chains, &num_chains,
6063
+ compute_control_dep_chain (cd_root, use_bb, dep_chains, &num_chains,
6064
+ &cur_chain, &num_calls);
6067
- = convert_control_dep_chain_into_preds (dep_chains,
6071
+ = convert_control_dep_chain_into_preds (dep_chains, num_chains, 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;
6082
size_t *num_preds, gimple phi)
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;
6091
basic_block phi_bb, cd_root = 0;
6092
struct pointer_set_t *visited_phis;
6094
- typedef vec<edge> vec_edge_heap;
6095
- dep_chains = XCNEWVEC (vec_edge_heap, MAX_NUM_CHAINS);
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++)
6104
+ int num_calls = 0;
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,
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);
6117
/* Now update the newly added chains with
6118
the phi operand edge: */
6119
if (EDGE_COUNT (opnd_edge->src->succs) > 1)
6121
- if (prev_nc == num_chains
6122
- && num_chains < MAX_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++)
6128
- dep_chains[j].safe_push (opnd_edge);
6130
+ dep_chains[j].safe_push (opnd_edge);
6134
+ /* Free individual chain */
6135
+ cur_chain.release ();
6138
- = convert_control_dep_chain_into_preds (dep_chains,
6142
+ = convert_control_dep_chain_into_preds (dep_chains, num_chains, preds,
6144
for (i = 0; i < num_chains; i++)
6145
dep_chains[i].release ();
6146
- free (dep_chains);
6147
return has_valid_pred;
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 @@
6158
- if (gimple_code (stmt) != GIMPLE_ASSIGN)
6159
+ if (gimple_code (stmt) != GIMPLE_ASSIGN
6160
+ || gimple_assign_rhs_class (stmt) == GIMPLE_TERNARY_RHS)
6163
code = gimple_assign_rhs_code (stmt);
6164
@@ -2143,7 +2144,7 @@
6168
- gcc_assert (is_gimple_min_invariant (base));
6169
+ gcc_checking_assert (is_gimple_min_invariant (base));
6173
@@ -2152,7 +2153,7 @@
6174
if (gimple_code (stmt) == GIMPLE_PHI)
6177
- gcc_assert (is_gimple_assign (stmt));
6178
+ gcc_checking_assert (is_gimple_assign (stmt));
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)
6187
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
6189
+ Backport from mainline
6190
+ 2014-02-19 Jakub Jelinek <jakub@redhat.com>
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.
6197
+ 2014-02-12 Jakub Jelinek <jakub@redhat.com>
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.
6205
+2013-11-29 Jakub Jelinek <jakub@redhat.com>
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
6212
+2013-11-04 Marek Polacek <polacek@redhat.com>
6214
+ Backport from mainline
6215
+ 2013-11-04 Marek Polacek <polacek@redhat.com>
6218
+ * c-common.c (invalid_indirection_error): Handle RO_ARROW_STAR case.
6220
2013-10-16 Release Manager
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 @@
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;
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);
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);
6251
- struct tlist *t = tmp_nosp;
6252
- tmp_nosp = t->next;
6253
- merge_tlist (&tmp_list3, t, 0);
6255
+ merge_tlist (&tmp_list3, tmp_nosp, 0);
6256
t->cache_before_sp = tmp_before;
6257
t->cache_after_sp = tmp_list3;
6259
@@ -5511,13 +5506,13 @@
6261
TREE_TYPE (identifier_global_value (c_get_ident (UINT8_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)));
6267
- c_uint32_type_node =
6268
+ c_uint32_type_node = uint32_type_node =
6269
TREE_TYPE (identifier_global_value (c_get_ident (UINT32_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 @@
6279
arg = TREE_VALUE (args);
6280
+ if (TREE_CODE (arg) == IDENTIFIER_NODE)
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)",
6291
+ case RO_ARROW_STAR:
6293
+ "invalid type argument of %<->*%> (have %qT)",
6296
case RO_IMPLICIT_CONVERSION:
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. */
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)
6311
if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
6312
error_at (location, "wrong type argument to increment");
6313
@@ -3694,7 +3695,9 @@
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);
6324
@@ -4331,8 +4334,10 @@
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);
6335
ret = build3 (COND_EXPR, result_type, ifexp, op1, op2);
6337
@@ -10618,7 +10623,8 @@
6338
"%qE has invalid type for %<reduction%>", t);
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)
6345
enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
6346
const char *r_name = NULL;
6347
@@ -10628,8 +10634,14 @@
6353
+ if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
6357
+ if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
6362
@@ -10641,10 +10653,12 @@
6365
case TRUTH_ANDIF_EXPR:
6367
+ if (FLOAT_TYPE_P (TREE_TYPE (t)))
6370
case TRUTH_ORIF_EXPR:
6372
+ if (FLOAT_TYPE_P (TREE_TYPE (t)))
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)
6382
+2014-01-23 Jakub Jelinek <jakub@redhat.com>
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.
6388
+2014-01-22 Marek Polacek <polacek@redhat.com>
6390
+ Backport from mainline
6391
+ 2014-01-22 Marek Polacek <polacek@redhat.com>
6394
+ * c-typeck.c (build_conditional_expr): Call c_fully_fold instead
6395
+ of remove_c_maybe_const_expr on op1 and op2.
6397
+2013-12-03 Marek Polacek <polacek@redhat.com>
6399
+ Backport from mainline
6400
+ 2013-12-03 Marek Polacek <polacek@redhat.com>
6403
+ * c-decl.c (build_compound_literal): Allow compound literals with
6404
+ empty initial value.
6406
+2013-11-27 Tom de Vries <tom@codesourcery.com>
6407
+ Marc Glisse <marc.glisse@inria.fr>
6410
+ * c-typeck.c (build_unary_op): Allow vector increment and decrement.
6412
2013-10-16 Release Manager
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 @@
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);
6428
type = TREE_TYPE (decl);
6429
TREE_TYPE (DECL_INITIAL (decl)) = type;
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);
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
6447
+struct cgraph_node *
6448
+cgraph_get_create_real_symbol_node (tree decl)
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)
6458
+ node = cgraph_create_node (decl);
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. */
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);
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);
6476
+ else if (dump_file)
6477
+ fprintf (dump_file, "Introduced new external node "
6478
+ "(%s/%i).\n", xstrdup (cgraph_node_name (node)), node->uid);
6481
#include "gt-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)
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);
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))
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 @@
6514
delete_insns_since (last);
6515
+ pending_stack_adjust = save_pending_stack_adjust;
6516
+ stack_pointer_delta = save_stack_pointer_delta;
6520
@@ -6233,7 +6238,7 @@
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;
6528
TREE_OPTIMIZATION_OPTABS (optnode) = NULL;
6529
@@ -7035,8 +7040,7 @@
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;
6549
@@ -7118,8 +7121,6 @@
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))
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 @@
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))
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)
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 @@
6593
/* Build an EH edge for the direct call if necessary. */
6594
lp_nr = lookup_stmt_eh_lp (icall_stmt);
6596
- && stmt_could_throw_p (dcall_stmt))
6597
+ if (lp_nr > 0 && stmt_could_throw_p (dcall_stmt))
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 @@
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;
6612
/* The value of this_target_optabs against which the optabs above were
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]);
6626
+/* Return pointer to optimization flags of FNDECL. */
6627
+static inline struct cl_optimization *
6628
+opts_for_fn (const_tree fndecl)
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);
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)
6640
#endif /* GCC_TREE_H */
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)
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";
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)
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;
6663
@@ -3133,6 +3137,7 @@
6664
if (aggval->index >= ec)
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);
6671
@@ -3150,7 +3155,7 @@
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)
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 @@
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. */
6698
rtx_addr_can_trap_p_1 (const_rtx x, HOST_WIDE_INT offset, HOST_WIDE_INT size,
6699
@@ -235,11 +235,12 @@
6701
enum rtx_code code = GET_CODE (x);
6703
- if (STRICT_ALIGNMENT
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)
6710
HOST_WIDE_INT actual_offset = offset;
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 @@
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)
6725
+ HOST_WIDE_INT adj_offset = offset - STARTING_FRAME_OFFSET;
6727
+ size = GET_MODE_SIZE (mode);
6728
+ if (FRAME_GROWS_DOWNWARD)
6730
+ if (adj_offset < frame_offset || adj_offset + size - 1 >= 0)
6735
+ if (adj_offset < 0 || adj_offset + size - 1 >= frame_offset)
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]))
6746
if (XEXP (x, 0) == pic_offset_table_rtx && CONSTANT_P (XEXP (x, 1)))
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};;
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}"
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
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)'
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"
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"
6801
@@ -24263,6 +24262,43 @@
6802
$as_echo "#define HAVE_AS_SPARC4 1" >>confdefs.h
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
6811
+ gcc_cv_as_sparc_leon=no
6812
+ if test x$gcc_cv_as != x; then
6814
+ .register %g2, #scratch
6815
+ .register %g3, #scratch
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
6824
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
6825
+ test $ac_status = 0; }; }
6827
+ gcc_cv_as_sparc_leon=yes
6829
+ echo "configure: failed program was" >&5
6830
+ cat conftest.s >&5
6832
+ rm -f conftest.o conftest.s
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
6839
+$as_echo "#define HAVE_AS_LEON 1" >>confdefs.h
6844
i[34567]86-*-* | x86_64-*-*)
6845
@@ -24745,6 +24781,10 @@
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"
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 @@
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
6865
@@ -24822,6 +24862,37 @@
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
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
6881
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
6882
+ test $ac_status = 0; }; }
6884
+ gcc_cv_as_ix86_ud2=yes
6886
+ echo "configure: failed program was" >&5
6887
+ cat conftest.s >&5
6889
+ rm -f conftest.o conftest.s
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
6896
+$as_echo "#define HAVE_AS_IX86_UD2 1" >>confdefs.h
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
6923
pluginlibs="-rdynamic"
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)
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;
6944
if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
6945
@@ -1969,6 +1969,7 @@
6947
CASE_FLT_FN (BUILT_IN_SQRT):
6948
errno_set = ! tree_expr_nonnegative_p (arg);
6949
+ try_widening = true;
6950
builtin_optab = sqrt_optab;
6952
CASE_FLT_FN (BUILT_IN_EXP):
6953
@@ -2025,8 +2026,10 @@
6954
if (! flag_errno_math || ! HONOR_NANS (mode))
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 ()))
6965
rtx result = gen_reg_rtx (mode);
6966
@@ -5347,7 +5350,7 @@
6967
expand_builtin_atomic_compare_exchange (enum machine_mode mode, tree exp,
6970
- rtx expect, desired, mem, oldval;
6971
+ rtx expect, desired, mem, oldval, label;
6972
enum memmodel success, failure;
6975
@@ -5385,14 +5388,26 @@
6976
if (host_integerp (weak, 0) && tree_low_cst (weak, 0) != 0)
6980
- if (!expand_atomic_compare_and_swap ((target == const0_rtx ? NULL : &target),
6981
- &oldval, mem, oldval, desired,
6982
+ if (target == const0_rtx)
6985
+ /* Lest the rtl backend create a race condition with an imporoper store
6986
+ to memory, always create a new pseudo for OLDVAL. */
6989
+ if (!expand_atomic_compare_and_swap (&target, &oldval, mem, expect, desired,
6990
is_weak, success, failure))
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);
7007
@@ -10766,7 +10781,7 @@
7008
return fold_builtin_strstr (loc, arg0, arg1, type);
7010
case BUILT_IN_STRCAT:
7011
- return fold_builtin_strcat (loc, arg0, arg1);
7012
+ return fold_builtin_strcat (loc, arg0, arg1, NULL_TREE);
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. */
7021
-fold_builtin_strcat (location_t loc ATTRIBUTE_UNUSED, tree dst, tree src)
7023
+fold_builtin_strcat (location_t loc ATTRIBUTE_UNUSED, tree dst, tree src,
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)). */
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);
7035
- if (!strlen_fn || !strcpy_fn)
7036
+ if (!strlen_fn || !memcpy_fn)
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. */
7046
- tree len = c_strlen (src, 1);
7047
- if (! len || TREE_SIDE_EFFECTS (len))
7050
+ /* If the length of the source string isn't computable don't
7051
+ split strcat into strlen and memcpy. */
7053
+ len = c_strlen (src, 1);
7054
+ if (! len || TREE_SIDE_EFFECTS (len))
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);
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));
7068
+ call = build_call_expr_loc (loc, memcpy_fn, 3, newdst, src, len);
7069
return build2 (COMPOUND_EXPR, TREE_TYPE (dst), call, dst);
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;
7079
int save_growing_size;
7080
- void *save_growing_value;
7081
+ void *save_growing_value = NULL;
7083
sf = lookup_spec_function (func);
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 @@
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)
7097
flags &= ~OEP_CONSTANT_ADDRESS_OF;
7098
- return OP_SAME (1) && OP_SAME_WITH_NULL (2);
7099
+ return OP_SAME_WITH_NULL (2);
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);
7110
+ tree tem, lhs, rhs;
7111
const char * const warnmsg = G_("assuming signed overflow does not occur "
7112
"when simplifying range test");
7114
+ if (!INTEGRAL_TYPE_P (type))
7117
+ lhs = make_range (op0, &in0_p, &low0, &high0, &strict_overflow_p);
7118
+ rhs = make_range (op1, &in1_p, &low1, &high1, &strict_overflow_p);
7120
/* If this is an OR operation, invert both sides; we will invert
7121
again at the end. */
7123
@@ -10927,6 +10932,13 @@
7124
fold_build2_loc (loc, MULT_EXPR, type,
7125
build_int_cst (type, 2) , arg1));
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));
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);
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,
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 @@
7153
struct resources cc_set;
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 @@
7162
+ redundant = XALLOCAVEC (bool, XVECLEN (seq, 0));
7163
for (i = 1; i < XVECLEN (seq, 0); i++)
7165
rtx trial = XVECEXP (seq, 0, i);
7166
@@ -1166,7 +1168,8 @@
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);
7175
/* We will end up re-vectoring this branch, so compute flags
7176
@@ -1199,6 +1202,12 @@
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++)
7184
+ update_block (XVECEXP (seq, 0, i), insn);
7186
/* Show the place to which we will be branching. */
7187
*pnew_thread = first_active_target_insn (JUMP_LABEL (XVECEXP (seq, 0, 0)));
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))
7193
+ update_block (trial, insn);
7194
delete_from_delay_slot (trial);
7197
@@ -3266,6 +3276,7 @@
7198
to reprocess this insn. */
7199
if (redundant_insn (XVECEXP (pat, 0, 1), delay_insn, 0))
7201
+ update_block (XVECEXP (pat, 0, 1), insn);
7202
delete_from_delay_slot (XVECEXP (pat, 0, 1));
7203
next = prev_active_insn (next);
7205
@@ -3385,6 +3396,7 @@
7206
&& redirect_with_delay_slots_safe_p (delay_insn, target_label,
7209
+ update_block (XVECEXP (PATTERN (trial), 0, 1), insn);
7210
reorg_redirect_jump (delay_insn, target_label);
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)
7220
/* For non-calls, store the information that makes up the address. */
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
7237
+ && (TREE_CODE (orig) != ADDR_EXPR
7238
+ || !off.is_zero ()
7239
+ || cfun->after_inlining))
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)
7248
+2014-04-02 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
7250
+ * config/s390/s390.c (s390_expand_insv): Use GET_MODE_BITSIZE.
7252
+2014-04-01 Richard Biener <rguenther@suse.de>
7254
+ * gimple.h (struct gimple_statement_base): Align subcode to
7257
+2014-04-01 Sebastian Huber <sebastian.huber@embedded-brains.de>
7259
+ * doc/invoke.texi (mapp-regs): Clarify.
7261
+2014-03-31 H.J. Lu <hongjiu.lu@intel.com>
7263
+ PR rtl-optimization/60700
7264
+ Backport from mainline
7265
+ 2013-07-30 Zhenqiang Chen <zhenqiang.chen@linaro.org>
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.
7272
+2014-03-30 Kaz Kojima <kkojima@gcc.gnu.org>
7274
+ Backport from mainline
7275
+ 2014-03-19 Kaz Kojima <kkojima@gcc.gnu.org>
7278
+ * config/sh/sh.md (udivsi3_i1): Clobber R1 register.
7280
+2014-03-26 Martin Jambor <mjambor@suse.cz>
7283
+ * ipa.c (symtab_remove_unreachable_nodes): Clear thunk and
7284
+ alias flags of nodes in the border.
7286
+2014-03-26 Eric Botcazou <ebotcazou@adacore.com>
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.
7292
+2014-03-24 Richard Biener <rguenther@suse.de>
7294
+ PR tree-optimization/60429
7295
+ * tree-ssa-structalias.c (get_constraint_for_ptr_offset): Remove
7298
+2014-03-23 Eric Botcazou <ebotcazou@adacore.com>
7300
+ PR rtl-optimization/60601
7301
+ * bb-reorder.c (fix_up_fall_thru_edges): Test EDGE_FALLTHRU everywhere.
7303
+ * gcc.c (eval_spec_function): Initialize save_growing_value.
7305
+2014-03-20 Jakub Jelinek <jakub@redhat.com>
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.
7312
+2014-03-20 Eric Botcazou <ebotcazou@adacore.com>
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.
7321
+2014-03-18 Kai Tietz <ktietz@redhat.com>
7323
+ PR rtl-optimization/56356
7324
+ * sdbout.c (sdbout_parms): Verify that parms'
7325
+ incoming argument is valid.
7326
+ (sdbout_reg_parms): Likewise.
7328
+2014-03-18 Eric Botcazou <ebotcazou@adacore.com>
7330
+ * config/sparc/sparc.c (sparc_do_work_around_errata): Speed up and use
7331
+ proper constant for the store mode.
7333
+2014-03-17 Mikael Pettersson <mikpelinux@gmail.com>
7334
+ Committed by Bill Schmidt <wschmidt@linux.vnet.ibm.com>
7336
+ Backport from mainline:
7338
+ 2013-06-20 Joern Rennecke <joern.rennecke@embecosm.com>
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.
7349
+ 2013-06-16 Joern Rennecke <joern.rennecke@embecosm.com>
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.
7361
+2014-03-17 Richard Biener <rguenther@suse.de>
7363
+ Backport from mainline
7364
+ 2014-03-11 Richard Biener <rguenther@suse.de>
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.
7374
+2014-03-15 Eric Botcazou <ebotcazou@adacore.com>
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.
7397
+2014-03-14 Georg-Johann Lay <avr@gjlay.de>
7399
+ Backport from 2014-03-14 trunk r208562.
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.
7406
+2014-03-13 Georg-Johann Lay <avr@gjlay.de>
7408
+ Backport from 2014-03-13 trunk r208532.
7411
+ * config/avr/avr.c (avr_out_plus): Swap cc_plus and cc_minus in
7412
+ calls of avr_out_plus_1.
7414
+2014-03-13 Joey Ye <joey.ye@arm.com>
7416
+ Backport from mainline
7417
+ 2014-03-12 Thomas Preud'homme <thomas.preudhomme@arm.com>
7419
+ PR tree-optimization/60454
7420
+ * tree-ssa-math-opts.c (find_bswap_1): Fix bswap detection.
7422
+2014-03-06 Matthias Klose <doko@ubuntu.com>
7424
+ * Makefile.in (s-mlib): Only pass MULTIARCH_DIRNAME if
7425
+ MULTILIB_OSDIRNAMES is not defined.
7427
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
7429
+ PR tree-optimization/60276
7430
+ * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Avoid
7431
+ a -Wsign-compare warning.
7433
+ * Makefile.in (tree-ssa-uninit.o): Depend on $(PARAMS_H).
7435
+ Backport from mainline
7436
+ 2014-02-21 Jakub Jelinek <jakub@redhat.com>
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.
7448
+ 2014-02-13 Jakub Jelinek <jakub@redhat.com>
7451
+ * expr.c (compress_float_constant): If x is a hard register,
7452
+ extend into a pseudo and then move to x.
7454
+ 2014-02-11 Richard Henderson <rth@redhat.com>
7455
+ Jakub Jelinek <jakub@redhat.com>
7458
+ * tree-sra.c (load_assign_lhs_subreplacements): Add VIEW_CONVERT_EXPR
7459
+ around drhs if type conversion to lacc->type is not useless.
7461
+ 2014-02-08 Jakub Jelinek <jakub@redhat.com>
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.
7468
+ 2014-02-06 Jakub Jelinek <jakub@redhat.com>
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.
7476
+ 2014-02-05 Jakub Jelinek <jakub@redhat.com>
7478
+ PR middle-end/57499
7479
+ * tree-eh.c (cleanup_empty_eh): Bail out on totally empty
7480
+ bb with no successors.
7482
+2014-03-04 Richard Biener <rguenther@suse.de>
7484
+ PR tree-optimization/60382
7485
+ * tree-vect-loop.c (vect_is_simple_reduction_1): Do not consider
7486
+ dead PHIs a reduction.
7488
+2014-02-25 Richard Biener <rguenther@suse.de>
7490
+ Backport from mainline
7491
+ 2014-02-21 Richard Biener <rguenther@suse.de>
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.
7501
+2014-02-25 Richard Biener <rguenther@suse.de>
7503
+ Backport from mainline
7504
+ 2014-02-21 Richard Biener <rguenther@suse.de>
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.
7510
+ 2014-02-20 Richard Biener <rguenther@suse.de>
7512
+ PR middle-end/60221
7513
+ * tree-eh.c (execute_cleanup_eh_1): Also cleanup empty EH
7516
+ 2014-02-14 Richard Biener <rguenther@suse.de>
7518
+ PR tree-optimization/60183
7519
+ * tree-ssa-phiprop.c (propagate_with_phi): Avoid speculating
7521
+ (tree_ssa_phiprop): Calculate and free post-dominators.
7523
+2014-02-25 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
7526
+ * config/arm/arm.h (CANNOT_CHANGE_MODE_CLASS): Allow 128 to 64-bit
7529
+2014-02-24 John David Anglin <danglin@gcc.gnu.org>
7531
+ * config/pa/pa.c (pa_output_move_double): Don't valididate when
7532
+ adjusting offsetable addresses.
7534
+2014-02-23 David Holsgrove <david.holsgrove@xilinx.com>
7536
+ * config/microblaze/microblaze.md: Correct ashrsi_reg / lshrsi_reg names
7538
+2014-02-23 Edgar E. Iglesias <edgar.iglesias@xilinx.com>
7540
+ * config/microblaze/microblaze.h: Remove SECONDARY_MEMORY_NEEDED
7543
+2014-02-23 David Holsgrove <david.holsgrove@xilinx.com>
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.
7549
+2014-02-23 David Holsgrove <david.holsgrove@xilinx.com>
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.
7559
+2014-02-21 Martin Jambor <mjambor@suse.cz>
7562
+ * ipa-cp.c (cgraph_edge_brings_all_agg_vals_for_node): Uce correct
7563
+ info when checking whether lattices are bottom.
7565
+2014-02-21 Jakub Jelinek <jakub@redhat.com>
7567
+ * config/i386/i386.c (ix86_expand_vec_perm): Use V8SImode
7568
+ mode for mask of V8SFmode permutation.
7570
+2014-02-20 Richard Henderson <rth@redhat.com>
7573
+ * builtins.c (expand_builtin_atomic_compare_exchange): Conditionalize
7574
+ on failure the store back into EXPECT. Always make a new pseudo for
7577
+2014-02-20 Jakub Jelinek <jakub@redhat.com>
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.
7586
+2014-02-20 Richard Biener <rguenther@suse.de>
7588
+ * tree-cfg.c (replace_uses_by): Mark altered BBs before
7589
+ doing the substitution.
7591
+2014-02-19 H.J. Lu <hongjiu.lu@intel.com>
7593
+ Backport from mainline
7594
+ 2014-02-19 H.J. Lu <hongjiu.lu@intel.com>
7597
+ * config/i386/i386.c (construct_container): Remove TFmode check
7598
+ for X86_64_INTEGER_CLASS.
7600
+2014-02-19 Uros Bizjak <ubizjak@gmail.com>
7602
+ Backport from mainline
7603
+ 2014-02-19 Uros Bizjak <ubizjak@gmail.com>
7606
+ * config/i386/i386.c (type_natural_mode): Warn for ABI changes
7607
+ only when -Wpsabi is enabled.
7609
+2014-02-19 Terry Guo <terry.guo@arm.com>
7611
+ Backport from mainline
7612
+ 2014-02-08 Terry Guo <terry.guo@arm.com>
7614
+ * doc/invoke.texi: Document ARM -march=armv7e-m.
7616
+2014-02-18 Kai Tietz <ktietz@redhat.com>
7618
+ Backport from mainline
7619
+ 2014-02-18 Kai Tietz <ktietz@redhat.com>
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.
7626
+2014-02-18 Eric Botcazou <ebotcazou@adacore.com>
7628
+ * ipa-prop.c (compute_complex_ancestor_jump_func): Replace overzealous
7629
+ assertion with conditional return.
7631
+2014-02-18 Jakub Jelinek <jakub@redhat.com>
7632
+ Uros Bizjak <ubizjak@gmail.com>
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.
7639
+2014-02-14 Roland McGrath <mcgrathr@google.com>
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.
7647
+2014-02-13 Uros Bizjak <ubizjak@gmail.com>
7649
+ Backport from mainline
7650
+ 2014-02-13 Uros Bizjak <ubizjak@gmail.com>
7652
+ * config/i386/sse.md (xop_vmfrcz<mode>2): Generate const0 in
7653
+ operands[2], not operands[3].
7655
+2014-02-13 Dominik Vogt <vogt@linux.vnet.ibm.com>
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).
7661
+2014-02-12 H.J. Lu <hongjiu.lu@intel.com>
7663
+ Backport from mainline
7664
+ 2014-02-12 H.J. Lu <hongjiu.lu@intel.com>
7665
+ Uros Bizjak <ubizjak@gmail.com>
7668
+ * configure.ac (HAVE_AS_GOTOFF_IN_DATA): Pass --32 to GNU assembler.
7670
+2014-02-12 Eric Botcazou <ebotcazou@adacore.com>
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.
7676
+2014-02-10 Nagaraju Mekala <nagaraju.mekala@xilinx.com>
7678
+ * config/microblaze/microblaze.md: Add movsi4_rev insn pattern.
7679
+ * config/microblaze/predicates.md: Add reg_or_mem_operand predicate.
7681
+2014-02-10 Nagaraju Mekala <nagaraju.mekala@xilinx.com>
7683
+ * config/microblaze/microblaze.c: Extend mcpu version format
7685
+2014-02-10 David Holsgrove <david.holsgrove@xilinx.com>
7687
+ * config/microblaze/microblaze.h: Define SIZE_TYPE and PTRDIFF_TYPE.
7689
+2014-02-10 Richard Biener <rguenther@suse.de>
7691
+ Backport from mainline
7692
+ 2014-01-30 Richard Biener <rguenther@suse.de>
7694
+ PR tree-optimization/59903
7695
+ * tree-vect-loop.c (vect_transform_loop): Guard multiple-types
7698
+ 2014-02-10 Richard Biener <rguenther@suse.de>
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.
7705
+2014-02-05 James Greenhalgh <james.greenhalgh@arm.com>
7707
+ Backport from mainline.
7708
+ 2014-02-05 James Greenhalgh <james.greenhalgh@arm.com>
7711
+ * doc/invoke.texi (-march): Clarify documentation for ARM.
7712
+ (-mtune): Likewise.
7713
+ (-mcpu): Likewise.
7715
+2014-02-04 John David Anglin <danglin@gcc.gnu.org>
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
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.
7727
+2014-02-04 Uros Bizjak <ubizjak@gmail.com>
7729
+ Backport from mainline
7730
+ 2014-02-02 Uros Bizjak <ubizjak@gmail.com>
7733
+ * config/i386/i386.c (classify_argument): Fix handling of bit_offset
7734
+ when calculating size of integer atomic types.
7736
+2014-02-02 Uros Bizjak <ubizjak@gmail.com>
7738
+ Backport from mainline
7739
+ 2014-01-30 Jakub Jelinek <jakub@redhat.com>
7741
+ * config/i386/f16cintrin.h (_cvtsh_ss): Avoid -Wnarrowing warning.
7743
+2014-01-31 Richard Henderson <rth@redhat.com>
7745
+ PR middle-end/60004
7746
+ * tree-eh.c (lower_try_finally_switch): Delay lowering finally block
7747
+ until after else_eh is processed.
7749
+2014-01-30 David Holsgrove <david.holsgrove@xilinx.com>
7751
+ Backport from mainline
7752
+ * config/microblaze/microblaze.md(cstoresf4, cbranchsf4): Replace
7753
+ comparison_operator with ordered_comparison_operator.
7755
+2014-01-25 Walter Lee <walt@tilera.com>
7757
+ Backport from mainline
7758
+ 2014-01-25 Walter Lee <walt@tilera.com>
7760
+ * config/tilegx/sync.md (atomic_fetch_sub): Fix negation and
7761
+ avoid clobbering a live register.
7763
+2014-01-25 Walter Lee <walt@tilera.com>
7765
+ Backport from mainline
7766
+ 2014-01-25 Walter Lee <walt@tilera.com>
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}.
7773
+2014-01-25 Walter Lee <walt@tilera.com>
7775
+ Backport from mainline
7776
+ 2014-01-25 Walter Lee <walt@tilera.com>
7778
+ * config/tilegx/tilegx.c (tilegx_gen_bundles): Delete barrier
7779
+ insns before bundling.
7780
+ * config/tilegx/tilegx.md (tile_network_barrier): Update comment.
7782
+2014-01-25 Walter Lee <walt@tilera.com>
7784
+ Backport from mainline
7785
+ 2014-01-25 Walter Lee <walt@tilera.com>
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.
7791
+2014-01-25 Walter Lee <walt@tilera.com>
7793
+ Backport from mainline
7794
+ 2014-01-25 Walter Lee <walt@tilera.com>
7796
+ * config/tilepro/tilepro.md (ctzdi2): Use register_operand
7801
+2014-01-25 Walter Lee <walt@tilera.com>
7803
+ Backport from mainline
7804
+ 2014-01-25 Walter Lee <walt@tilera.com>
7806
+ * config/tilegx/tilegx.c (tilegx_expand_to_rtl_hook): New.
7807
+ (TARGET_EXPAND_TO_RTL_HOOK): Define.
7809
+2014-01-24 H.J. Lu <hongjiu.lu@intel.com>
7811
+ Backport from mainline
7812
+ 2014-01-23 H.J. Lu <hongjiu.lu@intel.com>
7815
+ * config/i386/i386.md (pushsf splitter): Get stack adjustment
7816
+ from push operand if code of push isn't PRE_DEC.
7818
+2014-01-23 David Holsgrove <david.holsgrove@xilinx.com>
7820
+ Backport from mainline.
7821
+ * config/microblaze/microblaze.md: Add trap insn and attribute
7823
+2014-01-23 Marek Polacek <polacek@redhat.com>
7825
+ Backport from mainline
7826
+ 2013-10-21 Marek Polacek <polacek@redhat.com>
7828
+ PR middle-end/58809
7829
+ * fold-const.c (fold_range_test): Return 0 if the type is not
7832
+2014-01-22 David Holsgrove <david.holsgrove@xilinx.com>
7834
+ * config/microblaze/microblaze.md: Correct bswaphi2 insn.
7836
+2014-01-22 Uros Bizjak <ubizjak@gmail.com>
7838
+ Backport from mainline
7839
+ 2014-01-20 Uros Bizjak <ubizjak@gmail.com>
7841
+ * config/i386/i386.c (ix86_avoid_lea_for_addr): Return false
7842
+ for SImode_address_operand operands, having only a REG argument.
7844
+ 2014-01-20 Jakub Jelinek <jakub@redhat.com>
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.
7850
+ 2014-01-18 Uros Bizjak <ubizjak@gmail.com>
7851
+ H.J. Lu <hongjiu.lu@intel.com>
7854
+ * config/i386/i386.md (*lea<mode>): Zero-extend return register
7855
+ to DImode for zero-extended addresses.
7857
+2014-01-21 Andrew Pinski <apinski@cavium.com>
7858
+ Steve Ellcey <sellcey@mips.com>
7861
+ * config/mips/mips.c (mips_print_operand): Check operand mode instead
7864
+2014-01-21 Andrey Belevantsev <abel@ispras.ru>
7866
+ Backport from mainline
7867
+ 2013-12-23 Andrey Belevantsev <abel@ispras.ru>
7869
+ PR rtl-optimization/57422
7870
+ * sel-sched.c (mark_unavailable_hard_regs): Fix typo when calling
7871
+ add_to_hard_reg_set.
7873
+2014-01-20 Jakub Jelinek <jakub@redhat.com>
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.
7883
+2014-01-20 Richard Biener <rguenther@suse.de>
7885
+ PR middle-end/59860
7886
+ * builtins.c (fold_builtin_strcat): Remove case better handled
7887
+ by tree-ssa-strlen.c.
7889
+2014-01-19 John David Anglin <danglin@gcc.gnu.org>
7891
+ * config/pa/pa.c (pa_attr_length_millicode_call): Correct length of
7892
+ long non-pic millicode calls.
7894
+2014-01-17 John David Anglin <danglin@gcc.gnu.org>
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.
7899
+2014-01-17 H.J. Lu <hongjiu.lu@intel.com>
7901
+ Backport from mainline
7902
+ 2014-01-14 H.J. Lu <hongjiu.lu@intel.com>
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
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.
7918
+2014-01-17 Charles Baylis <charles.baylis@linaro.org>
7920
+ Backport from mainline
7921
+ 2013-12-19 Charles Baylis <charles.baylis@linaro.org>
7924
+ * config/arm/arm-ldmstm.ml: Use low_register_operand for Thumb
7926
+ * config/arm/ldmstm.md: Regenerate.
7928
+ 2013-12-19 Charles Baylis <charles.baylis@linaro.org>
7931
+ * config/arm/predicates.md (arm_hard_general_register_operand):
7933
+ (arm_hard_register_operand): Remove.
7934
+ * config/arm/arm-ldmstm.ml: Use arm_hard_general_register_operand
7936
+ * config/arm/ldmstm.md: Regenerate.
7938
+ 2013-12-19 Charles Baylis <charles.baylis@linaro.org>
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.
7945
+2014-01-17 Kugan Vivekanandarajah <kuganv@linaro.org>
7947
+ Backport from mainline
7948
+ 2014-01-15 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
7949
+ Kugan Vivekanandarajah <kuganv@linaro.org>
7952
+ * config/aarch64/aarch64.c (aarch64_build_constant): Fix incorrect
7955
+2014-01-17 Terry Guo <terry.guo@arm.com>
7958
+ * config/arm/arm.md (prefetch): Set insn type attribute to load1.
7960
+2014-01-16 Jakub Jelinek <jakub@redhat.com>
7963
+ * config/i386/i386.c (ix86_expand_builtin): If target doesn't
7964
+ satisfy operand 0 predicate for gathers, use a new pseudo as
7967
+2014-01-16 Richard Henderson <rth@redhat.com>
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.
7975
+2014-01-16 Peter Bergner <bergner@vnet.ibm.com>
7977
+ Backport from mainline
7978
+ 2014-01-15 Uros Bizjak <ubizjak@gmail.com>
7980
+ * config/i386/i386.c (ix86_hard_regno_mode_ok): Use
7981
+ VALID_AVX256_REG_OR_OI_MODE.
7983
+ 2013-09-05 Peter Bergner <bergner@vnet.ibm.com>
7986
+ * reginfo.c (choose_hard_reg_mode): Scan through all mode classes
7987
+ looking for widest mode.
7989
+2014-01-16 Marek Polacek <polacek@redhat.com>
7991
+ Backported from mainline
7992
+ 2014-01-16 Marek Polacek <polacek@redhat.com>
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.
7998
+2014-01-15 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
8001
+ * config/s390/s390.c (s390_preferred_reload_class): Don't return
8002
+ ADDR_REGS for invalid symrefs in non-PIC code.
8004
+2014-01-14 Uros Bizjak <ubizjak@gmail.com>
8007
+ 2014-01-08 Uros Bizjak <ubizjak@gmail.com>
8009
+ * config/i386/i386.c (ix86_data_alignment): Calculate max_align
8010
+ from prefetch_block tune setting.
8012
+2014-01-13 Jakub Jelinek <jakub@redhat.com>
8014
+ Backported from mainline
8015
+ 2014-01-10 Jakub Jelinek <jakub@redhat.com>
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.
8021
+2014-01-10 Yufeng Zhang <yufeng.zhang@arm.com>
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.
8027
+2014-01-10 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
8029
+ * config/s390/s390.c (s390_expand_tbegin): Remove jump over CC
8030
+ extraction in good case.
8032
+2014-01-10 Huacai Chen <chenhc@lemote.com>
8034
+ * config/mips/driver-native.c (host_detect_local_cpu): Handle new
8035
+ kernel strings for Loongson-2E/2F/3A.
8037
+2014-01-10 Richard Biener <rguenther@suse.de>
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.
8044
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
8046
+ * config/mips/mips.h (ISA_HAS_WSBH): Define.
8047
+ * config/mips/mips.md (UNSPEC_WSBH, UNSPEC_DSBH, UNSPEC_DSHD): New
8049
+ (bswaphi2, bswapsi2, bswapdi2, wsbh, dsbh, dshd): New patterns.
8051
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
8053
+ PR rtl-optimization/59137
8054
+ * reorg.c (steal_delay_list_from_target): Call update_block for
8056
+ (steal_delay_list_from_fallthrough, relax_delay_slots): Likewise.
8058
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
8061
+ 2012-10-07 Richard Sandiford <rdsandiford@googlemail.com>
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.
8067
+ 2012-10-02 Richard Sandiford <rdsandiford@googlemail.com>
8069
+ * config/mips/mips.md (*baddu_si_eb, *baddu_si_el): Merge into...
8070
+ (*baddu_si): ...this new pattern.
8072
+2014-01-09 Richard Biener <rguenther@suse.de>
8074
+ Backport from mainline
8075
+ 2013-11-18 Richard Biener <rguenther@suse.de>
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.
8088
+ 2013-12-03 Jakub Jelinek <jakub@redhat.com>
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
8099
+ (fini_object_sizes): Call release on object_sizes elements, don't
8102
+2014-01-09 Richard Earnshaw <rearnsha@arm.com>
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.
8108
+2014-01-09 Jakub Jelinek <jakub@redhat.com>
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.
8117
+2014-01-09 Hans-Peter Nilsson <hp@axis.com>
8119
+ Backport from mainline
8120
+ 2013-12-23 Hans-Peter Nilsson <hp@axis.com>
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.
8129
+2014-01-08 H.J. Lu <hongjiu.lu@intel.com>
8131
+ Backport from mainline
8132
+ 2013-12-25 H.J. Lu <hongjiu.lu@intel.com>
8135
+ * config/i386/i386.c (struct ptt): Add a field for processor name.
8136
+ (processor_target_table): Sync with processor_type. Add
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
8144
+ * config/i386/i386.h (TARGET_CPU_DEFAULT): Default to
8145
+ PROCESSOR_GENERIC32.
8146
+ (target_cpu_default): Removed.
8147
+ (processor_type): Reordered.
8149
+2014-01-08 Uros Bizjak <ubizjak@gmail.com>
8151
+ Backport from mainline
8152
+ 2014-01-05 Uros Bizjak <ubizjak@gmail.com>
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.
8158
+2014-01-08 Martin Jambor <mjambor@suse.cz>
8161
+ * ipa-prop.c (ipa_compute_jump_functions): Bail out if not optimizing.
8162
+ (parm_preserved_before_stmt_p): Assume modification present when not
8165
+2014-01-07 John David Anglin <danglin@gcc.gnu.org>
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.
8171
+2014-01-07 Roland Stigge <stigge@antcom.de>
8172
+ Michael Meissner <meissner@linux.vnet.ibm.com>
8175
+ * config/rs6000/rs6000.c (rs6000_legitimate_offset_address_p):
8176
+ Only check TFmode for SPE constants. Don't check TImode or TDmode.
8178
+2014-01-07 Jakub Jelinek <jakub@redhat.com>
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
8187
+ * ifcvt.c (count_bb_insns): Don't count USE or CLOBBER insns.
8189
+2014-01-07 Mike Stump <mikestump@comcast.net>
8190
+ Jakub Jelinek <jakub@redhat.com>
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.
8198
+2014-01-07 Jakub Jelinek <jakub@redhat.com>
8200
+ Backported from mainline
8201
+ 2013-12-16 Jakub Jelinek <jakub@redhat.com>
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
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.
8232
+2014-01-03 Andreas Schwab <schwab@linux-m68k.org>
8234
+ * config/m68k/m68k.c (handle_move_double): Handle pushes with
8235
+ overlapping registers also for registers other than the stack
8238
+2014-01-03 Jakub Jelinek <jakub@redhat.com>
8241
+ * config/i386/i386.c (ix86_avoid_jump_mispredicts): Don't consider
8244
+2014-01-01 Jakub Jelinek <jakub@redhat.com>
8246
+ PR rtl-optimization/59647
8247
+ * cse.c (cse_process_notes_1): Don't substitute negative VOIDmode
8248
+ new_rtx into UNSIGNED_FLOAT rtxes.
8250
+2013-12-28 Eric Botcazou <ebotcazou@adacore.com>
8252
+ * doc/invoke.texi (output file options): Document -fada-spec-parent.
8254
+2013-12-26 Uros Bizjak <ubizjak@gmail.com>
8256
+ * config/i386/driver-i386.c (decode_caches_intel): Add missing entries.
8258
+2013-12-20 Jakub Jelinek <jakub@redhat.com>
8261
+ Backported from mainline
8262
+ 2013-08-19 Dehao Chen <dehao@google.com>
8264
+ * value-prof.c (gimple_ic): Fix the bug of adding EH edge.
8266
+2013-12-19 James Greenhalgh <james.greenhalgh@arm.com>
8268
+ Backport from Mainline.
8269
+ 2013-05-01 James Greenhalgh <james.greenhalgh@arm.com>
8271
+ * config/aarch64/aarch64-simd-builtins.def (cmhs): Rename to...
8273
+ (cmhi): Rename to...
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
8283
+ (unspec): Remove UNSPEC_CM<EQ, LE, LT, GE, GT, HS, HI, TST>.
8284
+ (COMPARISONS): New.
8285
+ (UCOMPARISONS): Likewise.
8286
+ (optab): Add missing comparisons.
8288
+ (cmp_1): Likewise.
8289
+ (cmp_2): Likewise.
8292
+ (VCMP_S): Likewise.
8293
+ (VCMP_U): Likewise.
8294
+ (V_cmp_result): Add DF, SF modes.
8295
+ (v_cmp_result): Likewise.
8297
+ (vmtype): Likewise.
8298
+ * config/aarch64/predicates.md (aarch64_reg_or_fp_zero): New.
8300
+ Partial Backport from mainline.
8301
+ 2013-05-01 James Greenhalgh <james.greenhalgh@arm.com>
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.
8307
+2013-12-19 Dominik Vogt <vogt@linux.vnet.ibm.com>
8308
+ Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
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
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
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
8336
+2013-12-18 Eric Botcazou <ebotcazou@adacore.com>
8338
+ * config/arm/arm.c (arm_expand_epilogue_apcs_frame): Fix thinko.
8340
+2013-12-12 Vladimir Makarov <vmakarov@redhat.com>
8342
+ PR middle-end/59470
8343
+ * lra-coalesce.c (lra_coalesce): Invalidate inheritance pseudo
8344
+ values if necessary.
8346
+2013-12-12 Jakub Jelinek <jakub@redhat.com>
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.
8354
+2013-12-10 Eric Botcazou <ebotcazou@adacore.com>
8356
+ PR rtl-optimization/58295
8357
+ * simplify-rtx.c (simplify_truncation): Restrict the distribution for
8358
+ WORD_REGISTER_OPERATIONS targets.
8360
+2013-12-10 Kai Tietz <ktietz@redhat.com>
8363
+ * config/i386/i386.c (ix86_expand_prologue): Address saved
8364
+ registers stack-relative, not via frame-pointer.
8366
+2013-12-09 Alan Modra <amodra@gmail.com>
8368
+ Apply from mainline
8369
+ 2013-12-05 Alan Modra <amodra@gmail.com>
8370
+ * configure.ac (BUILD_CXXFLAGS) Don't use ALL_CXXFLAGS for
8372
+ <recursive call for build != host>: Clear GMPINC. Don't bother
8374
+ * configure: Regenerate.
8376
+2013-12-08 Uros Bizjak <ubizjak@gmail.com>
8378
+ Backport from mainline
8379
+ 2013-12-06 Uros Bizjak <ubizjak@gmail.com>
8382
+ * config/i386/i386.c (type_natural_mode): Properly handle
8383
+ size 8 for !TARGET_64BIT.
8385
+2013-12-07 Ralf Corsépius <ralf.corsepius@rtems.org>
8387
+ * config.gcc (microblaze*-*-rtems*): Add TARGET_BIG_ENDIAN_DEFAULT.
8389
+2013-12-06 Jakub Jelinek <jakub@redhat.com>
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.
8395
+2013-12-06 Oleg Endo <olegendo@gcc.gnu.org>
8397
+ Backport from mainline
8398
+ 2013-11-26 Oleg Endo <olegendo@gcc.gnu.org>
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
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.
8418
+2013-12-06 Richard Biener <rguenther@suse.de>
8420
+ Backport from mainline
8421
+ 2013-11-29 Richard Biener <rguenther@suse.de>
8423
+ PR tree-optimization/59334
8424
+ * tree-ssa-dce.c (eliminate_unnecessary_stmts): Fix bug
8425
+ in previous commit.
8427
+ 2013-11-28 Richard Biener <rguenther@suse.de>
8429
+ PR tree-optimization/59330
8430
+ * tree-ssa-dce.c (eliminate_unnecessary_stmts): Simplify
8431
+ and fix delayed marking of free calls not necessary.
8433
+2013-12-06 Richard Biener <rguenther@suse.de>
8435
+ Backport from mainline
8436
+ 2013-11-27 Richard Biener <rguenther@suse.de>
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.
8442
+ 2013-11-19 Richard Biener <rguenther@suse.de>
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.
8449
+ 2013-09-05 Richard Biener <rguenther@suse.de>
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.
8459
+2013-12-06 Oleg Endo <olegendo@gcc.gnu.org>
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.
8466
+2013-12-05 Richard Biener <rguenther@suse.de>
8468
+ Backport from mainline
8469
+ 2013-11-19 Richard Biener <rguenther@suse.de>
8471
+ PR middle-end/58956
8472
+ * tree-ssa-ter.c (find_replaceable_in_bb): Avoid forwarding
8473
+ loads into stmts that may clobber it.
8475
+2013-12-04 Jakub Jelinek <jakub@redhat.com>
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.
8481
+2013-12-04 Jakub Jelinek <jakub@redhat.com>
8482
+ Uros Bizjak <ubizjak@gmail.com>
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.
8509
+2013-12-03 Jakub Jelinek <jakub@redhat.com>
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.
8519
+ * optabs.c (emit_conditional_move): Save and restore
8520
+ pending_stack_adjust and stack_pointer_delta if cmove can't be used.
8522
+2013-12-02 Jakub Jelinek <jakub@redhat.com>
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
8529
+2013-12-02 Richard Biener <rguenther@suse.de>
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.
8536
+2013-11-27 Tom de Vries <tom@codesourcery.com>
8537
+ Marc Glisse <marc.glisse@inria.fr>
8539
+ PR middle-end/59037
8540
+ * fold-const.c (fold_indirect_ref_1): Don't create out-of-bounds
8542
+ * gimplify.c (gimple_fold_indirect_ref): Same.
8544
+2013-12-01 Eric Botcazou <ebotcazou@adacore.com>
8546
+ * config/i386/winnt.c (i386_pe_asm_named_section): Be prepared for an
8549
+2013-12-01 Bernd Edlinger <bernd.edlinger@hotmail.de>
8551
+ * expr.c (emit_group_store): Fix off-by-one BITFIELD_END argument.
8553
+2013-11-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
8555
+ Backport from mainline
8556
+ 2013-11-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
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.
8563
+2013-11-28 Uros Bizjak <ubizjak@gmail.com>
8565
+ Backport from mainline
8566
+ 2013-11-27 Uros Bizjak <ubizjak@gmail.com>
8567
+ Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
8570
+ * gcc.target/i386/xop-frczX.c: New test.
8572
+2013-11-28 Terry Guo <terry.guo@arm.com>
8574
+ Backport mainline r205391
8575
+ 2013-11-26 Terry Guo <terry.guo@arm.com>
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.
8582
+2013-11-27 Jakub Jelinek <jakub@redhat.com>
8584
+ Backported from mainline
8585
+ 2013-11-26 Jakub Jelinek <jakub@redhat.com>
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.
8592
+2013-11-27 Eric Botcazou <ebotcazou@adacore.com>
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.
8598
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
8600
+ Backport from mainline
8601
+ 2013-09-17 Sebastian Huber <sebastian.huber@embedded-brains.de>
8603
+ * config/sparc/t-rtems: Add leon3 multilibs.
8605
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
8607
+ Backport from mainline
8608
+ 2013-08-09 Eric Botcazou <ebotcazou@adacore.com>
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
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.
8627
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
8629
+ Backport from mainline
8630
+ 2013-07-23 Eric Botcazou <ebotcazou@adacore.com>
8632
+ * doc/invoke.texi (SPARC Options): Document new leon3 processor value.
8634
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
8636
+ Backport from mainline
8637
+ 2013-07-22 Eric Botcazou <ebotcazou@adacore.com>
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.
8672
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
8674
+ Backport from mainline
8675
+ 2013-04-10 Steven Bosscher <steven@gcc.gnu.org>
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.
8688
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
8690
+ Backport from mainline
8691
+ 2013-05-28 Eric Botcazou <ebotcazou@adacore.com>
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.
8707
+2013-11-22 Eric Botcazou <ebotcazou@adacore.com>
8709
+ * print-rtl.c (print_rtx) <case MEM>: Output a space if no MEM_EXPR.
8711
+2013-11-21 Zhenqiang Chen <zhenqiang.chen@linaro.org>
8713
+ PR bootstrap/57683
8714
+ Backport from mainline: r197467 and r198999.
8715
+ 2013-04-03 Jeff Law <law@redhat.com>
8717
+ * Makefile.in (lra-constraints.o): Depend on $(OPTABS_H).
8718
+ (lra-eliminations.o): Likewise.
8720
+ 2013-05-16 Jeff Law <law@redhat.com>
8722
+ * Makefile.in (tree-switch-conversion.o): Depend on $(OPTABS_H).
8724
+2013-11-20 Eric Botcazou <ebotcazou@adacore.com>
8727
+ * config/sparc/sparc.c (sparc_fold_builtin) <case CODE_FOR_pdist_vis>:
8728
+ Make sure neg2_ovf is set before being used.
8730
+2013-11-20 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
8731
+ Dominik Vogt <vogt@linux.vnet.ibm.com>
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
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
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
8755
+2013-11-19 Uros Bizjak <ubizjak@gmail.com>
8757
+ Backport from mainline
8758
+ 2013-11-18 Uros Bizjak <ubizjak@gmail.com>
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.
8770
+ Backport from mainline
8771
+ 2013-11-17 Uros Bizjak <ubizjak@gmail.com>
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.
8780
+2013-11-19 Richard Biener <rguenther@suse.de>
8782
+ Backport from mainline
8783
+ 2013-11-07 Richard Biener <rguenther@suse.de>
8785
+ * tree-dfa.c (get_ref_base_and_extent): Fix casting.
8787
+2013-11-19 Richard Biener <rguenther@suse.de>
8789
+ PR tree-optimization/57517
8790
+ * tree-predcom.c (combinable_refs_p): Verify the combination
8791
+ is always executed when the refs are.
8793
+2013-11-19 Richard Biener <rguenther@suse.de>
8795
+ Backport from mainline
8796
+ 2013-11-05 Richard Biener <rguenther@suse.de>
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).
8804
+2013-11-18 Richard Biener <rguenther@suse.de>
8806
+ Backport from mainline
8807
+ 2013-10-21 Richard Biener <rguenther@suse.de>
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.
8813
+ 2013-10-21 Richard Biener <rguenther@suse.de>
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).
8819
+ 2013-11-06 Richard Biener <rguenther@suse.de>
8821
+ PR tree-optimization/58653
8822
+ * tree-predcom.c (ref_at_iteration): Rewrite to generate
8824
+ (prepare_initializers_chain): Adjust.
8826
+ PR tree-optimization/59047
8827
+ * tree-predcom.c (ref_at_iteration): Handle bitfield accesses
8830
+ 2013-10-15 Richard Biener <rguenther@suse.de>
8832
+ PR tree-optimization/58143
8833
+ * tree-ssa-loop-im.c (arith_code_with_undefined_signed_overflow):
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.
8840
+2013-11-14 Uros Bizjak <ubizjak@gmail.com>
8842
+ Backport from mainline
8843
+ 2013-11-10 Uros Bizjak <ubizjak@gmail.com>
8845
+ * mode-switching.c (optimize_mode_switching): Mark block as
8846
+ nontransparent, if last_mode at block exit is different from no_mode.
8848
+ Backport from mainline
8849
+ 2013-11-06 Uros Bizjak <ubizjak@gmail.com>
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.
8857
+2013-11-14 Jakub Jelinek <jakub@redhat.com>
8858
+ Uros Bizjak <ubizjak@gmail.com>
8861
+ * config/i386/i386.md (*anddi_2): Only allow CCZmode if
8862
+ operands[2] satisfies_constraint_Z that might have bit 31 set.
8864
+2013-11-12 H.J. Lu <hongjiu.lu@intel.com>
8866
+ Backported from mainline
8867
+ 2013-11-12 H.J. Lu <hongjiu.lu@intel.com>
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.
8874
+2013-11-11 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
8876
+ Backported from mainline
8877
+ 2013-10-30 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
8880
+ * config/arm/arm.c (arm_expand_epilogue_apcs_frame): Emit blockage
8882
+2013-11-11 Jakub Jelinek <jakub@redhat.com>
8884
+ Backported from mainline
8885
+ 2013-11-06 Jakub Jelinek <jakub@redhat.com>
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.
8892
+ 2013-11-05 Jakub Jelinek <jakub@redhat.com>
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
8902
+2013-11-10 Karlson2k <k2k@narod.ru>
8903
+ Kai Tietz <ktietz@redhat.com>
8907
+ * configure.ac: Adding for exported symbols check
8908
+ and for rdynamic-check executable-extension.
8909
+ * configure: Regenerated.
8911
+2013-11-07 H.J. Lu <hongjiu.lu@intel.com>
8914
+ * config/i386/i386.md (push peepholer/splitter): Use Pmode
8915
+ with stack_pointer_rtx.
8917
+2013-11-05 Uros Bizjak <ubizjak@gmail.com>
8919
+ * config/i386/t-rtems (MULTILIB_MATCHES): Fix option typos.
8921
+2013-11-05 Jakub Jelinek <jakub@redhat.com>
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
8928
+ (ipcp_transform_function): Likewise. Punt if size of access
8929
+ is different from TYPE_SIZE on v->value's type.
8931
+2013-11-03 H.J. Lu <hongjiu.lu@intel.com>
8933
+ Backport from mainline
8934
+ 2013-10-12 H.J. Lu <hongjiu.lu@intel.com>
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.
8942
+2013-10-29 Uros Bizjak <ubizjak@gmail.com>
8944
+ Backport from mainline
8945
+ 2013-08-08 Richard Sandiford <rdsandiford@googlemail.com>
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.
8951
+2013-10-29 Martin Jambor <mjambor@suse.cz>
8953
+ PR middle-end/58789
8954
+ Backport from mainline
8955
+ 2013-05-09 Martin Jambor <mjambor@suse.cz>
8958
+ * gimple-fold.c (canonicalize_constructor_val): Call
8959
+ cgraph_get_create_real_symbol_node instead of cgraph_get_create_node.
8961
+ Backport from mainline
8962
+ 2013-03-16 Jan Hubicka <jh@suse.cz>
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.
8970
+2013-10-28 Tom de Vries <tom@codesourcery.com>
8972
+ * cfgexpand.c (gimple_expand_cfg): Remove test for parm_birth_insn.
8973
+ Don't commit insertions after NOTE_INSN_FUNCTION_BEG.
8975
+2013-10-26 Uros Bizjak <ubizjak@gmail.com>
8977
+ Backport from mainline
8978
+ 2013-10-22 Uros Bizjak <ubizjak@gmail.com>
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.
8990
+2013-10-26 Uros Bizjak <ubizjak@gmail.com>
8992
+ Backport from mainline
8993
+ 2013-10-19 Uros Bizjak <ubizjak@gmail.com>
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.
9000
+2013-08-25 Richard Henderson <rth@twiddle.net>
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.
9009
+2013-10-25 Eric Botcazou <ebotcazou@adacore.com>
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.
9015
+2013-10-25 Eric Botcazou <ebotcazou@adacore.com>
9017
+ * recog.c (search_ofs): New static variable moved from...
9018
+ (peep2_find_free_register): ...here.
9019
+ (peephole2_optimize): Initialize it.
9021
+2013-10-24 David Edelsohn <dje.gcc@gmail.com>
9023
+ Backport from mainline
9024
+ 2013-10-23 David Edelsohn <dje.gcc@gmail.com>
9027
+ * config/rs6000/rs6000.md (mulsi3_internal1 and splitter): Add
9028
+ TARGET_32BIT final condition.
9029
+ (mulsi3_internal2 and splitter): Same.
9031
+2013-10-23 Tom de Vries <tom@codesourcery.com>
9033
+ PR tree-optimization/58805
9034
+ * tree-ssa-tail-merge.c (stmt_local_def): Add gimple_vdef check.
9036
+2013-10-23 Richard Biener <rguenther@suse.de>
9038
+ Backport from mainline
9039
+ 2013-06-24 Richard Biener <rguenther@suse.de>
9041
+ PR tree-optimization/57488
9042
+ * tree-ssa-pre.c (insert): Clear NEW sets before each iteration.
9044
+2013-10-16 Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
9046
+ Backport from mainline
9047
+ 2013-10-16 Ganesh Gopalasubramanian
9048
+ <Ganesh.Gopalasubramanian@amd.com>
9050
+ * config/i386/i386.c (ix86_option_override_internal): Enable FMA4
9053
2013-10-16 Release Manager
9055
* GCC 4.8.2 released.
9056
@@ -639,7 +2449,7 @@
9057
2013-07-31 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
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>
9063
* config/s390/s390.h (TARGET_FLT_EVAL_METHOD): Define.
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)
9070
+/* { dg-do compile } */
9071
+/* { dg-require-effective-target arm_thumb1_ok } */
9072
+/* { dg-options "-mthumb -fpic -msingle-pic-base" } */
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)
9086
+/* Test the `vst1Q_laneu64' ARM Neon intrinsic. */
9088
+/* Detect ICE in the case of unaligned memory address. */
9090
+/* { dg-do compile } */
9091
+/* { dg-require-effective-target arm_neon_ok } */
9092
+/* { dg-add-options arm_neon } */
9094
+#include "arm_neon.h"
9096
+unsigned char dummy_store[1000];
9101
+ uint8x16_t vdata = vld1q_u8 (addr);
9102
+ vst1q_lane_u64 ((uint64_t*) &dummy_store, vreinterpretq_u64_u8 (vdata), 0);
9106
+bar (uint64x2_t vdata)
9108
+ vdata = vld1q_lane_u64 ((uint64_t*) &dummy_store, vdata, 0);
9109
+ return vgetq_lane_u64 (vdata, 0);
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)
9116
+/* { dg-do compile } */
9117
+/* { dg-require-effective-target arm_thumb1_ok } */
9118
+/* { dg-options "-mthumb -fpic -mpic-register=9" } */
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)
9132
+/* { dg-do compile } */
9133
+/* { dg-options "-g -fPIC" } */
9136
+void a (void *x) { }
9140
+main (int argc) /* line 9. */
9142
+ if (argc == 12345) /* line 11. */
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" } } */
9156
+/* The loc at the start of the prologue. */
9157
+/* { dg-final { scan-assembler-times "\.loc 1 10 0" 1 } } */
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)
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 } */
9171
+double foo (double a)
9174
+ return __builtin_round (a);
9179
+/* { dg-final { scan-assembler-times "vrinta.f64\td\[0-9\]+" 1 } } */
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)
9186
+/* { dg-do run } */
9187
+/* { dg-require-effective-target arm_neon } */
9188
+/* { dg-options "-O2" } */
9189
+/* { dg-add-options arm_neon } */
9191
+#include <arm_neon.h>
9192
+#include <stdlib.h>
9194
+struct __attribute__ ((aligned(8))) _v16u8_ {
9196
+ _v16u8_( const int16x8_t &src) { val = vreinterpretq_u8_s16(src); }
9197
+ operator int16x8_t () const { return vreinterpretq_s16_u8(val); }
9199
+typedef struct _v16u8_ v16u8;
9201
+struct __attribute__ ((aligned(4))) _v8u8_ {
9203
+ _v8u8_( const uint8x8_t &src) { val = src; }
9204
+ operator int16x4_t () const { return vreinterpret_s16_u8(val); }
9206
+typedef struct _v8u8_ v8u8;
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;
9214
+static inline __attribute__((always_inline)) v8u8 zero_64(){ return vdup_n_u8( 0 ); }
9216
+static inline __attribute__((always_inline)) v8i16 loadlo_8i16( cv8i16* p ){
9217
+ return vcombine_s16( vld1_s16( (cv1i16 *)p ), zero_64() );
9219
+static inline __attribute__((always_inline)) v8i16 _loadlo_8i16( cv8i16* p, int offset ){
9220
+ return loadlo_8i16( (cv8i16*)(&((cv1u8*)p)[offset]) );
9223
+void __attribute__((noinline))
9224
+test(unsigned short *_Inp, int32_t *_Out,
9225
+ unsigned int s1v, unsigned int dv0,
9226
+ unsigned int smask_v)
9228
+ int32x4_t c = vdupq_n_s32(0);
9230
+ for(unsigned int sv=0 ; sv!=dv0 ; sv=(sv+s1v)&smask_v )
9233
+ s = vmovl_s16( vget_low_s16( _loadlo_8i16( (cv8i16*) _Inp, sv ) ) );
9234
+ c = vaddq_s32( c, s );
9236
+ vst1q_s32( _Out, c );
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)
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)
9252
+/* { dg-do compile } */
9253
+/* { dg-options "-mthumb -mcpu=cortex-m4 -fprefetch-loop-arrays -O2" } */
9255
+typedef struct genxWriter_rec * genxWriter;
9256
+typedef unsigned char * utf8;
9257
+typedef const unsigned char * constUtf8;
9259
+int genxScrubText(genxWriter w, constUtf8 in, utf8 out)
9262
+ constUtf8 last = in;
9266
+ int c = genxNextUnicodeChar(&in);
9274
+ if (!isXMLChar(w, c))
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)
9292
+/* { dg-do run } */
9293
+/* { dg-options "-O2 -fno-inline" } */
9295
+typedef struct _GtkCssStyleProperty GtkCssStyleProperty;
9297
+struct _GtkCssStyleProperty
9299
+ int *initial_value;
9301
+ unsigned int inherit :1;
9302
+ unsigned int animated :1;
9303
+ unsigned int affects_size :1;
9304
+ unsigned int affects_font :1;
9306
+ int * parse_value;
9307
+ int * query_value;
9308
+ int * assign_value;
9312
+g_assertion_message_expr (const char *domain,
9316
+ const char *expr) __attribute__((__noreturn__));
9319
+g_assertion_message_expr (const char *domain,
9325
+ __builtin_abort ();
9328
+get_id (GtkCssStyleProperty *property)
9333
+_gtk_css_style_property_get_type ()
9338
+GtkCssStyleProperty *
9339
+g_object_new (int object_type,
9340
+ const char *first_property_name,
9343
+ return (GtkCssStyleProperty *) __builtin_malloc (sizeof (GtkCssStyleProperty));
9347
+ INHERIT = (1 << 0),
9348
+ ANIMATED = (1 << 1),
9349
+ RESIZE = (1 << 2),
9351
+} GtkStylePropertyFlags;
9355
+gtk_css_style_property_register (const char * name,
9361
+ int *assign_value,
9362
+ int *initial_value)
9364
+ GtkCssStyleProperty *node;
9368
+ if (__builtin_expect (__extension__ (
9370
+ int _g_boolean_var_;
9371
+ if (initial_value != ((void *)0))
9372
+ _g_boolean_var_ = 1;
9374
+ _g_boolean_var_ = 0;
9380
+ g_assertion_message_expr ("Gtk",
9381
+ "gtkcssstylepropertyimpl.c",
9383
+ ((const char*) (__PRETTY_FUNCTION__)),
9384
+ "initial_value != NULL");
9389
+ if (__builtin_expect (__extension__ (
9391
+ int _g_boolean_var_;
9392
+ if (parse_value != ((void *)0))
9393
+ _g_boolean_var_ = 1;
9395
+ _g_boolean_var_ = 0;
9401
+ g_assertion_message_expr ("Gtk",
9402
+ "gtkcssstylepropertyimpl.c",
9404
+ ((const char*) (__PRETTY_FUNCTION__)),
9405
+ "parse_value != NULL");
9410
+ if (__builtin_expect (__extension__ (
9412
+ int _g_boolean_var_;
9413
+ if (value_type == ((int) ((1) << (2)))
9414
+ || query_value != ((void *)0))
9415
+ _g_boolean_var_ = 1;
9417
+ _g_boolean_var_ = 0;
9423
+ g_assertion_message_expr ("Gtk",
9424
+ "gtkcssstylepropertyimpl.c",
9425
+ 87, ((const char*) (__PRETTY_FUNCTION__)),
9426
+ "value_type == NONE || query_value != NULL");
9429
+ /* FLAGS is changed in a cond_exec instruction with pr57637. */
9435
+ if (__builtin_expect (__extension__ (
9437
+ int _g_boolean_var_;
9438
+ if (value_type == ((1) << (2))
9439
+ || assign_value != ((void *)0))
9440
+ _g_boolean_var_ = 1;
9442
+ _g_boolean_var_ = 0;
9448
+ g_assertion_message_expr ("Gtk",
9449
+ "gtkcssstylepropertyimpl.c",
9450
+ 88, ((const char*) (__PRETTY_FUNCTION__)),
9451
+ "value_type == NONE || assign_value != NULL");
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,
9464
+ node->parse_value = parse_value;
9465
+ node->query_value = query_value;
9466
+ node->assign_value = assign_value;
9470
+ if (__builtin_expect (__extension__ (
9472
+ int _g_boolean_var_;
9473
+ if (get_id (node) == expected_id)
9474
+ _g_boolean_var_ = 1;
9476
+ _g_boolean_var_ = 0;
9482
+ g_assertion_message_expr ("Gtk",
9483
+ "gtkcssstylepropertyimpl.c",
9485
+ ((const char*) (__PRETTY_FUNCTION__)),
9486
+ "get_id (node) == expected_id");
9492
+ gtk_css_style_property_register ("test", 1, 4, 15, &t, &t, &t, &t);
9495
+ __builtin_abort ();
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)
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" } */
9507
+extern void exit (int);
9508
+extern void abort (void);
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;
9519
+ /* Allow error up to 2ulp. */
9520
+ if (__builtin_fabsl (r - expected) > 0x1p-1073L)
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)
9529
+/* { dg-options "-O2 -fPIC" } */
9531
+typedef struct test_struct
9533
+ unsigned long long h[8];
9534
+ unsigned long long Nl,Nh;
9536
+ unsigned long long d[16];
9537
+ unsigned char p[(16*8)];
9539
+ unsigned int num,md_len;
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};
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)))
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)
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)
9565
+static void testfunc1 (TEST_STRUCT *ctx, const void *in, unsigned int num)
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];
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);
9585
+ for (i=16;i<80;i+=8)
9587
+ ROUND_16_80(i+0,a,b,c,d,e,f,g,h,X);
9590
+ ctx->h[4] += e; ctx->h[5] += f; ctx->h[6] += g; ctx->h[7] += h;
9594
+int testfunc2 (TEST_STRUCT *c, const void *_data, unsigned int len)
9596
+ const unsigned char *data=(const unsigned char *)_data;
9598
+ unsigned char *p=(unsigned char *)c->u.p;
9600
+ testfunc1 (c,p,0);
9601
+ testfunc1 (c,data,len/sizeof(c->u));
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)
9608
+/* { dg-do compile } */
9612
+ __builtin_trap ();
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)
9622
+/* { dg-options "-O3 -mcpu=v6.00.a -mhard-float" } */
9624
+void float_func(float f1, float f2, float f3)
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");
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)
9636
/* { dg-do compile } */
9637
/* { dg-options "-O2" } */
9639
-#include "../../../config/aarch64/arm_neon.h"
9640
+#include <arm_neon.h>
9642
+/* Used to force a variable to a SIMD register. */
9643
+#define force_simd(V1) asm volatile ("mov %d0, %1.d[0]" \
9646
+ : /* No clobbers */);
9648
/* { dg-final { scan-assembler-times "\\tadd\\tx\[0-9\]+" 2 } } */
9653
test_vceqd_s64 (int64x1_t a, int64x1_t b)
9655
- return vceqd_s64 (a, b);
9659
+ res = vceqd_s64 (a, b);
9664
/* { dg-final { scan-assembler-times "\\tcmeq\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
9667
test_vceqzd_s64 (int64x1_t a)
9669
- return vceqzd_s64 (a);
9672
+ res = vceqzd_s64 (a);
9677
/* { dg-final { scan-assembler-times "\\tcmge\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
9680
test_vcged_s64 (int64x1_t a, int64x1_t b)
9682
- return vcged_s64 (a, b);
9686
+ res = vcged_s64 (a, b);
9692
test_vcled_s64 (int64x1_t a, int64x1_t b)
9694
- return vcled_s64 (a, b);
9698
+ res = vcled_s64 (a, b);
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. */
9708
test_vcgezd_s64 (int64x1_t a)
9710
- return vcgezd_s64 (a);
9713
+ res = vcgezd_s64 (a);
9718
/* { dg-final { scan-assembler-times "\\tcmhs\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
9721
test_vcged_u64 (uint64x1_t a, uint64x1_t b)
9723
- return vcged_u64 (a, b);
9727
+ res = vcged_u64 (a, b);
9732
/* { dg-final { scan-assembler-times "\\tcmgt\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
9733
@@ -77,13 +112,23 @@
9735
test_vcgtd_s64 (int64x1_t a, int64x1_t b)
9737
- return vcgtd_s64 (a, b);
9741
+ res = vcgtd_s64 (a, b);
9747
test_vcltd_s64 (int64x1_t a, int64x1_t b)
9749
- return vcltd_s64 (a, b);
9753
+ res = vcltd_s64 (a, b);
9758
/* { dg-final { scan-assembler-times "\\tcmgt\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
9761
test_vcgtzd_s64 (int64x1_t a)
9763
- return vcgtzd_s64 (a);
9766
+ res = vcgtzd_s64 (a);
9771
/* { dg-final { scan-assembler-times "\\tcmhi\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
9774
test_vcgtd_u64 (uint64x1_t a, uint64x1_t b)
9776
- return vcgtd_u64 (a, b);
9780
+ res = vcgtd_u64 (a, b);
9785
/* { dg-final { scan-assembler-times "\\tcmle\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
9786
@@ -107,15 +161,24 @@
9788
test_vclezd_s64 (int64x1_t a)
9790
- return vclezd_s64 (a);
9793
+ res = vclezd_s64 (a);
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. */
9803
test_vcltzd_s64 (int64x1_t a)
9805
- return vcltzd_s64 (a);
9808
+ res = vcltzd_s64 (a);
9813
/* { dg-final { scan-assembler-times "\\tdup\\tb\[0-9\]+, v\[0-9\]+\.b" 2 } } */
9814
@@ -179,13 +242,23 @@
9816
test_vtst_s64 (int64x1_t a, int64x1_t b)
9818
- return vtstd_s64 (a, b);
9822
+ res = vtstd_s64 (a, b);
9828
test_vtst_u64 (uint64x1_t a, uint64x1_t b)
9830
- return vtstd_u64 (a, b);
9834
+ res = vtstd_s64 (a, b);
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);
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. */
9848
+/* { dg-final { scan-assembler "\\tasr\\tx\[0-9\]+" } } */
9851
test_vshrd_n_s64 (int64x1_t a)
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)
9858
+/* { dg-do run } */
9859
+/* { dg-options "-mmmx -mfpmath=387" } */
9861
+#include "mmx-check.h"
9863
+#include <mmintrin.h>
9865
+typedef float float32x2_t __attribute__ ((vector_size (8)));
9868
+foo32x2_be (float32x2_t x)
9877
+ float32x2_t b = { 0.0f, 1.0f };
9879
+ if (foo32x2_be (b) != 1.0f)
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)
9887
+/* PR target/59794 */
9888
+/* { dg-do compile { target { ia32 } } } */
9889
+/* { dg-options "-O2 -mno-sse" } */
9890
+/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
9892
+typedef int __v4si __attribute__ ((__vector_size__ (16)));
9898
+{ /* { dg-warning "SSE vector return without SSE enabled changes the ABI" } */
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)
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" } */
9910
typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));
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)
9917
+/* { dg-do compile } */
9918
+/* { dg-options "-O" } */
9920
+register void *hfp __asm__("%ebp"); /* { dg-message "note: for" } */
9922
+extern void g(void *);
9924
+void f(int x) /* { dg-error "frame pointer required" } */
9926
+ g(__builtin_alloca(x));
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)
9933
+/* PR middle-end/58956 */
9934
+/* PR middle-end/59470 */
9935
+/* { dg-do run } */
9936
+/* { dg-options "-O2" } */
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 ();
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)
9955
+/* { dg-do compile { target { ! { ia32 } } } } */
9956
+/* { dg-require-effective-target maybe_x32 } */
9957
+/* { dg-options "-O -mx32 -mtune=corei7 -maddress-mode=short" } */
9959
+extern int foo(int, ...);
9961
+ long double l = 1.2345E6;
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)
9970
+/* { dg-do compile { target { ! { ia32 } } } } */
9971
+/* { dg-require-effective-target maybe_x32 } */
9972
+/* { dg-options "-O2 -mx32 -maddress-mode=short" } */
9978
+extern __thread struct gomp_thread gomp_tls_data;
9982
+ __builtin_memset (&gomp_tls_data, '\0', sizeof (gomp_tls_data));
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)
9992
- double e [4] __attribute__ ((aligned (8))) = {0.0};
9993
+ double e [4] __attribute__ ((aligned (32))) = {0.0};
9995
u.x = _mm256_set_pd (39578.467285, 7856.342941, 85632.783567, 47563.234215);
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)
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"));
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)
10025
+/* PR rtl-optimization/60700 */
10026
+/* { dg-do run { target ia32 } } */
10027
+/* { dg-options "-O3 -march=i686" } */
10030
+__attribute__((noinline))
10036
+void *g = (void *)1;
10039
+ char data[36]; /* must be greater than 32. */
10043
+__attribute__((noinline))
10044
+repro(struct st **out)
10051
+ if (status != 0) {
10060
+ *out = (struct st *)__builtin_malloc(sizeof(struct st));
10066
+ __builtin_memset(*out, 0, sizeof(struct st));
10075
+ int ret = repro (&p);
10078
+ for (i = 0; i < sizeof (p->data)/sizeof (p->data[0]); i++)
10079
+ if (p->data[i] != 0)
10080
+ __builtin_abort ();
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)
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* } } */
10094
+typedef double __v2df __attribute__ ((__vector_size__ (16)));
10098
+extern void bar (__v2df);
10102
+ bar (x); /* { dg-message "warning: SSE vector argument without SSE enabled changes the ABI" } */
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)
10109
/* PR rtl-optimization/57003 */
10110
/* { dg-do run } */
10111
-/* { dg-options "-O2" } */
10112
+/* { dg-options "-O2 -maccumulate-outgoing-args" } */
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)
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 } } */
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)
10147
+ __builtin_abort ();
10150
+float x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13,
10172
+ test (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13,
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)
10181
+/* PR target/59794 */
10182
+/* { dg-do compile { target { ! ia32 } } } */
10183
+/* { dg-options "-O2 -mno-sse" } */
10184
+/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
10186
+typedef int __v4si __attribute__ ((__vector_size__ (16)));
10192
+{ /* { dg-error "SSE register return with SSE disabled" } */
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)
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" } */
10204
typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));
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)
10214
- double e[2] __attribute__ ((aligned (8))) = {2134.3343,1234.635654};
10215
+ double e[2] __attribute__ ((aligned (16))) = {2134.3343,1234.635654};
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)
10224
+/* { dg-do compile } */
10225
+/* { dg-options "-O2 -mavx -mvzeroupper" } */
10227
+extern void abort (void);
10235
+typedef double v4df __attribute__ ((vector_size (32)));
10237
+extern int foo (v4df, int i1, int i2, int i3, int i4, int i5, struct S s);
10239
+void bar (v4df v, struct S s)
10241
+ int r = foo (v, 1, 2, 3, 4, 5, s);
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)
10252
+/* { dg-do compile { target { ! { ia32 } } } } */
10253
+/* { dg-require-effective-target maybe_x32 } */
10254
+/* { dg-options "-O -mx32 -mtune=corei7 -maddress-mode=long" } */
10256
+extern int foo(int, ...);
10258
+ long double l = 1.2345E6;
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)
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* } } */
10272
+typedef int __v8si __attribute__ ((__vector_size__ (32)));
10276
+extern void bar (__v8si);
10280
+ bar (x); /* { dg-message "warning: AVX vector argument without AVX enabled changes the ABI" } */
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)
10287
+/* PR target/59839 */
10288
+/* { dg-do compile } */
10289
+/* { dg-options "-O0 -mavx2" } */
10291
+#include <x86intrin.h>
10294
+test (const float *x)
10296
+ __m256i i = _mm256_set1_epi32 (1);
10297
+ __m256 d = _mm256_i32gather_ps (x, i, 1);
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)
10304
+/* { dg-do run } */
10305
+/* { dg-require-effective-target xop } */
10306
+/* { dg-options "-O2 -mxop" } */
10308
+#include "xop-check.h"
10310
+#include <x86intrin.h>
10313
+check_mm_vmfrcz_sd (__m128d __A, __m128d __B)
10315
+ union128d a, b, c;
10320
+ c.x = _mm_frcz_sd (__A, __B);
10321
+ d[0] = b.a[0] - (int)b.a[0] ;
10323
+ if (check_union128d (c, d))
10328
+check_mm_vmfrcz_ss (__m128 __A, __m128 __B)
10330
+ union128 a, b, c;
10335
+ c.x = _mm_frcz_ss (__A, __B);
10336
+ f[0] = b.a[0] - (int)b.a[0] ;
10340
+ if (check_union128 (c, f))
10351
+ for (i = 0; i < 4; i++)
10353
+ a.a[i] = i + 3.5;
10354
+ b.a[i] = i + 7.9;
10356
+ for (i = 0; i < 2; i++)
10358
+ c.a[i] = i + 3.5;
10359
+ d.a[i] = i + 7.987654321;
10361
+ check_mm_vmfrcz_ss (a.x, b.x);
10362
+ check_mm_vmfrcz_sd (c.x, d.x);
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)
10369
+/* PR target/59794 */
10370
+/* { dg-options "-O2 -mno-avx" } */
10371
+/* { dg-skip-if "no AVX vector" { *-*-mingw* } } */
10373
+typedef int __v8si __attribute__ ((__vector_size__ (32)));
10379
+{ /* { dg-warning "AVX vector return without AVX enabled changes the ABI" } */
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)
10387
+/* PR target/59625 */
10388
+/* { dg-do compile } */
10389
+/* { dg-options "-O2 -mtune=atom" } */
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);
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)
10431
- double e[2] __attribute__ ((aligned (8))) = {0.0};
10432
+ double e[2] __attribute__ ((aligned (16))) = {0.0};
10434
u.x = _mm_set_pd (2134.3343,1234.635654);
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)
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" } */
10447
typedef double v2df __attribute__ ((vector_size (16)));
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)
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* } } */
10460
typedef long long __m256i __attribute__ ((__vector_size__ (32), __may_alias__));
10466
bar (__m256i x) /* { dg-warning "AVX" "" } */
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)
10476
+/* { dg-do compile } */
10477
+/* { dg-options "-O3 -mavx2" } */
10479
+typedef unsigned int U32;
10486
+typedef struct sv SV;
10491
+typedef struct xrv XRV;
10493
+extern XRV * PL_xrv_root;
10498
+ register XRV* xrv;
10499
+ register XRV* xrvend;
10500
+ xrv = PL_xrv_root;
10501
+ xrvend = &xrv[200 / sizeof (XRV) - 1];
10502
+ while (xrv < xrvend)
10504
+ xrv->xrv_rv = (SV*)(xrv + 1);
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)
10514
+/* PR target/59794 */
10515
+/* { dg-do compile { target { ia32 } } } */
10516
+/* { dg-options "-O2 -mno-mmx" } */
10517
+/* { dg-skip-if "no MMX vector" { *-*-mingw* } } */
10519
+typedef int __v2si __attribute__ ((__vector_size__ (8)));
10525
+{ /* { dg-warning "MMX vector return without MMX enabled changes the ABI" } */
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)
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" } */
10537
typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));
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)
10544
/* { dg-do compile } */
10545
/* { dg-options "-O2" } */
10546
-/* { dg-final { scan-assembler-times "cmp" 4 } } */
10547
+/* { dg-final { scan-assembler-not "cmp" } } */
10549
extern void abort (void);
10551
@@ -34,39 +34,10 @@
10553
#define PLUSCCONLY(T, t) PLUSCCONLY1(T, t, a) PLUSCCONLY1(T, t, b)
10555
-#define MINUSCC(T, t) \
10556
-T minuscc##t (T a, T b) \
10558
- T difference = a - b; \
10559
- if (difference > a) \
10561
- return difference; \
10564
-#define DECCC(T, t) \
10565
-T deccc##t (T a, T b) \
10567
- T difference = a - b; \
10568
- if (difference > a) \
10570
- return difference; \
10573
-#define MINUSCCONLY(T, t) \
10574
-void minuscconly##t (T a, T b) \
10576
- T difference = a - b; \
10577
- if (difference > a) \
10581
#define TEST(T, t) \
10586
- MINUSCCONLY(T, t) \
10590
TEST (unsigned long, l)
10591
TEST (unsigned int, i)
10597
-#define MINUSCCZEXT \
10598
-unsigned long minuscczext (unsigned int a, unsigned int b) \
10600
- unsigned int difference = a - b; \
10601
- if (difference > a) \
10603
- return difference; \
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)
10612
/* { dg-do compile { target lp64 } } */
10613
+/* { dg-options "-maccumulate-outgoing-args" } */
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)
10622
+/* PR target/43546 */
10623
+/* { dg-do compile } */
10624
+/* { dg-options "-O1" } */
10625
+/* { dg-additional-options "-mpreferred-stack-boundary=2 -msseregparm -msse" { target ia32 } } */
10627
+extern void bar (double);
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)
10639
/* { dg-do compile { target lp64 } } */
10640
-/* { dg-options "-O2" } */
10641
+/* { dg-options "-O2 -maccumulate-outgoing-args" } */
10643
void __attribute__ ((ms_abi)) foo (void)
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)
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};
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)
10663
+/* { dg-do compile { target llp64 } } */
10664
+/* { dg-options "" } */
10668
+ void nested (void)
10670
+ char arr[(1U << 31) + 4U];
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)
10682
+/* PR target/59794 */
10683
+/* { dg-do compile { target { ia32 } } } */
10684
+/* { dg-options "-O2 -mno-mmx" } */
10685
+/* { dg-skip-if "no MMX vector" { *-*-mingw* } } */
10687
+typedef int __v2si __attribute__ ((__vector_size__ (8)));
10691
+extern void bar (__v2si);
10695
+ bar (x); /* { dg-message "warning: MMX vector argument without MMX enabled changes the ABI" } */
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)
10702
/* Test for cross x86_64<->w64 abi standard calls.
10704
/* { dg-do compile } */
10705
-/* { dg-options "-mno-sse" } */
10706
+/* { dg-options "-mno-sse -maccumulate-outgoing-args" } */
10707
#include "callabi.h"
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)
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"
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)
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"
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)
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"
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)
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" } */
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)
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" } */
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)
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" } */
10782
#include <stdarg.h>
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)
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" } */
10793
#include <stdarg.h>
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)
10800
/* { dg-do compile } */
10801
-/* { dg-options "-O2 -mabi=sysv" } */
10802
+/* { dg-options "-O2 -mabi=sysv -maccumulate-outgoing-args" } */
10804
__attribute__ ((ms_abi))
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)
10811
/* { dg-do compile } */
10812
-/* { dg-options "-O2 -mabi=sysv" } */
10813
+/* { dg-options "-O2 -mabi=sysv -maccumulate-outgoing-args" } */
10815
extern int glb1, gbl2, gbl3;
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)
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"
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)
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" } */
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)
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"
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)
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" } */
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)
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" } */
10876
typedef int (*func)(void *, char *, char *, short, long long);
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)
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" } */
10887
long double func_cross (long double a, double b, float c, long d, int e,
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)
10894
-/* This checks the availability of the XL compiler intrinsics for
10895
- transactional execution with the expected prototypes. */
10897
-/* { dg-do compile } */
10898
-/* { dg-options "-O3 -march=zEC12 -mzarch" } */
10900
-#include <htmxlintrin.h>
10908
- struct __htm_tdb *tdb_struct;
10909
- void * const tdb = tdb_struct;
10911
- unsigned char code;
10913
- result = __TM_simple_begin ();
10914
- result = __TM_begin (tdb);
10915
- result = __TM_end ();
10917
- __TM_named_abort (42);
10918
- __TM_non_transactional_store (&g, 42);
10919
- result = __TM_nesting_depth (tdb);
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);
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)
10936
-/* This checks the availability of the low-level builtins introduced
10937
- for transactional execution. */
10939
-/* { dg-do compile } */
10940
-/* { dg-options "-O3 -march=zEC12 -mzarch" } */
10942
-#include <stdint.h>
10943
-#include <htmintrin.h>
10947
-struct __htm_tdb global_tdb;
10950
-foo (struct __htm_tdb* tdb, int reg, int *mem, uint64_t *mem64)
10956
- cc = __builtin_tbegin (0);
10957
- cc = __builtin_tbegin (tdb);
10958
- cc = __builtin_tbegin (&global_tdb);
10960
- cc = __builtin_tbegin_nofloat (0);
10961
- cc = __builtin_tbegin_nofloat (&global_tdb);
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);
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);
10976
- __builtin_tbeginc ();
10978
- n = __builtin_tx_nesting_depth();
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);
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
10995
- __builtin_tabort (*mem + 255);
10996
- __builtin_tabort (global + 255);
10998
- __builtin_tend();
11000
- __builtin_tx_assist (23);
11001
- __builtin_tx_assist (reg);
11002
- __builtin_tx_assist (*mem);
11003
- __builtin_tx_assist (global);
11006
-/* Make sure the tdb NULL argument ends up as immediate value in the
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)
11014
+/* Functional tests for the function hotpatching feature. */
11016
+/* { dg-do run } */
11017
+/* { dg-options "-O3 -mzarch -mhotpatch" } */
11019
+#include <stdio.h>
11023
+ printf("hello, world!\n");
11026
+inline void hp2(void)
11028
+ printf("hello, world!\n");
11031
+__attribute__ ((always_inline))
11032
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
11034
+ printf("hello, world!\n");
11035
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
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)
11046
+/* Functional tests for the function hotpatching feature. */
11048
+/* { dg-do run } */
11049
+/* { dg-options "-O3 -mzarch -mhotpatch=0" } */
11051
+#include <stdio.h>
11055
+ printf("hello, world!\n");
11058
+inline void hp2(void)
11060
+ printf("hello, world!\n");
11063
+__attribute__ ((always_inline))
11064
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
11066
+ printf("hello, world!\n");
11067
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
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)
11078
+/* Functional tests for the function hotpatching feature. */
11080
+/* { dg-do run } */
11081
+/* { dg-options "-O3 -mzarch -mhotpatch=1" } */
11083
+#include <stdio.h>
11087
+ printf("hello, world!\n");
11090
+inline void hp2(void)
11092
+ printf("hello, world!\n");
11095
+__attribute__ ((always_inline))
11096
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
11098
+ printf("hello, world!\n");
11099
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
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)
11110
+/* Functional tests for the function hotpatching feature. */
11112
+/* { dg-do compile } */
11113
+/* { dg-options "-O3 -mzarch -mhotpatch=-1" } */
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)
11126
+/* Functional tests for the function hotpatching feature. */
11128
+/* { dg-do compile } */
11129
+/* { dg-options "-O3 -mzarch -mhotpatch=1000000" } */
11131
+#include <stdio.h>
11135
+ printf("hello, world!\n");
11138
+__attribute__ ((hotpatch(1000000)))
11141
+ printf("hello, world!\n");
11144
+__attribute__ ((hotpatch(1000001)))
11146
+{ /* { dg-error "requested 'hotpatch' attribute is not a non-negative integer constant or too large .max. 1000000." } */
11147
+ printf("hello, world!\n");
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)
11159
+/* Functional tests for the function hotpatching feature. */
11161
+/* { dg-do compile } */
11162
+/* { dg-options "-O3 -mzarch -mhotpatch=1000001" } */
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)
11175
+/* This checks the availability of the low-level builtins introduced
11176
+ for transactional execution. */
11178
+/* { dg-do compile } */
11179
+/* { dg-require-effective-target htm } */
11180
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
11182
+#include <stdint.h>
11183
+#include <htmintrin.h>
11187
+struct __htm_tdb global_tdb;
11190
+foo (struct __htm_tdb* tdb, int reg, int *mem, uint64_t *mem64)
11196
+ __builtin_tbegin ((void *)0);
11197
+ __builtin_tbegin ((void *)-99999);
11198
+ __builtin_tbegin ((void *)99999);
11199
+ while (__builtin_tbegin ((void *)0) != 0)
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));
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));
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);
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);
11247
+ __builtin_tbeginc ();
11249
+ __builtin_tx_nesting_depth ();
11250
+ n = __builtin_tx_nesting_depth ();
11252
+ __builtin_non_tx_store (mem64, 0);
11254
+ const uint64_t val_var = 0x1122334455667788;
11256
+ __builtin_non_tx_store (mem64, val_var);
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);
11267
+ __builtin_tend();
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);
11276
+/* The taborts must go into separate function since they are
11282
+ __builtin_tabort (256);
11288
+ __builtin_tabort (reg);
11294
+ /* { dg-final { scan-assembler-times "tabort\t255" 1 } } */
11295
+ __builtin_tabort (reg + 255);
11299
+tabort4 (int *mem)
11301
+ __builtin_tabort (*mem);
11307
+ __builtin_tabort (global);
11311
+tabort6 (int *mem)
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
11316
+ __builtin_tabort (*mem + 255);
11322
+ __builtin_tabort (global + 255);
11328
+ __builtin_tabort (-1);
11332
+/* Make sure the tdb NULL argument ends up as immediate value in the
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)
11345
+/* Functional tests for the function hotpatching feature. */
11347
+/* { dg-do run } */
11348
+/* { dg-options "-O3 -mzarch -mno-hotpatch" } */
11350
+#include <stdio.h>
11352
+__attribute__ ((hotpatch))
11355
+ printf("hello, world!\n");
11358
+__attribute__ ((hotpatch))
11359
+inline void hp2(void)
11361
+ printf("hello, world!\n");
11364
+__attribute__ ((hotpatch))
11365
+__attribute__ ((always_inline))
11366
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
11368
+ printf("hello, world!\n");
11369
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
11371
+__attribute__ ((hotpatch(0)))
11374
+ printf("hello, world!\n");
11377
+__attribute__ ((hotpatch(0)))
11378
+inline void hp5(void)
11380
+ printf("hello, world!\n");
11383
+__attribute__ ((hotpatch(0)))
11384
+__attribute__ ((always_inline))
11385
+void hp6(void) /* { dg-warning "always_inline function might not be inlinable" } */
11387
+ printf("hello, world!\n");
11388
+} /* { dg-warning "function 'hp6' with the 'always_inline' attribute is not hotpatchable" } */
11390
+__attribute__ ((hotpatch(1)))
11393
+ printf("hello, world!\n");
11396
+__attribute__ ((hotpatch(1)))
11397
+inline void hp8(void)
11399
+ printf("hello, world!\n");
11402
+__attribute__ ((hotpatch(1)))
11403
+__attribute__ ((always_inline))
11404
+void hp9(void) /* { dg-warning "always_inline function might not be inlinable" } */
11406
+ printf("hello, world!\n");
11407
+} /* { dg-warning "function 'hp9' with the 'always_inline' attribute is not hotpatchable" } */
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)
11418
+/* { dg-do compile } */
11419
+/* { dg-require-effective-target htm } */
11420
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
11422
+void must_not_compile1 (void)
11424
+ __builtin_tabort (0); /* { dg-error "Invalid transaction abort code:" } */
11427
+void must_not_compile2 (void)
11429
+ __builtin_tabort (255); /* { dg-error "Invalid transaction abort code:" } */
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)
11436
+/* Functional tests for the function hotpatching feature. */
11438
+/* { dg-do run } */
11439
+/* { dg-options "-O3 -mzarch -mhotpatch" } */
11441
+#include <stdio.h>
11445
+ int nested1(void) /* { dg-warning "hotpatching is not compatible with nested functions" } */
11448
+ __attribute__ ((hotpatch))
11449
+ int nested2(void) /* { dg-warning "hotpatching is not compatible with nested functions" } */
11452
+ return nested1() - nested2();
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)
11464
+/* This checks the availability of the XL compiler intrinsics for
11465
+ transactional execution with the expected prototypes. */
11467
+/* { dg-do compile } */
11468
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
11470
+#include <htmxlintrin.h>
11478
+ struct __htm_tdb *tdb_struct;
11479
+ void * const tdb = tdb_struct;
11481
+ unsigned char code;
11483
+ result = __TM_simple_begin ();
11484
+ result = __TM_begin (tdb);
11485
+ result = __TM_end ();
11487
+ __TM_named_abort (42);
11488
+ __TM_non_transactional_store (&g, 42);
11489
+ result = __TM_nesting_depth (tdb);
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);
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)
11506
# Load support procs.
11507
load_lib gcc-dg.exp
11509
+# Return 1 if htm (etnd - extract nesting depth) instructions can be
11511
+proc check_effective_target_htm { } {
11512
+ if { ![check_runtime s390_check_htm [subst {
11515
+ unsigned int nd = 77;
11516
+ asm (".insn rre,0xb2ec0000,%0,0" : "=d" (nd));
11519
+ }]] } { return 0 } else { return 1 }
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)
11530
+/* Functional tests for the function hotpatching feature. */
11532
+/* { dg-do run } */
11533
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
11535
+#include <stdio.h>
11539
+ printf("hello, world!\n");
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)
11555
+/* Functional tests for the function hotpatching feature. */
11557
+/* { dg-do run } */
11558
+/* { dg-options "-O3 -mzarch -mhotpatch=1 --save-temps" } */
11560
+#include <stdio.h>
11564
+ printf("hello, world!\n");
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)
11580
+/* Functional tests for the function hotpatching feature. */
11582
+/* { dg-do run } */
11583
+/* { dg-options "-O3 -mzarch -mhotpatch=0 --save-temps" } */
11585
+#include <stdio.h>
11589
+ printf("hello, world!\n");
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)
11605
+/* Functional tests for the function hotpatching feature. */
11607
+/* { dg-do run } */
11608
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
11610
+#include <stdio.h>
11612
+inline void hp1(void)
11614
+ printf("hello, world!\n");
11617
+__attribute__ ((always_inline))
11618
+void hp2(void) /* { dg-warning "always_inline function might not be inlinable" } */
11620
+ printf("hello, world!\n");
11621
+} /* { dg-warning "function 'hp2' with the 'always_inline' attribute is not hotpatchable" } */
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)
11636
+/* Functional tests for the function hotpatching feature. */
11638
+/* { dg-do run } */
11639
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
11641
+#include <stdio.h>
11643
+__attribute__ ((hotpatch))
11646
+ printf("hello, world!\n");
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)
11662
+/* Functional tests for the function hotpatching feature. */
11664
+/* { dg-do run } */
11665
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
11667
+#include <stdio.h>
11669
+__attribute__ ((hotpatch(1)))
11672
+ printf("hello, world!\n");
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)
11688
+/* Functional tests of the htm __builtin_... macros. */
11690
+/* { dg-do run } */
11691
+/* { dg-require-effective-target htm } */
11692
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
11694
+/* ---------------------------- included header files ---------------------- */
11696
+#include <stdio.h>
11697
+#include <string.h>
11698
+#include <stdint.h>
11699
+#include <htmintrin.h>
11701
+/* ---------------------------- local definitions -------------------------- */
11703
+#define DEFAULT_MAX_REPETITIONS 5
11704
+#define DEFAULT_REQUIRED_QUORUM ((DEFAULT_MAX_REPETITIONS) - 1)
11705
+#define NUM_WARMUP_RUNS 10
11707
+/* ---------------------------- local macros ------------------------------- */
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 }
11713
+/* ---------------------------- local types -------------------------------- */
11715
+typedef int (*test_func_t)(void);
11719
+ const char *name;
11720
+ test_func_t test_func;
11721
+ int max_repetitions;
11722
+ int required_quorum;
11723
+} test_table_entry_t;
11725
+/* ---------------------------- local variables ---------------------------- */
11727
+__attribute__ ((aligned(256))) static struct __htm_tdb local_tdb256;
11728
+static struct __htm_tdb local_tdb;
11729
+static int do_dump_tdb = 0;
11731
+/* ---------------------------- exported variables (globals) --------------- */
11733
+__attribute__ ((aligned(256))) struct
11738
+} global = { 1.0, 2.5, 0.0 };
11740
+__attribute__ ((aligned(256))) struct
11742
+ volatile uint64_t c1;
11743
+ volatile uint64_t c2;
11744
+ volatile uint64_t c3;
11745
+} counters = { 0, 0, 0 };
11747
+/* ---------------------------- local helper functions --------------------- */
11749
+static void dump_tdb (struct __htm_tdb *tdb)
11751
+ unsigned char *p;
11755
+ if (do_dump_tdb == 0)
11759
+ p = (unsigned char *)tdb;
11760
+ for (i = 0; i < 16; i++)
11762
+ fprintf (stderr, "0x%02x ", i * 16);
11763
+ for (j = 0; j < 16; j++)
11765
+ fprintf (stderr, "%02x", (int)p[i * 16 + j]);
11768
+ fprintf (stderr, " ");
11772
+ fprintf (stderr, " ");
11775
+ fprintf (stderr, "\n");
11781
+/* ---------------------------- local test functions ----------------------- */
11783
+/* Check values of the constants defined in htmintrin.h. */
11784
+static int test_constants (void)
11786
+ if (_HTM_TBEGIN_STARTED != 0)
11788
+ return 100 * _HTM_TBEGIN_STARTED + 1;
11790
+ if (_HTM_TBEGIN_INDETERMINATE != 1)
11792
+ return 100 * _HTM_TBEGIN_INDETERMINATE + 2;
11794
+ if (_HTM_TBEGIN_TRANSIENT != 2)
11796
+ return 100 * _HTM_TBEGIN_TRANSIENT + 3;
11798
+ if (_HTM_TBEGIN_PERSISTENT != 3)
11800
+ return 100 * _HTM_TBEGIN_PERSISTENT + 4;
11806
+static int test_tbegin_ntstg_tend (void)
11812
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
11814
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
11816
+ rc = __builtin_tend ();
11819
+ return 100 * rc + 5;
11821
+ if (counters.c1 != 1)
11823
+ return 100 * counters.c1 + 2;
11825
+ if (counters.c2 != 2)
11827
+ return 100 * counters.c2 + 3;
11832
+ return 100 * rc + 4;
11838
+static int test_tbegin_ntstg_tabort (void)
11845
+ if (__builtin_tbegin ((void *)0) == 0)
11847
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
11850
+ __builtin_tabort (256);
11853
+ if (counters.c1 != 1)
11855
+ return 100 * counters.c1 + 2;
11857
+ if (counters.c2 != 0)
11859
+ return 100 * counters.c2 + 3;
11863
+ return 100 * f + 4;
11869
+static int test_tbegin_nofloat (void)
11875
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
11877
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
11879
+ rc = __builtin_tend ();
11882
+ return 100 * rc + 5;
11884
+ if (counters.c1 != 1)
11886
+ return 100 * counters.c1 + 2;
11888
+ if (counters.c2 != 2)
11890
+ return 100 * counters.c2 + 3;
11895
+ return 100 * rc + 4;
11901
+static int test_tbegin_retry (void)
11908
+ if ((rc = __builtin_tbegin_retry ((void *)0, 5)) == 0)
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)
11917
+ __builtin_tabort (256);
11919
+ counters.c2 = counters.c2 + 10;
11920
+ __builtin_non_tx_store ((uint64_t *)&counters.c3, 3);
11921
+ rc = __builtin_tend ();
11924
+ return 100 * rc + 5;
11926
+ if (counters.c1 != 2)
11928
+ return 100 * counters.c1 + 2;
11930
+ if (counters.c2 != 10)
11932
+ return 100 * counters.c2 + 3;
11934
+ if (counters.c3 != 3)
11936
+ return 100 * counters.c3 + 6;
11941
+ return 100 * rc + 4;
11947
+static int test_tbegin_retry_nofloat (void)
11954
+ if ((rc = __builtin_tbegin_retry_nofloat ((void *)0, 5)) == 0)
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)
11963
+ __builtin_tabort (256);
11965
+ counters.c2 = counters.c2 + 10;
11966
+ __builtin_non_tx_store ((uint64_t *)&counters.c3, 3);
11967
+ rc = __builtin_tend ();
11970
+ return 100 * rc + 5;
11972
+ if (counters.c1 != 2)
11974
+ return 100 * counters.c1 + 2;
11976
+ if (counters.c2 != 10)
11978
+ return 100 * counters.c2 + 3;
11980
+ if (counters.c3 != 3)
11982
+ return 100 * counters.c3 + 6;
11987
+ return 100 * rc + 4;
11993
+static int test_tbegin_aborts (void)
11999
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
12002
+ __builtin_tabort (256);
12005
+ else if (rc != 2)
12014
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
12017
+ __builtin_tabort (257);
12020
+ else if (rc != 3)
12022
+ return 100 * rc + 6;
12026
+ return 100 * f + 7;
12028
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
12030
+ global.float_3 = global.float_1 + global.float_2;
12031
+ rc = __builtin_tend ();
12034
+ return 100 * rc + 8;
12039
+ return 100 * rc + 9;
12041
+ if (global.float_3 != global.float_1 + global.float_2)
12043
+ return 100 * rc + 10;
12049
+static __attribute__((noinline)) void indirect_abort(int abort_code)
12051
+ __builtin_tabort (abort_code);
12056
+static int test_tbegin_indirect_aborts (void)
12062
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
12065
+ indirect_abort(256);
12068
+ else if (rc != 2)
12070
+ return 100 * rc + 3;
12074
+ return 100 * rc + 4;
12077
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
12080
+ indirect_abort(257);
12083
+ else if (rc != 3)
12085
+ return 100 * rc + 6;
12089
+ return 100 * f + 7;
12095
+static int test_tbegin_nofloat_aborts (void)
12099
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
12101
+ __builtin_tabort (256);
12104
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
12106
+ __builtin_tabort (257);
12109
+ else if (rc != 3)
12111
+ return 1000 * rc + 6;
12117
+static int test_tbegin_nofloat_indirect_aborts (void)
12121
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
12123
+ indirect_abort (256);
12126
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
12128
+ indirect_abort (257);
12131
+ else if (rc != 3)
12133
+ return 1000 * rc + 6;
12140
+int _test_tbegin_retry_aborts (int retries, uint64_t abort_code)
12145
+ if ((rc = __builtin_tbegin_retry ((void *)0, retries)) == 0)
12147
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, counters.c1 + 1);
12148
+ __builtin_tabort (abort_code);
12153
+ if ((abort_code & 1) == 0)
12157
+ return 100 * rc + 2003;
12159
+ else if (counters.c1 != (uint64_t)retries + 1)
12161
+ return 1000 * counters.c1 + 100 * retries + 4;
12168
+ return 100 * rc + 3005;
12170
+ else if (counters.c1 != 1)
12172
+ return 1000 * counters.c1 + 100 * retries + 6;
12180
+static int test_tbegin_retry_aborts (void)
12185
+ for (retries = 1; retries <= 3; retries++)
12187
+ rc = _test_tbegin_retry_aborts (retries, 256);
12190
+ return 10000 + rc;
12193
+ for (retries = 1; retries <= 3; retries++)
12195
+ rc = _test_tbegin_retry_aborts (retries, 257);
12198
+ return 20000 + rc;
12201
+ if ((rc = __builtin_tbegin_retry ((void *)0, 5)) == 0)
12203
+ global.float_3 = global.float_1 + global.float_2;
12204
+ rc = __builtin_tend ();
12207
+ return 30000 + 100 * rc + 6;
12212
+ return 30000 + 100 * rc + 7;
12218
+static int _test_tbegin_retry_nofloat_aborts (int retries, uint64_t abort_code)
12223
+ if ((rc = __builtin_tbegin_retry_nofloat ((void *)0, retries)) == 0)
12225
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, counters.c1 + 1);
12226
+ __builtin_tabort (abort_code);
12231
+ if ((abort_code & 1) == 0)
12235
+ return 100 * rc + 2003;
12237
+ else if (counters.c1 != (uint64_t)retries + 1)
12239
+ return 1000 * counters.c1 + 100 * retries + 4;
12246
+ return 100 * rc + 3005;
12248
+ else if (counters.c1 != 1)
12250
+ return 1000 * counters.c1 + 100 * retries + 6;
12258
+static int test_tbegin_retry_nofloat_aborts (void)
12263
+ for (retries = 1; retries <= 3; retries++)
12265
+ rc = _test_tbegin_retry_nofloat_aborts (retries, 256);
12268
+ return 10 * retries + rc;
12271
+ for (retries = 1; retries <= 3; retries++)
12273
+ rc = _test_tbegin_retry_nofloat_aborts (retries, 257);
12276
+ return 10000 + 10 * retries + rc;
12283
+static int test_tbegin_tdb (void)
12287
+ local_tdb.format = 0;
12288
+ if ((rc = __builtin_tbegin (&local_tdb)) == 0)
12290
+ rc = __builtin_tend ();
12293
+ return 100 * rc + 1;
12295
+ if (local_tdb.format != 0)
12297
+ dump_tdb (&local_tdb);
12298
+ return 100 * local_tdb.format + 2;
12303
+ return 100 * rc + 3;
12305
+ local_tdb.format = 0;
12306
+ if ((rc = __builtin_tbegin (&local_tdb)) == 0)
12308
+ __builtin_tabort (257);
12315
+ return 100 * rc + 5;
12317
+ if (local_tdb.format != 1)
12319
+ dump_tdb (&local_tdb);
12320
+ return 100 * local_tdb.format + 6;
12323
+ local_tdb256.format = 0;
12324
+ if ((rc = __builtin_tbegin (&local_tdb256)) == 0)
12326
+ rc = __builtin_tend ();
12329
+ return 1100 * rc + 1;
12331
+ if (local_tdb256.format != 0)
12333
+ dump_tdb (&local_tdb256);
12334
+ return 1100 * local_tdb256.format + 2;
12339
+ return 1100 * rc + 3;
12341
+ local_tdb256.format = 0;
12342
+ if ((rc = __builtin_tbegin (&local_tdb256)) == 0)
12344
+ __builtin_tabort (257);
12351
+ return 2100 * rc + 5;
12353
+ if (local_tdb256.format != 1)
12355
+ dump_tdb (&local_tdb256);
12356
+ return 2100 * local_tdb256.format + 6;
12363
+static int test_tbegin_nofloat_tdb (void)
12367
+ local_tdb.format = 0;
12368
+ if ((rc = __builtin_tbegin_nofloat (&local_tdb)) == 0)
12370
+ rc = __builtin_tend ();
12373
+ return 100 * rc + 1;
12375
+ if (local_tdb.format != 0)
12377
+ dump_tdb (&local_tdb);
12378
+ return 100 * local_tdb.format + 2;
12385
+ local_tdb.format = 0;
12386
+ if ((rc = __builtin_tbegin_nofloat (&local_tdb)) == 0)
12388
+ __builtin_tabort (257);
12395
+ return 100 * rc + 5;
12397
+ if (local_tdb.format != 1)
12399
+ dump_tdb (&local_tdb);
12400
+ return 100 * local_tdb.format + 6;
12403
+ local_tdb256.format = 0;
12404
+ if ((rc = __builtin_tbegin_nofloat (&local_tdb256)) == 0)
12406
+ rc = __builtin_tend ();
12409
+ return 1100 * rc + 1;
12411
+ if (local_tdb256.format != 0)
12413
+ dump_tdb (&local_tdb256);
12414
+ return 1100 * local_tdb256.format + 2;
12421
+ local_tdb256.format = 0;
12422
+ if ((rc = __builtin_tbegin_nofloat (&local_tdb256)) == 0)
12424
+ __builtin_tabort (257);
12431
+ return 2100 * rc + 5;
12433
+ if (local_tdb256.format != 1)
12435
+ dump_tdb (&local_tdb256);
12436
+ return 2100 * local_tdb256.format + 6;
12443
+static int test_tbegin_retry_tdb (void)
12447
+ local_tdb256.format = 0;
12448
+ if ((rc = __builtin_tbegin_retry (&local_tdb256, 2)) == 0)
12450
+ rc = __builtin_tend ();
12453
+ return 1100 * rc + 1;
12455
+ if (local_tdb256.format != 0)
12457
+ dump_tdb (&local_tdb256);
12458
+ return 1100 * local_tdb256.format + 2;
12465
+ local_tdb256.format = 0;
12466
+ if ((rc = __builtin_tbegin_retry (&local_tdb256, 2)) == 0)
12468
+ __builtin_tabort (257);
12475
+ return 2100 * rc + 5;
12477
+ if (local_tdb256.format != 1)
12479
+ dump_tdb (&local_tdb256);
12480
+ return 2100 * local_tdb256.format + 6;
12487
+static int test_tbegin_retry_nofloat_tdb (void)
12491
+ local_tdb.format = 0;
12492
+ if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb, 2)) == 0)
12494
+ rc = __builtin_tend ();
12497
+ return 100 * rc + 1;
12499
+ if (local_tdb.format != 0)
12501
+ dump_tdb (&local_tdb);
12502
+ return 100 * local_tdb.format + 2;
12507
+ return 100 * rc + 3;
12509
+ local_tdb.format = 0;
12510
+ if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb, 2)) == 0)
12512
+ __builtin_tabort (257);
12519
+ return 100 * rc + 5;
12521
+ if (local_tdb.format != 1)
12523
+ dump_tdb (&local_tdb);
12524
+ return 100 * local_tdb.format + 6;
12527
+ local_tdb256.format = 0;
12528
+ if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb256, 2)) == 0)
12530
+ rc = __builtin_tend ();
12533
+ return 1100 * rc + 1;
12535
+ if (local_tdb256.format != 0)
12537
+ dump_tdb (&local_tdb256);
12538
+ return 1100 * local_tdb256.format + 2;
12543
+ return 1100 * rc + 3;
12545
+ local_tdb256.format = 0;
12546
+ if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb256, 2)) == 0)
12548
+ __builtin_tabort (257);
12555
+ return 2100 * rc + 5;
12557
+ if (local_tdb256.format != 1)
12559
+ dump_tdb (&local_tdb256);
12560
+ return 2100 * local_tdb256.format + 6;
12567
+static int test_etnd (void)
12574
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
12576
+ counters.c1 = __builtin_tx_nesting_depth ();
12577
+ if (__builtin_tbegin ((void *)0) == 0)
12579
+ counters.c2 = __builtin_tx_nesting_depth ();
12580
+ if (__builtin_tbegin ((void *)0) == 0)
12582
+ counters.c3 = __builtin_tx_nesting_depth ();
12583
+ __builtin_tend ();
12585
+ __builtin_tend ();
12587
+ __builtin_tend ();
12591
+ return 100 * rc + 1;
12593
+ if (counters.c1 != 1)
12595
+ return 100 * counters.c1 + 2;
12597
+ if (counters.c2 != 2)
12599
+ return 100 * counters.c2 + 3;
12601
+ if (counters.c3 != 3)
12603
+ return 100 * counters.c3 + 4;
12609
+static int test_tbeginc (void)
12614
+ __builtin_tbeginc ();
12616
+ rc = __builtin_tend ();
12619
+ return 10000 * rc + 1;
12621
+ if (counters.c1 != 1)
12623
+ return 100000 * counters.c1 + 3;
12629
+/* ---------------------------- local testing framework functions ---------- */
12631
+static int run_one_test (const test_table_entry_t *test_entry)
12633
+ int do_print_passes;
12638
+ /* Warmup run to get all necessary data and instruction pages into the page
12644
+ for (run = 0; run < NUM_WARMUP_RUNS; run++)
12646
+ test_entry->test_func ();
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)
12657
+ " (requires %d successful out of %d runs)\n",
12658
+ test_entry->required_quorum,
12659
+ test_entry->max_repetitions);
12663
+ for (rc = 0, i = 0; i < test_entry->max_repetitions; i++)
12665
+ if (do_print_passes == 1)
12676
+ rc = test_entry->test_func ();
12679
+ if (do_print_passes == 1)
12681
+ printf (" success");
12684
+ if (succeeded >= test_entry->required_quorum)
12691
+ printf (" failed (rc = %d)", rc);
12694
+ if (do_print_passes == 1 || rc != 0)
12698
+ if (succeeded >= test_entry->required_quorum)
12700
+ printf ("+++ OK %s\n", test_entry->name);
12706
+ printf ("--- FAIL %s\n", test_entry->name);
12708
+ return (rc != 0) ? rc : -1;
12712
+static int run_all_tests (const test_table_entry_t *test_table)
12714
+ const test_table_entry_t *test;
12718
+ rc = 0, test = &test_table[0];
12719
+ test->test_func != NULL && rc == 0; test++)
12721
+ rc = run_one_test (test);
12727
+/* ---------------------------- interface functions ------------------------ */
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 }
12756
+ rc = run_all_tests (test_table);
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)
12766
+/* Functional tests for the function hotpatching feature. */
12768
+/* { dg-do run } */
12769
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
12771
+#include <stdio.h>
12773
+__attribute__ ((hotpatch(0)))
12776
+ printf("hello, world!\n");
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)
12792
+/* Functional tests of the htm __TM_... macros. */
12794
+/* { dg-do run } */
12795
+/* { dg-require-effective-target htm } */
12796
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
12798
+/* ---------------------------- included header files ---------------------- */
12800
+#include <stdio.h>
12801
+#include <string.h>
12802
+#include <inttypes.h>
12803
+#include <htmxlintrin.h>
12805
+/* ---------------------------- local definitions -------------------------- */
12807
+#define DEFAULT_MAX_REPETITIONS 5
12808
+#define DEFAULT_REQUIRED_QUORUM ((DEFAULT_MAX_REPETITIONS) - 1)
12809
+#define DEFAULT_ABORT_ADDRESS (0x12345678u)
12811
+/* ---------------------------- local macros ------------------------------- */
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 }
12817
+/* ---------------------------- local types -------------------------------- */
12819
+typedef int (*test_func_t)(void);
12823
+ const char *name;
12824
+ test_func_t test_func;
12825
+ int max_repetitions;
12826
+ int required_quorum;
12827
+} test_table_entry_t;
12831
+ ABORT_T_SYSTEM = 0,
12832
+ ABORT_T_USER = 1,
12837
+ ABORT_T_NONE = 0,
12839
+ ABORT_T_FOOTPRINT_EXCEEDED,
12840
+ ABORT_T_NESTED_TOO_DEEP,
12841
+ ABORT_T_CONFLICT,
12843
+ ABORT_T_INVALID_ABORT_CODE
12846
+/* ---------------------------- local variables ---------------------------- */
12848
+__attribute__ ((aligned(256))) static struct __htm_tdb local_tdb256;
12849
+static struct __htm_tdb local_tdb;
12851
+static abort_t const abort_classes[] =
12853
+ ABORT_T_INVALID_ABORT_CODE,
12861
+ ABORT_T_FOOTPRINT_EXCEEDED,
12863
+ ABORT_T_FOOTPRINT_EXCEEDED,
12864
+ ABORT_T_CONFLICT,
12865
+ ABORT_T_CONFLICT,
12869
+ ABORT_T_NESTED_TOO_DEEP,
12876
+static size_t num_abort_classes = sizeof(abort_classes) / sizeof(abort_t);
12878
+/* ---------------------------- exported variables (globals) --------------- */
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
12887
+ volatile uint64_t c1;
12888
+ volatile uint64_t c2;
12889
+ volatile uint64_t c3;
12890
+} counters = { 0, 0, 0 };
12892
+/* ---------------------------- local helper functions --------------------- */
12894
+static void dump_tdb(struct __htm_tdb *tdb)
12896
+ unsigned char *p;
12900
+ p = (unsigned char *)tdb;
12901
+ for (i = 0; i < 16; i++)
12903
+ fprintf(stderr, "0x%02x ", i * 16);
12904
+ for (j = 0; j < 16; j++)
12906
+ fprintf(stderr, "%02x", (int)p[i * 16 + j]);
12909
+ fprintf(stderr, " ");
12913
+ fprintf(stderr, " ");
12916
+ fprintf(stderr, "\n");
12922
+static void make_fake_tdb(struct __htm_tdb *tdb)
12924
+ memset(tdb, 0, sizeof(*tdb));
12926
+ tdb->nesting_depth = 1;
12927
+ tdb->atia = DEFAULT_ABORT_ADDRESS;
12928
+ tdb->abort_code = 11;
12933
+static int check_abort_code_in_tdb(struct __htm_tdb *tdb, uint64_t abort_code)
12938
+ if (abort_code != 0)
12942
+ addr = __TM_failure_address(&local_tdb);
12943
+ if (addr != DEFAULT_ABORT_ADDRESS)
12949
+ long long tdb_abort_code;
12951
+ tdb_abort_code = __TM_failure_code(tdb);
12952
+ if ((uint64_t)tdb_abort_code != abort_code)
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);
12962
+ expect_rc = (abort_code >= 256) ? 1 : 0;
12963
+ rc = __TM_is_user_abort(tdb);
12964
+ if (rc != expect_rc)
12966
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
12970
+ unsigned char code;
12973
+ rc = __TM_is_named_user_abort(tdb, &code);
12974
+ if (rc != expect_rc)
12977
+ stderr, "rc %ld, expect_rc %ld\n", rc,
12981
+ if (expect_rc == 1 && code != abort_code - 256)
12986
+ if (abort_code > (uint64_t)num_abort_classes)
12988
+ abort_code = (uint64_t)num_abort_classes;
12990
+ expect_rc = (abort_classes[abort_code] == ABORT_T_ILLEGAL) ? 1 : 0;
12991
+ rc = __TM_is_illegal(tdb);
12992
+ if (rc != expect_rc)
12995
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
12999
+ (abort_classes[abort_code] == ABORT_T_FOOTPRINT_EXCEEDED) ?
13001
+ rc = __TM_is_footprint_exceeded(tdb);
13002
+ if (rc != expect_rc)
13005
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, 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)
13014
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
13017
+ expect_rc = (abort_classes[abort_code] == ABORT_T_CONFLICT) ? 1 : 0;
13018
+ rc = __TM_is_conflict(tdb);
13019
+ if (rc != expect_rc)
13022
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
13029
+/* ---------------------------- local test functions ----------------------- */
13031
+/* Not a test; make sure that the involved global cachelines are reserved for
13033
+static int init_cache(void)
13035
+ make_fake_tdb(&local_tdb);
13036
+ make_fake_tdb(&local_tdb256);
13039
+ global_float_1 = 1.0;
13040
+ global_float_2 = 2.5;
13041
+ global_float_3 = 0.0;
13049
+static int test_abort_classification(void)
13053
+ make_fake_tdb(&local_tdb);
13054
+ for (i = 0; i <= 256; i++)
13058
+ local_tdb.abort_code = (uint64_t)i;
13059
+ rc = check_abort_code_in_tdb(&local_tdb, (uint64_t)i);
13062
+ return 100 * i + rc;
13069
+static int test_cc_classification(void)
13073
+ rc = __TM_is_failure_persistent(0);
13078
+ rc = __TM_is_failure_persistent(1);
13083
+ rc = __TM_is_failure_persistent(2);
13088
+ rc = __TM_is_failure_persistent(3);
13097
+static int test_tbegin_ntstg_tend(void)
13103
+ if ((rc = __TM_simple_begin()) == 0)
13105
+ __TM_non_transactional_store((uint64_t *)&counters.c1, 1);
13110
+ return 100 * rc + 5;
13112
+ if (counters.c1 != 1)
13114
+ return 100 * counters.c1 + 2;
13116
+ if (counters.c2 != 2)
13118
+ return 100 * counters.c2 + 3;
13123
+ return 100 * rc + 4;
13129
+static int test_tbegin_ntstg_tabort(void)
13131
+ register float f;
13136
+ if (__TM_simple_begin() == 0)
13138
+ __TM_non_transactional_store((uint64_t *)&counters.c1, 1);
13141
+ __TM_named_abort(0);
13144
+ if (counters.c1 != 1)
13146
+ return 100 * counters.c1 + 2;
13148
+ if (counters.c2 != 0)
13150
+ return 100 * counters.c2 + 3;
13154
+ return 100 * f + 4;
13160
+static int test_tbegin_aborts(void)
13166
+ if ((rc = __TM_simple_begin()) == 0)
13172
+ else if (rc != 2)
13181
+ if ((rc = __TM_simple_begin()) == 0)
13184
+ __TM_named_abort(3);
13187
+ else if (rc != 3)
13189
+ return 100 * rc + 6;
13193
+ return 100 * f + 7;
13195
+ if ((rc = __TM_simple_begin()) == 0)
13197
+ global_float_3 = global_float_1 + global_float_2;
13201
+ return 100 * rc + 8;
13206
+ return 100 * rc + 9;
13208
+ if (global_float_3 != global_float_1 + global_float_2)
13210
+ return 100 * rc + 10;
13216
+static int test_tbegin_tdb(void)
13220
+ local_tdb.format = 0;
13221
+ if ((rc = __TM_begin(&local_tdb)) == 0)
13226
+ return 100 * rc + 1;
13228
+ if (local_tdb.format != 0)
13230
+ dump_tdb(&local_tdb);
13231
+ return 100 * local_tdb.format + 2;
13236
+ return 100 * rc + 3;
13238
+ local_tdb.format = 0;
13239
+ if ((rc = __TM_begin(&local_tdb)) == 0)
13241
+ __TM_named_abort(1);
13248
+ return 100 * rc + 5;
13250
+ if (local_tdb.format != 1)
13252
+ dump_tdb(&local_tdb);
13253
+ return 100 * local_tdb.format + 6;
13256
+ local_tdb256.format = 0;
13257
+ if ((rc = __TM_begin(&local_tdb256)) == 0)
13262
+ return 1100 * rc + 1;
13264
+ if (local_tdb256.format != 0)
13266
+ dump_tdb(&local_tdb256);
13267
+ return 1100 * local_tdb256.format + 2;
13272
+ return 1100 * rc + 3;
13274
+#if 1 /*!!!does not work*/
13275
+ local_tdb256.format = 0;
13276
+ if ((rc = __TM_begin(&local_tdb256)) == 0)
13278
+ __TM_named_abort(1);
13285
+ return 2100 * rc + 5;
13287
+ if (local_tdb256.format != 1)
13289
+ dump_tdb(&local_tdb256);
13290
+ return 2100 * local_tdb256.format + 6;
13298
+static int test_etnd(void)
13305
+ make_fake_tdb(&local_tdb);
13306
+ local_tdb.nesting_depth = 0;
13307
+ nd = __TM_nesting_depth(&local_tdb);
13312
+ local_tdb.nesting_depth = 7;
13313
+ nd = __TM_nesting_depth(&local_tdb);
13318
+ local_tdb.format = 0;
13319
+ nd = __TM_nesting_depth(&local_tdb);
13329
+ if ((rc = __TM_simple_begin()) == 0)
13331
+ counters.c1 = __TM_nesting_depth(0);
13332
+ if (__TM_simple_begin() == 0)
13334
+ counters.c2 = __TM_nesting_depth(0);
13335
+ if (__TM_simple_begin() == 0)
13337
+ counters.c3 = __TM_nesting_depth(0);
13346
+ return 100 * rc + 1;
13348
+ if (counters.c1 != 1)
13350
+ return 100 * counters.c1 + 2;
13352
+ if (counters.c2 != 2)
13354
+ return 100 * counters.c2 + 3;
13356
+ if (counters.c3 != 3)
13358
+ return 100 * counters.c3 + 4;
13364
+/* ---------------------------- local testing framework functions ---------- */
13366
+static int run_one_test(const test_table_entry_t *test_entry)
13368
+ int do_print_passes;
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)
13380
+ " (requires %d successful out of %d runs)\n",
13381
+ test_entry->required_quorum,
13382
+ test_entry->max_repetitions);
13386
+ for (rc = 0, i = 0; i < test_entry->max_repetitions; i++)
13388
+ if (do_print_passes == 1)
13399
+ rc = test_entry->test_func();
13402
+ if (do_print_passes == 1)
13404
+ printf(" success");
13407
+ if (succeeded >= test_entry->required_quorum)
13414
+ printf(" failed (rc = %d)", rc);
13417
+ if (do_print_passes == 1 || rc != 0)
13421
+ if (succeeded >= test_entry->required_quorum)
13423
+ printf("+++ OK %s\n", test_entry->name);
13429
+ printf("--- FAIL %s\n", test_entry->name);
13431
+ return (rc != 0) ? rc : -1;
13435
+static int run_all_tests(const test_table_entry_t *test_table)
13437
+ const test_table_entry_t *test;
13441
+ rc = 0, test = &test_table[0];
13442
+ test->test_func != NULL && rc == 0; test++)
13444
+ rc = run_one_test(test);
13450
+/* ---------------------------- interface functions ------------------------ */
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 }
13469
+ rc = run_all_tests(test_table);
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)
13479
+/* Functional tests for the function hotpatching feature. */
13481
+/* { dg-do run } */
13482
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
13484
+#include <stdio.h>
13486
+__attribute__ ((hotpatch))
13487
+inline void hp1(void)
13489
+ printf("hello, world!\n");
13492
+__attribute__ ((hotpatch))
13493
+__attribute__ ((always_inline))
13494
+void hp2(void) /* { dg-warning "always_inline function might not be inlinable" } */
13496
+ printf("hello, world!\n");
13497
+} /* { dg-warning "function 'hp2' with the 'always_inline' attribute is not hotpatchable" } */
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)
13512
+/* Functional tests for the function hotpatching feature. */
13514
+/* { dg-do run } */
13515
+/* { dg-options "-O3 -mzarch -mhotpatch=1 --save-temps" } */
13517
+#include <stdio.h>
13519
+__attribute__ ((hotpatch(2)))
13522
+ printf("hello, world!\n");
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)
13538
+/* Functional tests for the function hotpatching feature. */
13540
+/* { dg-do run } */
13541
+/* { dg-options "-O3 -mzarch -mno-hotpatch --save-temps" } */
13543
+#include <stdio.h>
13545
+__attribute__ ((hotpatch(2)))
13548
+ printf("hello, world!\n");
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)
13564
+/* Functional tests for the function hotpatching feature. */
13566
+/* { dg-do run } */
13567
+/* { dg-options "-O3 -mzarch -mhotpatch -mno-hotpatch --save-temps" } */
13569
+#include <stdio.h>
13573
+ printf("hello, world!\n");
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)
13589
+/* Functional tests for the function hotpatching feature. */
13591
+/* { dg-do run } */
13592
+/* { dg-options "-O3 -mzarch -mno-hotpatch -mhotpatch=1 --save-temps" } */
13594
+#include <stdio.h>
13598
+ printf("hello, world!\n");
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)
13614
+/* { dg-options "isa_rev>=2" } */
13615
+/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
13617
+NOMIPS16 unsigned short
13618
+foo (unsigned short x)
13620
+ return ((x << 8) & 0xff00) | ((x >> 8) & 0xff);
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)
13629
+/* { dg-options "isa_rev>=2" } */
13631
+NOMIPS16 unsigned short
13632
+foo (unsigned short x)
13634
+ return __builtin_bswap16 (x);
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)
13643
+/* { dg-do run } */
13644
+/* { dg-options "-mno-plt" } */
13646
+extern void abort (void);
13654
+struct lispstruct Cnil_body;
13655
+struct lispstruct Ct_body;
13658
+struct lispstruct * __attribute__ ((noinline))
13659
+fLlistp (struct lispstruct *x0)
13661
+ if (x0 == &Cnil_body
13662
+ || (((unsigned long) x0 >= 0x80000000) ? 0
13663
+ : (!x0->e ? (x0 != &Cnil_body) : x0->t)))
13673
+ if (fLlistp ((struct lispstruct *) 0xa0000001) != &Cnil_body)
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)
13682
+/* { dg-options "isa_rev>=2" } */
13683
+/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
13685
+NOMIPS16 unsigned int
13686
+foo (unsigned int x)
13688
+ return (((x << 24) & 0xff000000)
13689
+ | ((x << 8) & 0xff0000)
13690
+ | ((x >> 8) & 0xff00)
13691
+ | ((x >> 24) & 0xff));
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)
13701
+/* { dg-options "isa_rev>=2" } */
13703
+NOMIPS16 unsigned int
13704
+foo (unsigned int x)
13706
+ return __builtin_bswap32 (x);
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)
13716
+/* { dg-options "isa_rev>=2 -mgp64" } */
13717
+/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
13719
+typedef unsigned long long uint64_t;
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));
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)
13741
+/* { dg-options "isa_rev>=2 -mgp64" } */
13743
+typedef unsigned long long uint64_t;
13748
+ return __builtin_bswap64 (x);
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
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
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" } } */
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)
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" } } */
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 @@
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.
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)
13821
+! { dg-do compile }
13823
+! PR 60450: [4.7/4.8 Regression] ICE with SHAPE intrinsic
13825
+! Contributed by Dave Allured <dave.allured@noaa.gov>
13827
+ real, allocatable :: x(:,:)
13828
+ allocate (x(3,2), source=99.)
13829
+ print *, shape (x / 10.0)
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)
13836
+! { dg-do compile }
13838
+! PR fortran/58803
13840
+! Contributed by Vittorio Zecca
13842
+! Was before ICEing due to a double free
13845
+ procedure(real), pointer, nopass :: f1, f2
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)
13853
+! { dg-do compile }
13854
+! PR 60522 - this used to ICE.
13855
+! Original test case Roger Ferrer Ibanez
13856
+subroutine foo(a, b)
13858
+ integer, dimension(:), intent(inout) :: a
13859
+ integer, dimension(:), intent(in) :: b
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
13865
+ a(lbound(a, 1):ubound(a, 1)) = b(lbound(b, 1):ubound(b, 1)) * b(lbound(b, 1):ubound(b, 1))
13868
+ a(lbound(a, 1):ubound(a, 1)) = - b(lbound(b, 1):ubound(b, 1)) * b(lbound(b, 1):ubound(b, 1))
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)
13876
+! PR libgomp/59467
13877
+! { dg-do compile }
13878
+! { dg-options "-fopenmp" }
13880
+ INTEGER :: a, b, t
13883
+ !$OMP PARALLEL REDUCTION(+:b)
13884
+ !$OMP SINGLE ! { dg-error "is not threadprivate or private in outer context" }
13885
+ !$OMP ATOMIC WRITE
13887
+ !$OMP END SINGLE COPYPRIVATE (a)
13889
+ !$OMP END PARALLEL
13892
+ !$OMP PARALLEL REDUCTION(+:b)
13894
+ !$OMP ATOMIC WRITE
13896
+ !$OMP END SINGLE COPYPRIVATE (b)
13897
+ !$OMP END PARALLEL
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)
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.
13911
+! Contributed by Antony Lewis <antony@cosmologist.info>
13913
+module ObjectLists
13920
+ type Object_array_pointer
13921
+ class(t), pointer :: p(:)
13926
+ subroutine AddArray1 (P, Pt)
13928
+ class(Object_array_pointer) :: Pt
13931
+ class is (Object_array_pointer)
13932
+ if (associated (Pt%P)) deallocate (Pt%P)
13933
+ allocate(Pt%P(1:SIZE(P)), source=P)
13937
+ subroutine AddArray2 (P, Pt)
13939
+ class(Object_array_pointer) :: Pt
13942
+ type is (Object_array_pointer)
13943
+ if (associated (Pt%P)) deallocate (Pt%P)
13944
+ allocate(Pt%P(1:SIZE(P)), source=P)
13948
+ subroutine AddArray3 (P, Pt)
13950
+ class(Object_array_pointer) :: Pt
13953
+ class is (Object_array_pointer)
13954
+ if (associated (Pt%P)) deallocate (Pt%P)
13955
+ allocate(Pt%P(1:4), source=P)
13959
+ subroutine AddArray4 (P, Pt)
13961
+ class(Object_array_pointer) :: Pt
13964
+ class is (Object_array_pointer)
13965
+ if (associated (Pt%P)) deallocate (Pt%P)
13966
+ allocate(Pt%P(1:SIZE(P)), source=P)
13972
+ type(Object_array_pointer), pointer :: Pt
13973
+ class(t), pointer :: P(:)
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)
13980
+ if (any (x%i .ne. [1,2])) call abort
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)
13990
+ if (any (x%i .ne. [3,4,5])) call abort
13995
+ allocate (Pt, source = Object_array_pointer(NULL()))
13996
+ call AddArray3 (t(6), Pt)
13997
+ select type (x => Pt%p)
13999
+ if (any (x%i .ne. [6,6,6,6])) call abort
14003
+ allocate (Pt, source = Object_array_pointer(NULL()))
14004
+ call AddArray4 ([t(7), t(8)], Pt)
14005
+ select type (x => Pt%p)
14007
+ if (any (x%i .ne. [7,8])) call abort
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)
14017
+! { dg-do compile }
14018
+! PR fortran/58989
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/)
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
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)
14041
+! { dg-do compile }
14043
+! PR fortran/58007
14044
+! Unresolved fiixup while loading a module.
14046
+! This tests that the specification expression A%MAX_DEGREE in module BSR is
14047
+! correctly loaded and resolved in program MAIN.
14049
+! Original testcase from Daniel Shapiro <shapero@uw.edu>
14052
+ type :: sparse_matrix
14053
+ integer :: max_degree
14060
+ type, extends(sparse_matrix) :: bsr_matrix
14067
+ function get_neighbors (A)
14068
+ type(bsr_matrix), intent(in) :: A
14069
+ integer :: get_neighbors(A%max_degree)
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)
14082
+! { dg-do compile }
14083
+! { dg-options "-fno-automatic -finit-local-zero" }
14085
+! PR 55907: [4.7/4.8/4.9 Regression] ICE with -fno-automatic -finit-local-zero
14087
+! Contributed by J.R. Garcia <garcia.espinosa.jr@gmail.com>
14089
+subroutine cchaine (i)
14092
+ character(len=i) :: chaine
14093
+ write(*,*) chaine
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)
14102
+! PR fortran/58771
14104
+! Contributed by Vittorio Secca <zeccav@gmail.com>
14106
+! ICEd on the write statement with f() because the derived type backend
14107
+! declaration not built.
14115
+type(t) function f() result(ff)
14121
+ character (20) :: line1, line2
14123
+ write (line1, *) f()
14124
+ write (line2, *) 42_4
14125
+ if (line1 .ne. line2) call abort
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)
14132
+! { dg-do compile }
14134
+! PR fortran/60543
14135
+! PR fortran/60283
14139
+ REAL(8) FUNCTION random()
14140
+ CALL RANDOM_NUMBER(random)
14141
+ END FUNCTION random
14142
+ REAL(8) FUNCTION random2()
14146
+ CALL RANDOM_NUMBER(random2)
14150
+ END FUNCTION random2
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)
14160
subroutine test_PR34547_3 ()
14161
integer, allocatable :: 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)
14171
+! PR60128 Invalid outputs with EN descriptors
14172
+! Test case provided by Walt Brainerd.
14175
+ integer :: n_tst = 0, n_cnt = 0
14178
+ call checkfmt("(en15.2)", -.44444, " -444.44E-03")
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")
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")
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")
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")
14279
+ !print *, n_tst, n_cnt
14280
+ if (n_cnt /= 0) call abort
14283
+ subroutine checkfmt(fmt, x, cmp)
14284
+ use ISO_FORTRAN_ENV
14286
+ integer, parameter :: j(size(real_kinds)+4)=[REAL_KINDS, [4, 4, 4, 4]]
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)
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))
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
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)
14316
+! { dg-do compile }
14317
+! { dg-options "-Wall" }
14319
+! PR 58471: [4.8/4.9 Regression] ICE on invalid with missing type constructor and -Wall
14321
+! Contributed by Andrew Benson <abensonca@gmail.com>
14328
+ module procedure mdedc ! { dg-error "is neither function nor subroutine" }
14332
+ type(cfmde), pointer :: cfd
14333
+ cfd=cfmde() ! { dg-error "Can't convert" }
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")
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
14356
+ call checkfmt("(RU,G9.3)", 891.1, " 892.") ! pr59836
14357
+ call checkfmt("(RD,G9.3)", -891.1, "-892.") ! pr59836
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.
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)
14400
+! { dg-do compile }
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
14406
+! Contributed by Tilo Schwarz <tilo@tilo-schwarz.de>
14412
+ logical :: f = .false.
14415
+type, extends(m) :: me
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)
14427
+! { dg-do compile }
14429
+! PR fortran/49397
14431
+! Invalid per IR F08/0060 and F2008Corr2, C729
14434
+! Print *,f() ! << Valid when uncommented
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" }
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)
14446
+! PR fortran/52370
14447
+! { dg-do compile }
14448
+! { dg-options "-O1 -Wall" }
14452
+ subroutine foo(a,b)
14453
+ real, intent(out) :: a
14454
+ real, dimension(:), optional, intent(out) :: b
14456
+ if (present(b)) then
14459
+ end subroutine foo
14460
+end module pr52370
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)
14472
+! { dg-do compile }
14473
+! { dg-options "-ffrontend-optimize" }
14475
+! PR fortran/60341
14476
+! An unguarded union access was wrongly enabling a frontend optimization on a
14477
+! string comparison, leading to an ICE.
14479
+! Original testcase from Steve Chapel <steve.chapel@a2pg.com>.
14480
+! Reduced by Steven G. Kargl <kargl@gcc.gnu.org>.
14483
+ subroutine modelg(ncm)
14485
+ integer, parameter :: pc = 30, pm = pc - 1
14487
+ character*4 catt(pm,2)
14488
+ integer ncm,iatt(pm,pc)
14490
+ if (catt(i,1)//catt(i,2).eq.'central') exit
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)
14500
+! PR58324 Bogus end of file condition
14502
+open(99, access='stream', form='unformatted')
14506
+open(99, access='sequential', form='formatted')
14507
+read(99, *, iostat=ios) i
14508
+if (ios /= 0) call abort
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)
14515
+! { dg-do compile }
14517
+! PR 58998: [4.8/4.9 Regression] Generic interface problem with gfortran
14519
+! Contributed by Paul van Delst
14522
+ procedure iargc_8
14527
+ integer(8) function iargc_8()
14529
+ iargc_8 = iargc()
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)
14538
+! { dg-do compile }
14540
+! PR fortran/58007
14541
+! Unresolved fixup while loading a module.
14543
+! This tests that the specification expression A%MAX_DEGREE in module BSR is
14544
+! correctly loaded and resolved in program MAIN.
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>
14550
+ type :: sparse_matrix
14551
+ integer :: max_degree
14554
+ subroutine init_interface (A)
14555
+ class(sparse_matrix), intent(in) :: A
14557
+ real function get_value_interface()
14567
+ type, extends(sparse_matrix) :: bsr_matrix
14569
+ procedure :: get_neighbors
14572
+ function get_neighbors (A)
14573
+ class(bsr_matrix), intent(in) :: A
14574
+ integer :: get_neighbors(A%max_degree)
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)
14587
end subroutine test_PR34547_1
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
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)
14600
+! { dg-do compile }
14602
+! PR 58099: [4.8/4.9 Regression] [F03] over-zealous procedure-pointer error checking
14604
+! Contributed by Daniel Price <daniel.price@monash.edu>
14607
+ procedure(real), pointer :: wfunc
14613
+ pure real function w_cubic(q2)
14614
+ real, intent(in) :: q2
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)
14624
+! { dg-do compile }
14626
+! PR 60231: [4.8/4.9 Regression] ICE on undefined generic
14628
+! Contributed by Antony Lewis <antony@cosmologist.info>
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" }
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)
14647
+! { dg-do compile }
14649
+! PR 58355: [4.7/4.8/4.9 Regression] [F03] ICE with TYPE, EXTENDS before parent TYPE defined
14651
+! Contributed by Andrew Benson <abensonca@gmail.com>
14656
+ type, extends(t1) :: t2 ! { dg-error "has not been previously defined" }
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)
14670
+! PR fortran/57445
14672
+! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
14674
+! Spurious assert was added at revision 192495
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)])
14698
+ end subroutine foo_opt
14701
+ class(t), allocatable :: xca(:)
14702
+ allocate (xca(1), source = t(42))
14703
+ select type (xca)
14705
+ if (any (xca%i .ne. [42])) call abort
14707
+ call opt (xca = xca)
14708
+ select type (xca)
14710
+ if (any (xca%i .ne. [9,99,999])) call abort
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)
14720
+! PR 59654: [4.8/4.9 Regression] [OOP] Broken function table with complex OO use case
14722
+! Contributed by Thomas Clune <Thomas.L.Clune@nasa.gov>
14724
+module TestResult_mod
14728
+ integer :: numRun = 0
14731
+ procedure, nopass :: getNumRun
14736
+ subroutine run (this)
14737
+ class (TestResult) :: this
14738
+ this%numRun = this%numRun + 1
14741
+ subroutine getNumRun()
14747
+module BaseTestRunner_mod
14750
+ type :: BaseTestRunner
14752
+ procedure, nopass :: norun
14757
+ function norun () result(result)
14758
+ use TestResult_mod, only: TestResult
14759
+ type (TestResult) :: result
14765
+module TestRunner_mod
14766
+ use BaseTestRunner_mod, only: BaseTestRunner
14772
+ use TestRunner_mod, only: BaseTestRunner
14773
+ use TestResult_mod, only: TestResult
14776
+ type (TestResult) :: result
14778
+ call runtest (result)
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()
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)
14797
+! { dg-do compile }
14799
+! PR fortran/49397
14801
+! Valid per IR F08/0060 and F2008Corr2, C729
14807
+ Procedure(Real),Pointer :: p
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)
14827
+! PR59700 Test case by Steve Kargl
14832
+ character(len=80) msg
14833
+ integer, parameter :: fd = 10
14834
+ integer i1, i2, i3, i4
14835
+ real x1, x2, x3, x4
14839
+ open(unit=fd, status='scratch')
14840
+ write(fd, '(A)') '1 2 3.4 q'
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
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
14852
+ read(fd, *, err=30, iomsg=msg) i1, x2, x1, a
14853
+30 if (msg /= 'Bad logical value while reading item 4') call abort
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
14858
+ open(unit=fd, status='scratch')
14859
+ write(fd, '(A)') '(1, 2) (3.4, q)'
14862
+ read(fd, *, err=40, iomsg=msg) c1, c2
14863
+40 if (msg /= 'Bad floating point number for item 2') call abort
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)
14871
+! { dg-do compile }
14873
+! PR fortran/59599
14874
+! The call to ichar was triggering an ICE.
14876
+! Original testcase from Fran Martinez Fadrique <fmartinez@gmv.com>
14878
+character(1) cpk(2)
14881
+res = ichar( cpk, kind=1 )
14882
+print *, ichar( cpk, kind=1 )
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)
14889
+! { dg-do compile }
14891
+! PR 59493: [OOP] ICE: Segfault on Class(*) pointer association
14893
+! Contributed by Hossein Talebi <talebi.hossein@gmail.com>
14900
+ class(ty_mytype1), allocatable, target:: cla1
14901
+ class(*), pointer :: ptr
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)
14912
+! PR59771 Cleanup handling of Gw.0 and Gw.0Ee format
14913
+! Test case prepared by Dominique d'Humieres <dominiq@lps.ens.fr>
14915
+ character(len=60) :: buffer, buffer1
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
14920
+ if (buffer /= buffer1) call abort
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)
14929
+! PR fortran/59906
14931
+! Contributed by H Anlauf <anlauf@gmx.de>
14933
+! Failed generate character scalar for scalarized loop for elemantal call.
14940
+ subroutine y(str)
14941
+ character(len=*), intent(in) :: str
14942
+ character(len=len_trim(str)) :: str_aux
14943
+ character(len=3) :: str3 = 'abc'
14947
+ ! Compiled but did not give correct result
14948
+ if (any (str_cmp((/'aaa','bbb'/), str) .neqv. [.FALSE.,.TRUE.])) call abort
14950
+ ! Did not compile
14951
+ if (any (str_cmp((/'bbb', 'aaa'/), str_aux) .neqv. [.TRUE.,.FALSE.])) call abort
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
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
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)
14971
+/* PR rtl-optimization/60116 */
14972
+/* Reported by Zhendong Su <su@cs.ucdavis.edu> */
14974
+extern void abort (void);
14976
+int a, b, c, d = 1, e, f = 1, h, i, k;
14990
+ l = ~g + (long long) e && 1;
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)
15013
+/* PR tree-optimization/58984 */
15015
+struct S { int f0 : 8; int : 6; int f1 : 5; };
15016
+struct T { char f0; int : 6; int f1 : 5; };
15018
+int a, *c = &a, e, n, b, m;
15023
+ const unsigned short *f[36];
15024
+ for (; e < 2; e++)
15026
+ const unsigned short **i = &f[0];
15040
+ const unsigned short *f[36];
15041
+ for (; e < 2; e++)
15043
+ const unsigned short **i = &f[0];
15057
+ struct S o = { 1, 1 };
15061
+ __builtin_abort ();
15063
+ struct T p = { 1, 1 };
15067
+ __builtin_abort ();
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)
15075
+#ifdef __UINT32_TYPE__
15076
+typedef __UINT32_TYPE__ uint32_t;
15078
+typedef unsigned uint32_t;
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)))
15088
+/* Previous version of bswap optimization would detect byte swap when none
15089
+ happen. This test aims at catching such wrong detection to avoid
15092
+__attribute__ ((noinline, noclone)) uint32_t
15093
+fake_swap32 (uint32_t in)
15095
+ return __fake_const_swab32 (in);
15100
+ if (sizeof (uint32_t) * __CHAR_BIT__ != 32)
15102
+ if (fake_swap32 (0x12345678UL) != 0x78567E12UL)
15103
+ __builtin_abort ();
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)
15111
+/* PR target/60017 */
15113
+extern void abort (void);
15128
+struct S1 x = { 1, {{2, 3}, {4, 5}}, {{6, 7}, {8, 9}} };
15130
+struct S1 func (void)
15137
+ struct S1 ret = func ();
15139
+ if (ret.m2[1].m1 != 9)
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)
15149
+/* PR middle-end/59138 */
15150
+/* Testcase by John Regehr <regehr@cs.utah.edu> */
15152
+extern void abort (void);
15165
+struct S0 b = { 1 }, c, d, e;
15167
+struct S0 fn1() { return c; }
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)
15188
+/* PR tree-optimization/59358 */
15190
+__attribute__((noinline, noclone)) int
15191
+foo (int *x, int y)
15194
+ if (y > z && y <= 16)
15204
+ for (i = 1; i < 17; i++)
15206
+ int j = foo (&i, 16);
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;
15217
+ __builtin_abort ();
15222
+ k = 8 + (i - 4) * 2;
15228
+ __builtin_abort ();
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)
15237
+/* PR target/60062 */
15242
+foo (const char *p1, int p2)
15244
+ if (__builtin_strcmp (p1, "hello") != 0)
15245
+ __builtin_abort ();
15249
+bar (const char *p1)
15251
+ if (__builtin_strcmp (p1, "hello") != 0)
15252
+ __builtin_abort ();
15255
+__attribute__((optimize (0))) int
15258
+ foo ("hello", a);
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)
15267
+/* PR tree-optimization/59014 */
15269
+__attribute__((noinline, noclone)) long long int
15270
+foo (long long int x, long long int y)
15272
+ if (((int) x | (int) y) != 0)
15280
+ if (sizeof (long long) == sizeof (int))
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 ();
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)
15295
+/* PR target/59101 */
15297
+__attribute__((noinline, noclone)) int
15300
+ return (~a & 4102790424LL) > 0 | 6;
15306
+ if (foo (0) != 7)
15307
+ __builtin_abort ();
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)
15315
+#include <assert.h>
15317
+int a, *b, c, d, f, **i, p, q, *r;
15320
+static int __attribute__((noinline, noclone))
15321
+fn1 (int *p1, int **p2)
15333
+static int ** __attribute__((noinline, noclone))
15336
+ for (f = 0; f != 42; f++)
15338
+ int *g[3] = {0, 0, 0};
15339
+ for (o = 0; o; o--)
15342
+ int **h[1] = { &g[2] };
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)
15360
+/* PR rtl-optimization/58726 */
15363
+union { int f1; int f2 : 1; } b;
15368
+ return p < 0 ? p : a;
15374
+ if (sizeof (short) * __CHAR_BIT__ != 16
15375
+ || sizeof (int) * __CHAR_BIT__ != 32)
15378
+ unsigned short d;
15380
+ d = e == 0 ? b.f1 : 0;
15382
+ if (c != (short) 56374)
15383
+ __builtin_abort ();
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)
15391
+/* PR tree-optimization/59014 */
15393
+int a = 2, b, c, d;
15399
+ if ((b > 0) | (a & 1))
15413
+ __builtin_abort ();
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)
15421
+/* PR target/60072 */
15425
+__attribute__ ((optimize (1)))
15426
+static int *foo (int *p)
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)
15447
+ char e[2] = { 0, 0 }, f = 0;
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)
15457
+/* PR tree-optimization/59388 */
15460
+struct S { unsigned int f:1; } b;
15465
+ a = (0 < b.f) | b.f;
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)
15473
+/* PR middle-end/58970 */
15475
+struct T { int b : 1; };
15476
+struct S { struct T t[1]; };
15479
+foo (int x, struct S *s)
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)
15489
+/* PR target/59803 */
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; };
15512
+ if (x->i != e) baz ();
15513
+ if (x->k != c) baz ();
15514
+ if (x->j != a.h) baz ();
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)
15521
+/* PR rtl-optimization/58997 */
15532
+ d = a ? c : 1 % a;
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)
15545
+/* PR middle-end/58970 */
15547
+struct T { char a : 8; char b : 1; };
15548
+struct S { char x; struct T t[1]; };
15551
+foo (int x, struct S *s)
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)
15561
+/* PR tree-optimization/59362 */
15564
+foo (char *r, int s)
15566
+ r = __builtin___stpcpy_chk (r, "abc", __builtin_object_size (r, 1));
15568
+ r = __builtin___stpcpy_chk (r, "d", __builtin_object_size (r, 1));
15578
+ b = __builtin_object_size (0, 0);
15579
+ a = __builtin___stpcpy_chk (0, "", b);
15580
+ b = __builtin_object_size (a, 0);
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)
15587
+-- { dg-do compile }
15588
+-- { dg-options "-O2" }
15590
+with Ada.Containers; use Ada.Containers;
15591
+with Ada.Containers.Vectors;
15593
+function Opt32 return Natural is
15595
+ package My_Vectors
15596
+ is new Vectors (Index_Type => Natural, Element_Type => Integer);
15601
+ function Sign_Changes return Natural is
15602
+ Cur : Cursor := To_Cursor (V, 0);
15603
+ R : Natural := 0;
15604
+ Negative : Boolean;
15606
+ Negative := Element (Cur) < 0;
15609
+ Cur := Next (Cur);
15610
+ exit when R > 100;
15612
+ if (Element (Cur) < 0) /= Negative then
15613
+ Negative := not Negative;
15622
+ return Sign_Changes;
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)
15629
+/* PR rtl-optimization/58668 */
15630
+/* { dg-do compile } */
15631
+/* { dg-options "-O2" } */
15632
+/* { dg-additional-options "-mthumb" { target { { arm*-*-* } && arm_thumb2_ok } } } */
15634
+void *fn1 (void *);
15635
+void *fn2 (void *, const char *);
15636
+void fn3 (void *);
15637
+void fn4 (void *, int);
15643
+ if (!(a = fn1 (x)))
15644
+ return (void *) 0;
15645
+ if (!(b = fn2 (a, "w")))
15648
+ return (void *) 0;
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)
15659
-/* PR rtl-optimization/57130 */
15660
+/* PR rtl-optimization/57518 */
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" } } */
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)
15674
+/* { dg-do run } */
15675
+/* { dg-options "-O2" } */
15677
+extern void abort (void);
15678
+extern char *strncpy(char *, const char *, __SIZE_TYPE__);
15685
+ char all[8+16+4];
15688
+void __attribute__((noinline,noclone))
15692
+ __builtin_strncpy(vi, u->vi, sizeof(u->vi));
15693
+ if (__builtin_object_size (u->all, 1) != -1)
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)
15707
+/* PR middle-end/58809 */
15708
+/* { dg-do compile } */
15709
+/* { dg-options "-fopenmp -O" } */
15712
+#pragma omp threadprivate (i)
15717
+#pragma omp parallel copyin (i) reduction (&&:j)
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)
15725
/* { dg-do run } */
15726
/* { dg-options "-O1 -std=c99" } */
15728
-#include <stdlib.h>
15729
+extern void abort (void);
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)
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)
15749
+/* { dg-do run } */
15750
+/* { dg-options "-O2" } */
15752
+extern void abort (void);
15773
+ /* prevert fowrprop from creating an offsetted sd constraint and
15774
+ preserve the pointer offsetting constraint. */
15780
+ /* z should point to i (and non-local/escaped). */
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)
15792
+/* { dg-do run } */
15793
+/* { dg-require-effective-target sync_int_128_runtime } */
15794
+/* { dg-options "-mcx16" { target { i?86-*-* x86_64-*-* } } } */
15800
+ __atomic_store_16(&i, -1, 0);
15802
+ __builtin_abort();
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)
15810
+/* PR debug/59776 */
15811
+/* { dg-do run } */
15812
+/* { dg-options "-g" } */
15814
+#include "../nop.h"
15816
+struct S { float f, g; };
15818
+__attribute__((noinline, noclone)) void
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");
15835
+ struct S x = { 5.0f, 6.0f };
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)
15844
+/* PR middle-end/59827 */
15845
+/* { dg-do compile } */
15848
+foo (int p[2][]) /* { dg-error "array type has incomplete element type" } */
15857
+ foo (p); /* { dg-error "type of formal parameter 1 is incomplete" } */
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)
15864
#include "strlenopt-4.c"
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)
15888
+/* { dg-do compile } */
15889
+/* { dg-options "-std=c99 -Wpedantic" } */
15894
+ return sizeof ((int[]) {}); /* { dg-warning "ISO C forbids empty initializer braces" } */
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)
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-*-* } } } */
15906
typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
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)
15913
-/* { dg-do run { xfail *-*-* } } */
15914
+/* { dg-do run } */
15915
/* { dg-options "-O2" } */
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)
15923
/* { dg-do run } */
15924
/* { dg-options "-O1 -std=c99" } */
15926
-#include <stdlib.h>
15927
+extern void abort (void);
15928
+extern void exit (int);
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)
15937
+/* { dg-do compile } */
15938
+/* { dg-options "-O" } */
15940
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * __attribute__ ((__nothrow__ , __leaf__))
15941
+strcat (char *__restrict __dest, const char *__restrict __src)
15943
+ return __builtin___strcat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
15945
+static char raw_decode;
15946
+void foo (char **argv, char *outfilename)
15948
+ if (**argv == 'r')
15950
+ strcat (outfilename, raw_decode ? ".raw" : ".wav");
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)
15957
+/* PR middle-end/59011 */
15958
+/* { dg-do compile } */
15959
+/* { dg-options "-std=gnu99" } */
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)
15984
+/* { dg-do compile } */
15985
+/* { dg-options "-O2 -ftree-tail-merge -fdump-tree-pre" } */
15987
+/* Type that matches the 'p' constraint. */
15988
+#define TYPE void *
15991
+void bar (TYPE *r)
15994
+ __asm__ ("" : "=&p" (t), "=p" (*r));
15998
+foo (int n, TYPE *x, TYPE *y)
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 @@
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)
16037
+/* { dg-do run } */
16039
+extern void abort (void) __attribute__((noreturn));
16049
+ asm ("": "=r" (c):"0" (c));
16051
+ asm ("": "=r" (c):"0" (c));
16058
+ asm ("": "=r" (c):"0" (c));
16060
+ asm ("": "=r" (c):"0" (c));
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)
16073
+/* { dg-do run } */
16075
+extern void abort (void) __attribute__((noreturn));
16085
+ asm ("": "=r" (c):"0" (c));
16087
+ asm ("": "=r" (c):"0" (c));
16094
+ asm ("": "=r" (c):"0" (c));
16096
+ asm ("": "=r" (c):"0" (c));
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)
16109
+/* { dg-do run } */
16111
+extern void abort (void);
16120
+int b, c, *d, e, f;
16125
+ for (; b < 1; ++b)
16127
+ for (e = 0; e < 1; e = 1)
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)
16153
+/* { dg-do run } */
16155
+extern void abort (void);
16160
+} a = {1}, b, g, *c = &b, **f = &c;
16162
+int *d, **e = &d, h;
16169
+ __builtin_unreachable ();
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)
16188
+/* { dg-do run } */
16190
+/* Large so an out-of-bound read will crash. */
16191
+unsigned char c[0x30001] = { 1 };
16195
+foo (unsigned long *x, unsigned char *y)
16198
+ unsigned long w = x[0];
16199
+ for (i = 0; i < j; i++)
16209
+__attribute__ ((noinline, noclone)) void
16210
+bar (unsigned long *x)
16218
+ unsigned long a[2] = { 0, -1UL };
16219
+ asm volatile (""::"r" (c):"memory");
16223
+ __builtin_abort ();
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)
16231
+/* { dg-do compile } */
16233
+int x[1024], y[1024], z[1024], w[1024];
16237
+ for (i = 1; i < 1024; ++i)
16244
+ z[i] = (a + b) + (c + d);
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)
16259
+ return (0 ? a : 0) ? : 0 % 0; /* { dg-warning "division by zero" } */
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)
16266
+/* { dg-do compile } */
16280
+ for (a=1; a <= 4; a++)
16282
+ f = fn1(0 < c[a][0]);
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)
16292
+/* { dg-do run } */
16299
+ short d = (c <= 0) ^ e;
16300
+ if ((unsigned int) a - (a || d) <= (unsigned int) a)
16301
+ __builtin_abort ();
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)
16309
+/* { dg-do compile } */
16311
+int a, b, c, d, e;
16312
+int fn1(p1, p2) { return p2 == 0 ? p1 : 1 % p2; }
16317
+ for (;; c = (unsigned short)c)
16322
+ e = fn1(2, c && 1);
16323
+ d = c == 0 ? e : c;
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)
16334
+/* { dg-options "-mlong-calls" { target mips*-*-* } } */
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;
16344
+struct dmx_ts_feed {
16345
+ int is_filtering;
16347
+struct dmx_section_feed {
16353
+typedef int (*dmx_ts_cb) (
16354
+ const u8 * buffer1,
16355
+ size_t buffer1_length,
16356
+ const u8 * buffer2,
16357
+ size_t buffer2_length
16360
+struct dvb_demux_feed {
16362
+ struct dmx_ts_feed ts;
16363
+ struct dmx_section_feed sec;
16371
+ struct list_head list_head;
16374
+struct dvb_demux {
16375
+ int (*stop_feed)(struct dvb_demux_feed *feed);
16376
+ struct list_head feed_list;
16382
+__attribute__((always_inline))
16384
+payload(const u8 *tsp)
16386
+ if (tsp[3] & 0x20) {
16387
+ return 184 - 1 - tsp[4];
16394
+__attribute__((always_inline))
16396
+dvb_dmx_swfilter_payload(struct dvb_demux_feed *feed, const u8 *buf)
16398
+ int count = payload(buf);
16402
+ return feed->cb.ts(&buf[p], count, ((void *)0), 0);
16407
+__attribute__((always_inline))
16409
+dvb_dmx_swfilter_packet_type(struct dvb_demux_feed *feed, const u8 *buf)
16411
+ switch (feed->type) {
16413
+ if (feed->ts_type & 1) {
16414
+ dvb_dmx_swfilter_payload(feed, buf);
16416
+ if (dvb_dmx_swfilter_section_packet(feed, buf) < 0)
16417
+ feed->feed.sec.seclen = feed->feed.sec.secbufp = 0;
16423
+dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf)
16425
+ struct dvb_demux_feed *feed;
16426
+ int dvr_done = 0;
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);
16435
+void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, size_t count)
16437
+ while (count--) {
16438
+ dvb_dmx_swfilter_packet(demux, buf);
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)
16446
+/* { dg-do run } */
16447
+/* { dg-additional-options "-ftree-pre -ftree-partial-pre" } */
16449
+extern void abort (void);
16451
+int b, c, d, f, g, h, i, j[6], *l = &b, *m, n, *o, r;
16463
+ h = c || (r = 0);
16465
+ for (f = 0; f < 2; f++)
16473
+ for (q = -8; q >= 5; q++)
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)
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)
16493
+/* { dg-do run } */
16495
+extern void abort (void);
16506
+ c = a == 0 ? 1 : 1 % a;
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)
16519
+/* { dg-do run } */
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)
16538
+/* { dg-do compile } */
16540
+int a, b, c, d, e, f, g, h, i[3], l, m, n, o, p, q, r;
16553
+ return p1 || ((p1 > 0) > (e << 1));
16557
+fn2 (struct S0 p1)
16560
+ struct S0 t = {0,0,0,0};
16566
+ for (m = 0; m < 4; m++)
16567
+ for (p1.f0 = 0; p1.f0 < 3; p1.f0++)
16571
+ o = b || 1 >> b ? 0 : a < 0;
16573
+ if ((g < fn1 ((1 ^ (q & 1)) | n)) ^ u)
16575
+ s = j.f3 > 0 ? j.f3 : j.f3 << 1;
16576
+ r = l = s && p1.f1 * c;
16588
+ struct S0 v = {0,0,0,0};
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)
16599
+/* { dg-do run } */
16600
+/* { dg-additional-options "-fstrict-overflow" } */
16602
+extern void abort (void);
16604
+int a, b, c, d, e, f, g, h = 1, i;
16608
+ return p < 0 && a < - __INT_MAX__ - 1 - p ? 0 : 1;
16614
+ i = h ? 0 : 1 % h;
16615
+ for (j = 0; j < 1; j++)
16616
+ for (d = 0; d; d++)
16624
+ for (; b >= 0; b--)
16625
+ for (c = 1; c >= 0; c--)
16630
+ for (f = 0; f < 1; f++)
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)
16655
+/* { dg-do run } */
16656
+/* { dg-additional-options "-fstrict-overflow" } */
16658
+int a, b, d, e, f, *g, h, i;
16661
+char foo (unsigned char p)
16668
+ for (h = 0; h < 3; h = foo (h))
16671
+ for (f = 0; f < 1; f++)
16673
+ i = a && 0 < -__INT_MAX__ - h ? 0 : 1;
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)
16694
+/* { dg-do run } */
16696
+extern void abort (void);
16700
+ unsigned char data[1000];
16708
+int condition = 3;
16713
+ SData *pData = (SData*)(msg.data);
16714
+ unsigned int i = 0;
16715
+ for (i = 0; i < 1; i++)
16718
+ if(condition & 1)
16719
+ pData->d[i] |= 0x55;
16720
+ if(condition & 2)
16721
+ pData->d[i] |= 0xaa;
16723
+ if (pData->d[0] != 0xff)
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)
16732
+/* { dg-do run } */
16734
+extern void abort (void);
16736
+int i, j, *pj = &j, **ppj = &pj;
16739
+short s, *ps = &s, k;
16741
+unsigned short u, *pu = &u, **ppu = &pu;
16745
+unsigned char v = 48;
16758
+void __attribute__((noinline))
16761
+ for (; i <= 3; i++)
16766
+ for (k = 1; k >= 0; k--)
16770
+ for (l = 1; l < 5; l++)
16773
+ for (m = 6; m; m--)
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)
16795
+/* { dg-do run } */
16797
+extern void abort (void) __attribute__((noreturn));
16799
+struct S { int f0; } a;
16801
+int b, e, *d = &b, f;
16807
+ int ***h = &g[6][3];
16808
+ for (; e < 9; e++) {
16810
+ for (; f < 6; f++)
16820
+ struct S c[4][10] = {};
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)
16837
+/* { dg-do run } */
16838
+/* { dg-additional-options "-fstrict-overflow" } */
16840
+int a, b, c, d, e;
16845
+ for (b = 4; b > -30; b--)
16849
+ e = a > __INT_MAX__ - b;
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)
16860
+/* { dg-do compile } */
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);
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)
16874
+/* { dg-do run } */
16876
+extern void abort (void) __attribute__((noreturn));
16889
+ union setconflict a;
16892
+ asm ("": "=r" (c):"0" (c));
16894
+ asm ("": "=r" (c):"0" (c));
16898
+ union setconflict a;
16901
+ asm ("": "=r" (c):"0" (c));
16903
+ asm ("": "=r" (c):"0" (c));
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)
16916
+/* { dg-do run } */
16918
+void free(void *ptr)
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)
16938
+/* { dg-do run } */
16939
+/* { dg-options "-O3" } */
16941
+int a, c, e[5][2];
16947
+ for (d = 0; d < 2; d++)
16948
+ if (a ? 0 : e[c + 3][d] & e[c + 4][d])
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)
16957
+/* { dg-do run } */
16958
+/* { dg-options "-O3 -fdump-tree-pcom-details" } */
16960
+int b, f, d[5][2];
16966
+ for (c = 0; c < 2; c++)
16967
+ if (d[b + 3][c] & d[b + 4][c])
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 @@
16983
-/* For targets providing a movstr pattern strcat is already decomposed
16984
- into strlen + strcpy by fold_builtin_strcat. */
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)
17004
+/* PR preprocessor/56824 */
17005
+/* { dg-do compile } */
17006
+/* { dg-options "-Waggregate-return" } */
17008
+struct S { int i; };
17009
+struct S foo (void);
17011
+#pragma GCC diagnostic push
17012
+#pragma GCC diagnostic ignored "-Waggregate-return"
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)
17027
+/* { dg-do compile } */
17028
+/* { dg-options "-O2 -fno-inline -fipa-cp-clone" } */
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);
17048
+void fn3(unsigned p1) { fn2(0, 0, p1); }
17050
+list_heads *fn1(string p1, int *p2, unsigned p3) {
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)
17070
+/* { dg-do compile } */
17071
+/* { dg-options "-O2" } */
17073
+struct A { int a; };
17076
+__attribute__((optimize (0))) void
17077
+foo (void *p, struct A x)
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)
17086
+/* { dg-do run } */
17087
+/* { dg-options "-O2" } */
17089
+extern void abort (void);
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)
17120
#include "strlenopt-1.c"
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)
17142
+#include "tree-vect.h"
17144
+int a, b, c, e, f;
17149
+ for (b = 0; b < 3; b++)
17152
+ for (c = 0; c < 4; c++)
17157
+ for (a = 0; a < 2; a++)
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)
17179
+/* { dg-do run } */
17181
+extern void abort (void);
17184
+foo (int *out, const int *lp, unsigned samples)
17187
+ for (x = 0, target = 0; x < (int)samples; x += 2, target++)
17189
+ out[x] = lp[target];
17190
+ out[x - 1] = out[x - 2] + out[x];
17195
+foo_novec (int *out, const int *lp, unsigned samples)
17198
+ for (x = 0, target = 0; x < (int)samples; x += 2, target++)
17200
+ out[x] = lp[target];
17201
+ out[x - 1] = out[x - 2] + out[x];
17202
+ __asm__ volatile ("" : : : "memory");
17208
+ const int lp[25] = {
17216
+ int out[49] = {0};
17217
+ int out2[49] = {0};
17220
+ foo (out + 2, lp + 1, 48);
17221
+ foo_novec (out2 + 2, lp + 1, 48);
17223
+ for (s = 0; s < 49; s++)
17224
+ if (out[s] != out2[s])
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)
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)
17245
+2014-03-31 H.J. Lu <hongjiu.lu@intel.com>
17247
+ Backport from mainline
17248
+ 2014-03-31 H.J. Lu <hongjiu.lu@intel.com>
17250
+ PR rtl-optimization/60700
17251
+ * gcc.target/i386/pr60700.c: New test.
17253
+2014-03-28 H.J. Lu <hongjiu.lu@intel.com>
17255
+ PR rtl-optimization/60700
17256
+ Backport from mainline
17257
+ 2013-07-30 Zhenqiang Chen <zhenqiang.chen@linaro.org>
17259
+ * gcc.target/arm/pr57637.c: New testcase.
17261
+2014-04-28 Thomas Koenig <tkoenig@gcc.gnu.org>
17264
+ * gfortran.dg/where_4.f90: New test case.
17266
+2014-03-26 Martin Jambor <mjambor@suse.cz>
17269
+ * g++.dg/ipa/pr60419.C: New test.
17271
+2014-03-26 Eric Botcazou <ebotcazou@adacore.com>
17273
+ * gcc.c-torture/execute/20140326-1.c: New test.
17275
+2014-03-20 Tobias Burnus <burnus@net-b.de>
17279
+ * gfortran.dg/implicit_pure_4.f90: New.
17281
+2014-03-17 Mikael Pettersson <mikpelinux@gmail.com>
17282
+ Committed by Bill Schmidt <wschmidt@linux.vnet.ibm.com>
17284
+ Backport from mainline:
17286
+ 2013-06-16 Joern Rennecke <joern.rennecke@embecosm.com>
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.
17293
+2014-03-17 Richard Biener <rguenther@suse.de>
17295
+ Backport from mainline
17296
+ 2014-03-11 Richard Biener <rguenther@suse.de>
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.
17303
+2014-03-15 Dominique d'Humieres <dominiq@lps.ens.fr>
17305
+ Backport from mainline
17306
+ PR libfortran/60128
17307
+ * gfortran.dg/fmt_en.f90: New test.
17309
+2014-03-15 Jerry DeLisle <jvdelisle@gcc.gnu>
17311
+ Backport from mainline
17312
+ PR libfortran/58324
17313
+ * gfortran.dg/list_read_12.f90: New test.
17315
+2014-03-13 Joey Ye <joey.ye@arm.com>
17317
+ Backport from mainline
17318
+ 2014-03-12 Thomas Preud'homme <thomas.preudhomme@arm.com>
17320
+ PR tree-optimization/60454
17321
+ * gcc.c-torture/execute/pr60454.c: New test.
17323
+2014-03-08 Janus Weil <janus@gcc.gnu.org>
17326
+ * gfortran.dg/shape_8.f90: New.
17328
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
17330
+ Backport from mainline
17331
+ 2014-02-19 Jakub Jelinek <jakub@redhat.com>
17334
+ * g++.dg/ext/builtin-bswap1.C: New test.
17335
+ * c-c++-common/pr37743.c: New test.
17337
+ PR preprocessor/58844
17338
+ * c-c++-common/cpp/pr58844-1.c: New test.
17339
+ * c-c++-common/cpp/pr58844-2.c: New test.
17341
+ 2014-02-13 Jakub Jelinek <jakub@redhat.com>
17344
+ * gcc.target/i386/pr43546.c: New test.
17346
+ 2014-02-12 Jakub Jelinek <jakub@redhat.com>
17349
+ * c-c++-common/pr60101.c: New test.
17351
+ 2014-02-11 Jakub Jelinek <jakub@redhat.com>
17354
+ * gfortran.dg/pr52370.f90: New test.
17357
+ * gcc.dg/guality/pr59776.c: New test.
17359
+ 2014-02-07 Jakub Jelinek <jakub@redhat.com>
17361
+ PR preprocessor/56824
17362
+ * gcc.dg/pr56824.c: New test.
17364
+ 2014-02-06 Jakub Jelinek <jakub@redhat.com>
17367
+ * gcc.c-torture/execute/pr60062.c: New test.
17368
+ * gcc.c-torture/execute/pr60072.c: New test.
17370
+ 2014-02-04 Jakub Jelinek <jakub@redhat.com>
17373
+ * c-c++-common/torture/pr60026.c: New test.
17375
+ 2014-02-05 Jakub Jelinek <jakub@redhat.com>
17377
+ PR middle-end/57499
17378
+ * g++.dg/torture/pr57499.C: New test.
17380
+ 2014-03-03 Jakub Jelinek <jakub@redhat.com>
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.
17387
+2014-03-04 Richard Biener <rguenther@suse.de>
17389
+ PR tree-optimization/60382
17390
+ * gcc.dg/vect/pr60382.c: New testcase.
17392
+2014-03-02 Mikael Morin <mikael@gcc.gnu.org>
17395
+ * gfortran.dg/str_comp_optimize_1.f90: New test.
17397
+2014-02-25 Richard Biener <rguenther@suse.de>
17399
+ Backport from mainline
17400
+ 2014-02-21 Richard Biener <rguenther@suse.de>
17402
+ PR tree-optimization/60276
17403
+ * gcc.dg/vect/pr60276.c: New testcase.
17405
+2014-02-25 Richard Biener <rguenther@suse.de>
17407
+ Backport from mainline
17408
+ 2014-02-14 Richard Biener <rguenther@suse.de>
17410
+ PR tree-optimization/60183
17411
+ * gcc.dg/torture/pr60183.c: New testcase.
17413
+2014-02-24 Fabien Chêne <fabien@gcc.gnu.org>
17416
+ * g++.dg/template/using27.C: New.
17417
+ * g++.dg/template/using28.C: New.
17418
+ * g++.dg/template/using29.C: New.
17420
+2014-02-23 David Holsgrove <david.holsgrove@xilinx.com>
17422
+ * gcc/testsuite/gcc.target/microblaze/others/mem_reload.c: New test.
17424
+2014-02-22 Mikael Morin <mikael@gcc.gnu.org>
17427
+ * gfortran.dg/ichar_3.f90: New test.
17429
+2014-02-21 Steven G. Kargl <kargl@gcc.gnu.org>
17431
+ Backport from mainline
17433
+ * gfortran.dg/pr59700.f90: New test.
17435
+2014-02-21 Martin Jambor <mjambor@suse.cz>
17438
+ * gcc.dg/ipa/pr55260.c: New test.
17440
+2014-02-19 Tobias Burnus <burnus@net-b.de>
17443
+ * gfortran.dg/proc_ptr_45.f90: New.
17444
+ * gfortran.dg/proc_ptr_46.f90: New.
17446
+2014-02-19 Uros Bizjak <ubizjak@gmail.com>
17448
+ Backport from mainline
17449
+ 2014-02-19 Uros Bizjak <ubizjak@gmail.com>
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.
17457
+2014-02-19 Janus Weil <janus@gcc.gnu.org>
17459
+ Backports from mainline:
17460
+ 2014-02-17 Janus Weil <janus@gcc.gnu.org>
17463
+ * gfortran.dg/init_flag_12.f90: New.
17465
+ 2014-02-18 Janus Weil <janus@gcc.gnu.org>
17468
+ * gfortran.dg/typebound_generic_15.f90: New.
17470
+2014-02-18 Kai Tietz <ktietz@redhat.com>
17473
+ * gcc.target/i386/nest-1.c: New testcase.
17475
+2014-02-18 Eric Botcazou <ebotcazou@adacore.com>
17477
+ * gnat.dg/opt32.adb: New test.
17479
+2014-02-15 Jerry DeLisle <jvdelisle@gcc.gnu>
17480
+ Dominique d'Humieres <dominiq@lps.ens.fr>
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.
17489
+2014-02-13 Dominik Vogt <vogt@linux.vnet.ibm.com>
17491
+ * gcc.target/s390/hotpatch-compile-8.c: New test.
17493
+2014-02-12 Eric Botcazou <ebotcazou@adacore.com>
17495
+ * gcc.c-torture/execute/20140212-1.c: New test.
17497
+2014-02-10 Richard Biener <rguenther@suse.de>
17499
+ Backport from mainline
17500
+ 2014-01-30 Richard Biener <rguenther@suse.de>
17502
+ PR tree-optimization/59903
17503
+ * gcc.dg/torture/pr59903.c: New testcase.
17505
+ 2014-02-10 Richard Biener <rguenther@suse.de>
17507
+ PR tree-optimization/60115
17508
+ * gcc.dg/torture/pr60115.c: New testcase.
17510
+2014-02-09 Janus Weil <janus@gcc.gnu.org>
17512
+ Backport from mainline
17513
+ 2013-10-21 Tobias Burnus <burnus@net-b.de>
17517
+ * gfortran.dg/proc_ptr_comp_38.f90: New.
17519
+2014-02-08 Mikael Morin <mikael@gcc.gnu.org>
17522
+ * gfortran.dg/default_initialization_7.f90: New test.
17524
+2014-02-07 Paul Thomas <pault@gcc.gnu.org>
17527
+ * gfortran.dg/elemental_subroutine_9.f90 : New test
17529
+2014-02-04 Uros Bizjak <ubizjak@gmail.com>
17531
+ Backport from mainline
17532
+ 2014-02-02 Uros Bizjak <ubizjak@gmail.com>
17535
+ * gcc.c-torture/execute/pr60017.c: New test.
17537
+2014-02-01 Paul Thomas <pault@gcc.gnu.org>
17540
+ * gfortran.dg/allocate_class_3.f90 : New test
17542
+2014-01-30 David Holsgrove <david.holsgrove@xilinx.com>
17544
+ Backport from mainline.
17545
+ * gcc.target/microblaze/isa/fcmp4.c: New.
17547
+2014-01-26 Mikael Morin <mikael@gcc.gnu.org>
17550
+ * gfortran.dg/unresolved_fixup_1.f90: New test.
17551
+ * gfortran.dg/unresolved_fixup_2.f90: New test.
17553
+2014-01-24 H.J. Lu <hongjiu.lu@intel.com>
17555
+ Backport from mainline.
17556
+ 2014-01-23 H.J. Lu <hongjiu.lu@intel.com>
17559
+ * gcc.target/i386/pr59929.c: New test.
17561
+2014-01-24 Paolo Carlini <paolo.carlini@oracle.com>
17564
+ * g++.dg/ext/timevar2.C: New.
17566
+2014-01-23 David Holsgrove <david.holsgrove@xilinx.com>
17568
+ Backport from mainline.
17569
+ * gcc.target/microblaze/others/builtin-trap.c: New test.
17571
+2014-01-23 Marek Polacek <polacek@redhat.com>
17573
+ Backport from mainline
17574
+ 2013-10-21 Marek Polacek <polacek@redhat.com>
17576
+ PR middle-end/58809
17577
+ * gcc.dg/gomp/pr58809.c: New test.
17579
+2014-01-23 Jakub Jelinek <jakub@redhat.com>
17581
+ PR middle-end/58809
17582
+ * c-c++-common/gomp/pr58809.c: New test.
17584
+2014-01-22 Marek Polacek <polacek@redhat.com>
17586
+ Backport from mainline
17587
+ 2014-01-22 Marek Polacek <polacek@redhat.com>
17590
+ * gcc.dg/torture/pr59891.c: New test.
17592
+2014-01-21 Jakub Jelinek <jakub@redhat.com>
17594
+ PR middle-end/59860
17595
+ * gcc.dg/strlenopt-4.c: Expect the same counts on s390*-* as on all
17598
+2014-01-20 Richard Biener <rguenther@suse.de>
17600
+ PR middle-end/59860
17601
+ * gcc.dg/pr59860.c: New testcase.
17603
+2014-01-20 Marek Polacek <polacek@redhat.com>
17605
+ Backported from mainline
17606
+ 2014-01-17 Marek Polacek <polacek@redhat.com>
17609
+ * g++.dg/diagnostic/pr59838.C: New test.
17611
+2014-01-19 Paul Thomas <pault@gcc.gnu.org>
17613
+ Backport from mainline
17614
+ 2013-12-01 Paul Thomas <pault@gcc.gnu.org>
17617
+ * gfortran.dg/null_5.f90 : Include new error.
17618
+ * gfortran.dg/null_6.f90 : Include new error.
17620
+2014-01-17 H.J. Lu <hongjiu.lu@intel.com>
17622
+ Backport from mainline
17623
+ 2014-01-15 H.J. Lu <hongjiu.lu@intel.com>
17626
+ * c-c++-common/convert-vec-1.c: Also prune ABI change for
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.
17641
+2014-01-17 H.J. Lu <hongjiu.lu@intel.com>
17643
+ Backport from mainline
17644
+ 2014-01-14 H.J. Lu <hongjiu.lu@intel.com>
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.
17657
+2014-01-17 Matthias Klose <doko@ubuntu.com>
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.
17664
+2014-01-15 Kugan Vivekanandarajah <kuganv@linaro.org>
17666
+ Backport from mainline
17667
+ 2014-01-15 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
17668
+ Kugan Vivekanandarajah <kuganv@linaro.org>
17671
+ * g++.dg/pr59695.C: New testcase.
17673
+2014-01-17 Terry Guo <terry.guo@arm.com>
17675
+ * gcc.target/arm/pr59826.c: New test.
17677
+2014-01-16 Jakub Jelinek <jakub@redhat.com>
17680
+ * gcc.target/i386/pr59839.c: New test.
17683
+ * gcc.target/i386/pr9771-1.c (main): Rename to...
17684
+ (real_main): ... this. Add __asm name "main".
17685
+ (ASMNAME, ASMNAME2, STRING): Define.
17687
+2014-01-16 Marek Polacek <polacek@redhat.com>
17689
+ Backported from mainline
17690
+ 2014-01-16 Marek Polacek <polacek@redhat.com>
17692
+ PR middle-end/59827
17693
+ * gcc.dg/pr59827.c: New test.
17695
+2014-01-15 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
17698
+ * gcc.c-torture/compile/pr59803.c: New testcase.
17700
+2014-01-10 Yufeng Zhang <yufeng.zhang@arm.com>
17702
+ * gcc.target/arm/neon/vst1Q_laneu64-1.c: New test.
17704
+2014-01-10 Hans-Peter Nilsson <hp@axis.com>
17706
+ * gcc.dg/pr46309.c: Disable for cris*-*-*.
17708
+2014-01-10 Paolo Carlini <paolo.carlini@oracle.com>
17712
+ * g++.dg/cpp0x/variadic144.C: New.
17713
+ * g++.dg/cpp0x/variadic145.C: Likewise.
17715
+2014-01-10 Richard Biener <rguenther@suse.de>
17717
+ PR tree-optimization/59715
17718
+ * gcc.dg/torture/pr59715.c: New testcase.
17720
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
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.
17726
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
17728
+ PR rtl-optimization/59137
17729
+ * gcc.target/mips/pr59137.c: New test.
17731
+2014-01-09 Richard Biener <rguenther@suse.de>
17733
+ Backport from mainline
17734
+ 2013-11-18 Richard Biener <rguenther@suse.de>
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.
17744
+ 2013-12-03 Jakub Jelinek <jakub@redhat.com>
17746
+ PR tree-optimization/59362
17747
+ * gcc.c-torture/compile/pr59362.c: New test.
17749
+2014-01-09 Richard Earnshaw <rearnsha@arm.com>
17751
+ PR rtl-optimization/54300
17752
+ * gcc.target/arm/pr54300.C: New test.
17754
+2014-01-08 Martin Jambor <mjambor@suse.cz>
17757
+ * gcc.dg/ipa/pr59610.c: New test.
17759
+2014-01-07 Jakub Jelinek <jakub@redhat.com>
17761
+ PR rtl-optimization/58668
17762
+ * gcc.dg/pr58668.c: New test.
17764
+ Backported from mainline
17765
+ 2013-12-16 Jakub Jelinek <jakub@redhat.com>
17767
+ PR middle-end/58956
17768
+ PR middle-end/59470
17769
+ * gcc.target/i386/pr59470.c: New test.
17771
+2014-01-04 Janus Weil <janus@gcc.gnu.org>
17773
+ Backport from mainline
17774
+ 2014-01-02 Janus Weil <janus@gcc.gnu.org>
17777
+ * gfortran.dg/dynamic_dispatch_12.f90: New.
17779
+2014-01-03 Joseph Myers <joseph@codesourcery.com>
17781
+ * gcc.target/powerpc/rs6000-ldouble-3.c: New test.
17783
+2014-01-03 Jakub Jelinek <jakub@redhat.com>
17786
+ * gcc.target/i386/pr59625.c: New test.
17788
+2014-01-01 Jakub Jelinek <jakub@redhat.com>
17790
+ PR rtl-optimization/59647
17791
+ * g++.dg/opt/pr59647.C: New test.
17793
+2013-12-31 Janus Weil <janus@gcc.gnu.org>
17795
+ Backport from mainline
17796
+ 2013-12-30 Janus Weil <janus@gcc.gnu.org>
17799
+ * gfortran.dg/generic_28.f90: New.
17801
+2013-12-20 Jakub Jelinek <jakub@redhat.com>
17804
+ * g++.dg/tree-prof/pr59255.C: New test.
17806
+2013-12-19 James Greenhalgh <james.greenhalgh@arm.com>
17808
+ Backport from Mainline
17809
+ 2013-05-01 James Greenhalgh <james.greenhalgh@arm.com>
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.
17827
+2013-12-19 Dominik Vogt <vogt@linux.vnet.ibm.com>
17828
+ Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
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
17852
+2013-12-18 Janus Weil <janus@gcc.gnu.org>
17854
+ Backport from mainline
17855
+ 2013-12-15 Janus Weil <janus@gcc.gnu.org>
17858
+ * gfortran.dg/unlimited_polymorphic_15.f90: New.
17860
+2013-12-15 Uros Bizjak <ubizjak@gmail.com>
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.
17889
+2013-12-12 Jakub Jelinek <jakub@redhat.com>
17891
+ PR middle-end/59470
17892
+ * g++.dg/opt/pr59470.C: New test.
17895
+ * gfortran.dg/gomp/pr59467.f90: New test.
17896
+ * c-c++-common/gomp/pr59467.c: New test.
17898
+2013-12-12 Uros Bizjak <ubizjak@gmail.com>
17900
+ Backport from mainline
17901
+ 2013-12-12 Ryan Mansfield <rmansfield@qnx.com>
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.
17909
+2013-12-08 Uros Bizjak <ubizjak@gmail.com>
17911
+ Backport from mainline
17912
+ 2013-12-06 Uros Bizjak <ubizjak@gmail.com>
17915
+ * gcc.target/i386/pr59405.c: New test.
17917
+2013-12-06 Jakub Jelinek <jakub@redhat.com>
17919
+ PR tree-optimization/59388
17920
+ * gcc.c-torture/execute/pr59388.c: New test.
17922
+2013-12-06 Richard Biener <rguenther@suse.de>
17924
+ Backport from mainline
17925
+ 2013-11-28 Richard Biener <rguenther@suse.de>
17927
+ PR tree-optimization/59330
17928
+ * gcc.dg/torture/pr59330.c: New testcase.
17930
+2013-12-06 Richard Biener <rguenther@suse.de>
17932
+ Backport from mainline
17933
+ 2013-11-27 Richard Biener <rguenther@suse.de>
17935
+ PR tree-optimization/59288
17936
+ * gcc.dg/torture/pr59288.c: New testcase.
17938
+ 2013-11-19 Richard Biener <rguenther@suse.de>
17940
+ PR tree-optimization/59164
17941
+ * gcc.dg/torture/pr59164.c: New testcase.
17943
+ 2013-09-05 Richard Biener <rguenther@suse.de>
17945
+ PR tree-optimization/58137
17946
+ * gcc.target/i386/pr58137.c: New testcase.
17948
+2013-12-06 Oleg Endo <olegendo@gcc.gnu.org>
17952
+ * gcc.target/sh/pr51244-19.c: Adjust test case.
17954
+2013-12-05 Richard Biener <rguenther@suse.de>
17956
+ Backport from mainline
17957
+ 2013-11-19 Richard Biener <rguenther@suse.de>
17959
+ PR middle-end/58956
17960
+ * gcc.dg/torture/pr58956.c: New testcase.
17962
+2013-12-04 Jakub Jelinek <jakub@redhat.com>
17965
+ * g++.dg/cpp0x/constexpr-template6.C: New test.
17967
+ PR rtl-optimization/58726
17968
+ * gcc.c-torture/execute/pr58726.c: New test.
17971
+ * g++.dg/torture/pr59163.C: New test.
17973
+2013-12-03 Marek Polacek <polacek@redhat.com>
17975
+ Backport from mainline
17976
+ 2013-12-03 Marek Polacek <polacek@redhat.com>
17979
+ * gcc.dg/pr59351.c: New test.
17981
+2013-12-03 Jakub Jelinek <jakub@redhat.com>
17983
+ PR middle-end/59011
17984
+ * gcc.dg/pr59011.c: New test.
17987
+ * g++.dg/opt/pr58864.C: New test.
17989
+2013-12-02 Jakub Jelinek <jakub@redhat.com>
17991
+ PR tree-optimization/59358
17992
+ * gcc.c-torture/execute/pr59358.c: New test.
17994
+2013-12-02 Richard Biener <rguenther@suse.de>
17996
+ PR tree-optimization/59139
17997
+ * gcc.dg/torture/pr59139.c: New testcase.
17999
+2013-11-27 Tom de Vries <tom@codesourcery.com>
18000
+ Marc Glisse <marc.glisse@inria.fr>
18003
+ * c-c++-common/pr59032.c: New testcase.
18005
+2013-11-27 Tom de Vries <tom@codesourcery.com>
18006
+ Marc Glisse <marc.glisse@inria.fr>
18008
+ PR middle-end/59037
18009
+ * c-c++-common/pr59037.c: New testcase.
18011
+2013-11-30 Paul Thomas <pault@gcc.gnu.org>
18013
+ Backport from mainline
18014
+ 2013-11-04 Paul Thomas <pault@gcc.gnu.org>
18017
+ * gfortran.dg/optional_class_1.f90 : New test
18019
+2013-11-29 Jakub Jelinek <jakub@redhat.com>
18022
+ * c-c++-common/pr59280.c: New test.
18024
+2013-11-28 Jakub Jelinek <jakub@redhat.com>
18027
+ * g++.dg/gomp/pr59297.C: New test.
18029
+2013-11-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
18031
+ Backport from mainline
18032
+ 2013-11-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
18034
+ * gcc.target/arm/vrinta-ce.c: New testcase.
18036
+2013-11-28 Uros Bizjak <ubizjak@gmail.com>
18038
+ Backport from mainline
18039
+ 2013-11-23 Uros Bizjak <ubizjak@gmail.com>
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
18052
+2013-11-28 Terry Guo <terry.guo@arm.com>
18054
+ Backport mainline r205391
18055
+ 2013-11-26 Terry Guo <terry.guo@arm.com>
18057
+ * gcc.target/arm/thumb1-pic-high-reg.c: New case.
18058
+ * gcc.target/arm/thumb1-pic-single-base.c: New case.
18060
+2013-11-27 Jakub Jelinek <jakub@redhat.com>
18062
+ Backported from mainline
18063
+ 2013-11-27 Jakub Jelinek <jakub@redhat.com>
18065
+ PR tree-optimization/59014
18066
+ * gcc.c-torture/execute/pr59014-2.c: New test.
18068
+ 2013-11-26 Jakub Jelinek <jakub@redhat.com>
18070
+ PR tree-optimization/59014
18071
+ * gcc.c-torture/execute/pr59014.c: New test.
18073
+2013-11-27 Eric Botcazou <ebotcazou@adacore.com>
18075
+ * gcc.c-torture/execute/20131127-1.c: New test.
18077
+2013-11-25 Vidya Praveen <vidyapraveen@arm.com>
18079
+ Backport from mainline
18080
+ 2013-10-21 Vidya Praveen <vidyapraveen@arm.com>
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().
18085
+2013-11-20 Dominik Vogt <vogt@linux.vnet.ibm.com>
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
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.
18098
+2013-11-19 Richard Biener <rguenther@suse.de>
18100
+ PR tree-optimization/57517
18101
+ * gfortran.fortran-torture/compile/pr57517.f90: New testcase.
18102
+ * gcc.dg/torture/pr57517.c: Likewise.
18104
+2013-11-19 Richard Biener <rguenther@suse.de>
18106
+ Backport from mainline
18107
+ 2013-11-05 Richard Biener <rguenther@suse.de>
18109
+ PR middle-end/58941
18110
+ * gcc.dg/torture/pr58941.c: New testcase.
18112
+2013-11-18 Richard Biener <rguenther@suse.de>
18114
+ Backport from mainline
18115
+ 2013-10-21 Richard Biener <rguenther@suse.de>
18117
+ PR tree-optimization/58794
18118
+ * c-c++-common/torture/pr58794-1.c: New testcase.
18119
+ * c-c++-common/torture/pr58794-2.c: Likewise.
18121
+ 2013-10-21 Richard Biener <rguenther@suse.de>
18123
+ PR middle-end/58742
18124
+ * c-c++-common/fold-divmul-1.c: New testcase.
18126
+ 2013-11-06 Richard Biener <rguenther@suse.de>
18128
+ PR tree-optimization/58653
18129
+ * gcc.dg/tree-ssa/predcom-6.c: New testcase.
18130
+ * gcc.dg/tree-ssa/predcom-7.c: Likewise.
18132
+ PR tree-optimization/59047
18133
+ * gcc.dg/torture/pr59047.c: New testcase.
18135
+ 2013-10-15 Richard Biener <rguenther@suse.de>
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.
18142
+2013-11-17 Janus Weil <janus@gcc.gnu.org>
18144
+ Backport from mainline
18145
+ 2013-11-07 Janus Weil <janus@gcc.gnu.org>
18148
+ * gfortran.dg/constructor_9.f90: New.
18150
+2013-11-16 Janus Weil <janus@gcc.gnu.org>
18152
+ Backport from mainline
18153
+ 2013-09-20 Janus Weil <janus@gcc.gnu.org>
18156
+ * gfortran.dg/proc_ptr_43.f90: New.
18158
+2013-11-16 Paul Thomas <pault@gcc.gnu.org>
18161
+ * gfortran.dg/derived_external_function_1.f90 : New test
18163
+2013-11-14 Uros Bizjak <ubizjak@gmail.com>
18165
+ Backport from mainline
18166
+ 2013-11-06 Uros Bizjak <ubizjak@gmail.com>
18169
+ * gcc.target/i386/pr59021.c: New test.
18171
+2013-11-14 Jakub Jelinek <jakub@redhat.com>
18174
+ * gcc.c-torture/execute/pr59101.c: New test.
18176
+2013-11-11 Jakub Jelinek <jakub@redhat.com>
18178
+ Backported from mainline
18179
+ 2013-11-06 Jakub Jelinek <jakub@redhat.com>
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.
18185
+ 2013-11-05 Jakub Jelinek <jakub@redhat.com>
18187
+ PR rtl-optimization/58997
18188
+ * gcc.c-torture/compile/pr58997.c: New test.
18190
+2013-11-10 Wei Mi <wmi@google.com>
18192
+ * gcc.dg/pr57518.c: Backport regex fix from r200720.
18194
+2013-11-07 H.J. Lu <hongjiu.lu@intel.com>
18196
+ Backport from mainline
18197
+ 2013-11-07 H.J. Lu <hongjiu.lu@intel.com>
18200
+ * gcc.target/i386/pr59034-1.c: New test.
18201
+ * gcc.target/i386/pr59034-2.c: Likewise.
18203
+2013-11-06 Wei Mi <wmi@google.com>
18205
+ PR regression/58985
18206
+ * gcc.dg/pr57518.c: Add subreg in regexp pattern.
18208
+2013-11-05 Steven G. Kargl <kargl@gcc.gnu.org>
18211
+ * gfortran.dg/reshape_6.f90: New test.
18213
+2013-11-05 Jakub Jelinek <jakub@redhat.com>
18215
+ PR tree-optimization/58984
18216
+ * gcc.c-torture/execute/pr58984.c: New test.
18218
+2013-11-04 Marek Polacek <polacek@redhat.com>
18220
+ Backport from mainline
18221
+ 2013-11-04 Marek Polacek <polacek@redhat.com>
18224
+ * g++.dg/diagnostic/pr58979.C: New test.
18226
+2013-11-03 H.J. Lu <hongjiu.lu@intel.com>
18228
+ Backport from mainline
18229
+ 2013-10-12 H.J. Lu <hongjiu.lu@intel.com>
18232
+ * gcc.target/i386/pr58690.c: New test
18234
+2013-11-02 Janus Weil <janus@gcc.gnu.org>
18236
+ Backport from mainline
18237
+ 2013-09-23 Janus Weil <janus@gcc.gnu.org>
18240
+ * gfortran.dg/extends_15.f90: New.
18242
+2013-10-29 Uros Bizjak <ubizjak@gmail.com>
18244
+ Backport from mainline
18245
+ 2013-08-08 Richard Sandiford <rdsandiford@googlemail.com>
18247
+ PR rtl-optimization/58079
18248
+ * gcc.dg/torture/pr58079.c: New test.
18250
+2013-10-28 Tom de Vries <tom@codesourcery.com>
18252
+ * gcc.target/arm/require-pic-register-loc.c: New test.
18254
+2013-10-26 Uros Bizjak <ubizjak@gmail.com>
18256
+ Backport from mainline
18257
+ 2013-10-22 Uros Bizjak <ubizjak@gmail.com>
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.
18264
+2013-10-25 Richard Henderson <rth@redhat.com>
18267
+ * gcc.dg/atomic-store-6.c: New.
18269
+2013-10-25 Tom de Vries <tom@codesourcery.com>
18272
+ * g++.dg/tm/noexcept-6.C: New test.
18274
+2013-10-25 Eric Botcazou <ebotcazou@adacore.com>
18276
+ * gcc.c-torture/execute/pr58831.c: New test.
18278
+2013-10-23 Tom de Vries <tom@codesourcery.com>
18280
+ PR tree-optimization/58805
18281
+ * gcc.dg/pr58805.c: New test.
18283
+2013-10-23 Richard Biener <rguenther@suse.de>
18285
+ * gcc.dg/torture/pr58830.c: New testcase.
18287
+ Backport from mainline
18288
+ 2013-06-24 Richard Biener <rguenther@suse.de>
18290
+ PR tree-optimization/57488
18291
+ * gcc.dg/torture/pr57488.c: New testcase.
18293
+2013-10-19 Oleg Endo <olegendo@gcc.gnu.org>
18295
+ * gcc.target/sh/pr54089-3.c: Fix test for load of constant 31.
18297
+2013-10-17 Paolo Carlini <paolo.carlini@oracle.com>
18300
+ * g++.dg/cpp0x/lambda/lambda-nsdmi5.C: New
18302
+2013-10-16 Paolo Carlini <paolo.carlini@oracle.com>
18305
+ * g++.dg/cpp0x/decltype57.C: New.
18306
+ * g++.dg/cpp0x/enum18.C: Revert r174385 changes.
18308
2013-10-16 Release Manager
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>
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.
18322
2013-10-04 Tobias Burnus <burnus@net-b.de>
18324
@@ -307,8 +1370,8 @@
18325
Backport from mainline
18326
2013-08-12 Perez Read <netfirewall@gmail.com>
18329
- * gcc.target/i386/movabs-1.c: New test.
18331
+ * gcc.target/i386/movabs-1.c: New test.
18333
2013-08-11 Janus Weil <janus@gcc.gnu.org>
18335
@@ -494,7 +1557,7 @@
18336
2013-06-19 Wei Mi <wmi@google.com>
18338
PR rtl-optimization/57518
18339
- * testsuite/gcc.dg/pr57518.c: New test.
18340
+ * gcc.dg/pr57518.c: New test.
18342
2013-06-11 Tobias Burnus <burnus@net-b.de>
18344
@@ -623,8 +1686,8 @@
18346
2013-05-09 Martin Jambor <mjambor@suse.cz>
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.
18353
2013-05-08 Marc Glisse <marc.glisse@inria.fr>
18355
@@ -701,7 +1764,7 @@
18356
2013-04-25 Marek Polacek <polacek@redhat.com>
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.
18362
2013-05-02 Jakub Jelinek <jakub@redhat.com>
18364
@@ -727,8 +1790,8 @@
18365
Backport from mainline
18366
2013-04-24 Vladimir Makarov <vmakarov@redhat.com>
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.
18373
2013-05-02 Vladimir Makarov <vmakarov@redhat.com>
18375
@@ -735,8 +1798,8 @@
18376
Backport from mainline
18377
2013-04-22 Vladimir Makarov <vmakarov@redhat.com>
18380
- * gcc.target/i386/pr57018.c: New test.
18382
+ * gcc.target/i386/pr57018.c: New test.
18384
2013-05-02 Vladimir Makarov <vmakarov@redhat.com>
18386
@@ -743,8 +1806,8 @@
18387
Backport from mainline
18388
2013-04-18 Jakub Jelinek <jakub@redhat.com>
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.
18395
2013-05-02 Vladimir Makarov <vmakarov@redhat.com>
18397
@@ -751,8 +1814,8 @@
18398
Backport from mainline
18399
2013-04-19 Vladimir Makarov <vmakarov@redhat.com>
18401
- PR rtl-optimization/56847
18402
- * gcc.dg/pr56847.c: New test.
18403
+ PR rtl-optimization/56847
18404
+ * gcc.dg/pr56847.c: New test.
18406
2013-05-02 Ian Bolton <ian.bolton@arm.com>
18408
@@ -1102,7 +2165,7 @@
18409
2013-03-29 Tobias Burnus <burnus@net-b.de>
18412
- * testsuite/gfortran.dg/fmt_cache_3.f90: New.
18413
+ * gfortran.dg/fmt_cache_3.f90: New.
18415
2013-04-02 Richard Biener <rguenther@suse.de>
18417
@@ -1636,7 +2699,7 @@
18418
2013-02-20 Jan Hubicka <jh@suse.cz>
18420
PR tree-optimization/56265
18421
- * testsuite/g++.dg/ipa/devirt-11.C: New testcase.
18422
+ * g++.dg/ipa/devirt-11.C: New testcase.
18424
2013-02-20 Richard Biener <rguenther@suse.de>
18426
@@ -1823,11 +2886,9 @@
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:
18432
- * testsuite/c-c++-common/asan/no-redundant-instrumentation-3.c:
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.
18439
2013-02-12 Vladimir Makarov <vmakarov@redhat.com>
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)
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
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
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)
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)
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)
18484
+template<bool = __has_nothrow_assign(void)> struct 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)
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)
18501
+// { dg-options "" }
18505
+ int x[({ return; })]; // { dg-error "non-integral" }
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)
18512
+volatile int i __attribute__((vector_size(8)));
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)
18524
+// { dg-do compile }
18526
+#if defined(__UINT32_TYPE__) && defined(__INT32_TYPE__)
18528
+void foo (__UINT32_TYPE__);
18529
+void foo (__INT32_TYPE__);
18532
+bar (__UINT32_TYPE__ x)
18534
+ foo (__builtin_bswap32 (x));
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)
18552
+typedef unsigned L __attribute__ ((aligned));
18553
+typedef unsigned L __attribute__ ((aligned));
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)
18565
+ int v __attribute__((vector_size(8)));
18566
+ v = v || v; // { dg-bogus "" "" { xfail *-*-* } }
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)
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" }
18580
+namespace detail {
18581
+namespace indirect_traits {}
18582
+using namespace indirect_traits;
18584
+using namespace detail;
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)
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)
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 } } }
18630
+ unsigned b = x->f5 ();
18631
+ f1 (b - 1 - f3 (x->f5 () - 1U));
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)
18638
+// PR middle-end/59470
18640
+// { dg-options "-O2 -fstack-protector" }
18641
+// { dg-additional-options "-fPIC" { target fpic } }
18642
+// { dg-require-effective-target fstack_protector }
18647
+ A () throw () : a1 (0) {}
18652
+ unsigned int b1 () throw ();
18655
+__attribute__((noinline, noclone)) unsigned int
18658
+ asm volatile ("" : : : "memory");
18665
+ void c2 (const A *, unsigned int);
18668
+__attribute__((noinline, noclone)) void
18669
+C::c2 (const A *, unsigned int)
18671
+ asm volatile ("" : : : "memory");
18688
+ virtual int f1 (const char * s, int n);
18695
+ G & g3 (const char * ws, int len)
18697
+ if (__builtin_expect (!g2, true)
18698
+ && __builtin_expect (this->g1->f1 (ws, len) != len, false))
18704
+struct H : public A
18714
+ H () : h1 (0), h2 (0), h4 (0), h5 (0), h6 (0), h8 (false) {}
18715
+ void h9 (const D &) __attribute__((noinline, noclone));
18722
+ __builtin_memset (h7, 0, sizeof (h7));
18723
+ asm volatile ("" : : : "memory");
18731
+ const unsigned int i = b.b1 ();
18732
+ const A **j = x.d1->c1;
18746
+ return static_cast <const H *>(j[i]);
18749
+__attribute__((noinline, noclone)) int
18750
+bar (char *x, unsigned long v, const char *y, int z, bool w)
18752
+ asm volatile ("" : : "r" (x), "r" (v), "r" (y) : "memory");
18753
+ asm volatile ("" : : "r" (z), "r" (w) : "memory");
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)
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");
18764
+ __builtin_abort ();
18766
+ asm ("" : "+r" (i));
18768
+ __builtin_exit (0);
18771
+__attribute__((noinline, noclone)) G
18772
+test (void *z, G s, E &x, char, long v)
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);
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);
18791
+ if (__builtin_expect (e, true))
18794
+ else if ((f & 4096) && v)
18797
+ const bool m = f & 176;
18802
+ const int w = x.e1;
18805
+ char * c3 = static_cast <char *>(__builtin_alloca (w));
18808
+ return s.g3 (c, l);
18823
+ test (0, g, e, 0, 0);
18824
+ __builtin_abort ();
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)
18831
+// PR target/58864
18832
+// { dg-do compile }
18833
+// { dg-options "-Os" }
18834
+// { dg-additional-options "-march=i686" { target { { i?86-*-* x86_64-*-* } && ia32 } } }
18836
+struct A { A (); ~A (); };
18837
+struct B { B (); };
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)
18858
+// { dg-options "-O2 -std=c++11" }
18862
+ __attribute__((noinline, noclone)) ~S () noexcept (true)
18867
+ void (*fn) (int);
18870
+__attribute__((noinline, noclone)) void
18880
+ for (int i = 0; i < 100; i++)
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)
18892
+// { dg-do compile }
18893
+// { dg-options -fopenmp }
18895
+int foo() { return 0; }
18897
+template<typename T> void bar()
18899
+#pragma omp parallel for
18900
+ for (T i = foo(); i < 8; ++i) {}
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)
18913
+// { dg-do compile }
18914
+// { dg-options "-fopenmp" }
18916
+template <typename T>
18920
+ const T &operator[] (int) const;
18925
+ int &operator () (A <int>);
18929
+foo (B &x, int &z)
18932
+ #pragma omp atomic
18934
+ #pragma omp atomic
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)
18943
+// { dg-do compile }
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)
18952
+// { dg-do compile }
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)
18960
/* { dg-do compile } */
18961
+/* { dg-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
18963
/* Test overload resolution of vector types.
18964
From Janis Johnson and Paolo Bonzini, based on PR/16882 */
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);
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)
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 } } }
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)
18997
+// { dg-options "-std=c++11" }
18998
+// { dg-require-effective-target tls }
19003
+ i; // { dg-error "" }
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)
19012
+// { dg-do compile }
19013
+// { dg-options "-fgnu-tm" }
19017
+ __transaction_atomic {
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)
19027
+// { dg-do compile }
19028
+// { dg-options "-fno-exceptions -fgnu-tm -O -std=c++0x -fdump-tree-tmlower" }
19032
+ static constexpr bool v() { return true; }
19037
+template<typename T> int foo()
19039
+ return __transaction_atomic noexcept(T::v()) (global + 1);
19044
+ return foo<TrueFalse>();
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)
19056
+/* PR target/59695 */
19057
+/* { dg-do run } */
19058
+/* { dg-options "-O0" } */
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 () {}\
19084
+class base_class_2
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)
19111
+ virtual ~base_class_2 ();
19114
+base_class_2::base_class_2()
19118
+base_class_2::~base_class_2 ()
19122
+class base_class_1
19125
+ virtual ~base_class_1();
19129
+base_class_1::base_class_1()
19133
+base_class_1::~base_class_1()
19137
+class base_Impl_class :
19138
+ virtual public base_class_2, public base_class_1
19141
+ base_Impl_class ();
19142
+ virtual ~base_Impl_class ();
19145
+base_Impl_class::base_Impl_class ()
19149
+base_Impl_class::~base_Impl_class ()
19154
+class test_cls : public base_Impl_class
19158
+ virtual ~test_cls();
19161
+test_cls::test_cls()
19165
+test_cls::~test_cls()
19171
+ test_cls *test = new test_cls;
19172
+ base_class_2 *p1 = test;
19174
+ /* PR59695 destructor thunk offsets are not setup
19175
+ correctly resulting in crash. */
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)
19186
+// { dg-require-effective-target c++11 }
19188
+#include <initializer_list>
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)
19199
+// { dg-require-effective-target c++11 }
19201
+template<typename... T> struct A
19203
+ enum E : T {}; // { dg-error "parameter pack" }
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)
19213
+// { dg-do compile { target c++11 } }
19217
+ int i = [] { return decltype(i)(); }();
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)
19225
+// { dg-options "-std=c++11 -g -fabi-version=2" }
19227
+template<int...> struct A {};
19229
+template<> struct A<0>
19231
+ typedef enum { e } B;
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)
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" }
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)
19253
+// { dg-require-effective-target c++11 }
19255
+template<int> struct A
19260
+template<typename> struct B : A<0>, A<1>
19265
+struct C : B<bool>
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)
19275
+// { dg-require-effective-target c++11 }
19278
+template <typename> using __allocator_base = B;
19279
+template <typename> class F : __allocator_base<int> {};
19281
+template <typename, typename = F<int> > class G : C {};
19282
+template <typename> class D;
19284
+ using Container = G<D<char>>;
19286
+ A(D<char> const &);
19287
+ Container m_elements;
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)
19298
+// { dg-require-effective-target c++11 }
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)
19313
+// { dg-do compile { target c++11 } }
19315
+template<typename T> struct baz { };
19316
+template<typename T> T bar();
19318
+template<typename T, typename ... U>
19319
+baz<decltype(bar<T>()(bar<U> ...))> // { dg-error "cannot be used" }
19324
+ foo<int>(); // { dg-error "no matching" }
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)
19335
- ev.e::~e_u(); // { dg-error "e_u. has not been declared" }
19336
+ ev.e::~e_u(); // { dg-error "" }
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)
19344
+// { dg-require-effective-target c++11 }
19346
+constexpr bool foo () { return noexcept (true); }
19347
+template <typename T>
19350
+ void bar (V &) noexcept (foo ()) {}
19352
+template <typename T>
19353
+struct W : public V <int>
19355
+ void bar (W &x) { V <int>::bar (x); }
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)
19370
+// { dg-require-effective-target c++11 }
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)
19380
+// { dg-require-effective-target c++11 }
19386
+struct foo_argument
19388
+ template<class Ret, class C, class Arg>
19389
+ static Arg test(Ret (C::*)(Arg));
19391
+ typedef decltype(test(&T::template foo<>)) type;
19394
+template<class T, class>
19395
+struct dependent { typedef T type; };
19400
+ template<class Ignore = void>
19401
+ auto foo(int i) -> decltype(declval<
19402
+ typename dependent<T&, Ignore>::type
19403
+ >().foo_impl(i));
19406
+struct derived : base<derived>
19408
+ friend struct base<derived>;
19410
+ int foo_impl(int i);
19415
+ foo_argument<derived>::type var = 0;
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)
19424
+// { dg-do compile }
19425
+// { dg-options "-std=c++11" }
19427
+template <typename>
19430
+ constexpr A (int) {}
19431
+ virtual void foo ()
19433
+ constexpr A<void> a (0);
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)
19449
+// { dg-require-effective-target c++11 }
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)
19466
+// { dg-require-effective-target c++11 }
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)
19477
+// { dg-require-effective-target c++11 }
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)
19495
+// { dg-require-effective-target c++11 }
19499
+ template<typename T> A(T) = delete;
19502
+template<> A::A<int>(int) {}
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)
19511
+// { dg-require-effective-target c++11 }
19513
+template<typename..., int> void foo();
19517
+ foo<0>; // { dg-error "" }
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)
19525
+// { dg-require-effective-target c++11 }
19528
+static_assert(f, "");
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)
19537
+// { dg-do compile { target c++11 } }
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>...);
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)
19555
+// { dg-do compile { target c++11 } }
19560
+ decltype(i.I::~I())* p;
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)
19568
+// { dg-require-effective-target c++11 }
19570
+template<char, char...> struct A;
19572
+template<typename> struct B;
19574
+template<char... C> struct B<A<C...>> {};
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)
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)
19598
+#include <exception>
19600
+#define assert(E) if (!(E)) __builtin_abort();
19605
+ assert( !std::uncaught_exception() );
19608
+ } catch (int i) {
19609
+ assert( !std::uncaught_exception() );
19619
+ } catch (int i) {
19620
+ assert( !std::uncaught_exception() );
19622
+ assert( !std::uncaught_exception() );
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)
19630
+// { dg-do compile }
19631
+// { dg-options "-fdump-tree-gimple " }
19634
+ virtual int add (int a, int b) {return a+ b;}
19637
+class D : public B {
19640
+int foo (int a, int b) {
19642
+ return d.add(a, b);
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)
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)
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)
19663
+// PR middle-end/57499
19664
+// { dg-do compile }
19668
+ ~S () __attribute__ ((noreturn)) {} // { dg-warning "function does return" }
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)
19682
+// PR target/59163
19685
+struct A { float a[4]; };
19686
+struct B { int b; A a; };
19688
+__attribute__((noinline, noclone)) void
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 ();
19695
+__attribute__((noinline, noclone)) void
19700
+ for (i = 0; i < 4; i++)
19709
+ B b = { 5, { 6, 7, 8, 9 } };
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)
19717
+// PR middle-end/60419
19718
+// { dg-do compile }
19719
+// { dg-options "-O2" }
19734
+ virtual void foo (int &, int);
19740
+ virtual void foo (I &) const;
19748
+struct K : J, public D<int>
19757
+struct N : public K
19759
+ void foo (int &, int);
19761
+ void foo (I &) const {}
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)
19804
+typedef const char *const& ProtocolIdType;
19806
+template <ProtocolIdType protocolId>
19808
+ typedef int ProtocolVersion;
19810
+ ProtocolVersion GetProtocolVersion();
19813
+template <ProtocolIdType protocolId>
19814
+typename C<protocolId>::ProtocolVersion C<protocolId>::D::GetProtocolVersion()
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)
19827
+ static const int block_size = 1;
19830
+template <typename T> struct A {
19834
+template <typename T> struct B : public A<T> {
19835
+ using typename A<T>::type;
19836
+ static const int block_size = type::block_size;
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)
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)
19856
+template <class T>
19859
+ template <T a, T b>
19860
+ struct Implementation {};
19862
+ typedef typename Implementation<0, 0>::Typedef Type;
19865
+template <class T>
19867
+struct C<T>::Implementation<0, b> { typedef void Typedef; };
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)
19879
+ typedef int nested_type;
19882
+template <class T>
19888
+template <class T>
19891
+ using typename A<T>::type;
19892
+ typename type::nested_type x;
19895
+template <class T>
19898
+ using typename B<T>::type;
19899
+ typename type::nested_type y;
19904
+ using C<int>::type;
19905
+ type::nested_type z;
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)
19916
+struct print_arg { };
19918
+struct const_holder {
19919
+ static const int CONSTANT = 42;
19922
+template <typename T>
19927
+template <class T>
19928
+struct test_case : public identity<T> {
19929
+ using typename identity<T>::type;
19930
+ print_arg<type::CONSTANT> printer;
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)
19942
+template<typename D> struct complex { };
19944
+template<typename Tp>
19946
+pow(const complex<Tp>& x, const complex<Tp>& y) { return complex<Tp>(); }
19948
+template<typename T, typename U>
19949
+struct promote_2 { typedef T type; };
19951
+template<typename Tp, typename Up>
19952
+complex<typename promote_2<Tp, Up>::type>
19953
+pow(const complex<Tp>& x, const complex<Up>& y);
19955
+complex<double> (*powcc)(const complex<double>&, const complex<double>&) = pow;
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)
19963
+??=ifndef PR60400_1_H
19964
+??=define PR60400_1_H
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)
19971
+??=ifndef PR60400_2_H
19972
+??=define PR60400_2_H
19973
+??=include "pr60400-1.h"
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)
19980
+/* PR preprocessor/60400 */
19981
+/* { dg-do compile } */
19982
+/* { dg-options "-trigraphs -Wtrigraphs" } */
19984
+??=include "pr60400-1.h"
19985
+??=include "pr60400-2.h"
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)
19998
+/* PR preprocessor/58844 */
19999
+/* { dg-do compile } */
20000
+/* { dg-options "-ftrack-macro-expansion=0" } */
20002
+#define A x######x
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)
20011
+/* PR preprocessor/58844 */
20012
+/* { dg-do compile } */
20013
+/* { dg-options "-ftrack-macro-expansion=2" } */
20015
+#define A x######x
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)
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)
20034
+/* { dg-do compile } */
20035
+/* { dg-options "-O2 -Wall" } */
20037
+extern int *a, b, *c, *d;
20040
+foo (double _Complex *x, double _Complex *y, double _Complex *z, unsigned int l, int w)
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]);
20049
+ for (i = 0; i < e; i++)
20051
+ int j = e * d[3] + i;
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;
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++)
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]);
20139
+ int u = (j - w + b) % b;
20140
+ int q = (j >= w ? +1 : -1);
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)
20150
+/* { dg-do compile } */
20151
+/* { dg-options "-O3" } */
20153
+typedef int v4si __attribute__ ((vector_size (16)));
20156
+main (int argc, char** argv)
20158
+ v4si x = {0,1,2,3};
20159
+ x = (v4si) {(x)[3], (x)[2], (x)[1], (x)[0]};
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)
20168
+/* { dg-do compile } */
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)
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" } */
20182
+int foo (const char *, ...) __attribute__ ((format (printf, 1, 2)));
20185
+bar (unsigned int x)
20187
+ foo ("%x", __builtin_bswap32 (x));
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)
20194
+/* { dg-do compile } */
20195
+/* { dg-options "-fdump-tree-original" } */
20198
+fx (int *b, int *e)
20200
+ return b + (e - b);
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)
20210
+/* { dg-do compile } */
20228
+static int *c[1][2] = {{0, (int *)&a.g.f2}};
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;
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)
20244
+/* { dg-do compile } */
20253
+static int *c[1][2] = {{0, (int *)&a.f}};
20254
+static unsigned int d;
20259
+ for (; d < 1; d++)
20260
+ for (; b < 1; b++)
20261
+ *c[b][d + 1] = 0;
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)
20270
+/* PR ipa/60026 */
20271
+/* { dg-do compile } */
20273
+struct S { int f; } a;
20275
+__attribute__((optimize (0)))
20276
+struct S foo (int x, struct S y)
20287
+ struct S c = {0};
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)
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" } */
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)
20315
+/* PR middle-end/58809 */
20316
+/* { dg-do compile } */
20317
+/* { dg-options "-fopenmp" } */
20320
+_Complex double d;
20325
+ #pragma omp parallel reduction (&:j) /* { dg-error "has invalid type for" } */
20327
+ #pragma omp parallel reduction (|:j) /* { dg-error "has invalid type for" } */
20329
+ #pragma omp parallel reduction (^:j) /* { dg-error "has invalid type for" } */
20331
+ #pragma omp parallel reduction (min:j) /* { dg-error "has invalid type for" } */
20333
+ #pragma omp parallel reduction (max:j) /* { dg-error "has invalid type for" } */
20335
+ #pragma omp parallel reduction (&:d) /* { dg-error "has invalid type for" } */
20337
+ #pragma omp parallel reduction (|:d) /* { dg-error "has invalid type for" } */
20339
+ #pragma omp parallel reduction (^:d) /* { dg-error "has invalid type for" } */
20341
+ #pragma omp parallel reduction (min:d) /* { dg-error "has invalid type for" } */
20343
+ #pragma omp parallel reduction (max:d) /* { dg-error "has invalid type for" } */
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)
20351
+/* PR libgomp/59467 */
20358
+ int x = 0, y = 0;
20359
+ #pragma omp parallel
20362
+ #pragma omp single copyprivate (x) /* { dg-error "is not threadprivate or private in outer context" } */
20364
+ #pragma omp atomic write
20367
+ #pragma omp atomic read
20369
+ #pragma omp atomic
20372
+ #pragma omp parallel
20375
+ #pragma omp single copyprivate (v) /* { dg-error "is not threadprivate or private in outer context" } */
20377
+ #pragma omp atomic write
20380
+ #pragma omp atomic read
20382
+ #pragma omp atomic
20385
+ #pragma omp parallel private (x)
20388
+ #pragma omp single copyprivate (x)
20390
+ #pragma omp atomic write
20393
+ #pragma omp atomic read
20395
+ #pragma omp atomic
20399
+ #pragma omp parallel reduction (+:x)
20401
+ #pragma omp single copyprivate (x)
20403
+ #pragma omp atomic write
20406
+ #pragma omp atomic
20409
+ #pragma omp single copyprivate (x)
20413
+ #pragma omp single copyprivate (v) /* { dg-error "is not threadprivate or private in outer context" } */
20415
+ #pragma omp atomic write
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)
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" } */
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)
20436
+/* { dg-do compile } */
20437
+/* { dg-options "-O2" } */
20442
+ float v __attribute__((vector_size(8)));
20449
+ float v __attribute__((vector_size(8)));
20456
+ float v __attribute__((vector_size(8)));
20463
+ float v __attribute__((vector_size(8)));
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)
20476
+ sorry ("logical operation on vector type");
20477
+ return error_mark_node;
20479
result_type = boolean_type_node;
20482
@@ -5010,7 +5015,10 @@
20483
cp_truthvalue_conversion (tree expr)
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));
20498
- inc = integer_one_node;
20499
+ inc = (TREE_CODE (argtype) == VECTOR_TYPE
20500
+ ? build_one_cst (argtype)
20501
+ : integer_one_node);
20503
inc = cp_convert (argtype, inc, complain);
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))
20519
- pfn = build_c_cast (input_location, type, pfn);
20520
+ pfn = cp_build_c_cast (type, pfn, complain);
20521
return build_ptrmemfunc1 (to_type,
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));
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)
20540
if (TREE_CODE (newdecl) == VAR_DECL)
20541
@@ -8193,7 +8193,9 @@
20542
abi_1_itype = error_mark_node;
20545
- size = maybe_constant_value (size);
20546
+ if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
20547
+ size = maybe_constant_value (size);
20549
if (!TREE_CONSTANT (size))
20552
@@ -11891,7 +11893,10 @@
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);
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 @@
20570
tree type = body ? TREE_TYPE (body) : void_type_node;
20572
+ if (!flag_exceptions)
20575
if (cond && !value_dependent_expression_p (cond))
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)
20583
+2014-02-28 Jason Merrill <jason@redhat.com>
20586
+ * typeck.c (cp_build_binary_op): Sorry on vector&&vector.
20588
+2014-02-26 Jason Merrill <jason@redhat.com>
20591
+ * pt.c (unify): Ignore alias templates when deducing a template
20592
+ template parameter.
20594
+2014-02-24 Jason Merrill <jason@redhat.com>
20597
+ * pt.c (tsubst_omp_for_iterator): Don't let substitution of the
20598
+ DECL_EXPR initialize a non-class iterator.
20600
+2014-02-24 Fabien Chêne <fabien@gcc.gnu.org>
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.
20606
+2014-02-21 Jason Merrill <jason@redhat.com>
20609
+ * semantics.c (expand_or_defer_fn_1): Check DECL_DEFAULTED_FN.
20612
+ * parser.c (cp_parser_enum_specifier): Call
20613
+ check_for_bare_parameter_packs.
20616
+ * pt.c (register_specialization): Copy DECL_DELETED_FN to clones.
20619
+ * pt.c (coerce_template_parms): Bail if argument packing fails.
20622
+ * mangle.c (mangle_decl): Don't make an alias for a TYPE_DECL.
20624
+2014-02-20 Jason Merrill <jason@redhat.com>
20629
+ * pt.c (template_parm_to_arg): Call convert_from_reference.
20630
+ (tsubst_template_arg): Don't strip reference refs.
20632
+2014-02-20 Kai Tietz <ktietz@redhat.com>
20635
+ * parser.c (cp_parser_functional_cast): Treat NULL_TREE
20636
+ valued type argument as error_mark_node.
20639
+ * semantics.c (finish_fname): Handle error_mark_node.
20641
+2014-02-19 Jason Merrill <jason@redhat.com>
20644
+ * pt.c (maybe_instantiate_noexcept): Don't instantiate exception
20645
+ spec from template context.
20647
+2014-01-31 Jason Merrill <jason@redhat.com>
20650
+ * decl2.c (handle_tls_init): Handle null init fn.
20653
+ * decl2.c (get_tls_init_fn): Copy DECL_EXTERNAL from the variable.
20656
+ * call.c (convert_like_real) [ck_aggr]: Set TARGET_EXPR_LIST_INIT_P.
20657
+ [ck_list]: Check for error_mark_node.
20660
+ * pt.c (fn_type_unification): Don't do DEDUCE_EXACT check
20661
+ during partial ordering.
20663
+2014-01-30 Jason Merrill <jason@redhat.com>
20666
+ * pt.c (instantiate_template_1): Save/restore local_specializations.
20668
+2014-01-29 Jason Merrill <jason@redhat.com>
20671
+ * pt.c (expand_template_argument_pack): Correct
20672
+ non_default_args_count calculation.
20675
+ * pt.c (unify_pack_expansion): Call expand_template_argument_pack.
20677
+2014-01-28 Jason Merrill <jason@redhat.com>
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
20685
+2014-01-27 Jason Merrill <jason@redhat.com>
20688
+ * decl.c (duplicate_decls): Always use oldtype for TYPE_DECL.
20691
+ * pt.c (tsubst_copy_and_build) [TRAIT_EXPR]: Use tsubst for
20695
+ * pt.c (template_parm_to_arg): Call convert_from_reference.
20696
+ (tsubst_template_arg): Don't strip reference refs.
20699
+ * call.c (build_aggr_conv): Reject value-initialization of reference.
20702
+ * call.c (convert_like_real): Give helpful error about excess braces
20703
+ for reference binding, too.
20706
+ * typeck.c (cp_build_modify_expr): Make the RHS an rvalue before
20710
+ * typeck.c (cp_truthvalue_conversion): Use explicit comparison for
20714
+ * decl.c (compute_array_index_type): Don't call
20715
+ maybe_constant_value for a non-integral expression.
20718
+ * mangle.c (write_guarded_var_name): Handle null DECL_NAME.
20720
+2014-01-24 Paolo Carlini <paolo.carlini@oracle.com>
20723
+ * name-lookup.c (push_using_directive): Use timevar_cond_start.
20725
+2014-01-23 Jakub Jelinek <jakub@redhat.com>
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.
20731
+2014-01-20 Marek Polacek <polacek@redhat.com>
20733
+ Backported from mainline
20734
+ 2014-01-17 Marek Polacek <polacek@redhat.com>
20737
+ * cvt.c (ocp_convert): Don't segfault on non-existing
20738
+ ENUM_UNDERLYING_TYPE.
20740
+2014-01-10 Paolo Carlini <paolo.carlini@oracle.com>
20744
+ * pt.c (type_dependent_expression_p): Handle EXPR_PACK_EXPANSION.
20746
+2013-12-12 Jason Merrill <jason@redhat.com>
20749
+ * pt.c (resolve_overloaded_unification): Discard access checks.
20751
+2013-12-05 Jason Merrill <jason@redhat.com>
20755
+ * pt.c (most_specialized_class): Use the partially instantiated
20756
+ template for deduction. Drop the TMPL parameter.
20758
+2013-12-04 Jakub Jelinek <jakub@redhat.com>
20761
+ * pt.c (tsubst_copy_and_build): Handle POINTER_PLUS_EXPR.
20763
+2013-11-27 Tom de Vries <tom@codesourcery.com>
20764
+ Marc Glisse <marc.glisse@inria.fr>
20767
+ * typeck.c (cp_build_unary_op): Allow vector increment and decrement.
20769
+2013-11-27 Tom de Vries <tom@codesourcery.com>
20770
+ Marc Glisse <marc.glisse@inria.fr>
20772
+ PR middle-end/59037
20773
+ * semantics.c (cxx_fold_indirect_ref): Don't create out-of-bounds
20776
+2013-11-28 Jakub Jelinek <jakub@redhat.com>
20779
+ * semantics.c (finish_omp_atomic): Call finish_expr_stmt
20780
+ rather than add_stmt.
20782
+2013-11-23 Easwaran Raman <eraman@google.com>
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.
20789
+2013-10-31 Jason Merrill <jason@redhat.com>
20792
+ * parser.c (cp_parser_late_parse_one_default_arg): Set
20793
+ TARGET_EXPR_DIRECT_INIT_P.
20795
+2013-11-11 Paolo Carlini <paolo.carlini@oracle.com>
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.
20801
+ * typeck.c (build_ptrmemfunc): Use cp_build_c_cast.
20803
+2013-10-25 Tom de Vries <tom@codesourcery.com>
20806
+ * except.c (build_must_not_throw_expr): Handle
20809
+2013-10-17 Paolo Carlini <paolo.carlini@oracle.com>
20812
+ * semantics.c (lambda_expr_this_capture): Handle NSDMIs in the
20813
+ cp_unevaluated_operand case.
20815
+2013-10-16 Paolo Carlini <paolo.carlini@oracle.com>
20818
+ * parser.c (cp_parser_pseudo_destructor_name): Revert r174385 changes.
20820
+2013-10-16 Jason Merrill <jason@redhat.com>
20823
+ * decl2.c (dump_tu): Split out from...
20824
+ (cp_write_global_declarations): ...here. Call it in PCH mode.
20826
2013-10-16 Release Manager
20828
* GCC 4.8.2 released.
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);
20849
check_specialization_namespace (tmpl);
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;
20860
@@ -3491,6 +3493,11 @@
20861
|| TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
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))
20869
error ("declaration of %q+#D", decl);
20870
error (" shadows template parm %q+#D", olddecl);
20872
@@ -4261,7 +4268,7 @@
20873
if (COMPLETE_TYPE_P (inst_type)
20874
&& CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
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)
20887
TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
20889
/* We are done with all of the arguments. */
20890
@@ -8572,7 +8581,7 @@
20892
/* Determine what specialization of the original template to
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)
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;
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);
20914
+ tree decl_expr = NULL_TREE;
20915
+ if (init && TREE_CODE (init) == DECL_EXPR)
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);
20928
+ decl = RECUR (decl);
20929
+ init = RECUR (init);
20931
+ tree auto_node = type_uses_auto (TREE_TYPE (decl));
20932
+ if (auto_node && init)
20934
+ = do_auto_deduction (TREE_TYPE (decl), init, auto_node);
20936
gcc_assert (!type_dependent_expression_p (decl));
20938
if (!CLASS_TYPE_P (TREE_TYPE (decl)))
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;
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 @@
20956
- if (init && !init_decl)
20959
+ /* Declare and initialize the variable. */
20960
+ RECUR (decl_expr);
20961
+ init = NULL_TREE;
20966
for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
20968
@@ -13710,6 +13741,10 @@
20972
+ case POINTER_PLUS_EXPR:
20973
+ return fold_build_pointer_plus (RECUR (TREE_OPERAND (t, 0)),
20974
+ RECUR (TREE_OPERAND (t, 1)));
20977
RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
20978
/*address_p=*/false));
20979
@@ -14471,12 +14506,12 @@
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);
20988
tree type2 = TRAIT_EXPR_TYPE2 (t);
20990
- type2 = tsubst_copy (type2, args, complain, in_decl);
20991
+ type2 = tsubst (type2, args, complain, in_decl);
20993
RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
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 ();
21011
if (fndecl == error_mark_node)
21012
@@ -15192,8 +15230,11 @@
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))
21024
tree substed = TREE_TYPE (decl);
21026
@@ -15749,7 +15790,7 @@
21027
if (subargs != error_mark_node
21028
&& !any_dependent_template_arguments_p (subargs))
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;
21040
+ packed_args = expand_template_argument_pack (packed_args);
21042
int len = TREE_VEC_LENGTH (packed_args);
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);
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);
21058
@@ -17553,7 +17599,7 @@
21062
-/* Determine which of two partial specializations of MAIN_TMPL is more
21063
+/* Determine which of two partial specializations of TMPL is more
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. */
21071
-more_specialized_class (tree main_tmpl, tree pat1, tree pat2)
21072
+more_specialized_class (tree tmpl, tree pat1, tree pat2)
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));
21085
@@ -17593,7 +17639,7 @@
21086
any_deductions = true;
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));
21094
@@ -17673,7 +17719,7 @@
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
21103
@@ -17688,7 +17734,7 @@
21104
is bound to `double'. */
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)
21110
int i, ntparms = TREE_VEC_LENGTH (tparms);
21112
@@ -17728,8 +17774,8 @@
21113
`T' is `A' but unify () does not check whether `typename T::X'
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),
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 @@
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 @@
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
21140
+ partial specializations matching TYPE, then NULL_TREE is
21141
+ returned, indicating that the primary template should be used. */
21144
-most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
21145
+most_specialized_class (tree type, tsubst_flags_t complain)
21147
tree list = NULL_TREE;
21149
@@ -17896,11 +17942,11 @@
21154
tree outer_args = NULL_TREE;
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);
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);
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))
21171
tree partial_spec_args;
21173
@@ -17944,8 +17990,7 @@
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,
21181
/*require_all_args=*/true,
21182
/*use_default_args=*/true);
21183
@@ -18553,6 +18598,10 @@
21185
tree fntype, spec, noex, clone;
21187
+ /* Don't instantiate a noexcept-specification from template context. */
21188
+ if (processing_template_decl)
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)
21198
+ /* Always dependent, on the number of arguments if nothing else. */
21199
+ if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
21202
if (BASELINK_P (expression))
21203
expression = BASELINK_FUNCTIONS (expression);
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 @@
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);
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))
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);
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)
21236
enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
21238
@@ -4299,10 +4301,26 @@
21245
+ if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
21246
+ r_code = ERROR_MARK;
21248
+ case BIT_AND_EXPR:
21249
+ case BIT_XOR_EXPR:
21250
+ case BIT_IOR_EXPR:
21252
+ r_code = ERROR_MARK;
21254
+ case TRUTH_ANDIF_EXPR:
21255
+ case TRUTH_ORIF_EXPR:
21256
+ if (FLOAT_TYPE_P (TREE_TYPE (t)))
21257
+ r_code = ERROR_MARK;
21260
+ if (r_code == ERROR_MARK)
21262
error ("%qE has invalid type for %<reduction(%s)%>",
21263
t, operator_name_info[r_code].name);
21265
@@ -5059,7 +5077,7 @@
21267
stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node, stmt);
21270
+ finish_expr_stmt (stmt);
21274
@@ -7543,7 +7561,7 @@
21275
unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
21276
tree index = bitsize_int (indexi);
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
21286
if (cp_unevaluated_operand)
21287
- return lookup_name (this_identifier);
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);
21297
/* Try to default capture 'this' if we can. */
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))
21315
tree single_init_fn = get_tls_init_fn (var);
21316
+ if (single_init_fn == NULL_TREE)
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));
21325
+/* The entire file is now complete. If requested, dump everything
21332
+ FILE *stream = dump_begin (TDI_tu, &flags);
21336
+ dump_node (global_namespace, flags & ~TDF_SLIM, stream);
21337
+ dump_end (TDI_tu, stream);
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 @@
21347
c_common_write_pch ();
21352
@@ -4359,17 +4378,8 @@
21354
/* The entire file is now complete. If requested, dump everything
21358
- FILE *stream = dump_begin (TDI_tu, &flags);
21363
- dump_node (global_namespace, flags & ~TDF_SLIM, stream);
21364
- dump_end (TDI_tu, stream);
21368
if (flag_detailed_statistics)
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);
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);
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);
21390
- if (TREE_CODE (type_decl) == USING_DECL)
21392
- if (!DECL_DEPENDENT_P (type_decl))
21393
- type_decl = strip_using_decl (type_decl);
21394
- else if (USING_DECL_TYPENAME_P (type_decl))
21396
- /* We have found a type introduced by a using
21397
- declaration at class scope that refers to a dependent
21400
- using typename :: [opt] nested-name-specifier unqualified-id ;
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);
21409
+ type_decl = strip_using_decl (type_decl);
21411
if (TREE_CODE (type_decl) != TYPE_DECL
21412
&& (objc_is_id (identifier) || objc_is_class_name (identifier)))
21413
@@ -14742,7 +14720,8 @@
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;
21423
@@ -22209,6 +22188,9 @@
21428
+ type = error_mark_node;
21430
if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
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;
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 @@
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. */
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)
21466
+ bool complained = false;
21467
conversion *t = convs;
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);
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;
21484
for (; t ; t = next_conversion (t))
21486
@@ -5853,8 +5865,9 @@
21490
- permerror (loc, "invalid conversion from %qT to %qT",
21491
- TREE_TYPE (expr), totype);
21493
+ permerror (loc, "invalid conversion from %qT to %qT",
21494
+ TREE_TYPE (expr), totype);
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;
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);
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),
21514
+ if (expr != error_mark_node)
21515
+ TARGET_EXPR_LIST_INIT_P (expr) = true;
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;
21527
tree first_mem_arg = NULL_TREE;
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 @@
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 @@
21559
if (null_ptr_cst_p (expr))
21561
- if (complain & tf_warning)
21562
- maybe_warn_zero_as_null_pointer_constant (expr, loc);
21564
if (TYPE_PTRMEMFUNC_P (type))
21565
return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 0,
21566
/*c_cast_p=*/false, complain);
21568
+ if (complain & tf_warning)
21569
+ maybe_warn_zero_as_null_pointer_constant (expr, loc);
21571
/* A NULL pointer-to-data-member is represented by -1, not by
21573
tree val = (TYPE_PTRDATAMEM_P (type)
21574
@@ -743,6 +743,7 @@
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 @@
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))
21594
@@ -3773,7 +3774,8 @@
21596
write_guarded_var_name (const tree variable)
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 @@
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. */
21631
strip_using_decl (tree decl)
21632
@@ -404,6 +405,23 @@
21634
while (TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
21635
decl = USING_DECL_DECLS (decl);
21637
+ if (TREE_CODE (decl) == USING_DECL && DECL_DEPENDENT_P (decl)
21638
+ && USING_DECL_TYPENAME_P (decl))
21640
+ /* We have found a type introduced by a using
21641
+ declaration at class scope that refers to a dependent
21644
+ using typename :: [opt] nested-name-specifier unqualified-id ;
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);
21656
@@ -5605,9 +5623,9 @@
21657
push_using_directive (tree used)
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);
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 @@
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
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)
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);
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. */
21698
-check_load (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
21699
+check_load (gimple, tree op, tree, void *data)
21702
check_decl ((funct_state)data, op, false, false);
21703
@@ -600,7 +600,7 @@
21704
/* Wrapper around check_decl for stores in local more. */
21707
-check_store (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
21708
+check_store (gimple, tree op, tree, void *data)
21711
check_decl ((funct_state)data, op, true, false);
21712
@@ -612,7 +612,7 @@
21713
/* Wrapper around check_decl for loads in ipa mode. */
21716
-check_ipa_load (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
21717
+check_ipa_load (gimple, tree op, tree, void *data)
21720
check_decl ((funct_state)data, op, false, true);
21721
@@ -624,7 +624,7 @@
21722
/* Wrapper around check_decl for stores in ipa mode. */
21725
-check_ipa_store (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
21726
+check_ipa_store (gimple, tree op, tree, void *data)
21729
check_decl ((funct_state)data, op, true, true);
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 @@
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
21742
enum machine_mode mode;
21743
@@ -1837,7 +1837,7 @@
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);
21752
@@ -6082,6 +6082,18 @@
21756
+ case UNSIGNED_FLOAT:
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);
21769
i = REG_QTY (REGNO (x));
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 @@
21777
if (rhs_class == GIMPLE_BINARY_RHS)
21780
struct symbolic_number n1, n2;
21781
+ unsigned HOST_WIDEST_INT mask;
21784
if (code != BIT_IOR_EXPR)
21785
@@ -1744,6 +1746,15 @@
21789
+ for (i = 0, mask = 0xff; i < n->size; i++, mask <<= BITS_PER_UNIT)
21791
+ unsigned HOST_WIDEST_INT masked1, masked2;
21793
+ masked1 = n1.n & mask;
21794
+ masked2 = n2.n & mask;
21795
+ if (masked1 && masked2 && masked1 != masked2)
21796
+ return NULL_TREE;
21798
n->n = n1.n | n2.n;
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 @@
21807
if (!HARD_FRAME_POINTER_IS_FRAME_POINTER)
21808
add_to_hard_reg_set (®_rename_p->unavailable_hard_regs,
21809
- Pmode, HARD_FRAME_POINTER_IS_FRAME_POINTER);
21810
+ Pmode, HARD_FRAME_POINTER_REGNUM);
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 @@
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)
21833
loop_optimizer_init (LOOPS_NORMAL);
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 @@
21847
+/* Define if your assembler supports the 'ud2' mnemonic. */
21848
+#ifndef USED_FOR_TARGET
21849
+#undef HAVE_AS_IX86_UD2
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 @@
21860
+/* Define if your assembler supports LEON instructions. */
21861
+#ifndef USED_FOR_TARGET
21862
+#undef HAVE_AS_LEON
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
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 @@
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)
21885
if (insn == BB_END (bb))
21886
@@ -505,7 +509,10 @@
21887
n_insns -= 2 * n_matching;
21890
- if (then_start && else_start)
21893
+ && then_n_insns > n_matching
21894
+ && else_n_insns > n_matching)
21896
int longest_match = MIN (then_n_insns - n_matching,
21897
else_n_insns - n_matching);
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;
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;
21914
+ adj_bytelen = bytelen;
21916
if (GET_CODE (dst) == CONCAT)
21918
@@ -2040,6 +2042,7 @@
21922
+ /* Handle trailing fragments that run over the size of the struct. */
21923
if (ssize >= 0 && bytepos + (HOST_WIDE_INT) bytelen > ssize)
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);
21930
- bytelen = adj_bytelen;
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]);
21939
/* Optimize the access just a bit. */
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]);
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);
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. */
21964
+ if (REG_P (x) && HARD_REGISTER_P (x))
21965
+ target = gen_reg_rtx (dstmode);
21967
+ emit_unop_insn (ic, target, trunc_y, UNKNOWN);
21968
last_insn = get_last_insn ();
21971
+ if (REG_P (target))
21972
set_unique_reg_note (last_insn, REG_EQUAL, y);
21975
+ return emit_move_insn (x, target);
21979
@@ -4551,19 +4569,19 @@
21980
- tree_low_cst (DECL_FIELD_BIT_OFFSET (repr), 1));
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)
21990
HOST_WIDE_INT adjust = bitoffset - *bitpos;
21992
gcc_assert ((adjust % BITS_PER_UNIT) == 0);
21993
- gcc_assert (*offset != NULL_TREE);
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);
22002
+ = size_binop (MINUS_EXPR, *offset, size_int (adjust / BITS_PER_UNIT));
22006
@@ -4668,8 +4686,7 @@
22007
expand_insn (icode, 2, ops);
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);
22016
@@ -4698,6 +4715,15 @@
22017
tem = get_inner_reference (to, &bitsize, &bitpos, &offset, &mode1,
22018
&unsignedp, &volatilep, true);
22020
+ /* Make sure bitpos is not negative, it can wreak havoc later. */
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;
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 @@
22038
convert_expression(Btype* type, Bexpression* expr, Location);
22041
+ function_code_expression(Bfunction*, Location);
22046
@@ -334,6 +337,17 @@
22048
label_address(Blabel*, Location);
22054
+ { return this->make_function(error_mark_node); }
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);
22062
// Make a Bexpression from a tree.
22064
@@ -350,6 +364,10 @@
22066
{ return new Btype(t); }
22069
+ make_function(tree t)
22070
+ { return new Bfunction(t); }
22073
fill_in_struct(Btype*, const std::vector<Btyped_identifier>&);
22075
@@ -966,6 +984,19 @@
22076
return tree_to_expr(ret);
22079
+// Get the address of a function.
22082
+Gcc_backend::function_code_expression(Bfunction* bfunc, Location location)
22084
+ tree func = bfunc->get_tree();
22085
+ if (func == error_mark_node)
22086
+ return this->error_expression();
22088
+ tree ret = build_fold_addr_expr_loc(location.gcc_location(), func);
22089
+ return this->make_expression(ret);
22092
// An expression as a statement.
22095
@@ -1724,6 +1755,56 @@
22096
return this->make_expression(ret);
22099
+// Declare or define a new function.
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)
22108
+ tree functype = fntype->get_tree();
22109
+ if (functype != error_mark_node)
22111
+ gcc_assert(FUNCTION_POINTER_TYPE_P(functype));
22112
+ functype = TREE_TYPE(functype);
22114
+ tree id = get_identifier_from_string(name);
22115
+ if (functype == error_mark_node || id == error_mark_node)
22116
+ return this->error_function();
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));
22122
+ TREE_PUBLIC(decl) = 1;
22123
+ if (is_declaration)
22124
+ DECL_EXTERNAL(decl) = 1;
22127
+ tree restype = TREE_TYPE(functype);
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;
22135
+ if (!is_inlinable)
22136
+ DECL_UNINLINABLE(decl) = 1;
22137
+ if (disable_split_stack)
22139
+ tree attr = get_identifier("__no_split_stack__");
22140
+ DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
22142
+ if (in_unique_section)
22143
+ resolve_unique_section(decl, 0, 1);
22145
+ go_preserve_from_gc(decl);
22146
+ return new Bfunction(decl);
22149
// The single backend.
22151
static Gcc_backend gcc_backend;
22152
@@ -1799,3 +1880,9 @@
22154
return bv->get_tree();
22158
+function_to_tree(Bfunction* bf)
22160
+ return bf->get_tree();
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)
22167
+2013-12-11 Ian Lance Taylor <iant@google.com>
22169
+ * go-lang.c (go_langhook_post_options): Disable sibling calls by
22172
+2013-10-16 Ian Lance Taylor <iant@google.com>
22174
+ Bring in from mainline:
22176
+ 2013-10-11 Chris Manghane <cmang@google.com>
22177
+ * go-gcc.cc (Gcc_backend::function_code_expression): New
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.
22186
2013-10-16 Release Manager
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;
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;
22201
/* Returning false means that the backend should be used. */
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();
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,
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();
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())
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();
22235
+ const std::string& pname((*p)->name());
22236
+ if (pname[0] == 'r' && pname[1] == '.')
22238
+ new_receiver_name = pname;
22242
+ go_assert(!new_receiver_name.empty());
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)
22257
@@ -3819,6 +3841,81 @@
22258
*presults = results;
22261
+// Get the backend representation.
22264
+Function::get_or_make_decl(Gogo* gogo, Named_object* no)
22266
+ if (this->fndecl_ == NULL)
22268
+ std::string asm_name;
22269
+ bool is_visible = false;
22270
+ if (no->package() != NULL)
22272
+ else if (this->enclosing_ != NULL || Gogo::is_thunk(no))
22274
+ else if (Gogo::unpack_hidden_name(no->name()) == "init"
22275
+ && !this->type_->is_method())
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())
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())
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
22298
+ pkgpath = Gogo::hidden_name_pkgpath(no->name());
22299
+ pkgpath = Gogo::pkgpath_for_symbol(pkgpath);
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())
22307
+ asm_name.append(1, '.');
22308
+ Type* rtype = this->type_->receiver()->type();
22309
+ asm_name.append(rtype->mangled_name(gogo));
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_);
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_;
22326
+ Btype* functype = this->type_->get_backend_fntype(gogo);
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());
22333
+ return this->fndecl_;
22338
Block::Block(Block* enclosing, Location location)
22339
@@ -5110,6 +5207,75 @@
22344
+// Return the external identifier for this object.
22347
+Named_object::get_id(Gogo* gogo)
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()))
22357
+ // We don't need the package name for builtin types.
22358
+ decl_name = Gogo::unpack_hidden_name(this->name_);
22362
+ std::string package_name;
22363
+ if (this->package_ == NULL)
22364
+ package_name = gogo->package_name();
22366
+ package_name = this->package_->package_name();
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.
22378
+ decl_name = package_name + '.' + Gogo::unpack_hidden_name(this->name_);
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();
22387
+ if (fntype != NULL && fntype->is_method())
22389
+ decl_name.push_back('.');
22390
+ decl_name.append(fntype->receiver()->type()->mangled_name(gogo));
22393
+ if (this->is_type())
22395
+ unsigned int index;
22396
+ const Named_object* in_function = this->type_value()->in_function(&index);
22397
+ if (in_function != NULL)
22399
+ decl_name += '$' + Gogo::unpack_hidden_name(in_function->name());
22403
+ snprintf(buf, sizeof buf, "%u", index);
22404
+ decl_name += '$';
22405
+ decl_name += buf;
22409
+ return decl_name;
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)
22420
P1(STRING), R1(SLICE))
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))
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)
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;
22448
+ // Record that this function is a stub method created for an unnamed
22451
+ set_is_unnamed_type_stub_method()
22453
+ go_assert(this->is_method());
22454
+ this->is_unnamed_type_stub_method_ = true;
22457
// Add a new field to the closure variable.
22459
add_closure_field(Named_object* var, Location loc)
22460
@@ -1089,17 +1099,13 @@
22461
this->descriptor_ = descriptor;
22464
- // Return the function's decl given an identifier.
22466
- get_or_make_decl(Gogo*, Named_object*, tree id);
22467
+ // Return the backend representation.
22469
+ get_or_make_decl(Gogo*, Named_object*);
22471
// Return the function's decl after it has been built.
22475
- go_assert(this->fndecl_ != NULL);
22476
- return this->fndecl_;
22478
+ get_decl() const;
22480
// Set the function decl to hold a tree of the function code.
22482
@@ -1170,7 +1176,7 @@
22483
// The function descriptor, if any.
22484
Expression* descriptor_;
22485
// The function decl.
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
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; }
22505
- // Return a decl for the function given an identifier.
22507
- get_or_make_decl(Gogo*, Named_object*, tree id);
22508
+ // Return a backend representation.
22510
+ get_or_make_decl(Gogo*, Named_object*);
22512
// If there is a descriptor, build it into the backend
22514
@@ -1290,7 +1299,7 @@
22515
// The function descriptor, if any.
22516
Expression* descriptor_;
22517
// The function decl if needed.
22519
+ Bfunction* fndecl_;
22523
@@ -2181,8 +2190,8 @@
22525
get_backend_variable(Gogo*, Named_object* function);
22527
- // Return a tree for the external identifier for this object.
22529
+ // Return the external identifier for this object.
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);
22543
+ write_named_hash(Gogo*, Named_type*, Function_type* hash_fntype,
22544
+ Function_type* equal_fntype);
22547
+ write_named_equal(Gogo*, Named_type*);
22549
// Build a composite literal for the uncommon type information.
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),
22561
// Get the receiver.
22562
@@ -1789,6 +1797,12 @@
22564
copy_with_receiver(Type*) const;
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.
22570
+ copy_with_receiver_as_param(bool want_pointer_receiver) const;
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
22575
@@ -1798,6 +1812,11 @@
22577
make_function_type_descriptor_type();
22579
+ // Return the backend representation of this function type. This is used
22580
+ // as the real type of a backend function declaration or defintion.
22582
+ get_backend_fntype(Gogo*);
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.
22591
+ // The backend representation of this type for backend function
22592
+ // declarations and definitions.
22596
// The type of a pointer.
22597
@@ -1915,7 +1937,7 @@
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)
22606
@@ -1926,6 +1948,10 @@
22608
is_field_name(const std::string& name) const;
22610
+ // Return whether this struct field is an unexported field named NAME.
22612
+ is_unexported_field_name(Gogo*, const std::string& name) const;
22614
// Return whether this struct field is an embedded built-in type.
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); }
22621
+ // Record that this field is defined in an imported struct.
22623
+ set_is_imported()
22624
+ { this->is_imported_ = true; }
22626
// Set the type. This is only used in error cases.
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.
22633
+ // Whether this field is defined in an imported struct.
22634
+ bool is_imported_;
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 @@
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 @@
22657
{ return this->location_; }
22659
+ // Return the package we are importing.
22662
+ { return this->package_; }
22664
// Return the next character.
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)
22673
// Go type float64, C type double.
22675
+ // Go type complex64, C type __complex float.
22677
// Go type complex128, C type __complex double.
22679
// Go type string, C type struct __go_string.
22680
@@ -126,6 +128,10 @@
22681
t = Type::lookup_float_type("float64");
22684
+ case RFT_COMPLEX64:
22685
+ t = Type::lookup_complex_type("complex64");
22688
case RFT_COMPLEX128:
22689
t = Type::lookup_complex_type("complex128");
22691
@@ -216,6 +222,7 @@
22695
+ case RFT_COMPLEX64:
22696
case RFT_COMPLEX128:
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 @@
22705
{ return this->closure_; }
22707
- // Return a tree for the code for a function.
22709
+ // Return a backend expression for the code of a function.
22710
+ static Bexpression*
22711
get_code_pointer(Gogo*, Named_object* function, Location loc);
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 @@
22722
-// Get a tree for the identifier for a named object.
22725
-Named_object::get_id(Gogo* gogo)
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()))
22735
- // We don't need the package name for builtin types.
22736
- decl_name = Gogo::unpack_hidden_name(this->name_);
22740
- std::string package_name;
22741
- if (this->package_ == NULL)
22742
- package_name = gogo->package_name();
22744
- package_name = this->package_->package_name();
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.
22756
- decl_name = package_name + '.' + Gogo::unpack_hidden_name(this->name_);
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();
22765
- if (fntype != NULL && fntype->is_method())
22767
- decl_name.push_back('.');
22768
- decl_name.append(fntype->receiver()->type()->mangled_name(gogo));
22771
- if (this->is_type())
22773
- unsigned int index;
22774
- const Named_object* in_function = this->type_value()->in_function(&index);
22775
- if (in_function != NULL)
22777
- decl_name += '$' + Gogo::unpack_hidden_name(in_function->name());
22781
- snprintf(buf, sizeof buf, "%u", index);
22782
- decl_name += '$';
22783
- decl_name += buf;
22787
- return get_identifier_from_string(decl_name);
22790
// Get a tree for a named object.
22793
@@ -1067,11 +999,6 @@
22794
return error_mark_node;
22798
- if (this->classification_ == NAMED_OBJECT_TYPE)
22799
- name = NULL_TREE;
22801
- name = this->get_id(gogo);
22803
switch (this->classification_)
22805
@@ -1099,6 +1026,7 @@
22806
decl = error_mark_node;
22807
else if (INTEGRAL_TYPE_P(TREE_TYPE(expr_tree)))
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:
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)
22821
if (func->block() != NULL)
22822
@@ -1286,124 +1214,13 @@
22826
-// Get a tree for a function decl.
22827
+// Get the backend representation.
22830
-Function::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
22832
+Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no)
22834
- if (this->fndecl_ == NULL_TREE)
22835
+ if (this->fndecl_ == NULL)
22837
- tree functype = type_to_tree(this->type_->get_backend(gogo));
22839
- if (functype != error_mark_node)
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);
22851
- if (functype == error_mark_node)
22852
- this->fndecl_ = error_mark_node;
22855
- tree decl = build_decl(this->location().gcc_location(), FUNCTION_DECL,
22858
- this->fndecl_ = decl;
22860
- if (no->package() != NULL)
22862
- else if (this->enclosing_ != NULL || Gogo::is_thunk(no))
22864
- else if (Gogo::unpack_hidden_name(no->name()) == "init"
22865
- && !this->type_->is_method())
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())
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())
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
22887
- pkgpath = Gogo::hidden_name_pkgpath(no->name());
22888
- pkgpath = Gogo::pkgpath_for_symbol(pkgpath);
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())
22896
- asm_name.append(1, '.');
22897
- Type* rtype = this->type_->receiver()->type();
22898
- asm_name.append(rtype->mangled_name(gogo));
22900
- SET_DECL_ASSEMBLER_NAME(decl,
22901
- get_identifier_from_string(asm_name));
22904
- // Why do we have to do this in the frontend?
22905
- tree restype = TREE_TYPE(functype);
22907
- build_decl(this->location().gcc_location(), RESULT_DECL, NULL_TREE,
22909
- DECL_ARTIFICIAL(resdecl) = 1;
22910
- DECL_IGNORED_P(resdecl) = 1;
22911
- DECL_CONTEXT(resdecl) = decl;
22912
- DECL_RESULT(decl) = resdecl;
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;
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_)
22928
- tree attr = get_identifier("__no_split_stack__");
22929
- DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
22932
- if (this->in_unique_section_)
22933
- resolve_unique_section (decl, 0, 1);
22935
- go_preserve_from_gc(decl);
22938
- return this->fndecl_;
22941
-// Get a tree for a function declaration.
22944
-Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
22946
- if (this->fndecl_ == NULL_TREE)
22948
// Let Go code use an asm declaration to pick up a builtin
22950
if (!this->asm_name_.empty())
22951
@@ -1412,58 +1229,46 @@
22952
builtin_functions.find(this->asm_name_);
22953
if (p != builtin_functions.end())
22955
- this->fndecl_ = p->second;
22956
+ this->fndecl_ = tree_to_function(p->second);
22957
return this->fndecl_;
22961
- tree functype = type_to_tree(this->fntype_->get_backend(gogo));
22962
+ std::string asm_name;
22963
+ if (this->asm_name_.empty())
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())
22972
+ asm_name.append(1, '.');
22973
+ Type* rtype = this->fntype_->receiver()->type();
22974
+ asm_name.append(rtype->mangled_name(gogo));
22978
- if (functype != error_mark_node)
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);
22989
+ Btype* functype = this->fntype_->get_backend_fntype(gogo);
22991
+ gogo->backend()->function(functype, no->get_id(gogo), asm_name,
22992
+ true, true, true, false, false,
22993
+ this->location());
22997
- if (functype == error_mark_node)
22998
- decl = error_mark_node;
23001
- decl = build_decl(this->location().gcc_location(), FUNCTION_DECL, id,
23003
- TREE_PUBLIC(decl) = 1;
23004
- DECL_EXTERNAL(decl) = 1;
23006
- if (this->asm_name_.empty())
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())
23015
- asm_name.append(1, '.');
23016
- Type* rtype = this->fntype_->receiver()->type();
23017
- asm_name.append(rtype->mangled_name(gogo));
23019
- SET_DECL_ASSEMBLER_NAME(decl,
23020
- get_identifier_from_string(asm_name));
23023
- this->fndecl_ = decl;
23024
- go_preserve_from_gc(decl);
23026
return this->fndecl_;
23029
+// Return the function's decl after it has been built.
23032
+Function::get_decl() const
23034
+ go_assert(this->fndecl_ != NULL);
23035
+ return function_to_tree(this->fndecl_);
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 @@
23043
Function::build_tree(Gogo* gogo, Named_object* named_function)
23045
- tree fndecl = this->fndecl_;
23046
+ tree fndecl = this->get_decl();
23047
go_assert(fndecl != NULL_TREE);
23049
tree params = NULL_TREE;
23050
@@ -1796,7 +1601,7 @@
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,
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);
23068
@@ -1869,7 +1674,7 @@
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 @@
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);
23086
@@ -2323,18 +2128,14 @@
23087
go_assert(m != NULL);
23089
Named_object* no = m->named_object();
23091
- tree fnid = no->get_id(this);
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,
23101
+ bf = no->func_declaration_value()->get_or_make_decl(this, no);
23104
- fndecl = build_fold_addr_expr(fndecl);
23105
+ tree fndecl = build_fold_addr_expr(function_to_tree(bf));
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;
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
23121
+ if (has_hidden_methods && type->named_type() != NULL)
23122
TREE_PUBLIC(decl) = 1;
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')
23132
&& (cc < '0' || cc > '9'))
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)
23144
+ this->lineoff_ = p - this->linebuf_;
23145
+ error_at(this->location(),
23146
+ "invalid character 0x%x in identifier",
23148
+ if (!has_non_ascii_char)
23150
+ buf.assign(pstart, p - pstart);
23151
+ has_non_ascii_char = true;
23153
+ if (!Lex::is_invalid_identifier(buf))
23154
+ buf.append("$INVALID$");
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)
23164
// The backend representation of a statement.
23167
-// The backend representation of a function definition.
23168
+// The backend representation of a function definition or declaration.
23171
// The backend representation of a block.
23172
@@ -266,6 +266,11 @@
23173
virtual Bexpression*
23174
convert_expression(Btype* type, Bexpression* expr, Location) = 0;
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;
23183
// Create an error statement. This is used for cases which should
23184
@@ -498,6 +503,32 @@
23186
virtual Bexpression*
23187
label_address(Blabel*, Location) = 0;
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;
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;
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*);
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 @@
23230
gogo->start_block(bloc);
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,
23238
else if (this->array_type() != NULL)
23239
@@ -1852,7 +1854,9 @@
23241
gogo->start_block(bloc);
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);
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.
23261
+Type::write_named_hash(Gogo* gogo, Named_type* name,
23262
+ Function_type* hash_fntype, Function_type* equal_fntype)
23264
+ Location bloc = Linemap::predeclared_location();
23266
+ Named_type* base_type = name->real_type()->named_type();
23267
+ go_assert(base_type != NULL);
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);
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);
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);
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);
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);
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.
23306
+Type::write_named_equal(Gogo* gogo, Named_type* name)
23308
+ Location bloc = Linemap::predeclared_location();
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);
23316
+ Named_type* base_type = name->real_type()->named_type();
23317
+ go_assert(base_type != NULL);
23319
+ // Build temporaries with the base type.
23320
+ Type* pt = Type::make_pointer_type(base_type);
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);
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);
23332
+ // Compare the values for equality.
23333
+ Expression* t1 = Expression::make_temporary_reference(p1, bloc);
23334
+ t1 = Expression::make_unary(OPERATOR_MULT, t1, bloc);
23336
+ Expression* t2 = Expression::make_temporary_reference(p2, bloc);
23337
+ t2 = Expression::make_unary(OPERATOR_MULT, t2, bloc);
23339
+ Expression* cond = Expression::make_binary(OPERATOR_EQEQ, t1, t2, bloc);
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);
23348
// Return a composite literal for the type descriptor for a plain type
23349
// of kind RUNTIME_TYPE_KIND named NAME.
23351
@@ -2164,26 +2262,9 @@
23354
go_assert(p->is_field_name("typ"));
23355
- if (!only_value_methods && m->is_value_method())
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
23368
- : mtype->parameters()->copy()),
23369
- (mtype->results() == NULL
23371
- : mtype->results()->copy()),
23372
- mtype->location());
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));
23380
go_assert(p->is_field_name("tfn"));
23381
@@ -3383,6 +3464,68 @@
23382
// Get the backend representation for a function type.
23385
+Function_type::get_backend_fntype(Gogo* gogo)
23387
+ if (this->fnbtype_ == NULL)
23389
+ Backend::Btyped_identifier breceiver;
23390
+ if (this->receiver_ != NULL)
23392
+ breceiver.name = Gogo::unpack_hidden_name(this->receiver_->name());
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();
23403
+ std::vector<Backend::Btyped_identifier> bparameters;
23404
+ if (this->parameters_ != NULL)
23406
+ bparameters.resize(this->parameters_->size());
23408
+ for (Typed_identifier_list::const_iterator p =
23409
+ this->parameters_->begin(); p != this->parameters_->end();
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();
23416
+ go_assert(i == bparameters.size());
23419
+ std::vector<Backend::Btyped_identifier> bresults;
23420
+ if (this->results_ != NULL)
23422
+ bresults.resize(this->results_->size());
23424
+ for (Typed_identifier_list::const_iterator p =
23425
+ this->results_->begin(); p != this->results_->end();
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();
23432
+ go_assert(i == bresults.size());
23435
+ this->fnbtype_ = gogo->backend()->function_type(breceiver, bparameters,
23437
+ this->location());
23441
+ return this->fnbtype_;
23444
+// Get the backend representation for a Go function type.
23447
Function_type::do_get_backend(Gogo* gogo)
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);
23454
- Backend::Btyped_identifier breceiver;
23455
- if (this->receiver_ != NULL)
23457
- breceiver.name = Gogo::unpack_hidden_name(this->receiver_->name());
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();
23468
- std::vector<Backend::Btyped_identifier> bparameters;
23469
- if (this->parameters_ != NULL)
23471
- bparameters.resize(this->parameters_->size());
23473
- for (Typed_identifier_list::const_iterator p = this->parameters_->begin();
23474
- p != this->parameters_->end();
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();
23481
- go_assert(i == bparameters.size());
23484
- std::vector<Backend::Btyped_identifier> bresults;
23485
- if (this->results_ != NULL)
23487
- bresults.resize(this->results_->size());
23489
- for (Typed_identifier_list::const_iterator p = this->results_->begin();
23490
- p != this->results_->end();
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();
23497
- go_assert(i == bresults.size());
23500
- Btype* fntype = gogo->backend()->function_type(breceiver, bparameters,
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 @@
23513
+// Make a copy of a function type with the receiver as the first
23517
+Function_type::copy_with_receiver_as_param(bool want_pointer_receiver) const
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())
23530
+ for (Typed_identifier_list::const_iterator p = orig_params->begin();
23531
+ p != orig_params->end();
23533
+ new_params->push_back(*p);
23535
+ return Type::make_function_type(NULL, new_params, this->results_,
23536
+ this->location_);
23539
// Make a copy of a function type ignoring any receiver and adding a
23540
// closure parameter.
23542
@@ -4195,7 +4316,8 @@
23544
// This is a horrible hack caused by the fact that we don't pack
23545
// the names of builtin types. FIXME.
23547
+ if (!this->is_imported_
23549
&& nt->is_builtin()
23550
&& nt->name() == Gogo::unpack_hidden_name(name))
23552
@@ -4204,6 +4326,36 @@
23556
+// Return whether this field is an unexported field named NAME.
23559
+Struct_field::is_unexported_field_name(Gogo* gogo,
23560
+ const std::string& name) const
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)
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())
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();
23578
+ && nt->is_builtin()
23579
+ && nt->name() == Gogo::unpack_hidden_name(name))
23586
// Return whether this field is an embedded built-in type.
23589
@@ -4264,13 +4416,8 @@
23592
Type* t = p->type();
23593
- if (t->is_undefined())
23594
+ if (p->is_anonymous())
23596
- error_at(p->location(), "struct field type is incomplete");
23597
- p->set_type(Type::make_error_type());
23599
- else if (p->is_anonymous())
23601
if (t->named_type() != NULL && t->points_to() != NULL)
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();
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)
23615
+ if (pf->is_unexported_field_name(gogo, name))
23620
@@ -5250,6 +5392,7 @@
23621
Type* ftype = imp->read_type();
23623
Struct_field sf(Typed_identifier(name, ftype, imp->location()));
23624
+ sf.set_is_imported();
23626
if (imp->peek_char() == ' ')
23628
@@ -9022,6 +9165,8 @@
23629
fntype->is_varargs(), location);
23630
gogo->finish_function(fntype->location());
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();
23637
@@ -9289,7 +9434,9 @@
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;
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 @@
23654
// Get the tree for the code of a function expression.
23658
Func_expression::get_code_pointer(Gogo* gogo, Named_object* no, Location loc)
23660
Function_type* fntype;
23661
@@ -1237,25 +1237,18 @@
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();
23669
- tree id = no->get_id(gogo);
23670
- if (id == error_mark_node)
23671
- return error_mark_node;
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);
23684
- if (fndecl == error_mark_node)
23685
- return error_mark_node;
23687
- return build_fold_addr_expr_loc(loc.gcc_location(), fndecl);
23688
+ return gogo->backend()->function_code_expression(fndecl, loc);
23691
// Get the tree for a function expression. This is used when we take
23692
@@ -1492,8 +1485,10 @@
23694
Func_code_reference_expression::do_get_tree(Translate_context* context)
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);
23704
// Make a reference to the code of a function.
23705
@@ -3055,8 +3050,7 @@
23706
do_lower(Gogo*, Named_object*, Statement_inserter*, int);
23709
- do_is_constant() const
23710
- { return this->expr_->is_constant(); }
23711
+ do_is_constant() const;
23714
do_numeric_constant_value(Numeric_constant*) const;
23715
@@ -3198,6 +3192,27 @@
23719
+// Return whether a type conversion is a constant.
23722
+Type_conversion_expression::do_is_constant() const
23724
+ if (!this->expr_->is_constant())
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())
23740
// Return the constant numeric value if there is one.
23743
@@ -5586,6 +5601,15 @@
23744
subcontext.type = NULL;
23747
+ if (this->op_ == OPERATOR_ANDAND || this->op_ == OPERATOR_OROR)
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;
23756
// Set the context for the left hand operand.
23759
@@ -5967,6 +5991,43 @@
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)
23767
+ const char *name;
23770
+ static tree complex64_div_decl;
23771
+ static tree complex128_div_decl;
23772
+ switch (this->left_->type()->complex_type()->bits())
23775
+ name = "__go_complex64_div";
23776
+ pdecl = &complex64_div_decl;
23777
+ ctype = Type::lookup_complex_type("complex64");
23780
+ name = "__go_complex128_div";
23781
+ pdecl = &complex128_div_decl;
23782
+ ctype = Type::lookup_complex_type("complex128");
23785
+ go_unreachable();
23787
+ Btype* cbtype = ctype->get_backend(gogo);
23788
+ tree ctype_tree = type_to_tree(cbtype);
23789
+ return Gogo::call_builtin(pdecl,
23790
+ this->location(),
23795
+ fold_convert_loc(gccloc, ctype_tree, left),
23797
+ fold_convert_loc(gccloc, ctype_tree, right));
23800
tree compute_type = excess_precision_type(type);
23801
if (compute_type != NULL_TREE)
23803
@@ -7191,6 +7252,15 @@
23804
if (this->code_ == BUILTIN_OFFSETOF)
23806
Expression* arg = this->one_arg();
23808
+ if (arg->bound_method_expression() != NULL
23809
+ || arg->interface_field_reference_expression() != NULL)
23811
+ this->report_error(_("invalid use of method value as argument "
23816
Field_reference_expression* farg = arg->field_reference_expression();
23817
while (farg != NULL)
23819
@@ -7200,7 +7270,8 @@
23820
// it must not be reached through pointer indirections.
23821
if (farg->expr()->deref() != farg->expr())
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"));
23828
// Go up until we reach the original base.
23829
@@ -7476,7 +7547,7 @@
23830
switch (nc.to_unsigned_long(&v))
23832
case Numeric_constant::NC_UL_VALID:
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.
23847
+ if (!nc.to_int(&val))
23848
+ go_unreachable();
23849
+ int bits = mpz_sizeinbase(val, 2);
23851
+ Type* int_type = Type::lookup_integer_type("int");
23852
+ if (bits >= int_type->integer_type()->bits())
23854
+ error_at(e->location(), "%s argument too large for make",
23855
+ is_length ? "len" : "cap");
23862
if (e->type()->integer_type() != NULL)
23863
@@ -7595,6 +7681,8 @@
23865
Builtin_call_expression::do_is_constant() const
23867
+ if (this->is_error_expression())
23869
switch (this->code_)
23872
@@ -9744,15 +9832,9 @@
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 @@
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));
23897
closure_tree = NULL_TREE;
23899
@@ -10817,11 +10899,20 @@
23901
String_index_expression::do_check_types(Gogo*)
23903
- if (this->start_->type()->integer_type() == NULL)
23904
+ Numeric_constant nc;
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"));
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 @@
23930
+/* Regno offset to be used in the register search. */
23931
+static int search_ofs;
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)
23940
- static int search_ofs;
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 (®_obstack);
23949
live = BITMAP_ALLOC (®_obstack);
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)
23958
-- (GNU-Linux/s390x Version) --
23960
--- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
23961
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
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 --
23966
------------------------------------------------------------------------------
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)
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).
23977
type Name is (SYSTEM_NAME_GNAT);
23978
System_Name : constant Name := SYSTEM_NAME_GNAT;
23980
-- Storage-related Declarations
23982
type Address is private;
23983
+ pragma Preelaborable_Initialization (Address);
23984
Null_Address : constant Address;
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)
23993
-- (GNU-Linux/alpha Version) --
23995
--- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
23996
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
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 --
24001
------------------------------------------------------------------------------
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)
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).
24012
type Name is (SYSTEM_NAME_GNAT);
24013
System_Name : constant Name := SYSTEM_NAME_GNAT;
24015
-- Storage-related Declarations
24017
type Address is private;
24018
+ pragma Preelaborable_Initialization (Address);
24019
Null_Address : constant Address;
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)
24028
-- (VxWorks Version ARM) --
24030
--- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
24031
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
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
------------------------------------------------------------------------------
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).
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).
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)
24056
-- (GNU-Linux/s390 Version) --
24058
--- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
24059
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
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 --
24064
------------------------------------------------------------------------------
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)
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).
24075
type Name is (SYSTEM_NAME_GNAT);
24076
System_Name : constant Name := SYSTEM_NAME_GNAT;
24078
-- Storage-related Declarations
24080
type Address is private;
24081
+ pragma Preelaborable_Initialization (Address);
24082
Null_Address : constant Address;
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)
24090
+------------------------------------------------------------------------------
24092
+-- GNAT COMPILER COMPONENTS --
24094
+-- I N D E P S W --
24097
+-- (Darwin version) --
24099
+-- Copyright (C) 2013, Free Software Foundation, Inc. --
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. --
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. --
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/>. --
24117
+-- GNAT was originally developed by the GNAT team at New York University. --
24118
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
24120
+------------------------------------------------------------------------------
24122
+-- This is the Darwin version
24124
+package body Indepsw is
24126
+ Map_Switch : aliased constant String := "-Wl,-map,";
24132
+ procedure Convert
24133
+ (Switch : Switch_Kind;
24134
+ Argument : String;
24135
+ To : out String_List_Access)
24140
+ To := new Argument_List'(1 => new String'(Map_Switch & Argument));
24144
+ ------------------
24145
+ -- Is_Supported --
24146
+ ------------------
24148
+ function Is_Supported (Switch : Switch_Kind) return Boolean is
24154
+ end Is_Supported;
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)
24163
-- (GNU/Linux-SPARCV9 Version) --
24165
--- Copyright (C) 1992-2011, Free Software Foundation, Inc. --
24166
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
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 --
24171
------------------------------------------------------------------------------
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)
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).
24182
type Name is (SYSTEM_NAME_GNAT);
24183
System_Name : constant Name := SYSTEM_NAME_GNAT;
24185
-- Storage-related Declarations
24187
type Address is private;
24188
+ pragma Preelaborable_Initialization (Address);
24189
Null_Address : constant Address;
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)
24197
+2014-03-30 Eric Botcazou <ebotcazou@adacore.com>
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.
24211
+2014-03-13 Eric Botcazou <ebotcazou@adacore.com>
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.
24221
+2014-01-12 Eric Botcazou <ebotcazou@adacore.com>
24224
+ * gcc-interface/cuintp.c (build_cst_from_int): Use 32-bit integer type
24225
+ as intermediate type.
24226
+ (UI_To_gnu): Likewise.
24228
+2013-12-12 Eric Botcazou <ebotcazou@adacore.com>
24229
+ Iain Sandoe <iain@codesourcery.com>
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.
24237
+2013-12-04 Eric Botcazou <ebotcazou@adacore.com>
24240
+ * indepsw-darwin.adb: New file.
24242
+2013-10-19 Eric Botcazou <ebotcazou@adacore.com>
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.
24249
+2013-10-19 Eric Botcazou <ebotcazou@adacore.com>
24251
+ * gcc-interface/utils.c (gnat_set_type_context): New function.
24252
+ (gnat_pushdecl): Use it to set the context of the type.
24254
2013-10-16 Release Manager
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 @@
24272
Float_Rep : Float_Rep_Kind;
24273
+ Precision : Positive;
24275
Alignment : Natural)
24277
@@ -2063,14 +2065,25 @@
24280
Write_Str ("mod 2**");
24281
- Write_Int (Int (Size / Positive'Max (1, Count)));
24282
+ Write_Int (Int (Precision / Positive'Max (1, Count)));
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 (";");
24295
+ Write_Str ("for " & T (1 .. Last) & "'Value_Size use ");
24296
+ Write_Int (Int (Precision));
24297
+ Write_Line (";");
24299
+ Write_Str ("for " & T (1 .. Last) & "'Object_Size use ");
24300
+ Write_Int (Int (Size));
24301
+ Write_Line (";");
24304
Write_Str ("for " & T & "'Alignment use ");
24305
Write_Int (Int (Alignment / 8));
24307
@@ -2092,15 +2105,13 @@
24308
if Digs > 0 and then not Complex and then Count = 0 then
24310
Ent : constant Entity_Id := New_Standard_Entity;
24311
- Esize : constant Pos := Pos ((Size + Alignment - 1)
24312
- / Alignment * Alignment);
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)));
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)
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)
24343
-- (GNU-Linux/MIPSEL Version) --
24345
--- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
24346
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
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 --
24351
-- Storage-related Declarations
24353
type Address is private;
24354
+ pragma Preelaborable_Initialization (Address);
24355
Null_Address : constant Address;
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)
24364
-- (GNU-Linux/MIPS Version) --
24366
--- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
24367
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
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 --
24372
-- Storage-related Declarations
24374
type Address is private;
24375
+ pragma Preelaborable_Initialization (Address);
24376
Null_Address : constant Address;
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)
24385
-- (GNU-Linux/MIPS64EL Version) --
24387
--- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
24388
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
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 --
24393
-- Storage-related Declarations
24395
type Address is private;
24396
+ pragma Preelaborable_Initialization (Address);
24397
Null_Address : constant Address;
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 *);
24412
@@ -532,6 +533,22 @@
24413
free_binding_level = level;
24416
+/* Set the context of TYPE and its parallel types (if any) to CONTEXT. */
24419
+gnat_set_type_context (tree type, tree context)
24421
+ tree decl = TYPE_STUB_DECL (type);
24423
+ TYPE_CONTEXT (type) = context;
24425
+ while (decl && DECL_PARALLEL_TYPE (decl))
24427
+ TYPE_CONTEXT (DECL_PARALLEL_TYPE (decl)) = context;
24428
+ decl = TYPE_STUB_DECL (DECL_PARALLEL_TYPE (decl));
24432
/* Record DECL as belonging to the current lexical scope and use GNAT_NODE
24433
for location information and flag propagation. */
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;
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))
24456
TYPE_NAME (t) = decl;
24457
- TYPE_CONTEXT (t) = DECL_CONTEXT (decl);
24458
+ gnat_set_type_context (t, DECL_CONTEXT (decl));
24462
@@ -1692,93 +1709,74 @@
24463
TYPE_SIZE_UNIT (new_record_type)
24464
= size_int (TYPE_ALIGN (record_type) / BITS_PER_UNIT);
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))
24473
tree field_type = TREE_TYPE (old_field);
24474
tree field_name = DECL_NAME (old_field);
24476
tree curpos = bit_position (old_field);
24477
+ tree pos, new_field;
24479
unsigned int align = 0;
24482
+ /* We're going to do some pattern matching below so remove as many
24483
+ conversions as possible. */
24484
+ curpos = remove_conversions (curpos, true);
24486
/* See how the position was modified from the last position.
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
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.
24500
- If this is a union, the position can be taken as zero. */
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);
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;
24511
pos = compute_related_constant (curpos, last_pos);
24513
- if (!pos && TREE_CODE (curpos) == MULT_EXPR
24515
+ && TREE_CODE (curpos) == MULT_EXPR
24516
&& host_integerp (TREE_OPERAND (curpos, 1), 1))
24518
tree offset = TREE_OPERAND (curpos, 0);
24519
align = tree_low_cst (TREE_OPERAND (curpos, 1), 1);
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)
24527
- unsigned HOST_WIDE_INT mask
24528
- = TREE_INT_CST_LOW (TREE_OPERAND (offset, 1));
24531
- for (i = 0; i < HOST_BITS_PER_WIDE_INT; i++)
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);
24546
- else if (!pos && TREE_CODE (curpos) == PLUS_EXPR
24547
- && TREE_CODE (TREE_OPERAND (curpos, 1)) == INTEGER_CST
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),
24556
+ (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1))
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);
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);
24572
- else if (potential_alignment_gap (prev_old_field, old_field,
24574
+ else if (potential_alignment_gap (prev_old_field, old_field, pos))
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);
24583
/* If we can't compute a position, set it to zero.
24585
- ??? We really should abort here, but it's too much work
24586
- to get this correct for all cases. */
24588
+ ??? We really should abort here, but it's too much work
24589
+ to get this correct for all cases. */
24591
pos = bitsize_zero_node;
24593
@@ -2553,6 +2551,32 @@
24597
+/* Return VALUE scaled by the biggest power-of-2 factor of EXPR. */
24599
+static unsigned int
24600
+scale_by_factor_of (tree expr, unsigned int value)
24602
+ expr = remove_conversions (expr, true);
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)
24609
+ unsigned HOST_WIDE_INT mask = TREE_INT_CST_LOW (TREE_OPERAND (expr, 1));
24610
+ unsigned int i = 0;
24612
+ while ((mask & 1) == 0 && i < HOST_BITS_PER_WIDE_INT)
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)"
24634
-GCC_LINK=$(CC) $(GCC_LINK_FLAGS) $(ADA_INCLUDES)
24635
+GCC_LINK=$(CC) $(GCC_LINK_FLAGS) $(ADA_INCLUDES) $(LDFLAGS)
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 @@
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) \
24645
+ +$(GCC_LINK) $(ALL_CFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) $(TOOLS_LIBS)
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) \
24650
+ +$(GCC_LINK) $(ALL_CFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) $(TOOLS_LIBS)
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)
24660
* C Implementation File *
24662
- * Copyright (C) 1992-2012, Free Software Foundation, Inc. *
24663
+ * Copyright (C) 1992-2014, Free Software Foundation, Inc. *
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- *
24669
build_cst_from_int (tree type, HOST_WIDE_INT low)
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));
24676
return build_int_cst_type (type, low);
24678
@@ -99,20 +99,13 @@
24679
gcc_assert (Length > 0);
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);
24692
- if (TREE_CODE (comp_type) != REAL_TYPE
24693
- && TYPE_PRECISION (comp_type)
24694
- < TYPE_PRECISION (long_integer_type_node))
24696
- comp_type = long_integer_type_node;
24697
- gcc_assert (TYPE_PRECISION (comp_type) > 16);
24700
gnu_base = build_cst_from_int (comp_type, Base);
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
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,
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. */
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))
24755
const tree c_types[]
24756
= { float_type_node, double_type_node, long_double_type_node };
24757
@@ -742,28 +743,26 @@
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. */
24763
+ if (!skip_p && !vector_p)
24764
for (nameloop = 0; nameloop < ARRAY_SIZE (c_types); nameloop++)
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];
24771
- if (TYPE_MODE (typ) == i)
24772
+ if (TYPE_MODE (type) == i)
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));
24783
/* If no predefined C types were found, register the mode itself. */
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));
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)
24800
-- (GNU/Linux-SPARC Version) --
24802
--- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
24803
+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
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 --
24808
------------------------------------------------------------------------------
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)
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).
24819
type Name is (SYSTEM_NAME_GNAT);
24820
System_Name : constant Name := SYSTEM_NAME_GNAT;
24822
-- Storage-related Declarations
24824
type Address is private;
24825
+ pragma Preelaborable_Initialization (Address);
24826
Null_Address : constant Address;
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)
24835
-- (Compiler Version) --
24837
--- Copyright (C) 1992-2011 Free Software Foundation, Inc. --
24838
+-- Copyright (C) 1992-2014 Free Software Foundation, Inc. --
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 --
24844
------------------------------------------------------------------------------
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
24855
-- Storage-related Declarations
24857
type Address is private;
24858
+ pragma Preelaborable_Initialization (Address);
24859
Null_Address : constant Address;
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;
24870
- /* Lower the finally block itself. */
24871
- lower_eh_constructs_1 (state, &finally);
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);
24880
+ lower_eh_constructs_1 (state, &finally);
24881
gimple_seq_add_seq (&tf->top_p_seq, finally);
24883
/* Redirect each incoming goto edge. */
24884
@@ -2502,12 +2500,6 @@
24888
- case TARGET_MEM_REF:
24889
- if (TREE_CODE (TMR_BASE (expr)) == ADDR_EXPR
24890
- && !TMR_INDEX (expr) && !TMR_INDEX2 (expr))
24892
- return !TREE_THIS_NOTRAP (expr);
24894
case COMPONENT_REF:
24895
case REALPART_EXPR:
24896
case IMAGPART_EXPR:
24897
@@ -2534,10 +2526,36 @@
24899
return !in_array_bounds_p (expr);
24901
+ case TARGET_MEM_REF:
24903
+ if (TREE_CODE (TREE_OPERAND (expr, 0)) == ADDR_EXPR
24904
+ && tree_could_trap_p (TREE_OPERAND (TREE_OPERAND (expr, 0), 0)))
24906
+ if (TREE_THIS_NOTRAP (expr))
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)))
24913
if (TREE_CODE (TREE_OPERAND (expr, 0)) == ADDR_EXPR)
24917
+ tree base = TREE_OPERAND (TREE_OPERAND (expr, 0), 0);
24918
+ double_int off = mem_ref_offset (expr);
24919
+ if (off.is_negative ())
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))
24927
+ /* Now we are sure the first byte of the access is inside
24934
return !TREE_THIS_NOTRAP (expr);
24936
@@ -4166,8 +4184,11 @@
24937
/* If the block is totally empty, look for more unsplitting cases. */
24938
if (gsi_end_p (gsi))
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))
24949
return ret | cleanup_empty_eh_unsplit (bb, e_out, lp);
24950
@@ -4304,11 +4325,12 @@
24951
remove_unreachable_handlers ();
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)
24957
bool changed = false;
24959
- changed |= unsplit_all_eh ();
24961
+ changed |= unsplit_all_eh ();
24962
changed |= cleanup_all_empty_eh ();
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 @@
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)
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)
24982
/* If both are functions, check result characteristics. */
24983
- if (check_result_characteristics (s1, s2, errmsg, err_len)
24985
+ if (check_result_characteristics (s1, s2, errmsg, err_len) == FAILURE
24986
+ || check_result_characteristics (s2, s1, errmsg, err_len) == FAILURE)
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;
24998
- if (gfc_pure (NULL) && !isym->pure)
24999
+ if (!isym->pure && gfc_pure (NULL))
25001
gfc_error ("Subroutine call to intrinsic '%s' at %L is not PURE", name,
25003
@@ -4236,6 +4236,9 @@
25004
return MATCH_ERROR;
25008
+ gfc_unset_implicit_pure (NULL);
25010
c->resolved_sym->attr.noreturn = isym->noreturn;
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);
25020
if (e->rank != class_ts.u.derived->components->as->rank)
25021
- class_array_data_assign (&block, ctree, parmse->expr, true);
25023
+ gcc_assert (class_ts.u.derived->components->as->type
25024
+ == AS_ASSUMED_RANK);
25025
+ class_array_data_assign (&block, ctree, parmse->expr, false);
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));
25034
- gcc_assert (!optional || (optional && !copyback));
25038
@@ -6343,7 +6346,13 @@
25039
/* Returns a reference to the scalar evaluated outside the loop
25041
gfc_conv_expr (se, expr);
25042
- se->expr = gfc_build_addr_expr (NULL_TREE, se->expr);
25044
+ if (expr->ts.type == BT_CHARACTER
25045
+ && expr->expr_type != EXPR_FUNCTION)
25046
+ gfc_conv_string_parameter (se);
25048
+ se->expr = gfc_build_addr_expr (NULL_TREE, se->expr);
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)
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>
25064
@@ -2487,6 +2487,11 @@
25065
a reference to the value. */
25066
gfc_conv_expr (&se, expr);
25069
+ /* Ensure that a pointer to the string is stored. */
25070
+ if (expr->ts.type == BT_CHARACTER)
25071
+ gfc_conv_string_parameter (&se);
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 @@
25084
@@ -8015,9 +8021,9 @@
25085
jump_label2 = gfc_build_label_decl (NULL_TREE);
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);
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);
25114
- /* Get the rhs size. Fix both sizes. */
25115
+ /* Get the rhs size and fix it. */
25117
desc2 = rss->info->data.array.descriptor;
25121
size2 = gfc_index_one_node;
25122
for (n = 0; n < expr2->rank; n++)
25124
@@ -8089,8 +8107,6 @@
25125
gfc_array_index_type,
25129
- size1 = gfc_evaluate_now (size1, &fblock);
25130
size2 = gfc_evaluate_now (size2, &fblock);
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 @@
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);
25146
if (s == SAVE_EXPLICIT && attr->save == SAVE_EXPLICIT)
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 @@
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);
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 @@
25167
return MATCH_ERROR;
25169
+ gfc_unset_implicit_pure (gfc_current_ns->proc_name);
25171
- if (gfc_implicit_pure (NULL))
25172
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
25174
/* Mark the variable as having appeared in a data statement. */
25175
if (gfc_add_data (&sym->attr, sym->name, &sym->declared_at) == FAILURE)
25177
@@ -571,10 +569,8 @@
25178
gfc_error ("DATA statement at %C is not allowed in a PURE procedure");
25179
return MATCH_ERROR;
25181
+ gfc_unset_implicit_pure (gfc_current_ns->proc_name);
25183
- if (gfc_implicit_pure (NULL))
25184
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
25189
@@ -1737,6 +1733,7 @@
25190
"a PURE procedure");
25191
return MATCH_ERROR;
25193
+ gfc_unset_implicit_pure (gfc_current_ns->proc_name);
25195
/* Match NULL() initialization. */
25196
m = gfc_match_null (init);
25197
@@ -2045,6 +2042,10 @@
25201
+ if (current_attr.flavor != FL_PARAMETER
25202
+ && gfc_state_stack->state != COMP_DERIVED)
25203
+ gfc_unset_implicit_pure (gfc_current_ns->proc_name);
25205
if (m != MATCH_YES)
25208
@@ -5069,7 +5070,14 @@
25209
if (gfc_add_proc (&c->attr, name, NULL) == FAILURE)
25210
return MATCH_ERROR;
25217
+ c->tb = XCNEW (gfc_typebound_proc);
25218
+ c->tb->where = gfc_current_locus;
25222
/* Set interface. */
25223
if (proc_if != NULL)
25224
@@ -7384,6 +7392,7 @@
25227
/* Check a derived type that is being extended. */
25230
check_extended_derived_type (char *name)
25232
@@ -7395,14 +7404,15 @@
25236
+ extended = gfc_find_dt_in_generic (extended);
25241
- gfc_error ("No such symbol in TYPE definition at %C");
25242
+ gfc_error ("Symbol '%s' at %C has not been previously defined", name);
25246
- extended = gfc_find_dt_in_generic (extended);
25248
if (extended->attr.flavor != FL_DERIVED)
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 @@
25259
- show_expr (ts->u.cl->length);
25261
+ show_expr (ts->u.cl->length);
25262
fprintf(dumpfile, " %d", ts->kind);
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)
25282
+2014-03-29 Mikael Morin <mikael@gcc.gnu.org>
25285
+ * trans-intrinsic.c (gfc_conv_intrinsic_ichar): Enlarge argument
25288
+2014-03-28 Mikael Morin <mikael@gcc.gnu.org>
25289
+ Tobias Burnus <burnus@net-b.de>
25292
+ * trans-expr.c (gfc_conv_derived_to_class): Avoid
25293
+ generation of out-of-bounds range expr.
25295
+2014-03-28 Thomas Koenig <tkoenig@gcc.gnu.org>
25298
+ * frontend-passes.c (cfe_code): Do not walk subtrees
25301
+2014-03-20 Tobias Burnus <burnus@net-b.de>
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.
25322
+2014-03-08 Janus Weil <janus@gcc.gnu.org>
25325
+ * simplify.c (gfc_simplify_shape): Only clear shape if it was really
25326
+ created successfully.
25328
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
25330
+ Backport from mainline
25331
+ 2014-02-11 Jakub Jelinek <jakub@redhat.com>
25334
+ * trans-decl.c (gfc_build_dummy_array_decl): Set TREE_NO_WARNING
25335
+ on decl if sym->attr.optional.
25337
+2014-03-02 Mikael Morin <mikael@gcc.gnu.org>
25340
+ * frontend-passes.c (optimize_comparison): Guard two union accesses
25341
+ with the corresponding tag checks.
25343
+2014-02-22 Mikael Morin <mikael@gcc.gnu.org>
25346
+ * trans-intrinsic.c (gfc_conv_intrinsic_ichar): Calculate the
25347
+ number of arguments.
25349
+2014-02-19 Tobias Burnus <burnus@net-b.de>
25352
+ * expr.c (gfc_check_pointer_assign): Add check for
25354
+ * trans-decl.c (gfc_get_symbol_decl): Correctly generate
25355
+ external decl in a corner case.
25357
+2014-02-19 Janus Weil <janus@gcc.gnu.org>
25359
+ Backports from mainline:
25360
+ 2014-02-17 Janus Weil <janus@gcc.gnu.org>
25363
+ * resolve.c (build_default_init_expr): Don't initialize character
25364
+ variable if -fno-automatic is given.
25366
+ 2014-02-18 Janus Weil <janus@gcc.gnu.org>
25369
+ * resolve.c (check_generic_tbp_ambiguity): Check for presence of dummy
25370
+ arguments to prevent ICE.
25372
+2014-02-09 Janus Weil <janus@gcc.gnu.org>
25374
+ Backport from mainline
25375
+ 2013-10-21 Tobias Burnus <burnus@net-b.de>
25379
+ * decl.c (match_ppc_decl): Prevent later double free.
25381
+2014-02-08 Mikael Morin <mikael@gcc.gnu.org>
25384
+ * primary.c (gfc_convert_to_structure_constructor): Avoid null pointer
25387
+2014-02-07 Paul Thomas <pault@gcc.gnu.org>
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.
25397
+2014-02-01 Paul Thomas <pault@gcc.gnu.org>
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.
25407
+2014-01-26 Mikael Morin <mikael@gcc.gnu.org>
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
25417
+ (read_module): Add forced pointer components association for derived
25420
+2014-01-19 Paul Thomas <pault@gcc.gnu.org>
25422
+ Backport from mainline
25423
+ 2013-12-01 Paul Thomas <pault@gcc.gnu.org>
25426
+ * trans-array.c (gfc_alloc_allocatable_for_assignment): Do not
25427
+ use the array bounds of an unallocated array but set its size
25430
+2014-01-19 Paul Thomas <pault@gcc.gnu.org>
25432
+ Backport from mainline
25433
+ 2013-12-01 Paul Thomas <pault@gcc.gnu.org>
25436
+ * resolve.c (resolve_transfer): EXPR_NULL is always in an
25437
+ invalid context in a transfer statement.
25439
+2014-01-11 Janus Weil <janus@gcc.gnu.org>
25441
+ Backport from mainline
25442
+ 2013-12-29 Janus Weil <janus@gcc.gnu.org>
25446
+ * dump-parse-tree.c (show_typespec): Check for charlen.
25447
+ * invoke.texi: Fix documentation of -fdump-fortran-optimized and
25448
+ -fdump-parse-tree.
25450
+2014-01-04 Janus Weil <janus@gcc.gnu.org>
25452
+ Backport from mainline
25453
+ 2014-01-02 Janus Weil <janus@gcc.gnu.org>
25456
+ * resolve.c (resolve_typebound_procedures): No need to create the vtab
25459
+2013-12-31 Janus Weil <janus@gcc.gnu.org>
25461
+ Backport from mainline
25462
+ 2013-12-30 Janus Weil <janus@gcc.gnu.org>
25465
+ * resolve.c (resolve_symbol): Check that symbol is not only flavorless
25466
+ but also untyped.
25468
+2013-12-18 Janus Weil <janus@gcc.gnu.org>
25470
+ Backport from mainline
25471
+ 2013-12-15 Janus Weil <janus@gcc.gnu.org>
25474
+ * class.c (gfc_find_intrinsic_vtab): Handle BT_CLASS.
25476
+2013-11-30 Paul Thomas <pault@gcc.gnu.org>
25478
+ Backport from mainline
25479
+ 2013-11-04 Paul Thomas <pault@gcc.gnu.org>
25482
+ * trans-expr.c (gfc_conv_class_to_class): Remove spurious
25485
+2013-11-17 Janus Weil <janus@gcc.gnu.org>
25487
+ Backport from mainline
25488
+ 2013-11-07 Janus Weil <janus@gcc.gnu.org>
25491
+ * primary.c (gfc_expr_attr): Check for result symbol.
25493
+2013-11-16 Janus Weil <janus@gcc.gnu.org>
25495
+ Backport from mainline
25496
+ 2013-09-20 Janus Weil <janus@gcc.gnu.org>
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.
25504
+2013-11-16 Paul Thomas <pault@gcc.gnu.org>
25507
+ * trans-io.c (transfer_expr): If the backend_decl for a derived
25508
+ type is missing, build it with gfc_typenode_for_spec.
25510
+2013-11-05 Steven G. Kargl <kargl@gcc.gnu.org>
25513
+ * check.c (gfc_check_reshape): ensure that shape is a constant
25516
+2013-11-02 Janus Weil <janus@gcc.gnu.org>
25518
+ Backport from mainline
25519
+ 2013-09-23 Janus Weil <janus@gcc.gnu.org>
25522
+ * decl.c (check_extended_derived_type): Prevent segfault, modify error
25525
2013-10-16 Release Manager
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 @@
25534
gfc_expr *lhs, *rhs;
25536
+ gfc_ref *ref, *class_ref, *tail;
25538
+ /* Find the last class reference. */
25539
+ class_ref = NULL;
25540
+ for (ref = e->ref; ref; ref = ref->next)
25542
+ if (ref->type == REF_COMPONENT
25543
+ && ref->u.c.component->ts.type == BT_CLASS)
25546
+ if (ref->next == NULL)
25550
+ /* Remove and store all subsequent references after the
25551
+ CLASS reference. */
25554
+ tail = class_ref->next;
25555
+ class_ref->next = NULL;
25563
lhs = gfc_expr_to_initialize (e);
25564
gfc_add_vptr_component (lhs);
25566
+ /* Remove the _vptr component and restore the original tail
25570
+ gfc_free_ref_list (class_ref->next);
25571
+ class_ref->next = tail;
25575
+ gfc_free_ref_list (e->ref);
25579
if (class_expr != NULL_TREE)
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 @@
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)
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);
25604
@@ -3679,9 +3681,8 @@
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);
25612
if (gfc_has_vector_index (rvalue))
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 @@
25623
-/* Recursive function to find a pointer within a tree by brute force. */
25625
-static pointer_info *
25626
-fp2 (pointer_info *p, const void *target)
25633
- if (p->u.pointer == target)
25636
- q = fp2 (p->left, target);
25640
- return fp2 (p->right, target);
25644
-/* During reading, find a pointer_info node from the pointer value.
25645
- This amounts to a brute-force search. */
25647
-static pointer_info *
25648
-find_pointer2 (void *p)
25650
- return fp2 (pi_root, p);
25654
/* Resolve any fixups using a known pointer. */
25657
@@ -2522,45 +2491,13 @@
25658
the namespace and is not loaded again. */
25661
-mio_component_ref (gfc_component **cp, gfc_symbol *sym)
25662
+mio_component_ref (gfc_component **cp)
25664
- char name[GFC_MAX_SYMBOL_LEN + 1];
25665
- gfc_component *q;
25668
p = mio_pointer_ref (cp);
25669
if (p->type == P_UNKNOWN)
25670
p->type = P_COMPONENT;
25672
- if (iomode == IO_OUTPUT)
25673
- mio_pool_string (&(*cp)->name);
25676
- mio_internal_string (name);
25678
- if (sym && sym->attr.is_class)
25679
- sym = sym->components->ts.u.derived;
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. */
25687
- if (sym->components != NULL && p->u.pointer == NULL)
25689
- /* Symbol already loaded, so search by name. */
25690
- q = gfc_find_component (sym, name, true, true);
25693
- associate_integer_pointer (p, q);
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;
25704
@@ -2917,7 +2854,7 @@
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);
25712
case REF_SUBSTRING:
25713
@@ -3772,7 +3709,9 @@
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"). */
25723
mio_symbol (gfc_symbol *sym)
25724
@@ -3782,6 +3721,7 @@
25727
mio_symbol_attribute (&sym->attr);
25729
mio_typespec (&sym->ts);
25730
if (sym->ts.type == BT_CLASS)
25731
sym->attr.class_ok = 1;
25732
@@ -3812,7 +3752,6 @@
25734
/* Note that components are always saved, even if they are supposed
25735
to be private. Component access is checked during searching. */
25737
mio_component_list (&sym->components, sym->attr.vtype);
25739
if (sym->components != NULL)
25740
@@ -3914,14 +3853,17 @@
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). */
25752
+skip_list (int nest_level = 0)
25757
+ level = nest_level;
25760
switch (parse_atom ())
25761
@@ -4555,7 +4497,6 @@
25762
info->u.rsym.ns = atom_int;
25764
get_module_locus (&info->u.rsym.where);
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 @@
25772
|| (sym->attr.flavor == FL_VARIABLE && info->u.rsym.ns !=1))
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)
25788
+ gfc_component *c;
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. */
25798
+ skip_list (); /* array_spec. */
25799
+ require_atom (ATOM_INTEGER); /* result. */
25800
+ /* not a cray pointer. */
25802
+ mio_lparen (); /* component list opening. */
25803
+ for (c = sym->components; c; c = c->next)
25806
+ const char *comp_name;
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. */
25818
+ mio_rparen (); /* component list closing. */
25820
+ skip_list (1); /* symbol end. */
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;
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))
25840
gfc_error ("Variable %s cannot be assigned in PURE procedure at %C",
25842
@@ -1317,8 +1318,8 @@
25843
return MATCH_ERROR;
25846
- if (gfc_implicit_pure (NULL) && gfc_impure_variable (result->symtree->n.sym))
25847
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
25849
+ gfc_unset_implicit_pure (NULL);
25853
@@ -1838,8 +1839,7 @@
25857
- if (gfc_implicit_pure (NULL))
25858
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
25859
+ gfc_unset_implicit_pure (NULL);
25861
warn = (open->err || open->iostat) ? true : false;
25863
@@ -2251,8 +2251,7 @@
25867
- if (gfc_implicit_pure (NULL))
25868
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
25869
+ gfc_unset_implicit_pure (NULL);
25871
warn = (close->iostat || close->err) ? true : false;
25873
@@ -2419,8 +2418,7 @@
25877
- if (gfc_implicit_pure (NULL))
25878
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
25879
+ gfc_unset_implicit_pure (NULL);
25882
new_st.ext.filepos = fp;
25883
@@ -3276,9 +3274,8 @@
25884
"an internal file in a PURE procedure",
25887
- if (gfc_implicit_pure (NULL) && (k == M_READ || k == M_WRITE))
25888
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
25890
+ if (k == M_READ || k == M_WRITE)
25891
+ gfc_unset_implicit_pure (NULL);
25895
@@ -3809,8 +3806,7 @@
25896
return MATCH_ERROR;
25899
- if (gfc_implicit_pure (NULL))
25900
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
25901
+ gfc_unset_implicit_pure (NULL);
25905
@@ -3969,8 +3965,7 @@
25906
return MATCH_ERROR;
25909
- if (gfc_implicit_pure (NULL))
25910
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
25911
+ gfc_unset_implicit_pure (NULL);
25913
new_st.block = gfc_get_code ();
25914
new_st.block->op = EXEC_IOLENGTH;
25915
@@ -4023,8 +4018,7 @@
25919
- if (gfc_implicit_pure (NULL))
25920
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
25921
+ gfc_unset_implicit_pure (NULL);
25923
if (inquire->id != NULL && inquire->pending == NULL)
25925
@@ -4212,8 +4206,7 @@
25929
- if (gfc_implicit_pure (NULL))
25930
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
25931
+ gfc_unset_implicit_pure (NULL);
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. */
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)
25948
inserted_block = NULL;
25949
changed_statement = NULL;
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
25956
+ b = sum(foo(a) + foo(a))
25963
+ b = sum(tmp + tmp)
25967
+ if ((*c)->op == EXEC_WHERE)
25969
+ *walk_subtrees = 0;
25977
@@ -1214,7 +1237,9 @@
25978
/* Replace A // B < A // C with B < C, and A // B < C // B
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)
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)
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
25997
This file is part of GCC.
25998
@@ -1259,9 +1259,10 @@
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))
26011
gfc_error ("Invalid expression in the structure constructor for "
26012
@@ -1269,12 +1270,8 @@
26013
comp->name, &cons->expr->where);
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;
26023
+ gfc_unset_implicit_pure (NULL);
26027
@@ -3295,8 +3292,7 @@
26031
- if (gfc_implicit_pure (NULL))
26032
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
26033
+ gfc_unset_implicit_pure (NULL);
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,
26041
- if (gfc_implicit_pure (NULL))
26042
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
26043
+ gfc_unset_implicit_pure (NULL);
26047
@@ -8705,10 +8700,11 @@
26048
&& exp->value.op.op == INTRINSIC_PARENTHESES)
26049
exp = exp->value.op.op1;
26051
- if (exp && exp->expr_type == EXPR_NULL && exp->ts.type == BT_UNKNOWN)
26052
+ if (exp && exp->expr_type == EXPR_NULL
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",
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);
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);
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);
26085
@@ -11057,7 +11053,7 @@
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)
26092
gfc_actual_arglist *arg;
26093
init_expr = gfc_get_expr ();
26094
@@ -11877,6 +11873,7 @@
26096
gfc_symbol *sym1, *sym2;
26097
const char *pass1, *pass2;
26098
+ gfc_formal_arglist *dummy_args;
26100
gcc_assert (t1->specific && t2->specific);
26101
gcc_assert (!t1->specific->is_generic);
26102
@@ -11899,19 +11896,33 @@
26106
- /* Compare the interfaces. */
26107
+ /* Determine PASS arguments. */
26108
if (t1->specific->nopass)
26110
else if (t1->specific->pass_arg)
26111
pass1 = t1->specific->pass_arg;
26113
- pass1 = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym)->sym->name;
26115
+ dummy_args = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym);
26117
+ pass1 = dummy_args->sym->name;
26121
if (t2->specific->nopass)
26123
else if (t2->specific->pass_arg)
26124
pass2 = t2->specific->pass_arg;
26126
- pass2 = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym)->sym->name;
26128
+ dummy_args = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym);
26130
+ pass2 = dummy_args->sym->name;
26135
+ /* Compare the interfaces. */
26136
if (gfc_compare_interfaces (sym1, sym2, sym2->name, !t1->is_operator, 0,
26137
NULL, 0, pass1, pass2))
26139
@@ -12425,9 +12436,6 @@
26140
resolve_bindings_derived = derived;
26141
resolve_bindings_result = SUCCESS;
26143
- /* Make sure the vtab has been generated. */
26144
- gfc_find_derived_vtab (derived);
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))
26158
/* If we find that a flavorless symbol is an interface in one of the
26159
@@ -14376,6 +14385,33 @@
26164
+gfc_unset_implicit_pure (gfc_symbol *sym)
26166
+ gfc_namespace *ns;
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)
26174
+ sym = ns->proc_name;
26178
+ if (sym->attr.flavor == FL_PROCEDURE)
26183
+ if (sym->attr.flavor == FL_PROCEDURE)
26184
+ sym->attr.implicit_pure = 0;
26186
+ sym->attr.pure = 0;
26190
/* Test whether the current procedure is elemental or not. */
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 @@
26199
/* The code to generate the error. */
26200
gfc_start_block (&block);
26203
arg1 = gfc_build_addr_expr (NULL_TREE, var);
26206
arg2 = build_int_cst (integer_type_node, error_code),
26209
asprintf (&message, "%s", _(msgid));
26210
arg3 = gfc_build_addr_expr (pchar_type_node,
26211
gfc_build_localized_cstring_const (message));
26215
tmp = build_call_expr_loc (input_location,
26216
gfor_fndecl_generate_error, 3, arg1, arg2, arg3);
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",
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 @@
26229
mask |= set_string (&block, &post_block, var, IOPARM_open_convert,
26234
mask |= set_parameter_ref (&block, &post_block, var, IOPARM_open_newunit,
26236
@@ -1234,7 +1234,7 @@
26238
mask |= set_parameter_ref (&block, &post_block, var, IOPARM_inquire_exist,
26242
if (p->unit && !p->iostat)
26244
p->iostat = create_dummy_iostat ();
26245
@@ -1322,7 +1322,7 @@
26247
mask |= set_string (&block, &post_block, var, IOPARM_inquire_pad,
26252
mask |= set_string (&block, &post_block, var, IOPARM_inquire_convert,
26254
@@ -1547,7 +1547,7 @@
26257
tree decl = NULL_TREE;
26263
@@ -2032,7 +2032,7 @@
26264
if (gfc_notification_std (GFC_STD_GNU) != SILENT)
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);
26272
@@ -2041,7 +2041,7 @@
26273
ts->kind = ts->u.derived->ts.kind;
26274
ts->f90_type = ts->u.derived->ts.f90_type;
26281
@@ -2123,7 +2123,7 @@
26282
function = iocall[IOCALL_X_CHARACTER_WIDE];
26284
function = iocall[IOCALL_X_CHARACTER_WIDE_WRITE];
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,
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);
26300
for (c = ts->u.derived->components; c; c = c->next)
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;
26311
+ /* Avoid uninitialized warnings for optional dummy arguments. */
26312
+ if (sym->attr.optional)
26313
+ TREE_NO_WARNING (decl) = 1;
26315
/* We should never get deferred shape arrays here. We used to because of
26317
gcc_assert (sym->as->type != AS_DEFERRED);
26318
@@ -1358,9 +1362,10 @@
26320
if (sym->attr.flavor == FL_PROCEDURE)
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)
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;
26339
- if (gfc_implicit_pure (NULL))
26340
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
26341
+ gfc_unset_implicit_pure (NULL);
26343
if (gfc_notify_std (GFC_STD_F2008, "CRITICAL statement at %C")
26345
@@ -2683,8 +2682,7 @@
26349
- if (gfc_implicit_pure (NULL))
26350
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
26351
+ gfc_unset_implicit_pure (NULL);
26353
if (st == ST_STOP && gfc_find_state (COMP_CRITICAL) == SUCCESS)
26355
@@ -2824,8 +2822,7 @@
26356
return MATCH_ERROR;
26359
- if (gfc_implicit_pure (NULL))
26360
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
26361
+ gfc_unset_implicit_pure (NULL);
26363
if (gfc_option.coarray == GFC_FCOARRAY_NONE)
26365
@@ -3020,8 +3017,7 @@
26366
return MATCH_ERROR;
26369
- if (gfc_implicit_pure (NULL))
26370
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
26371
+ gfc_unset_implicit_pure (NULL);
26373
if (gfc_notify_std (GFC_STD_F2008, "SYNC statement at %C")
26375
@@ -3500,15 +3496,15 @@
26376
if (gfc_check_do_variable (tail->expr->symtree))
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))
26383
gfc_error ("Bad allocate-object at %C for a PURE procedure");
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;
26391
+ gfc_unset_implicit_pure (NULL);
26393
if (tail->expr->ts.deferred)
26395
@@ -3890,14 +3886,15 @@
26397
sym = tail->expr->symtree->n.sym;
26399
- if (gfc_pure (NULL) && gfc_impure_variable (sym))
26400
+ bool impure = gfc_impure_variable (sym);
26401
+ if (impure && gfc_pure (NULL))
26403
gfc_error ("Illegal allocate-object at %C for a PURE procedure");
26407
- if (gfc_implicit_pure (NULL) && gfc_impure_variable (sym))
26408
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
26410
+ gfc_unset_implicit_pure (NULL);
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 @@
26422
- if (gfc_implicit_pure (NULL))
26423
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
26424
+ gfc_unset_implicit_pure (NULL);
26426
old_locus = gfc_current_locus;
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);
26436
- else if (shape->expr_type == EXPR_ARRAY)
26437
+ else if (shape->expr_type == EXPR_ARRAY && gfc_is_constant_expr (shape))
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);
26449
- if (e->value.function.esym != NULL)
26450
+ if (e->value.function.esym && e->value.function.esym->result)
26452
gfc_symbol *sym = e->value.function.esym->result;
26454
@@ -2540,7 +2540,8 @@
26455
if (parent && !comp)
26458
- actual = actual->next;
26460
+ actual = actual->next;
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 @@
26470
gfc_conv_intrinsic_ichar (gfc_se * se, gfc_expr * expr)
26472
- tree args[2], type, pchartype;
26473
+ tree args[3], type, pchartype;
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)
26489
gfc_free_expr (result);
26491
+ if (t == SUCCESS)
26492
gfc_clear_shape (shape, source->rank);
26493
return &gfc_bad_expr;
26495
@@ -5536,7 +5536,7 @@
26496
gfc_constructor_append_expr (&result->value.constructor, e, NULL);
26500
+ if (t == SUCCESS)
26501
gfc_clear_shape (shape, source->rank);
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};;
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}"
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
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)'
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.])])
26536
+ gcc_GAS_CHECK_FEATURE([LEON instructions],
26537
+ gcc_cv_as_sparc_leon,,
26540
+ .register %g2, #scratch
26541
+ .register %g3, #scratch
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.])])
26551
@@ -3749,8 +3761,13 @@
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"
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],
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>'.])])
26570
+ gcc_GAS_CHECK_FEATURE([ud2 mnemonic],
26571
+ gcc_cv_as_ix86_ud2,,,
26573
+ [AC_DEFINE(HAVE_AS_IX86_UD2, 1,
26574
+ [Define if your assembler supports the 'ud2' mnemonic.])])
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])
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"
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++)
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++)
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);
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++)
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);
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++)
26642
+ CLEAR_REGNO_REG_SET (live_out, i);
26643
+ CLEAR_REGNO_REG_SET (live_in, i);
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++)
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++)
26656
+ SET_REGNO_REG_SET (live_out, i);
26657
+ SET_REGNO_REG_SET (live_in, i);
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 @@
26668
if (MEM_EXPR (in_rtx))
26669
print_mem_expr (outfile, MEM_EXPR (in_rtx));
26671
+ fputc (' ', outfile);
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 @@
26683
+ /* The minimum negative dependence distance this stmt participates in
26684
+ or zero if none. */
26685
+ unsigned int min_neg_dist;
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
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)
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))
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)
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))
26724
const char *name = IDENTIFIER_POINTER (DECL_NAME (parms));
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. */
26734
-test_nonssa_use (gimple stmt ATTRIBUTE_UNUSED, tree t, void *data)
26735
+test_nonssa_use (gimple, tree t, tree, void *data)
26737
t = get_base_address (t);
26739
@@ -229,7 +229,7 @@
26741
if (gimple_code (stmt) == GIMPLE_LABEL
26742
&& test_nonssa_use (stmt, gimple_label_label (stmt),
26744
+ NULL_TREE, non_ssa_vars))
26748
@@ -258,7 +258,7 @@
26749
if (virtual_operand_p (gimple_phi_result (stmt)))
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))
26757
@@ -670,7 +670,7 @@
26758
Return true when access to T prevents splitting the function. */
26761
-mark_nonssa_use (gimple stmt ATTRIBUTE_UNUSED, tree t, void *data)
26762
+mark_nonssa_use (gimple, tree t, tree, void *data)
26764
t = get_base_address (t);
26766
@@ -830,7 +830,7 @@
26767
if (TREE_CODE (op) == SSA_NAME)
26768
bitmap_set_bit (used_ssa_names, SSA_NAME_VERSION (op));
26770
- can_split &= !mark_nonssa_use (stmt, op, non_ssa_vars);
26771
+ can_split &= !mark_nonssa_use (stmt, op, op, non_ssa_vars);
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);
26788
static void memory_modified_1 (rtx, const_rtx, void *);
26790
@@ -2558,15 +2560,24 @@
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. */
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)
26806
- rtx x_addr, mem_addr;
26811
+ gcc_checking_assert (x_canonicalized
26812
+ ? (x_addr != NULL_RTX && x_mode != VOIDmode)
26813
+ : (x_addr == NULL_RTX && x_mode == VOIDmode));
26815
if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
26818
@@ -2590,17 +2601,21 @@
26819
if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
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))))
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))))
26842
+ x_addr = get_addr (x_addr);
26843
+ if (!mem_canonicalized)
26844
+ mem_addr = get_addr (mem_addr);
26849
@@ -2616,11 +2631,16 @@
26853
- x_addr = canon_rtx (x_addr);
26854
- mem_addr = canon_rtx (mem_addr);
26855
+ if (!x_canonicalized)
26857
+ x_addr = canon_rtx (x_addr);
26858
+ x_mode = GET_MODE (x);
26860
+ if (!mem_canonicalized)
26861
+ mem_addr = canon_rtx (mem_addr);
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)
26868
if (nonoverlapping_memrefs_p (x, mem, false))
26869
@@ -2634,15 +2654,33 @@
26871
anti_dependence (const_rtx mem, const_rtx x)
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);
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. */
26885
+canon_anti_dependence (const_rtx mem, bool mem_canonicalized,
26886
+ const_rtx x, enum machine_mode x_mode, rtx x_addr)
26888
+ return write_dependence_p (mem, x, x_mode, x_addr,
26889
+ mem_canonicalized, /*x_canonicalized=*/true,
26890
+ /*writep=*/false);
26893
/* Output dependence: X is written after store in MEM takes place. */
26896
output_dependence (const_rtx mem, const_rtx x)
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);
26905
@@ -2871,17 +2909,14 @@
26906
/* Wipe the reg_seen array clean. */
26907
bitmap_clear (reg_seen);
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])
26917
+ new_reg_base_value[i] = static_reg_base_value[i];
26918
+ bitmap_set_bit (reg_seen, i);
26921
- The address expression is VOIDmode for an argument and
26922
- Pmode for other registers. */
26924
- memcpy (new_reg_base_value, static_reg_base_value,
26925
- FIRST_PSEUDO_REGISTER * sizeof (rtx));
26927
/* Walk the insns adding values to the new_reg_base_value array. */
26928
for (i = 0; i < rpo_cnt; i++)
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 @@
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))
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)));
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))
26954
FOR_EACH_IMM_USE_FAST (use_p, imm_iter, name)
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;
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;
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);
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);
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);
26990
+ step_expr = STMT_VINFO_LOOP_PHI_EVOLUTION_PART (phi_info);
26991
+ gcc_assert (step_expr != NULL_TREE);
26993
pe = loop_preheader_edge (iv_loop);
26994
+ init_expr = PHI_ARG_DEF_FROM_EDGE (iv_phi,
26995
+ loop_preheader_edge (iv_loop));
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);
27007
+ /* Convert the step to the desired type. */
27008
+ step_expr = force_gimple_operand (fold_convert (TREE_TYPE (vectype),
27010
+ &stmts, true, NULL_TREE);
27013
+ new_bb = gsi_insert_seq_on_edge_immediate (pe, stmts);
27014
+ gcc_assert (!new_bb);
27017
/* Find the first insertion point in the BB. */
27018
si = gsi_after_labels (bb);
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)))
27031
@@ -3211,8 +3220,11 @@
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),
27041
+ &stmts, false, new_var);
27044
new_bb = gsi_insert_seq_on_edge_immediate (pe, stmts);
27045
@@ -3224,9 +3236,7 @@
27046
for (i = 1; i < nunits; i++)
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))
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.");
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 @@
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);
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 @@
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;
27096
timevar_push (TV_LRA_COALESCE);
27098
@@ -318,6 +321,34 @@
27102
+ /* If we have situation after inheritance pass:
27104
+ r1 <- ... insn originally setting p1
27105
+ i1 <- r1 setting inheritance i1 from reload r1
27107
+ ... <- ... p2 ... dead p2
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, ®_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))
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);
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;
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;
27159
+/* The VAR_DECLs created for nonlocal VLAs for debug info purposes. */
27160
+static tree nonlocal_vla_vars;
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. */
27165
@@ -2106,14 +2109,13 @@
27166
ctx = ctx->outer_context;
27167
if (!ctx && !pointer_set_insert (nonlocal_vlas, decl))
27169
- tree copy = copy_node (decl), block;
27170
+ tree copy = copy_node (decl);
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;
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);
27192
@@ -6131,7 +6133,7 @@
27193
region's REDUCTION clause. */
27196
-omp_check_private (struct gimplify_omp_ctx *ctx, tree decl)
27197
+omp_check_private (struct gimplify_omp_ctx *ctx, tree decl, bool copyprivate)
27201
@@ -6140,8 +6142,11 @@
27202
ctx = ctx->outer_context;
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. */
27211
+ && lang_hooks.decls.omp_privatize_by_reference (decl)));
27213
n = splay_tree_lookup (ctx->variables, (splay_tree_key) decl);
27215
@@ -6267,12 +6272,36 @@
27219
+ if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_COPYPRIVATE
27221
+ && !omp_check_private (ctx, decl, true))
27224
+ if (is_global_var (decl))
27226
+ if (DECL_THREAD_LOCAL_P (decl))
27228
+ else if (DECL_HAS_VALUE_EXPR_P (decl))
27230
+ tree value = get_base_address (DECL_VALUE_EXPR (decl));
27233
+ && DECL_P (value)
27234
+ && DECL_THREAD_LOCAL_P (value))
27239
+ error_at (OMP_CLAUSE_LOCATION (c),
27240
+ "copyprivate variable %qE is not threadprivate"
27241
+ " or private in outer context", DECL_NAME (decl));
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))
27251
error ("%s variable %qE is private in outer context",
27252
check_non_private, DECL_NAME (decl));
27253
@@ -8261,6 +8290,21 @@
27257
+ if (nonlocal_vla_vars)
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
27263
+ if (gimple_bind_block (outer_bind)
27264
+ == DECL_INITIAL (current_function_decl))
27265
+ declare_vars (nonlocal_vla_vars, outer_bind, true);
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;
27272
pointer_set_destroy (nonlocal_vlas);
27273
nonlocal_vlas = NULL;
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;
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. */
27291
- base_type = TREE_TYPE (exp);
27293
switch (TREE_CODE (exp))
27295
case BIT_FIELD_REF:
27296
@@ -543,7 +540,38 @@
27297
case VIEW_CONVERT_EXPR:
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)))
27306
+ exp = TREE_OPERAND (TMR_BASE (exp), 0);
27307
+ bit_offset = double_int_zero;
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
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))))))
27332
/* Hand back the decl for MEM[&decl, off]. */
27333
if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR)
27335
@@ -565,37 +593,6 @@
27339
- case TARGET_MEM_REF:
27340
- /* Hand back the decl for MEM[&decl, off]. */
27341
- if (TREE_CODE (TMR_BASE (exp)) == ADDR_EXPR)
27343
- /* Via the variable index or index2 we can reach the
27345
- if (TMR_INDEX (exp) || TMR_INDEX2 (exp))
27347
- exp = TREE_OPERAND (TMR_BASE (exp), 0);
27348
- bit_offset = double_int_zero;
27352
- if (integer_zerop (TMR_OFFSET (exp)))
27353
- exp = TREE_OPERAND (TMR_BASE (exp), 0);
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 ())
27363
- bit_offset = off;
27364
- exp = TREE_OPERAND (TMR_BASE (exp), 0);
27373
@@ -602,8 +599,18 @@
27375
exp = TREE_OPERAND (exp, 0);
27378
+ /* We need to deal with variable arrays ending structures. */
27379
+ if (seen_variable_array_ref
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))))))
27390
if (!bit_offset.fits_shwi ())
27393
@@ -615,24 +622,6 @@
27395
hbit_offset = bit_offset.to_shwi ();
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. */
27408
- if (seen_variable_array_ref
27410
- && (!host_integerp (TYPE_SIZE (base_type), 1)
27411
- || (hbit_offset + maxsize
27412
- == (signed) TREE_INT_CST_LOW (TYPE_SIZE (base_type)))))
27415
/* In case of a decl or constant base object we can do better. */
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);
27429
/* Fixup types in global initializers. */
27430
if (TREE_TYPE (TREE_TYPE (cval)) != TREE_TYPE (TREE_OPERAND (cval, 0)))
27431
@@ -866,6 +866,7 @@
27433
case BUILT_IN_STRCPY:
27434
case BUILT_IN_STRNCPY:
27435
+ case BUILT_IN_STRCAT:
27439
@@ -941,6 +942,13 @@
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),
27450
case BUILT_IN_FPUTS:
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. */
27461
-visit_op (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
27462
+visit_op (gimple, tree op, tree, void *data)
27464
bitmap active = (bitmap)data;
27465
op = get_base_address (op);
27466
@@ -351,7 +351,7 @@
27467
from bitmap DATA. */
27470
-visit_conflict (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
27471
+visit_conflict (gimple, tree op, tree, void *data)
27473
bitmap active = (bitmap)data;
27474
op = get_base_address (op);
27475
@@ -385,7 +385,7 @@
27478
gimple_stmt_iterator gsi;
27479
- bool (*visit)(gimple, tree, void *);
27480
+ walk_stmt_load_store_addr_fn visit;
27482
bitmap_clear (work);
27483
FOR_EACH_EDGE (e, ei, bb->preds)
27484
@@ -4707,14 +4707,18 @@
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))
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);
27503
+ emit_insn_after_noloc (insns, parm_birth_insn, e->dest);
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 @@
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))
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);
27531
+ /* Clear the NEW sets before the next iteration. We have already
27532
+ fully propagated its contents. */
27535
+ bitmap_set_free (NEW_SETS (bb));
27537
statistics_histogram_event (cfun, "insert iterations", num_iterations);
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 @@
27545
rtx i1, i2, last1, last2, afterlast1, afterlast2;
27548
enum replace_direction dir, last_dir, afterlast_dir;
27549
bool follow_fallthru, did_fallthru;
27551
@@ -1321,8 +1320,9 @@
27552
|| (returnjump_p (i2) && !side_effects_p (PATTERN (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)
27561
i2 = PREV_INSN (i2);
27563
@@ -1373,8 +1373,8 @@
27564
last1 = i1, last2 = i2;
27565
afterlast_dir = last_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)
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
27579
+ instructions. If STOP_AFTER is zero, count all INSN_P insns, if it is
27580
+ non-zero, only count active insns. */
27583
flow_find_head_matching_sequence (basic_block bb1, basic_block bb2, rtx *f1,
27584
@@ -1492,7 +1493,10 @@
27586
beforelast1 = last1, beforelast2 = last2;
27587
last1 = i1, last2 = i2;
27590
+ || (GET_CODE (PATTERN (i1)) != USE
27591
+ && GET_CODE (PATTERN (i1)) != CLOBBER))
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);
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))). */
27613
+#ifdef WORD_REGISTER_OPERATIONS
27614
+ && precision >= BITS_PER_WORD
27616
+ && (GET_CODE (op) == PLUS
27617
+ || GET_CODE (op) == MINUS
27618
+ || GET_CODE (op) == MULT))
27620
rtx op0 = simplify_gen_unary (TRUNCATE, mode, XEXP (op, 0), op_mode);
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 @@
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));
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. */
27644
-asm_visit_addr (gimple stmt ATTRIBUTE_UNUSED, tree op,
27645
- void *data ATTRIBUTE_UNUSED)
27646
+asm_visit_addr (gimple, tree op, tree, void *)
27648
op = get_base_address (op);
27650
@@ -2890,6 +2889,10 @@
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 @@
27665
+ if (!opt_for_fn (node->symbol.decl, optimize)
27666
+ || !opt_for_fn (node->symbol.decl, flag_ipa_sra))
27669
+ fprintf (dump_file, "Function not optimized.\n");
27673
if (DECL_VIRTUAL_P (current_function_decl))
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);
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. */
27693
-ref_at_iteration (struct loop *loop, tree ref, int iter)
27695
+ref_at_iteration (data_reference_p dr, int iter, gimple_seq *stmts)
27697
- tree idx, *idx_p, type, val, op0 = NULL_TREE, ret;
27701
- if (handled_component_p (ref))
27702
+ tree off = DR_OFFSET (dr);
27703
+ tree coff = DR_INIT (dr);
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)));
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,
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)))
27725
- op0 = ref_at_iteration (loop, TREE_OPERAND (ref, 0), iter);
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);
27734
- else if (!INDIRECT_REF_P (ref)
27735
- && TREE_CODE (ref) != MEM_REF)
27736
- return unshare_expr (ref);
27738
- if (TREE_CODE (ref) == MEM_REF)
27740
- ret = unshare_expr (ref);
27741
- idx = TREE_OPERAND (ref, 0);
27742
- idx_p = &TREE_OPERAND (ret, 0);
27744
- else if (TREE_CODE (ref) == COMPONENT_REF)
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;
27751
- return build3 (COMPONENT_REF, TREE_TYPE (ref), op0,
27752
- unshare_expr (TREE_OPERAND (ref, 1)),
27753
- unshare_expr (TREE_OPERAND (ref, 2)));
27755
- else if (TREE_CODE (ref) == ARRAY_REF)
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;
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);
27772
- return NULL_TREE;
27774
- ok = simple_iv (loop, loop, idx, &iv, true);
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);
27782
- type = TREE_TYPE (iv.base);
27783
- if (POINTER_TYPE_P (type))
27785
- val = fold_build2 (MULT_EXPR, sizetype, iv.step,
27786
- size_int (iter));
27787
- val = fold_build_pointer_plus (iv.base, val);
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);
27795
- *idx_p = unshare_expr (val);
27799
+ return fold_build2 (MEM_REF, TREE_TYPE (DR_REF (dr)), addr, alias_ptr);
27802
/* Get the initialization expression for the INDEX-th temporary variable
27803
@@ -2068,7 +2021,11 @@
27805
stmt = find_common_use_stmt (&name1, &name2);
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)))
27815
acode = gimple_assign_rhs_code (stmt);
27816
@@ -2365,14 +2322,10 @@
27817
if (chain->inits[i] != NULL_TREE)
27820
- init = ref_at_iteration (loop, DR_REF (dr), (int) i - n);
27824
+ init = ref_at_iteration (dr, (int) i - n, &stmts);
27825
if (!chain->all_always_accessed && tree_could_trap_p (init))
27828
- init = force_gimple_operand (init, &stmts, false, NULL_TREE);
27830
gsi_insert_seq_on_edge_immediate (entry, stmts);
27832
@@ -2449,6 +2402,7 @@
27835
free_data_refs (datarefs);
27836
+ free_affine_expand_cache (&name_expansions);
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)
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);
27854
iv->extend = IV_UNKNOWN_EXTEND;
27855
@@ -465,8 +467,14 @@
27856
&& !iv->first_special)
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);
27866
+ iv->extend == extend
27867
+ ? iv->extend_mode : iv->mode);
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)
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;
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;
27894
+ visited_stmts = &parm_ainfo->parm_visited_statements;
27895
+ walk_aliased_vdefs (&refd, gimple_vuse (stmt), mark_modified, &modified,
27899
- visited_stmts = &parm_ainfo->parm_visited_statements;
27900
- walk_aliased_vdefs (&refd, gimple_vuse (stmt), mark_modified, &modified,
27904
if (parm_ainfo && modified)
27905
parm_ainfo->parm_modified = true;
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,
27912
+ HOST_WIDE_INT *size_p, bool *by_ref_p)
27915
HOST_WIDE_INT size, max_size;
27916
@@ -758,6 +764,8 @@
27925
@@ -800,6 +808,8 @@
27934
@@ -814,7 +824,7 @@
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);
27942
/* Given that an actual argument is an SSA_NAME (given in NAME) and is a result
27943
@@ -1051,7 +1061,8 @@
27945
parm = TREE_OPERAND (expr, 0);
27946
index = ipa_get_param_decl_index (info, SSA_NAME_VAR (parm));
27947
- gcc_assert (index >= 0);
27951
cond_bb = single_pred (assign_bb);
27952
cond = last_stmt (cond_bb);
27953
@@ -1462,6 +1473,9 @@
27955
struct cgraph_edge *cs;
27960
for (cs = node->callees; cs; cs = cs->next_callee)
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,
27970
struct cgraph_edge *cs = ipa_note_param_call (node, index, call);
27971
cs->indirect_info->offset = offset;
27972
@@ -1847,8 +1861,7 @@
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)
27980
struct ipa_node_params *info = (struct ipa_node_params *) data;
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)
27986
- struct cgraph_node *first_clone = callee;
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);
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);
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. */
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);
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);
28015
- else if (dump_file)
28016
- fprintf (dump_file, "ipa-prop: Introduced new external node "
28018
- xstrdup (cgraph_node_name (callee)), callee->uid);
28019
+ callee = cgraph_get_create_real_symbol_node (target);
28021
ipa_check_create_node_params ();
28023
@@ -3902,7 +3890,7 @@
28024
struct ipa_agg_replacement_value *v;
28025
gimple stmt = gsi_stmt (gsi);
28027
- HOST_WIDE_INT offset;
28028
+ HOST_WIDE_INT offset, size;
28032
@@ -3929,13 +3917,15 @@
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))
28039
for (v = aggval; v; v = v->next)
28040
if (v->index == index
28041
&& v->offset == offset)
28043
- if (!v || v->by_ref != by_ref)
28045
+ || v->by_ref != by_ref
28046
+ || tree_low_cst (TYPE_SIZE (TREE_TYPE (v->value)), 0) != size)
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 @@
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))
28066
tree ptr = gimple_call_arg (stmt, 0);
28069
- if (TREE_CODE (ptr) != SSA_NAME)
28071
- def_stmt = SSA_NAME_DEF_STMT (ptr);
28072
- if (!is_gimple_call (def_stmt)
28073
- || gimple_plf (def_stmt, STMT_NECESSARY))
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))
28081
- gimple_set_plf (stmt, STMT_NECESSARY, false);
28082
+ if (TREE_CODE (ptr) == SSA_NAME)
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);
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 @@
28100
+/* Helper function for find_ssaname_in_stores. Called via walk_tree to
28101
+ find a SSA_NAME DATA somewhere in *TP. */
28104
+find_ssaname (tree *tp, int *walk_subtrees, void *data)
28106
+ tree var = (tree) data;
28109
+ else if (IS_TYPE_OR_DECL_P (*tp))
28110
+ *walk_subtrees = 0;
28111
+ return NULL_TREE;
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. */
28119
+find_ssaname_in_store (gimple, tree, tree t, void *data)
28121
+ return walk_tree (&t, find_ssaname, data, NULL) != NULL_TREE;
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. */
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))
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)))
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
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)
28160
+ if (walk_stmt_load_store_ops (stmt, use, NULL,
28161
+ find_ssaname_in_store))
28162
+ same_root_var = true;
28165
+ same_root_var = true;
28169
/* Mark expression as replaceable unless stmt is volatile, or the
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)
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)
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);
28190
timevar_pop (TV_IRA);
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 @@
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__)
28211
+extern tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
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 @@
28223
+ /* Invalidate assumptions made by dependence analysis when vectorization
28224
+ on the unrolled body effectively re-orders stmts. */
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)))
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");
28237
if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo)
28240
@@ -4425,6 +4439,20 @@
28241
else if (!vect_grouped_load_supported (vectype, group_size))
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)))
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");
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);
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 @@
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)))
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 @@
28291
calculate_dominance_info (CDI_DOMINATORS);
28292
+ calculate_dominance_info (CDI_POST_DOMINATORS);
28295
phivn = XCNEWVEC (struct phiprop_d, n);
28296
@@ -395,6 +402,8 @@
28300
+ free_dominance_info (CDI_POST_DOMINATORS);
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)
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];
28316
/* Bitmaps what object sizes have been computed already. */
28317
static bitmap computed[4];
28318
@@ -493,7 +493,7 @@
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)
28325
if (!bitmap_bit_p (computed[object_size_type], SSA_NAME_VERSION (ptr)))
28327
@@ -501,6 +501,8 @@
28328
bitmap_iterator bi;
28331
+ if (num_ssa_names > object_sizes[object_size_type].length ())
28332
+ object_sizes[object_size_type].safe_grow (num_ssa_names);
28335
fprintf (dump_file, "Computing %s %sobject size for ",
28336
@@ -1162,12 +1164,12 @@
28338
int object_size_type;
28340
- if (object_sizes[0])
28344
for (object_size_type = 0; object_size_type <= 3; object_size_type++)
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);
28351
@@ -1184,9 +1186,8 @@
28353
for (object_size_type = 0; object_size_type <= 3; object_size_type++)
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;
28362
@@ -1202,18 +1203,11 @@
28363
gimple_stmt_iterator i;
28364
for (i = gsi_start_bb (bb); !gsi_end_p (i); gsi_next (&i))
28366
- tree callee, result;
28368
gimple call = gsi_stmt (i);
28370
- if (gimple_code (call) != GIMPLE_CALL)
28371
+ if (!gimple_call_builtin_p (call, BUILT_IN_OBJECT_SIZE))
28374
- callee = gimple_call_fndecl (call);
28376
- || DECL_BUILT_IN_CLASS (callee) != BUILT_IN_NORMAL
28377
- || DECL_FUNCTION_CODE (callee) != BUILT_IN_OBJECT_SIZE)
28380
init_object_sizes ();
28381
result = fold_call_stmt (call, false);
28383
@@ -1240,20 +1234,32 @@
28387
+ gcc_assert (TREE_CODE (result) == INTEGER_CST);
28389
if (dump_file && (dump_flags & TDF_DETAILS))
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");
28398
- if (!update_call_from_tree (&i, result))
28399
- gcc_unreachable ();
28400
+ tree lhs = gimple_call_lhs (call);
28404
- if (dump_file && (dump_flags & TDF_DETAILS))
28405
+ /* Propagate into all uses and fold those stmts. */
28407
+ imm_use_iterator iter;
28408
+ FOR_EACH_IMM_USE_STMT (use_stmt, iter, lhs)
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));
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 @@
28428
PATTERN (undobuf.other_insn) = other_pat;
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)
28438
next = XEXP (note, 1);
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);
28451
@@ -5798,8 +5802,15 @@
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);
28468
/* Otherwise, keep this operation, but maybe change its operands.
28469
@@ -7991,7 +8002,7 @@
28470
if (code == CALL || code == ASM_OPERANDS || code == CLOBBER)
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
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),
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),
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. */
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),
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 @@
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)
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);
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"
28551
microblaze*-*-rtems*)
28554
+ tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=0"
28557
+ tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=4321"
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 @@
28571
- with_cpu="`echo ${target} | sed 's/-.*$//'`"
28572
+ case ${target} in
28580
+ with_cpu="`echo ${target} | sed 's/-.*$//'`"
28586
@@ -3587,7 +3602,7 @@
28588
"" | sparc | sparcv9 | sparc64 \
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"
28600
- if test x$with_tune = x ; then
28604
- # The SPARC port checks this value at compile-time.
28605
- target_cpu_default2="TARGET_CPU_$with_cpu"
28609
# Some standard aliases.
28611
@@ -3765,6 +3771,17 @@
28615
+ if test x$with_tune = x ; then
28616
+ case ${target} in
28626
# The SPARC port checks this value at compile-time.
28627
target_cpu_default2="TARGET_CPU_$with_cpu"
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)
28634
char global_regs[FIRST_PSEUDO_REGISTER];
28636
/* Declaration for the global register. */
28637
-static tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
28638
+tree global_regs_decl[FIRST_PSEUDO_REGISTER];
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))
28651
- if (found_mode != VOIDmode)
28652
- return found_mode;
28654
for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
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))
28664
- if (found_mode != VOIDmode)
28665
- return found_mode;
28667
for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT);
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))
28677
- if (found_mode != VOIDmode)
28678
- return found_mode;
28680
for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT);
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))
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@" \
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 @@
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
28752
Returns the results of these callbacks or'ed. */
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)
28765
if (gimple_assign_single_p (stmt))
28768
+ tree lhs, rhs, arg;
28771
- lhs = get_base_loadstore (gimple_assign_lhs (stmt));
28772
+ arg = gimple_assign_lhs (stmt);
28773
+ lhs = get_base_loadstore (arg);
28775
- ret |= visit_store (stmt, lhs, data);
28776
+ ret |= visit_store (stmt, lhs, arg, data);
28778
- rhs = gimple_assign_rhs1 (stmt);
28779
+ arg = gimple_assign_rhs1 (stmt);
28781
while (handled_component_p (rhs))
28782
rhs = TREE_OPERAND (rhs, 0);
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,
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),
28798
else if (TREE_CODE (rhs) == CONSTRUCTOR)
28801
@@ -3884,23 +3888,23 @@
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),
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);
28822
rhs = get_base_loadstore (rhs);
28824
- ret |= visit_load (stmt, rhs, data);
28825
+ ret |= visit_load (stmt, rhs, arg, data);
28828
else if (visit_addr
28829
@@ -3913,7 +3917,7 @@
28830
if (op == NULL_TREE)
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 @@
28840
if (TREE_CODE (TREE_OPERAND (op, 0)) == ADDR_EXPR)
28841
ret |= visit_addr (stmt, TREE_OPERAND (TREE_OPERAND (op, 0),
28844
if (TREE_CODE (TREE_OPERAND (op, 1)) == ADDR_EXPR)
28845
ret |= visit_addr (stmt, TREE_OPERAND (TREE_OPERAND (op, 1),
28851
@@ -3931,26 +3935,26 @@
28855
- tree lhs = gimple_call_lhs (stmt);
28857
+ tree arg = gimple_call_lhs (stmt);
28860
- lhs = get_base_loadstore (lhs);
28861
+ tree lhs = get_base_loadstore (arg);
28863
- ret |= visit_store (stmt, lhs, data);
28864
+ ret |= visit_store (stmt, lhs, arg, data);
28867
if (visit_load || visit_addr)
28868
for (i = 0; i < gimple_call_num_args (stmt); ++i)
28870
- tree rhs = gimple_call_arg (stmt, i);
28871
+ tree arg = gimple_call_arg (stmt, i);
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)
28879
- rhs = get_base_loadstore (rhs);
28880
+ tree rhs = get_base_loadstore (arg);
28882
- ret |= visit_load (stmt, rhs, data);
28883
+ ret |= visit_load (stmt, rhs, arg, data);
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),
28892
+ gimple_call_chain (stmt), data);
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);
28901
else if (gimple_code (stmt) == GIMPLE_ASM)
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);
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);
28920
if (visit_load || visit_addr)
28921
@@ -3997,7 +4002,7 @@
28922
tree op = TREE_VALUE (link);
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)
28929
op = get_base_loadstore (op);
28930
@@ -4004,7 +4009,7 @@
28934
- ret |= visit_load (stmt, op, data);
28935
+ ret |= visit_load (stmt, op, TREE_VALUE (link), data);
28938
constraint = TREE_STRING_POINTER
28939
@@ -4013,7 +4018,8 @@
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),
28949
@@ -4026,12 +4032,12 @@
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)
28957
- op = get_base_loadstore (op);
28959
- ret |= visit_load (stmt, op, data);
28960
+ tree base = get_base_loadstore (op);
28962
+ ret |= visit_load (stmt, base, op, data);
28966
@@ -4042,7 +4048,7 @@
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);
28974
else if (visit_addr
28975
@@ -4050,7 +4056,7 @@
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);
28984
@@ -4061,8 +4067,8 @@
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)
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. */
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)
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);
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;
29017
/* If the offset makes the pointer point to before the
29018
variable use offset zero for the field lookup. */
29020
- && fieldoffset > vi->offset)
29024
+ if (fieldoffset < 0)
29025
+ vi = lookup_vi_for_tree (vi->decl);
29027
vi = first_or_preceding_vi_for_offset (vi, fieldoffset);
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
29033
- if (vi->offset != fieldoffset
29034
- && vi->next != NULL)
29035
- bitmap_set_bit (result, vi->next->id);
29038
+ bitmap_set_bit (result, vi->id);
29042
+ /* We have to include all fields that overlap the current field
29043
+ shifted by offset. */
29046
+ while (vi->offset < fieldoffset + size);
29050
@@ -1607,16 +1610,21 @@
29052
varinfo_t v = get_varinfo (j);
29053
HOST_WIDE_INT fieldoffset = v->offset + roffset;
29054
+ unsigned HOST_WIDE_INT size = v->size;
29057
if (v->is_full_var)
29058
- fieldoffset = v->offset;
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. */
29066
+ if (fieldoffset < 0)
29067
+ v = lookup_vi_for_tree (v->decl);
29069
+ v = first_or_preceding_vi_for_offset (v, fieldoffset);
29072
+ /* We have to include all fields that overlap the current field
29073
+ shifted by roffset. */
29077
@@ -1633,16 +1641,13 @@
29078
&& add_graph_edge (graph, lhs, t))
29079
flag |= bitmap_ior_into (sol, get_varinfo (t)->solution);
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)
29089
- fieldoffset = v->offset;
29092
+ while (v->offset < fieldoffset + size);
29096
@@ -1705,15 +1710,20 @@
29097
varinfo_t v = get_varinfo (j);
29099
HOST_WIDE_INT fieldoffset = v->offset + loff;
29100
+ unsigned HOST_WIDE_INT size = v->size;
29102
if (v->is_full_var)
29103
- fieldoffset = v->offset;
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. */
29111
+ if (fieldoffset < 0)
29112
+ v = lookup_vi_for_tree (v->decl);
29114
+ v = first_or_preceding_vi_for_offset (v, fieldoffset);
29117
+ /* We have to include all fields that overlap the current field
29118
+ shifted by loff. */
29121
if (v->may_have_pointers)
29122
@@ -1739,16 +1749,13 @@
29123
bitmap_set_bit (changed, t);
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)
29134
- fieldoffset = v->offset;
29137
+ while (v->offset < fieldoffset + size);
29141
@@ -2997,35 +3004,30 @@
29143
unsigned HOST_WIDE_INT offset = curr->offset + rhsoffset;
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. */
29155
&& curr->offset < offset)
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);
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
29170
- if (temp->offset != offset
29171
- && temp->next != NULL)
29172
+ c.var = temp->id;
29174
+ temp = temp->next;
29176
+ && temp->offset < offset + curr->size)
29178
struct constraint_expr c2;
29179
- c2.var = temp->next->id;
29180
+ c2.var = temp->id;
29181
c2.type = ADDRESSOF;
29183
results->safe_push (c2);
29184
+ temp = temp->next;
29186
- c.var = temp->id;
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;
29199
+ /* Padding to get subcode to 16 bit alignment. */
29200
+ unsigned pad : 1;
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 *,
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);
29235
/* Various helpers. */
29236
static inline bool stmt_starts_bb_p (gimple, gimple);
29237
@@ -1535,6 +1534,11 @@
29239
FOR_EACH_IMM_USE_STMT (stmt, imm_iter, name)
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);
29246
FOR_EACH_IMM_USE_ON_STMT (use, imm_iter)
29248
replace_exp (use, val);
29249
@@ -1559,11 +1563,6 @@
29250
gimple orig_stmt = stmt;
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);
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 @@
29265
- /* We use regular PLUS_EXPR and MINUS_EXPR for vectors.
29266
- ??? This just makes the checker happy and may not be what is
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)
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");
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))
29288
- tree tem = rhs1_type;
29289
- rhs1_type = rhs2_type;
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);
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))
29304
error ("invalid (pointer) operands to plus/minus");
29306
@@ -3552,7 +3541,6 @@
29308
case POINTER_PLUS_EXPR:
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 @@
29316
/* Split all critical edges. */
29318
-static unsigned int
29320
split_critical_edges (void)
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 @@
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,
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
29356
+ if (op == range->exp)
29357
+ tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, false,
29360
+ tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, true,
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)
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;
29377
+/* Return the argument of the given hotpatch attribute or the default value if
29378
+ no argument is present. */
29381
+get_hotpatch_attribute (tree hotpatch_attr)
29385
+ args = TREE_VALUE (hotpatch_attr);
29388
+ TREE_INT_CST_LOW (TREE_VALUE (args)):
29389
+ s390_hotpatch_trampoline_halfwords_default;
29392
+/* Check whether the hotpatch attribute is applied to a function and, if it has
29393
+ an argument, the argument is valid. */
29396
+s390_handle_hotpatch_attribute (tree *node, tree name, tree args,
29397
+ int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
29399
+ if (TREE_CODE (*node) != FUNCTION_DECL)
29401
+ warning (OPT_Wattributes, "%qE attribute only applies to functions",
29403
+ *no_add_attrs = true;
29407
+ tree expr = TREE_VALUE (args);
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)
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;
29422
+ return NULL_TREE;
29425
+static const struct attribute_spec s390_attribute_table[] = {
29426
+ { "hotpatch", 0, 1, true, false, false, s390_handle_hotpatch_attribute, false
29428
+ /* End element. */
29429
+ { NULL, 0, 0, false, false, false, NULL, false }
29432
/* Return the alignment for LABEL. We default to the -falign-labels
29433
value except for the literal pool base label. */
29435
@@ -883,7 +942,8 @@
29437
/* For CCRAWmode put the required cc mask into the second
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);
29445
@@ -1594,6 +1654,46 @@
29447
s390_option_override (void)
29450
+ cl_deferred_option *opt;
29451
+ vec<cl_deferred_option> *v =
29452
+ (vec<cl_deferred_option> *) s390_deferred_options;
29455
+ FOR_EACH_VEC_ELT (*v, i, opt)
29457
+ switch (opt->opt_index)
29459
+ case OPT_mhotpatch:
29460
+ s390_hotpatch_trampoline_halfwords = (opt->value) ?
29461
+ s390_hotpatch_trampoline_halfwords_default : -1;
29463
+ case OPT_mhotpatch_:
29467
+ val = integral_argument (opt->arg);
29470
+ /* argument is not a plain number */
29471
+ error ("argument to %qs should be a non-negative integer",
29475
+ else if (val > s390_hotpatch_trampoline_halfwords_max)
29477
+ error ("argument to %qs is too large (max. %d)",
29478
+ "-mhotpatch=", s390_hotpatch_trampoline_halfwords_max);
29481
+ s390_hotpatch_trampoline_halfwords = val;
29485
+ gcc_unreachable ();
29489
/* Set up function hooks. */
29490
init_machine_status = s390_init_machine_status;
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. */
29496
- /* A larl operand with odd addend will get fixed via secondary
29497
- reload. So don't request it to be pushed into literal
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).
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)
29514
- if (reg_class_subset_p (ADDR_REGS, rclass))
29515
+ if (flag_pic && reg_class_subset_p (ADDR_REGS, rclass))
29519
@@ -4683,7 +4790,7 @@
29520
int smode_bsize, mode_bsize;
29523
- if (bitsize + bitpos > GET_MODE_SIZE (mode))
29524
+ if (bitsize + bitpos > GET_MODE_BITSIZE (mode))
29527
/* Generate INSERT IMMEDIATE (IILL et al). */
29528
@@ -5311,6 +5418,101 @@
29529
gcc_unreachable ();
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
29536
+static int s390_function_num_hotpatch_trampoline_halfwords (tree decl,
29541
+ if (DECL_DECLARED_INLINE_P (decl)
29542
+ || DECL_ARTIFICIAL (decl)
29543
+ || MAIN_NAME_P (DECL_NAME (decl)))
29545
+ /* - Explicitly inlined functions cannot be hotpatched.
29546
+ - Artificial functions need not be hotpatched.
29547
+ - Making the main function hotpatchable is useless. */
29550
+ attr = lookup_attribute ("hotpatch", DECL_ATTRIBUTES (decl));
29551
+ if (attr || s390_hotpatch_trampoline_halfwords >= 0)
29553
+ if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (decl)))
29556
+ warning (OPT_Wattributes, "function %qE with the %qs attribute"
29557
+ " is not hotpatchable", DECL_NAME (decl), "always_inline");
29563
+ get_hotpatch_attribute (attr) : s390_hotpatch_trampoline_halfwords;
29570
+/* Hook to determine if one function can safely inline another. */
29573
+s390_can_inline_p (tree caller, tree callee)
29575
+ if (s390_function_num_hotpatch_trampoline_halfwords (callee, false) >= 0)
29578
+ return default_target_can_inline_p (caller, callee);
29581
+/* Write the extra assembler code needed to declare a function properly. */
29584
+s390_asm_output_function_label (FILE *asm_out_file, const char *fname,
29587
+ int hotpatch_trampoline_halfwords = -1;
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)
29596
+ warning_at (DECL_SOURCE_LOCATION (decl), OPT_mhotpatch,
29597
+ "hotpatching is not compatible with nested functions");
29598
+ hotpatch_trampoline_halfwords = -1;
29602
+ if (hotpatch_trampoline_halfwords > 0)
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. */
29619
+ ASM_OUTPUT_LABEL (asm_out_file, fname);
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");
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 @@
29632
bb = BASIC_BLOCK (bb_index);
29637
FOR_BB_INSNS (bb, insn)
29639
rtx ite, cc, pat, target;
29640
@@ -7959,7 +8164,10 @@
29644
- PATTERN (tbegin_insn) = XVECEXP (PATTERN (tbegin_insn), 0, 0);
29645
+ PATTERN (tbegin_insn) = gen_rtx_PARALLEL (VOIDmode,
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);
29652
@@ -9568,61 +9776,47 @@
29654
s390_expand_tbegin (rtx dest, rtx tdb, rtx retry, bool clobber_fprs_p)
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;
29665
- rtx very_unlikely = GEN_INT (REG_BR_PROB_BASE / 100 - 1);
29667
if (retry != NULL_RTX)
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);
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));
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),
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)));
29691
- JUMP_LABEL (jump) = abort_label;
29692
- LABEL_NUSES (abort_label) = 1;
29693
- add_reg_note (jump, REG_BR_PROB, very_unlikely);
29695
- /* Initialize CC return value. */
29696
- emit_move_insn (dest, const0_rtx);
29698
- s390_emit_jump (leave_label, NULL_RTX);
29699
- LABEL_NUSES (leave_label) = 1;
29702
- /* Abort handler code. */
29704
- emit_label (abort_label);
29705
+ emit_move_insn (dest, gen_rtx_UNSPEC (SImode,
29706
+ gen_rtvec (1, gen_rtx_REG (CCRAWmode,
29708
+ UNSPEC_CC_TO_INT));
29709
if (retry != NULL_RTX)
29711
+ const int CC0 = 1 << 3;
29712
+ const int CC1 = 1 << 2;
29713
+ const int CC3 = 1 << 0;
29715
rtx count = gen_reg_rtx (SImode);
29716
+ rtx leave_label = gen_label_rtx ();
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;
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 @@
29736
JUMP_LABEL (jump) = retry_label;
29737
LABEL_NUSES (retry_label) = 1;
29738
+ emit_label (leave_label);
29741
- emit_move_insn (dest, gen_rtx_UNSPEC (SImode,
29742
- gen_rtvec (1, gen_rtx_REG (CCRAWmode,
29744
- UNSPEC_CC_TO_INT));
29745
- emit_label (leave_label);
29749
@@ -9674,6 +9863,9 @@
29750
s390_init_builtins (void)
29752
tree ftype, uint64_type;
29753
+ tree returns_twice_attr = tree_cons (get_identifier ("returns_twice"),
29755
+ tree noreturn_attr = tree_cons (get_identifier ("noreturn"), NULL, NULL);
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,
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);
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);
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,
29785
- NULL, NULL_TREE);
29786
+ NULL, returns_twice_attr);
29787
add_builtin_function ("__builtin_tbegin_retry_nofloat", ftype,
29788
S390_BUILTIN_TBEGIN_RETRY_NOFLOAT,
29790
- NULL, NULL_TREE);
29791
+ NULL, returns_twice_attr);
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
29799
+#undef TARGET_ATTRIBUTE_TABLE
29800
+#define TARGET_ATTRIBUTE_TABLE s390_attribute_table
29802
+#undef TARGET_CAN_INLINE_P
29803
+#define TARGET_CAN_INLINE_P s390_can_inline_p
29805
struct gcc_target targetm = TARGET_INITIALIZER;
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
29815
/* Allocation boundary (in *bits*) for the code of a function. */
29816
-#define FUNCTION_BOUNDARY 32
29817
+#define FUNCTION_BOUNDARY 64
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)); \
29825
+#undef ASM_OUTPUT_FUNCTION_LABEL
29826
+#define ASM_OUTPUT_FUNCTION_LABEL(FILE, NAME, DECL) \
29827
+ s390_asm_output_function_label (FILE, NAME, DECL)
29829
/* Miscellaneous parameters. */
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 @@
29837
; Transactional Execution support
29839
+ UNSPECV_TBEGIN_TDB
29843
@@ -9896,9 +9897,10 @@
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")]
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"
29862
+ "TARGET_HTM && INTVAL (operands[0]) >= 0 && INTVAL (operands[0]) <= 0xffff"
29864
[(set_attr "op_type" "SIL")])
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"
29874
+ (unspec_volatile:CCRAW [(match_operand 0 "const_int_operand" "D")]
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"
29880
[(set_attr "op_type" "SIL")])
29883
@@ -10012,15 +10015,12 @@
29884
; Transaction perform processor assist
29886
(define_expand "tx_assist"
29887
- [(set (match_dup 1) (const_int 0))
29888
- (unspec_volatile [(match_operand:SI 0 "register_operand" "")
29890
+ [(unspec_volatile [(match_operand:SI 0 "register_operand" "")
29891
+ (reg:SI GPR0_REGNUM)
29896
- operands[1] = gen_reg_rtx (SImode);
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")]
29905
"TARGET_HTM && INTVAL (operands[2]) < 16"
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)
29914
Target Report RejectNegative Negative(msoft-float) InverseMask(SOFT_FLOAT, HARD_FLOAT)
29915
Enable hardware floating point
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.
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.
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. */
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
29945
__TM_simple_begin ()
29947
return __builtin_tbegin_nofloat (0);
29950
-extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
29952
__TM_begin (void* const tdb)
29954
return __builtin_tbegin_nofloat (tdb);
29959
- if (tdb->format == 0)
29960
+ if (tdb->format != 1)
29962
return tdb->nesting_depth;
29966
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
29968
- if (tdb->format == 0)
29969
+ if (tdb->format != 1)
29972
return !!(tdb->abort_code >= _HTM_FIRST_USER_ABORT_CODE);
29973
@@ -101,7 +108,7 @@
29975
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
29977
- if (tdb->format == 0)
29978
+ if (tdb->format != 1)
29981
if (tdb->abort_code >= _HTM_FIRST_USER_ABORT_CODE)
29982
@@ -117,7 +124,7 @@
29984
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
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 */));
29991
@@ -127,7 +134,7 @@
29993
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
29995
- return (tdb->format == 0
29996
+ return (tdb->format == 1
29997
&& (tdb->abort_code == 7 /* fetch overflow */
29998
|| tdb->abort_code == 8 /* store overflow */));
30000
@@ -137,7 +144,7 @@
30002
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
30004
- return tdb->format == 0 && tdb->abort_code == 13; /* depth exceeded */
30005
+ return tdb->format == 1 && tdb->abort_code == 13; /* depth exceeded */
30008
extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
30009
@@ -145,7 +152,7 @@
30011
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
30013
- return (tdb->format == 0
30014
+ return (tdb->format == 1
30015
&& (tdb->abort_code == 9 /* fetch conflict */
30016
|| tdb->abort_code == 10 /* store conflict */));
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);
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)
30034
# <http://www.gnu.org/licenses/>.
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.
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.
30055
@@ -214,6 +214,7 @@
30063
@@ -284,7 +285,8 @@
30064
(const_string "none"))
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)"))
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)"))
30077
+(define_attr "fix_ut699" "false,true"
30078
+ (symbol_ref "(sparc_fix_ut699 != 0
30079
+ ? FIX_UT699_TRUE : FIX_UT699_FALSE)"))
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")])
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)"))
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)"))
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)"))
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)"))
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.
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")))
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")))
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")))
30156
(define_delay (eq_attr "type" "call")
30157
[(eq_attr "in_call_delay" "true") (nil) (nil)])
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)])
30163
+(define_delay (eq_attr "type" "return")
30164
+ [(eq_attr "in_return_delay" "true") (nil) (nil)])
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")])
30171
(define_delay (eq_attr "type" "uncond_branch")
30172
- [(eq_attr "in_uncond_branch_delay" "true")
30174
+ [(eq_attr "in_branch_delay" "true") (nil) (nil)])
30176
-(define_delay (eq_attr "type" "return")
30177
- [(eq_attr "eligible_for_return_delay" "true") (nil) (nil)])
30180
;; Include SPARC DFA schedulers
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")])
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")))]
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")])
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")])
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")))]
30231
+ "TARGET_FPU && !sparc_fix_ut699"
30232
"fdivs\t%1, %2, %0"
30233
[(set_attr "type" "fpdivs")])
30235
@@ -5789,20 +5791,35 @@
30236
(sqrt:TF (match_operand:TF 1 "register_operand" "e")))]
30237
"TARGET_FPU && TARGET_HARD_QUAD"
30239
- [(set_attr "type" "fpsqrtd")])
30240
+ [(set_attr "type" "fpsqrts")])
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")))]
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"
30254
[(set_attr "type" "fpsqrtd")
30255
(set_attr "fptype" "double")])
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")])
30266
(define_insn "sqrtsf2"
30267
[(set (match_operand:SF 0 "register_operand" "=f")
30268
(sqrt:SF (match_operand:SF 1 "register_operand" "f")))]
30270
+ "TARGET_FPU && !sparc_fix_ut699"
30272
[(set_attr "type" "fpsqrts")])
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)
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) \
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)
30295
+Enum(sparc_processor_type) String(leon3) Value(PROCESSOR_LEON3)
30298
Enum(sparc_processor_type) String(sparclite) Value(PROCESSOR_SPARCLITE)
30301
@@ -201,9 +204,19 @@
30302
Enable workaround for single erratum of AT697F processor
30303
(corresponding to erratum #13 of AT697E processor)
30306
+Target Report RejectNegative Var(sparc_fix_ut699)
30307
+Enable workarounds for the errata of the UT699 processor
30309
Mask(LONG_DOUBLE_128)
30310
;; Use 128-bit long double
30313
+;; Generate code for LEON
30316
+;; Generate code for LEON3
30319
;; Generate code for SPARClite
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)"
30333
sparc_expand_compare_and_swap (operands);
30335
@@ -176,7 +177,7 @@
30336
[(match_operand:I48MODE 2 "register_operand" "")
30337
(match_operand:I48MODE 3 "register_operand" "")]
30340
+ "TARGET_V9 || TARGET_LEON3"
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")]
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")])
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"
30360
enum memmodel model = (enum memmodel) INTVAL (operands[3]);
30362
@@ -236,7 +237,7 @@
30365
(match_operand:SI 2 "register_operand" "0"))]
30366
- "TARGET_V8 || TARGET_V9"
30367
+ "(TARGET_V8 || TARGET_V9) && !sparc_fix_ut699"
30369
[(set_attr "type" "multi")])
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" "")]
30376
+ "!sparc_fix_ut699"
30378
enum memmodel model = (enum memmodel) INTVAL (operands[2]);
30380
@@ -268,6 +269,6 @@
30381
(unspec_volatile:QI [(match_operand:QI 1 "memory_operand" "+m")]
30383
(set (match_dup 1) (const_int -1))]
30385
+ "!sparc_fix_ut699"
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)
30393
PROCESSOR_SUPERSPARC,
30394
PROCESSOR_HYPERSPARC,
30397
PROCESSOR_SPARCLITE,
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)
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)
30420
#include "params.h"
30423
+#include "tree-pass.h"
30425
/* Processor costs */
30427
@@ -226,6 +227,30 @@
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 */
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
30470
-#undef TARGET_MACHINE_DEPENDENT_REORG
30471
-#define TARGET_MACHINE_DEPENDENT_REORG sparc_reorg
30473
#undef TARGET_RTX_COSTS
30474
#define TARGET_RTX_COSTS sparc_rtx_costs
30475
#undef TARGET_ADDRESS_COST
30476
@@ -804,6 +825,306 @@
30478
struct gcc_target targetm = TARGET_INITIALIZER;
30480
+/* Return the memory reference contained in X if any, zero otherwise. */
30485
+ if (GET_CODE (x) == SIGN_EXTEND || GET_CODE (x) == ZERO_EXTEND)
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. */
30501
+sparc_gate_work_around_errata (void)
30503
+ /* The only errata we handle are those of the AT697F and UT699. */
30504
+ return sparc_fix_at697f != 0 || sparc_fix_ut699 != 0;
30507
+static unsigned int
30508
+sparc_do_work_around_errata (void)
30512
+ /* Force all instructions to be split into their final form. */
30513
+ split_all_insns_noflow ();
30515
+ /* Now look for specific patterns in the insn stream. */
30516
+ for (insn = get_insns (); insn; insn = next)
30518
+ bool insert_nop = false;
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);
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)
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;
30540
+ next = next_active_insn (insn);
30543
+ /* If the insn is a branch, then it cannot be problematic. */
30544
+ if (!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) == SEQUENCE)
30547
+ extract_insn (next);
30548
+ code = INSN_CODE (next);
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)
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;
30571
+ ld [address], %fx+1
30572
+ FPOPd %fx, %fx, %fx */
30575
+ && (code == CODE_FOR_adddf3 || code == CODE_FOR_muldf3))
30576
+ insert_nop = true;
30580
+ case CODE_FOR_sqrtdf2:
30581
+ dest = REGNO (recog_data.operand[0]);
30582
+ src1 = REGNO (recog_data.operand[1]);
30584
+ ld [address], %fx+1
30585
+ fsqrtd %fx, %fx */
30586
+ if (src1 == x && dest == src1)
30587
+ insert_nop = true;
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)
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);
30608
+ next = next_active_insn (insn);
30611
+ /* If the insn is a branch, then it cannot be problematic. */
30612
+ if (!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) == SEQUENCE)
30615
+ /* Look for a second memory access to/from an integer register. */
30616
+ if ((set = single_set (next)) != NULL_RTX)
30618
+ rtx src = SET_SRC (set);
30619
+ rtx dest = SET_DEST (set);
30622
+ /* LDD is affected. */
30623
+ if ((mem = mem_ref (src)) != NULL_RTX
30625
+ && REGNO (dest) < 32
30626
+ && !reg_mentioned_p (x, XEXP (mem, 0)))
30627
+ insert_nop = true;
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))
30634
+ && REGNO (src) < 32
30635
+ && REGNO (src) != REGNO (x)))
30636
+ && !reg_mentioned_p (x, XEXP (dest, 0)))
30637
+ insert_nop = true;
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)
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;
30657
+ next = next_active_insn (insn);
30660
+ /* If the insn is a branch, then it cannot be problematic. */
30661
+ if (!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) == SEQUENCE)
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))
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++)
30678
+ after = next_active_insn (after);
30682
+ /* This is a branch with an empty delay slot. */
30683
+ if (!NONJUMP_INSN_P (after))
30685
+ if (++i == n_insns)
30688
+ after = NULL_RTX;
30690
+ /* This is a branch with a filled delay slot. */
30691
+ else if (GET_CODE (PATTERN (after)) == SEQUENCE)
30693
+ if (++i == n_insns)
30696
+ after = XVECEXP (PATTERN (after), 0, 1);
30698
+ /* This is a regular instruction. */
30700
+ branch_p = false;
30702
+ if (after && (set = single_set (after)) != NULL_RTX)
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));
30708
+ /* If the FP register is again modified before the store,
30709
+ then the store isn't affected. */
30711
+ && (REGNO (dest) == x
30712
+ || (REGNO (dest) == y && size == 8)))
30715
+ if (MEM_P (dest) && REG_P (src))
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))
30722
+ /* Otherwise, the store is affected. */
30723
+ if (REGNO (src) == x && size == 4)
30725
+ insert_nop = true;
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))
30735
+ insert_nop = true;
30742
+ next = NEXT_INSN (insn);
30745
+ emit_insn_before (gen_nop (), next);
30751
+struct rtl_opt_pass pass_work_around_errata =
30755
+ "errata", /* name */
30756
+ OPTGROUP_NONE, /* optinfo_flags */
30757
+ sparc_gate_work_around_errata, /* gate */
30758
+ sparc_do_work_around_errata, /* execute */
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 */
30771
+struct register_pass_info insert_pass_work_around_errata =
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 */
30779
+/* Helpers for TARGET_DEBUG_OPTIONS. */
30781
dump_target_flag_bits (const int flags)
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 @@
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;
30800
@@ -914,8 +1236,8 @@
30801
/* TI TMS390Z55 supersparc */
30802
{ "supersparc", MASK_ISA, MASK_V8 },
30803
{ "hypersparc", MASK_ISA, MASK_V8|MASK_FPU },
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
30815
+#ifndef HAVE_AS_LEON
30816
+ & ~(MASK_LEON | MASK_LEON3)
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;
30825
+ case PROCESSOR_LEON3:
30826
+ sparc_costs = &leon3_costs;
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;
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;
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
30852
+ register_pass (&insert_pass_work_around_errata);
30855
/* Miscellaneous utilities. */
30856
@@ -3090,10 +3429,13 @@
30857
/* Return nonzero if TRIAL can go into the call delay slot. */
30860
-tls_call_delay (rtx trial)
30861
+eligible_for_call_delay (rtx trial)
30865
+ if (get_attr_in_branch_delay (trial) == IN_BRANCH_DELAY_FALSE)
30869
call __tls_get_addr, %tgd_call (foo)
30870
add %l7, %o0, %o0, %tgd_add (foo)
30871
@@ -3175,11 +3517,7 @@
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
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))
30883
/* The 'restore src1,src2,dest' pattern for SImode. */
30884
@@ -3222,22 +3560,21 @@
30888
- if (GET_CODE (trial) != INSN)
30891
- if (get_attr_length (trial) != 1)
30894
/* If the function uses __builtin_eh_return, the eh_return machinery
30895
occupies the delay slot. */
30896
if (crtl->calls_eh_return)
30899
+ if (get_attr_in_branch_delay (trial) == IN_BRANCH_DELAY_FALSE)
30902
/* In the case of a leaf or flat function, anything can go into the slot. */
30903
if (sparc_leaf_function_p || TARGET_FLAT)
30905
- get_attr_in_uncond_branch_delay (trial) == IN_UNCOND_BRANCH_DELAY_TRUE;
30908
+ if (!NONJUMP_INSN_P (trial))
30911
pat = PATTERN (trial);
30912
if (GET_CODE (pat) == PARALLEL)
30914
@@ -3256,9 +3593,7 @@
30915
if (regno >= 8 && regno < 24)
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);
30924
if (GET_CODE (pat) != SET)
30925
@@ -3278,10 +3613,7 @@
30926
instruction, it can probably go in. But restore will not work
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);
30935
return eligible_for_restore_insn (trial, true);
30937
@@ -3293,10 +3625,10 @@
30941
- if (GET_CODE (trial) != INSN || GET_CODE (PATTERN (trial)) != SET)
30942
+ if (get_attr_in_branch_delay (trial) == IN_BRANCH_DELAY_FALSE)
30945
- if (get_attr_length (trial) != 1)
30946
+ if (!NONJUMP_INSN_P (trial))
30949
pat = PATTERN (trial);
30950
@@ -3315,6 +3647,9 @@
30954
+ if (GET_CODE (pat) != SET)
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);
30966
+ neg2_ovf = false;
30967
result = result.add_with_sign (tmp, false, &add2_ovf);
30968
overflow |= neg1_ovf | neg2_ovf | add1_ovf | add2_ovf;
30970
@@ -10897,107 +11233,6 @@
30971
return (vcall_offset >= -32768 || ! fixed_regs[5]);
30974
-/* We use the machine specific reorg pass to enable workarounds for errata. */
30977
-sparc_reorg (void)
30981
- /* The only erratum we handle for now is that of the AT697F processor. */
30982
- if (!sparc_fix_at697f)
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)
30989
- cleanup_barriers ();
30990
- dbr_schedule (get_insns ());
30993
- /* Now look for specific patterns in the insn stream. */
30994
- for (insn = get_insns (); insn; insn = next)
30996
- bool insert_nop = false;
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)
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;
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)
31019
- extract_insn (next);
31020
- code = INSN_CODE (next);
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)
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;
31044
- ld [address], %fx+1
31045
- FPOPd %fx, %fx, %fx */
31048
- && (code == CODE_FOR_adddf3 || code == CODE_FOR_muldf3))
31049
- insert_nop = true;
31053
- case CODE_FOR_sqrtdf2:
31054
- dest = REGNO (recog_data.operand[0]);
31055
- src1 = REGNO (recog_data.operand[1]);
31057
- ld [address], %fx+1
31058
- fsqrtd %fx, %fx */
31059
- if (src1 == x && dest == src1)
31060
- insert_nop = true;
31068
- next = NEXT_INSN (insn);
31071
- emit_insn_after (gen_nop (), insn);
31075
/* How to allocate a 'struct machine_function'. */
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/>.
31086
+;; Leon is a single-issue processor.
31088
(define_automaton "leon")
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")
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"))
31101
-(define_insn_reservation "leon_store" 1
31102
- (and (eq_attr "cpu" "leon")
31103
- (eq_attr "type" "store,fpstore"))
31104
- "leon_memory+write_buf")
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"))
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"))
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
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")
31135
+(define_cpu_unit "grfpu_alu" "grfpu")
31136
+(define_cpu_unit "grfpu_ds" "grfpu")
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")
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")
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")
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")
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
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 ""
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
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 @@
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} \
31229
%{mcpu=ultrasparc:%{!mv8plus:-Av9a}} \
31230
@@ -1754,6 +1758,12 @@
31231
#define AS_NIAGARA4_FLAG "-Av9" AS_NIAGARA3_FLAG
31234
+#ifdef HAVE_AS_LEON
31235
+#define AS_LEON_FLAG "-Aleon"
31237
+#define AS_LEON_FLAG "-Av8"
31240
/* We use gcc _mcount for profiling. */
31241
#define NO_PROFILE_COUNTERS 0
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 @@
31249
/* Macros used in the machine description to test the flags. */
31251
-/* configure can arrange to make this 2, to force a 486. */
31252
+/* configure can arrange to change it. */
31254
#ifndef TARGET_CPU_DEFAULT
31255
-#define TARGET_CPU_DEFAULT TARGET_CPU_DEFAULT_generic
31256
+#define TARGET_CPU_DEFAULT PROCESSOR_GENERIC32
31259
#ifndef TARGET_FPMATH_DEFAULT
31260
@@ -591,43 +591,6 @@
31261
/* Target Pragmas. */
31262
#define REGISTER_TARGET_PRAGMAS() ix86_register_pragmas ()
31264
-enum target_cpu_default
31266
- TARGET_CPU_DEFAULT_generic = 0,
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,
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,
31298
- TARGET_CPU_DEFAULT_max
31302
#define CC1_SPEC "%(cc1_cpu) "
31304
@@ -2089,25 +2052,27 @@
31305
with x86-64 medium memory model */
31306
#define DEFAULT_LARGE_SECTION_THRESHOLD 65536
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. */
31312
enum processor_type
31314
- PROCESSOR_I386 = 0, /* 80386 */
31315
+ PROCESSOR_GENERIC32 = 0,
31316
+ PROCESSOR_GENERIC64,
31317
+ PROCESSOR_I386, /* 80386 */
31318
PROCESSOR_I486, /* 80486DX, 80486SX, 80486DX[24] */
31320
PROCESSOR_PENTIUMPRO,
31323
- PROCESSOR_ATHLON,
31324
PROCESSOR_PENTIUM4,
31330
- PROCESSOR_GENERIC32,
31331
- PROCESSOR_GENERIC64,
31335
+ PROCESSOR_ATHLON,
31337
PROCESSOR_AMDFAM10,
31340
@@ -2114,7 +2079,6 @@
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")))
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))
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]);
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,
31375
@@ -1587,7 +1594,7 @@
31376
split_double_mode (DImode, &operands[1], 1, &operands[2], &operands[3]);
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,
31384
@@ -2715,7 +2722,20 @@
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));")
31390
+ rtx op = XEXP (operands[0], 0);
31391
+ if (GET_CODE (op) == PRE_DEC)
31393
+ gcc_assert (!TARGET_64BIT);
31394
+ op = GEN_INT (-4);
31398
+ op = XEXP (XEXP (op, 1), 1);
31399
+ gcc_assert (CONST_INT_P (op));
31401
+ operands[2] = op;
31405
[(set (match_operand:SF 0 "push_operand")
31406
@@ -5443,6 +5463,12 @@
31409
ix86_split_lea_for_addr (curr_insn, operands, mode);
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])));
31418
[(set_attr "type" "lea")
31419
@@ -6589,7 +6615,7 @@
31420
(set_attr "use_carry" "1")
31421
(set_attr "mode" "<MODE>")])
31423
-;; Overflow setting add and subtract instructions
31424
+;; Overflow setting add instructions
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>")])
31432
-(define_insn "*sub<mode>3_cconly_overflow"
31433
+(define_insn "*add<mode>3_cc_overflow"
31434
[(set (reg:CCC FLAGS_REG)
31437
- (match_operand:SWI 0 "nonimmediate_operand" "<r>m,<r>")
31438
- (match_operand:SWI 1 "<general_operand>" "<r><i>,<r>m"))
31441
- "cmp{<imodesuffix>}\t{%1, %0|%0, %1}"
31442
- [(set_attr "type" "icmp")
31443
- (set_attr "mode" "<MODE>")])
31445
-(define_insn "*<plusminus_insn><mode>3_cc_overflow"
31446
- [(set (reg:CCC FLAGS_REG)
31449
- (match_operand:SWI 1 "nonimmediate_operand" "<comm>0,0")
31451
+ (match_operand:SWI 1 "nonimmediate_operand" "%0,0")
31452
(match_operand:SWI 2 "<general_operand>" "<r><i>,<r>m"))
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>")])
31464
-(define_insn "*<plusminus_insn>si3_zext_cc_overflow"
31465
+(define_insn "*addsi3_zext_cc_overflow"
31466
[(set (reg:CCC FLAGS_REG)
31469
- (match_operand:SI 1 "nonimmediate_operand" "<comm>0")
31471
+ (match_operand:SI 1 "nonimmediate_operand" "%0")
31472
(match_operand:SI 2 "x86_64_general_operand" "rme"))
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")])
31484
@@ -8012,7 +8026,18 @@
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)
31490
+ && ix86_match_ccmode
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)"
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))]
31508
- { return ASM_SHORT "0x0b0f"; }
31510
+#ifdef HAVE_AS_IX86_UD2
31513
+ return ASM_SHORT "0x0b0f";
31516
[(set_attr "length" "2")])
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)
31524
extern __inline float __attribute__((__gnu_inline__, __always_inline__, __artificial__))
31525
_cvtsh_ss (unsigned short __S)
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);
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/>.
31540
-MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro \
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"));
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 @@
31573
[(set_attr "type" "ssemov")
31574
(set_attr "movu" "1")
31575
+ (set_attr "ssememalign" "8")
31576
(set_attr "prefix" "maybe_vex")
31578
(cond [(match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
31579
@@ -634,6 +635,7 @@
31581
[(set_attr "type" "ssemov")
31582
(set_attr "movu" "1")
31583
+ (set_attr "ssememalign" "8")
31584
(set_attr "prefix" "maybe_vex")
31586
(cond [(ior (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
31587
@@ -663,6 +665,7 @@
31589
[(set_attr "type" "ssemov")
31590
(set_attr "movu" "1")
31591
+ (set_attr "ssememalign" "8")
31592
(set (attr "prefix_data16")
31594
(match_test "TARGET_AVX")
31595
@@ -696,6 +699,7 @@
31597
[(set_attr "type" "ssemov")
31598
(set_attr "movu" "1")
31599
+ (set_attr "ssememalign" "8")
31600
(set (attr "prefix_data16")
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")
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")])
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")])
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")])
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")])
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")])
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")])
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")])
31700
;; Avoid combining registers from different units in a single alternative,
31701
@@ -5077,6 +5093,7 @@
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")
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 @@
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")])
31725
@@ -8736,6 +8755,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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>")])
31858
(define_expand "xop_vmfrcz<mode>2"
31859
[(set (match_operand:VF_128 0 "register_operand")
31861
@@ -10220,14 +10254,12 @@
31863
[(match_operand:VF_128 1 "nonimmediate_operand")]
31870
- operands[3] = CONST0_RTX (<MODE>mode);
31872
+ "operands[2] = CONST0_RTX (<MODE>mode);")
31874
-(define_insn "*xop_vmfrcz_<mode>"
31875
+(define_insn "*xop_vmfrcz<mode>2"
31876
[(set (match_operand:VF_128 0 "register_operand" "=x")
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)
31887
- return (__m128) __builtin_ia32_vfrczss ((__v4sf)__A, (__v4sf)__B);
31888
+ return (__m128) __builtin_ia32_movss ((__v4sf)__A,
31890
+ __builtin_ia32_vfrczss ((__v4sf)__B));
31893
extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
31894
_mm_frcz_sd (__m128d __A, __m128d __B)
31896
- return (__m128d) __builtin_ia32_vfrczsd ((__v2df)__A, (__v2df)__B);
31897
+ return (__m128d) __builtin_ia32_movsd ((__v2df)__A,
31899
+ __builtin_ia32_vfrczsd ((__v2df)__B));
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 @@
31909
level1->sizekb = 16; level1->assoc = 4; level1->line = 32;
31912
+ level1->sizekb = 16; level1->assoc = 4; level1->line = 64;
31915
+ level1->sizekb = 24; level1->assoc = 6; level1->line = 64;
31918
+ level2->sizekb = 256; level2->assoc = 8; level2->line = 64;
31921
+ level2->sizekb = 1024; level2->assoc = 16; level2->line = 64;
31924
level1->sizekb = 32; level1->assoc = 8; level1->line = 64;
31926
@@ -162,6 +174,9 @@
31928
level2->sizekb = 2048; level2->assoc = 4; level2->line = 32;
31931
+ level2->sizekb = 3072; level2->assoc = 12; level2->line = 64;
31936
@@ -203,6 +218,9 @@
31938
level2->sizekb = 512; level2->assoc = 2; level2->line = 64;
31941
+ level2->sizekb = 512; level2->assoc = 8; level2->line = 64;
31944
level2->sizekb = 256; level2->assoc = 8; level2->line = 32;
31946
@@ -470,6 +488,28 @@
31947
has_xsaveopt = eax & bit_XSAVEOPT;
31950
+ /* Check cpuid level of extended features. */
31951
+ __cpuid (0x80000000, ext_level, ebx, ecx, edx);
31953
+ if (ext_level > 0x80000000)
31955
+ __cpuid (0x80000001, eax, ebx, ecx, edx);
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;
31967
+ has_longmode = edx & bit_LM;
31968
+ has_3dnowp = edx & bit_3DNOWP;
31969
+ has_3dnow = edx & bit_3DNOW;
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 @@
31985
- /* Check cpuid level of extended features. */
31986
- __cpuid (0x80000000, ext_level, ebx, ecx, edx);
31988
- if (ext_level > 0x80000000)
31990
- __cpuid (0x80000001, eax, ebx, ecx, edx);
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;
32002
- has_longmode = edx & bit_LM;
32003
- has_3dnowp = edx & bit_3DNOWP;
32004
- has_3dnow = edx & bit_3DNOW;
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,
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,
32030
/* X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL */
32031
- m_COREI7 | m_BDVER,
32032
+ m_COREI7 | m_HASWELL| m_BDVER,
32034
/* X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL */
32036
@@ -2409,6 +2409,7 @@
32037
/* Processor target table, indexed by processor number */
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;
32048
+/* This table must be in sync with enum processor_type in i386.h. */
32049
static const struct ptt processor_target_table[PROCESSOR_max] =
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},
32062
- {&core_cost, 16, 10, 16, 10, 16},
32064
- {&core_cost, 16, 10, 16, 10, 16},
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}
32100
-static const char *const cpu_names[TARGET_CPU_DEFAULT_max] =
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
32144
@@ -3125,7 +3091,8 @@
32145
ix86_tune_string = ix86_arch_string;
32146
if (!ix86_tune_string)
32148
- ix86_tune_string = cpu_names[TARGET_CPU_DEFAULT];
32150
+ = processor_target_table[TARGET_CPU_DEFAULT].name;
32151
ix86_tune_defaulted = 1;
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);
32158
+ gcc_assert (ptr->arch < PROCESSOR_max);
32159
fprintf (file, "%*sarch = %d (%s)\n",
32162
- ((ptr->arch < TARGET_CPU_DEFAULT_max)
32163
- ? cpu_names[ptr->arch]
32165
+ ptr->arch, processor_target_table[ptr->arch].name);
32167
+ gcc_assert (ptr->tune < PROCESSOR_max);
32168
fprintf (file, "%*stune = %d (%s)\n",
32171
- ((ptr->tune < TARGET_CPU_DEFAULT_max)
32172
- ? cpu_names[ptr->tune]
32174
+ ptr->tune, processor_target_table[ptr->tune].name);
32176
fprintf (file, "%*sbranch_cost = %d\n", indent, "", ptr->branch_cost);
32178
@@ -5213,7 +5176,12 @@
32179
/* Use register calling convention for local functions when possible. */
32181
&& TREE_CODE (decl) == FUNCTION_DECL
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))
32191
/* FIXME: remove this CONST_CAST when cgraph.[ch] is constified. */
32192
@@ -5409,6 +5377,17 @@
32196
+ /* For pre-AVX disallow unaligned loads/stores where the
32197
+ instructions don't support it. */
32199
+ && VECTOR_MODE_P (GET_MODE (op))
32200
+ && misaligned_operand (op, GET_MODE (op)))
32202
+ int min_align = get_attr_ssememalign (insn);
32203
+ if (min_align == 0)
32207
/* A unary operator may be accepted by the predicate, but it
32208
is irrelevant for matching constraints. */
32210
@@ -5747,9 +5726,9 @@
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;
32223
@@ -5790,10 +5769,14 @@
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
32230
+ If INT_RETURN is true, warn ABI change if the vector mode isn't
32231
+ available for function return value. */
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,
32238
enum machine_mode mode = TYPE_MODE (type);
32240
@@ -5819,33 +5802,61 @@
32241
if (size == 32 && !TARGET_AVX)
32243
static bool warnedavx;
32244
+ static bool warnedavx_ret;
32248
- && cum->warn_avx)
32249
+ if (cum && cum->warn_avx && !warnedavx)
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;
32258
+ else if (in_return && !warnedavx_ret)
32260
+ if (warning (OPT_Wpsabi, "AVX vector return "
32261
+ "without AVX enabled changes the ABI"))
32262
+ warnedavx_ret = true;
32265
return TYPE_MODE (type);
32267
- else if ((size == 8 || size == 16) && !TARGET_SSE)
32268
+ else if (((size == 8 && TARGET_64BIT) || size == 16)
32271
static bool warnedsse;
32272
+ static bool warnedsse_ret;
32276
- && cum->warn_sse)
32277
+ if (cum && cum->warn_sse && !warnedsse)
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;
32287
+ else if (!TARGET_64BIT && in_return && !warnedsse_ret)
32289
+ if (warning (OPT_Wpsabi, "SSE vector return "
32290
+ "without SSE enabled changes the ABI"))
32291
+ warnedsse_ret = true;
32296
+ else if ((size == 8 && !TARGET_64BIT) && !TARGET_MMX)
32298
+ static bool warnedmmx;
32299
+ static bool warnedmmx_ret;
32301
+ if (cum && cum->warn_mmx && !warnedmmx)
32303
+ if (warning (OPT_Wpsabi, "MMX vector argument "
32304
+ "without MMX enabled changes the ABI"))
32305
+ warnedmmx = true;
32307
+ else if (in_return && !warnedmmx_ret)
32309
+ if (warning (OPT_Wpsabi, "MMX vector return "
32310
+ "without MMX enabled changes the ABI"))
32311
+ warnedmmx_ret = true;
32317
gcc_unreachable ();
32318
@@ -6190,25 +6201,28 @@
32322
- int size = (bit_offset % 64)+ (int) GET_MODE_BITSIZE (mode);
32323
+ int size = bit_offset + (int) GET_MODE_BITSIZE (mode);
32326
+ /* Analyze last 128 bits only. */
32327
+ size = (size - 1) & 0x7f;
32331
classes[0] = X86_64_INTEGERSI_CLASS;
32334
- else if (size <= 64)
32335
+ else if (size < 64)
32337
classes[0] = X86_64_INTEGER_CLASS;
32340
- else if (size <= 64+32)
32341
+ else if (size < 64+32)
32343
classes[0] = X86_64_INTEGER_CLASS;
32344
classes[1] = X86_64_INTEGERSI_CLASS;
32347
- else if (size <= 64+64)
32348
+ else if (size < 64+64)
32350
classes[0] = classes[1] = X86_64_INTEGER_CLASS;
32352
@@ -6475,7 +6489,7 @@
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]);
32361
@@ -6725,7 +6739,7 @@
32362
words = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
32365
- mode = type_natural_mode (type, NULL);
32366
+ mode = type_natural_mode (type, NULL, false);
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)
32374
- static bool warnedsse, warnedmmx;
32376
/* Avoid the AL settings for the Unix64 ABI. */
32377
if (mode == VOIDmode)
32378
return constm1_rtx;
32379
@@ -6811,12 +6823,6 @@
32381
if (!type || !AGGREGATE_TYPE_P (type))
32383
- if (!TARGET_SSE && !warnedsse && cum->warn_sse)
32385
- warnedsse = true;
32386
- warning (0, "SSE vector argument without SSE enabled "
32387
- "changes the ABI");
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 @@
32394
if (!type || !AGGREGATE_TYPE_P (type))
32396
- if (!TARGET_MMX && !warnedmmx && cum->warn_mmx)
32398
- warnedmmx = true;
32399
- warning (0, "MMX vector argument without MMX enabled "
32400
- "changes the ABI");
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);
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 @@
32422
+ return TARGET_64BIT && ix86_abi != MS_ABI;
32424
- case FIRST_FLOAT_REG:
32425
+ /* Complex values are returned in %st(0)/%st(1) pair. */
32428
/* TODO: The function should depend on current function ABI but
32429
builtins.c would need updating then. Therefore we use the
32431
@@ -7245,10 +7251,12 @@
32433
return TARGET_FLOAT_RETURNS_IN_80387;
32435
- case FIRST_SSE_REG:
32436
+ /* Complex values are returned in %xmm0/%xmm1 pair. */
32441
- case FIRST_MMX_REG:
32443
if (TARGET_MACHO || TARGET_64BIT)
32446
@@ -7420,7 +7428,7 @@
32447
enum machine_mode mode, orig_mode;
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);
32455
@@ -7535,7 +7543,7 @@
32456
#ifdef SUBTARGET_RETURN_IN_MEMORY
32457
return SUBTARGET_RETURN_IN_MEMORY (type, fntype);
32459
- const enum machine_mode mode = type_natural_mode (type, NULL);
32460
+ const enum machine_mode mode = type_natural_mode (type, NULL, true);
32464
@@ -7549,52 +7557,6 @@
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....
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. */
32480
-ix86_struct_value_rtx (tree type, int incoming ATTRIBUTE_UNUSED)
32482
- static bool warnedsse, warnedmmx;
32484
- if (!TARGET_64BIT && type)
32486
- /* Look at the return type of the function, not the function type. */
32487
- enum machine_mode mode = TYPE_MODE (TREE_TYPE (type));
32489
- if (!TARGET_SSE && !warnedsse)
32491
- if (mode == TImode
32492
- || (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 16))
32494
- warnedsse = true;
32495
- warning (0, "SSE vector return without SSE enabled "
32496
- "changes the ABI");
32500
- if (!TARGET_MMX && !warnedmmx)
32502
- if (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 8)
32504
- warnedmmx = true;
32505
- warning (0, "MMX vector return without MMX enabled "
32506
- "changes the ABI");
32515
/* Create the va_list data type. */
32517
@@ -8019,7 +7981,7 @@
32518
size = int_size_in_bytes (type);
32519
rsize = (size + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
32521
- nat_mode = type_natural_mode (type, NULL);
32522
+ nat_mode = type_natural_mode (type, NULL, false);
32526
@@ -10560,18 +10522,20 @@
32528
m->fs.sp_offset += allocate;
32530
+ /* Use stack_pointer_rtx for relative addressing so that code
32531
+ works for realigned stack, too. */
32532
if (r10_live && eax_live)
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));
32543
else if (eax_live || r10_live)
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 @@
32554
-/* Determine if op is suitable SUBREG RTX for address. */
32557
-ix86_address_subreg_operand (rtx op)
32559
- enum machine_mode mode;
32564
- mode = GET_MODE (op);
32566
- if (GET_MODE_CLASS (mode) != MODE_INT)
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)
32574
- /* Allow only SUBREGs of non-eliminable hard registers. */
32575
- return register_no_elim_operand (op, mode);
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 @@
32583
else if (GET_CODE (addr) == SUBREG)
32585
- if (ix86_address_subreg_operand (SUBREG_REG (addr)))
32586
+ if (REG_P (SUBREG_REG (addr)))
32590
@@ -11705,7 +11645,7 @@
32594
- if (!ix86_address_subreg_operand (SUBREG_REG (op)))
32595
+ if (!REG_P (SUBREG_REG (op)))
32599
@@ -11750,19 +11690,6 @@
32600
scale = 1 << scale;
32603
- else if (CONST_INT_P (addr))
32605
- if (!x86_64_immediate_operand (addr, VOIDmode))
32608
- /* Constant addresses are sign extended to 64bit, we have to
32609
- prevent addresses from 0x80000000 to 0xffffffff in x32 mode. */
32611
- && val_signbit_known_set_p (SImode, INTVAL (addr)))
32617
disp = addr; /* displacement */
32619
@@ -11771,18 +11698,12 @@
32622
else if (GET_CODE (index) == SUBREG
32623
- && ix86_address_subreg_operand (SUBREG_REG (index)))
32624
+ && REG_P (SUBREG_REG (index)))
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)))
32636
/* Extract the integral value of scale. */
32639
@@ -12258,6 +12179,45 @@
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. */
32648
+ix86_validate_address_register (rtx op)
32650
+ enum machine_mode mode = GET_MODE (op);
32652
+ /* Only SImode or DImode registers can form the address. */
32653
+ if (mode != SImode && mode != DImode)
32658
+ else if (GET_CODE (op) == SUBREG)
32660
+ rtx reg = SUBREG_REG (op);
32662
+ if (!REG_P (reg))
32665
+ mode = GET_MODE (reg);
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)
32673
+ /* Allow only SUBREGs of non-eliminable hard registers. */
32674
+ if (register_no_elim_operand (reg, mode))
32678
+ /* Op is not a register. */
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;
32691
if (ix86_decompose_address (addr, &parts) <= 0)
32692
/* Decomposition failed. */
32693
@@ -12282,23 +12243,16 @@
32694
index = parts.index;
32696
scale = parts.scale;
32699
/* Validate base register. */
32703
+ rtx reg = ix86_validate_address_register (base);
32705
- if (REG_P (base))
32707
- else if (GET_CODE (base) == SUBREG && REG_P (SUBREG_REG (base)))
32708
- reg = SUBREG_REG (base);
32710
- /* Base is not a register. */
32711
+ if (reg == NULL_RTX)
32714
- if (GET_MODE (base) != SImode && GET_MODE (base) != DImode)
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. */
32725
+ rtx reg = ix86_validate_address_register (index);
32727
- if (REG_P (index))
32729
- else if (GET_CODE (index) == SUBREG && REG_P (SUBREG_REG (index)))
32730
- reg = SUBREG_REG (index);
32732
- /* Index is not a register. */
32733
+ if (reg == NULL_RTX)
32736
- if (GET_MODE (index) != SImode && GET_MODE (index) != DImode)
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))
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)))
32752
/* Validate scale factor. */
32755
@@ -12453,6 +12405,12 @@
32756
&& !x86_64_immediate_operand (disp, VOIDmode))
32757
/* Displacement is out of range. */
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)))
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)
32775
gcc_unreachable ();
32777
@@ -13840,8 +13796,12 @@
32781
- gcc_assert (mode == CCmode || mode == CCCmode);
32783
+ if (mode == CCmode)
32785
+ else if (mode == CCCmode)
32788
+ gcc_unreachable ();
32792
@@ -13861,9 +13821,12 @@
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)
32804
+ gcc_unreachable ();
32807
gcc_assert (mode == CCmode || mode == CCGCmode || mode == CCNOmode);
32808
@@ -13870,11 +13833,8 @@
32812
- /* ??? As above. */
32813
if (mode == CCmode)
32815
- else if (mode == CCCmode)
32816
- suffix = fp ? "nb" : "ae";
32818
gcc_unreachable ();
32820
@@ -15340,7 +15300,7 @@
32821
rtx arg = XEXP (XEXP (link, 0), 0);
32823
if (ix86_check_avx256_register (&arg, NULL))
32824
- return AVX_U128_ANY;
32825
+ return AVX_U128_DIRTY;
32829
@@ -15460,8 +15420,8 @@
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;
32836
+ return avx_reg256_found ? AVX_U128_DIRTY : AVX_U128_CLEAN;
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))
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))))
32856
+ /* Check if it is OK to split here. */
32857
+ if (!ix86_ok_to_clobber_flags (insn))
32860
ok = ix86_decompose_address (operands[1], &parts);
32863
@@ -18486,12 +18456,7 @@
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)))
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 @@
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));
32886
@@ -21740,6 +21705,21 @@
32890
+/* Copy the address to a Pmode register. This is used for x32 to
32891
+ truncate DImode TLS address to a SImode register. */
32894
+ix86_copy_addr_to_reg (rtx addr)
32896
+ if (GET_MODE (addr) == Pmode)
32897
+ return copy_addr_to_reg (addr);
32900
+ gcc_assert (GET_MODE (addr) == DImode && Pmode == SImode);
32901
+ return gen_rtx_SUBREG (SImode, copy_to_mode_reg (DImode, addr), 0);
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);
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));
32919
@@ -23119,7 +23099,7 @@
32920
gcc_assert (alg != no_stringop);
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));
32928
@@ -24988,7 +24968,8 @@
32930
ix86_data_alignment (tree type, int align)
32932
- int max_align = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
32934
+ = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
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 },
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 @@
32952
ix86_expand_special_args_builtin (const struct builtin_description *d,
32953
- tree exp, rtx target)
32954
+ tree exp, rtx target)
32958
unsigned int i, nargs, arg_adjust, memory;
32959
+ bool aligned_mem = false;
32963
@@ -31295,6 +31277,15 @@
32969
+ case CODE_FOR_sse4_1_movntdqa:
32970
+ case CODE_FOR_avx2_movntdqa:
32971
+ aligned_mem = true;
32977
case VOID_FTYPE_PV2SF_V4SF:
32978
case VOID_FTYPE_PV4DI_V4DI:
32979
@@ -31312,6 +31303,26 @@
32981
/* Reserve memory operand for target. */
32982
memory = ARRAY_SIZE (args);
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;
33004
case V4SF_FTYPE_V4SF_PCV2SF:
33005
case V2DF_FTYPE_V2DF_PCDOUBLE:
33006
@@ -31368,6 +31379,17 @@
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);
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);
33044
@@ -32208,7 +32239,9 @@
33045
mode4 = insn_data[icode].operand[5].mode;
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);
33054
subtarget = target;
33055
@@ -33879,10 +33912,10 @@
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
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 @@
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);
33079
@@ -35040,8 +35073,9 @@
33080
output_set_got (tmp, NULL_RTX);
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);
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).
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))
33103
@@ -35260,6 +35297,7 @@
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)
33111
@@ -35278,6 +35316,7 @@
33112
fprintf (dump_file, "Insn %i estimated to %i bytes\n",
33113
INSN_UID (insn), min_size);
33115
+ && asm_noperands (PATTERN (insn)) < 0
33116
&& GET_CODE (PATTERN (insn)) != ADDR_VEC
33117
&& GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC)
33119
@@ -35289,6 +35328,7 @@
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)
33127
@@ -39371,7 +39411,9 @@
33129
dfinal.perm[i] = e;
33131
- dfinal.op0 = gen_reg_rtx (dfinal.vmode);
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 @@
33140
gcc_assert (!d->one_operand_p);
33142
+ if (d->testing_p)
33146
eltsz = GET_MODE_SIZE (GET_MODE_INNER (d->vmode));
33148
@@ -40005,6 +40050,8 @@
33152
+ if (d->testing_p)
33154
t1 = gen_reg_rtx (V4DFmode);
33155
t2 = gen_reg_rtx (V4DFmode);
33157
@@ -40024,6 +40071,8 @@
33159
int mask = odd ? 0xdd : 0x88;
33161
+ if (d->testing_p)
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);
33170
+ if (d->testing_p)
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);
33179
+ if (d->testing_p)
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);
33188
+ if (d->testing_p)
33191
t1 = gen_reg_rtx (V4DImode);
33192
t2 = gen_reg_rtx (V4DImode);
33194
@@ -40144,6 +40200,9 @@
33195
return expand_vec_perm_even_odd_1 (&d_copy, odd);
33198
+ if (d->testing_p)
33201
t1 = gen_reg_rtx (V8SImode);
33202
t2 = gen_reg_rtx (V8SImode);
33204
@@ -40236,6 +40295,8 @@
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)
33213
@@ -42473,8 +42534,6 @@
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 @@
33228
;; Network intrinsics
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)]
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)
33245
builtin_define ("__tilegx32__");
33247
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
33248
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
33250
TILEGX_CPU_CPP_ENDIAN_BUILTINS ();
33251
GNU_USER_TARGET_OS_CPP_BUILTINS ();
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
33262
enum memmodel model = (enum memmodel) INTVAL (operands[3]);
33264
if (operands[2] != const0_rtx)
33265
- emit_move_insn (operands[2], gen_rtx_NEG (<MODE>mode, operands[2]));
33267
+ addend = gen_reg_rtx (<MODE>mode);
33268
+ emit_move_insn (addend,
33269
+ gen_rtx_MINUS (<MODE>mode, const0_rtx, operands[2]));
33272
+ addend = operands[2];
33274
tilegx_pre_atomic_barrier (model);
33275
emit_insn (gen_atomic_fetch_add_bare<mode> (operands[0],
33279
tilegx_post_atomic_barrier (model);
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 @@
33290
+/* Implement TARGET_EXPAND_TO_RTL_HOOK. */
33292
+tilegx_expand_to_rtl_hook (void)
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;
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 @@
33308
+ /* If we are generating a prefetch, tell the scheduler not to move
33310
+ if (GET_CODE (pat) == PREFETCH)
33311
+ PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
33316
@@ -4368,10 +4384,12 @@
33321
+ rtx insn, next, prev;
33322
rtx end = NEXT_INSN (BB_END (bb));
33324
- for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn; insn = next)
33326
+ for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn;
33327
+ prev = insn, insn = next)
33329
next = next_insn_to_bundle (NEXT_INSN (insn), end);
33331
@@ -4396,6 +4414,18 @@
33332
PUT_MODE (insn, SImode);
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)
33343
+ PUT_MODE (prev, QImode);
33345
+ delete_insn (insn);
33350
@@ -5498,6 +5528,9 @@
33351
#undef TARGET_RTX_COSTS
33352
#define TARGET_RTX_COSTS tilegx_rtx_costs
33354
+#undef TARGET_EXPAND_TO_RTL_HOOK
33355
+#define TARGET_EXPAND_TO_RTL_HOOK tilegx_expand_to_rtl_hook
33357
#undef TARGET_SHIFT_TRUNCATION_MASK
33358
#define TARGET_SHIFT_TRUNCATION_MASK tilegx_shift_truncation_mask
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)")))
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)"))
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))
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)
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);
33400
/* Result value of sh_find_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 @@
33418
/* Determine the maximum possible displacement for a move insn for the
33421
-max_mov_insn_displacement (enum machine_mode mode, bool consider_sh2a)
33423
+sh_max_mov_insn_displacement (machine_mode mode, bool consider_sh2a)
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 @@
33430
/* Return the displacement value of a displacement address. */
33431
-static inline HOST_WIDE_INT
33432
-disp_addr_displacement (rtx x)
33434
+sh_disp_addr_displacement (rtx x)
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;
33446
/* The displacement would fit into a 4 byte move insn (SH2A). */
33448
- && offset > 0 && offset <= max_mov_insn_displacement (mode, true))
33449
+ && offset > 0 && offset <= sh_max_mov_insn_displacement (mode, true))
33452
/* The displacement is probably out of range and will require extra
33453
@@ -10218,7 +10216,7 @@
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);
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))
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))")))
33492
(define_constraint "Bsc"
33493
@@ -295,13 +296,15 @@
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))")))
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)")))
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);
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.
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.
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)"
33553
- [(set_attr "type" "move,store,load")])
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")])
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"))]
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))"
33600
- [(set_attr "type" "movi8,load,store,prget,prset")])
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"))]
33606
- && (arith_reg_operand (operands[0], HImode)
33607
- || arith_reg_operand (operands[1], HImode))"
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")))
33625
+ (and (match_operand 1 "displacement_mem_operand")
33626
+ (not (match_operand 1 "short_displacement_mem_operand")))
33628
+ (const_int 2)))])
33630
(define_insn "*movqi_media"
33631
[(set (match_operand:QI 0 "general_movdst_operand" "=r,r,r,m")
33632
@@ -8427,11 +8409,9 @@
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,
33639
- ? prev_nonnote_insn_bb
33640
- : prev_nonnote_insn);
33641
+ prev_nonnote_insn);
33643
if (s1.set_src == NULL_RTX)
33646
@@ -8449,15 +8429,25 @@
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
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
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;
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
33670
+ rtx n = find_regno_note (s1.insn, REG_DEAD, T_REG);
33671
+ if (n != NULL_RTX)
33672
+ remove_note (s1.insn, n);
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)
33685
;; Used for various architecture options.
33688
-;; Set if the default precision of th FPU is single.
33689
+;; Set if the default precision of the FPU is single.
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)
33698
(ior (match_operand 0 "const_0_operand")
33699
(match_operand 0 "register_operand")))
33701
+(define_predicate "reg_or_mem_operand"
33702
+ (ior (match_operand 0 "memory_operand")
33703
+ (match_operand 0 "register_operand")))
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)"))
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)
33721
;; bshift Shift operations
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"))
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")))]
33738
;;----------------------------------------------------------------
33739
@@ -1118,6 +1119,18 @@
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")))]
33751
+ [(set_attr "type" "load,store")
33752
+ (set_attr "mode" "SI")
33753
+ (set_attr "length" "4,4")])
33755
;; 32-bit floating point moves
33757
(define_expand "movsf"
33758
@@ -1472,7 +1485,7 @@
33759
(set_attr "length" "124")]
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")]
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")]
33780
-(define_insn "signed_compare"
33781
- [(set (match_operand:SI 0 "register_operand" "=d")
33783
- [(match_operand:SI 1 "register_operand" "d")
33784
- (match_operand:SI 2 "register_operand" "d")] UNSPEC_CMP))]
33787
- [(set_attr "type" "arith")
33788
- (set_attr "mode" "SI")
33789
- (set_attr "length" "4")])
33791
-(define_insn "unsigned_compare"
33792
- [(set (match_operand:SI 0 "register_operand" "=d")
33794
- [(match_operand:SI 1 "register_operand" "d")
33795
- (match_operand:SI 2 "register_operand" "d")] UNSPEC_CMPU))]
33798
- [(set_attr "type" "arith")
33799
- (set_attr "mode" "SI")
33800
- (set_attr "length" "4")])
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 @@
33814
(define_expand "cbranchsf4"
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")]
33825
+(define_insn "branch_compare"
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")
33831
+ (label_ref (match_operand 3))
33833
+ (clobber(reg:SI R_TMP))]
33836
+ operands[4] = gen_rtx_REG (SImode, MB_ABI_ASM_TEMP_REGNUM);
33837
+ enum rtx_code code = GET_CODE (operands[0]);
33839
+ if (code == GT || code == LE)
33841
+ output_asm_insn ("cmp\tr18,%z1,%z2", operands);
33842
+ code = swap_condition (code);
33844
+ else if (code == GTU || code == LEU)
33846
+ output_asm_insn ("cmpu\tr18,%z1,%z2", operands);
33847
+ code = swap_condition (code);
33849
+ else if (code == GE || code == LT)
33851
+ output_asm_insn ("cmp\tr18,%z2,%z1", operands);
33853
+ else if (code == GEU || code == LTU)
33855
+ output_asm_insn ("cmpu\tr18,%z2,%z1", operands);
33858
+ operands[0] = gen_rtx_fmt_ee (signed_condition (code), SImode, operands[4], const0_rtx);
33859
+ return "b%C0i%?\tr18,%3";
33861
+ [(set_attr "type" "branch")
33862
+ (set_attr "mode" "none")
33863
+ (set_attr "length" "12")]
33866
;;----------------------------------------------------------------
33867
;; Unconditional branches
33868
;;----------------------------------------------------------------
33869
@@ -2201,6 +2233,14 @@
33870
(set_attr "mode" "none")
33871
(set_attr "length" "4")])
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))]
33878
+ [(set_attr "type" "trap")]
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)
33892
- const char *tmpl = "vX.YY.Z";
33893
+ const char *tmpl = "vXX.YY.Z";
33903
{ /* Looking for major */
33904
- if (!(*p >= '0' && *p <= '9'))
33906
- iver += (int) (*p - '0');
33915
+ if (!(*p >= '0' && *p <= '9'))
33917
+ iver += (int) (*p - '0');
33921
else if (*v == 'Y')
33922
{ /* Looking for minor */
33923
if (!(*p >= '0' && *p <= '9'))
33924
@@ -3064,6 +3071,73 @@
33929
+microblaze_asm_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
33930
+ HOST_WIDE_INT delta, HOST_WIDE_INT vcall_offset,
33933
+ rtx this_rtx, insn, funexp;
33935
+ reload_completed = 1;
33936
+ epilogue_completed = 1;
33938
+ /* Mark the end of the (empty) prologue. */
33939
+ emit_note (NOTE_INSN_PROLOGUE_END);
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));
33946
+ this_rtx = gen_rtx_REG (Pmode, MB_ABI_FIRST_ARG_REGNUM);
33948
+ /* Apply the constant offset, if required. */
33950
+ emit_insn (gen_addsi3 (this_rtx, this_rtx, GEN_INT (delta)));
33952
+ /* Apply the offset from the vtable, if required. */
33953
+ if (vcall_offset)
33955
+ rtx vcall_offset_rtx = GEN_INT (vcall_offset);
33956
+ rtx temp1 = gen_rtx_REG (Pmode, MB_ABI_TEMP1_REGNUM);
33958
+ emit_move_insn (temp1, gen_rtx_MEM (Pmode, this_rtx));
33960
+ rtx loc = gen_rtx_PLUS (Pmode, temp1, vcall_offset_rtx);
33961
+ emit_move_insn (temp1, gen_rtx_MEM (Pmode, loc));
33963
+ emit_insn (gen_addsi3 (this_rtx, this_rtx, temp1));
33966
+ /* Generate a tail call to the target function. */
33967
+ if (!TREE_USED (function))
33969
+ assemble_external (function);
33970
+ TREE_USED (function) = 1;
33973
+ funexp = XEXP (DECL_RTL (function), 0);
33974
+ rtx temp2 = gen_rtx_REG (Pmode, MB_ABI_TEMP2_REGNUM);
33977
+ emit_move_insn (temp2, expand_pic_symbol_ref (Pmode, funexp));
33979
+ emit_move_insn (temp2, funexp);
33981
+ emit_insn (gen_indirect_jump (temp2));
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 ();
33991
+ reload_completed = 0;
33992
+ epilogue_completed = 0;
33996
microblaze_expand_move (enum machine_mode mode, rtx operands[])
33998
@@ -3234,67 +3308,47 @@
33999
emit_move_insn (mem, fnaddr);
34002
-/* Emit instruction to perform compare.
34003
- cmp is (compare_op op0 op1). */
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. */
34010
+microblaze_expand_conditional_branch (enum machine_mode mode, rtx operands[])
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;
34023
gcc_assert ((GET_CODE (cmp_op0) == REG) || (GET_CODE (cmp_op0) == SUBREG));
34025
/* If comparing against zero, just test source reg. */
34026
- if (cmp_op1 == const0_rtx)
34028
+ if (cmp_op1 == const0_rtx)
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));
34035
- if (code == EQ || code == NE)
34036
+ else if (code == EQ || code == NE)
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));
34043
- else if (code == GT || code == GTU || code == LE || code == LEU)
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));
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));
34059
- else /* if (code == GE || code == GEU || code == LT || code == LTU) */
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));
34065
- emit_insn (gen_unsigned_compare (comp_reg, cmp_op1, cmp_op0));
34071
-/* Generate conditional branch -- first, generate test condition,
34072
- second, generate correct branch instruction. */
34075
-microblaze_expand_conditional_branch (enum machine_mode mode, rtx operands[])
34077
- enum rtx_code code = GET_CODE (operands[0]);
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]));
34087
microblaze_expand_conditional_branch_sf (rtx operands[])
34090
@@ -3501,6 +3555,12 @@
34091
#undef TARGET_SECONDARY_RELOAD
34092
#define TARGET_SECONDARY_RELOAD microblaze_secondary_reload
34094
+#undef TARGET_ASM_OUTPUT_MI_THUNK
34095
+#define TARGET_ASM_OUTPUT_MI_THUNK microblaze_asm_output_mi_thunk
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
34100
#undef TARGET_SCHED_ADJUST_COST
34101
#define TARGET_SCHED_ADJUST_COST microblaze_adjust_cost
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
34112
+#define SIZE_TYPE "unsigned int"
34114
+#undef PTRDIFF_TYPE
34115
+#define PTRDIFF_TYPE "int"
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))))
34124
-#define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) \
34125
- (GET_MODE_CLASS (MODE) == MODE_INT)
34127
/* Stack layout; function entry, exit and calling. */
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 @@
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));
34143
+ /* Skip a leading '*' that might still prefix the assembler name,
34144
+ e.g. in non-LTO runs. */
34146
+ name = default_strip_name_encoding (name);
34148
/* Silently ignore 'signal' if 'interrupt' is present. AVR-LibC startet
34149
using this when it switched from SIGNAL and INTERRUPT to ISR. */
34151
@@ -6806,8 +6810,8 @@
34153
/* Work out the shortest sequence. */
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);
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)
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 @@
34188
- [(set (match_operand 0 "register_operand" "")
34189
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
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
34197
- [(set (match_operand 0 "register_operand" "")
34198
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
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
34206
- [(set (match_operand 0 "register_operand" "")
34207
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
34209
4 "cris_plus_or_bound_operator"
34211
@@ -4044,7 +4044,7 @@
34212
;; bound. Call this op-extend-split-swapped-rx=rz.
34215
- [(set (match_operand 0 "register_operand" "")
34216
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
34218
4 "cris_plus_or_bound_operator"
34220
@@ -4075,7 +4075,7 @@
34221
;; Call this op-extend.
34224
- [(set (match_operand 0 "register_operand" "")
34225
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
34227
3 "cris_orthogonal_operator"
34228
[(match_operand 1 "register_operand" "")
34229
@@ -4099,7 +4099,7 @@
34230
;; Call this op-split-rx=rz
34233
- [(set (match_operand 0 "register_operand" "")
34234
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
34236
3 "cris_commutative_orth_op"
34237
[(match_operand 2 "memory_operand" "")
34238
@@ -4123,7 +4123,7 @@
34239
;; Call this op-split-swapped.
34242
- [(set (match_operand 0 "register_operand" "")
34243
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
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.
34251
- [(set (match_operand 0 "register_operand" "")
34252
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
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.
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" ""))]
34269
&& REG_P (operands[0])
34270
@@ -4574,7 +4575,7 @@
34271
;; As the above, but MOVS and MOVU.
34274
- [(set (match_operand 0 "register_operand" "")
34275
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
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)
34284
(match_test "cris_simple_address_operand (XEXP (op, 0),
34287
+(define_predicate "cris_nonsp_register_operand"
34288
+ (and (match_operand 0 "register_operand")
34289
+ (match_test "op != stack_pointer_rtx")))
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);
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
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];
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)
34322
; Main data types used by the insntructions
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"))
34329
@@ -1548,12 +1548,12 @@
34333
- emit_insn (gen_aarch64_cmhs<mode> (mask, operands[4], operands[5]));
34334
+ emit_insn (gen_aarch64_cmgeu<mode> (mask, operands[4], operands[5]));
34339
- emit_insn (gen_aarch64_cmhi<mode> (mask, operands[4], operands[5]));
34340
+ emit_insn (gen_aarch64_cmgtu<mode> (mask, operands[4], operands[5]));
34344
@@ -3034,48 +3034,181 @@
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.
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")]
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")
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>")]
34376
+(define_insn_and_split "aarch64_cm<optab>di"
34377
+ [(set (match_operand:DI 0 "register_operand" "=w,w,r")
34380
+ (match_operand:DI 1 "register_operand" "w,w,r")
34381
+ (match_operand:DI 2 "aarch64_simd_reg_or_zero" "w,ZDz,r")
34385
+ cm<n_optab>\t%d0, %d<cmp_1>, %d<cmp_2>
34386
+ cm<optab>\t%d0, %d1, #0
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)
34397
+ (set (match_dup 0)
34400
+ (match_operand 3 "cc_register" "")
34401
+ (const_int 0))))]
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));
34409
+ [(set_attr "simd_type" "simd_cmp")
34410
+ (set_attr "simd_mode" "DI")]
34413
-(define_insn "aarch64_cm<cmp><mode>"
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")]
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")
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>")]
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")
34439
+ (match_operand:DI 1 "register_operand" "w,r")
34440
+ (match_operand:DI 2 "aarch64_simd_reg_or_zero" "w,r")
34444
+ cm<n_optab>\t%d0, %d<cmp_1>, %d<cmp_2>
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)
34455
+ (set (match_dup 0)
34458
+ (match_operand 3 "cc_register" "")
34459
+ (const_int 0))))]
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));
34467
+ [(set_attr "simd_type" "simd_cmp")
34468
+ (set_attr "simd_mode" "DI")]
34471
-(define_insn "aarch64_cm<cmp><mode>"
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>
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)))))]
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>")]
34488
+(define_insn_and_split "aarch64_cmtstdi"
34489
+ [(set (match_operand:DI 0 "register_operand" "=w,r")
34493
+ (match_operand:DI 1 "register_operand" "w,r")
34494
+ (match_operand:DI 2 "register_operand" "w,r"))
34495
+ (const_int 0))))]
34498
+ cmtst\t%d0, %d1, %d2
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)
34507
+ (and:DI (match_dup 1)
34510
+ (set (match_dup 0)
34513
+ (match_operand 3 "cc_register" "")
34514
+ (const_int 0))))]
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));
34523
+ [(set_attr "simd_type" "simd_cmp")
34524
+ (set_attr "simd_mode" "DI")]
34527
+;; fcm(eq|ge|gt|le|lt)
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")]
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")
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>")]
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)
34554
(ior (match_operand 0 "register_operand")
34555
(match_test "op == const0_rtx"))))
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)"))))
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)
34573
- return (uint8x8_t) __builtin_aarch64_cmhsv8qi ((int8x8_t) __a,
34574
+ return (uint8x8_t) __builtin_aarch64_cmgeuv8qi ((int8x8_t) __a,
34578
@@ -19558,7 +19558,7 @@
34579
__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
34580
vcge_u16 (uint16x4_t __a, uint16x4_t __b)
34582
- return (uint16x4_t) __builtin_aarch64_cmhsv4hi ((int16x4_t) __a,
34583
+ return (uint16x4_t) __builtin_aarch64_cmgeuv4hi ((int16x4_t) __a,
34587
@@ -19565,7 +19565,7 @@
34588
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
34589
vcge_u32 (uint32x2_t __a, uint32x2_t __b)
34591
- return (uint32x2_t) __builtin_aarch64_cmhsv2si ((int32x2_t) __a,
34592
+ return (uint32x2_t) __builtin_aarch64_cmgeuv2si ((int32x2_t) __a,
34596
@@ -19572,7 +19572,7 @@
34597
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
34598
vcge_u64 (uint64x1_t __a, uint64x1_t __b)
34600
- return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __a,
34601
+ return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __a,
34605
@@ -19603,7 +19603,7 @@
34606
__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
34607
vcgeq_u8 (uint8x16_t __a, uint8x16_t __b)
34609
- return (uint8x16_t) __builtin_aarch64_cmhsv16qi ((int8x16_t) __a,
34610
+ return (uint8x16_t) __builtin_aarch64_cmgeuv16qi ((int8x16_t) __a,
34614
@@ -19610,7 +19610,7 @@
34615
__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
34616
vcgeq_u16 (uint16x8_t __a, uint16x8_t __b)
34618
- return (uint16x8_t) __builtin_aarch64_cmhsv8hi ((int16x8_t) __a,
34619
+ return (uint16x8_t) __builtin_aarch64_cmgeuv8hi ((int16x8_t) __a,
34623
@@ -19617,7 +19617,7 @@
34624
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
34625
vcgeq_u32 (uint32x4_t __a, uint32x4_t __b)
34627
- return (uint32x4_t) __builtin_aarch64_cmhsv4si ((int32x4_t) __a,
34628
+ return (uint32x4_t) __builtin_aarch64_cmgeuv4si ((int32x4_t) __a,
34632
@@ -19624,7 +19624,7 @@
34633
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
34634
vcgeq_u64 (uint64x2_t __a, uint64x2_t __b)
34636
- return (uint64x2_t) __builtin_aarch64_cmhsv2di ((int64x2_t) __a,
34637
+ return (uint64x2_t) __builtin_aarch64_cmgeuv2di ((int64x2_t) __a,
34641
@@ -19637,7 +19637,7 @@
34642
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
34643
vcged_u64 (uint64x1_t __a, uint64x1_t __b)
34645
- return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __a,
34646
+ return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __a,
34650
@@ -19676,7 +19676,7 @@
34651
__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
34652
vcgt_u8 (uint8x8_t __a, uint8x8_t __b)
34654
- return (uint8x8_t) __builtin_aarch64_cmhiv8qi ((int8x8_t) __a,
34655
+ return (uint8x8_t) __builtin_aarch64_cmgtuv8qi ((int8x8_t) __a,
34659
@@ -19683,7 +19683,7 @@
34660
__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
34661
vcgt_u16 (uint16x4_t __a, uint16x4_t __b)
34663
- return (uint16x4_t) __builtin_aarch64_cmhiv4hi ((int16x4_t) __a,
34664
+ return (uint16x4_t) __builtin_aarch64_cmgtuv4hi ((int16x4_t) __a,
34668
@@ -19690,7 +19690,7 @@
34669
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
34670
vcgt_u32 (uint32x2_t __a, uint32x2_t __b)
34672
- return (uint32x2_t) __builtin_aarch64_cmhiv2si ((int32x2_t) __a,
34673
+ return (uint32x2_t) __builtin_aarch64_cmgtuv2si ((int32x2_t) __a,
34677
@@ -19697,7 +19697,7 @@
34678
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
34679
vcgt_u64 (uint64x1_t __a, uint64x1_t __b)
34681
- return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __a,
34682
+ return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __a,
34686
@@ -19728,7 +19728,7 @@
34687
__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
34688
vcgtq_u8 (uint8x16_t __a, uint8x16_t __b)
34690
- return (uint8x16_t) __builtin_aarch64_cmhiv16qi ((int8x16_t) __a,
34691
+ return (uint8x16_t) __builtin_aarch64_cmgtuv16qi ((int8x16_t) __a,
34695
@@ -19735,7 +19735,7 @@
34696
__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
34697
vcgtq_u16 (uint16x8_t __a, uint16x8_t __b)
34699
- return (uint16x8_t) __builtin_aarch64_cmhiv8hi ((int16x8_t) __a,
34700
+ return (uint16x8_t) __builtin_aarch64_cmgtuv8hi ((int16x8_t) __a,
34704
@@ -19742,7 +19742,7 @@
34705
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
34706
vcgtq_u32 (uint32x4_t __a, uint32x4_t __b)
34708
- return (uint32x4_t) __builtin_aarch64_cmhiv4si ((int32x4_t) __a,
34709
+ return (uint32x4_t) __builtin_aarch64_cmgtuv4si ((int32x4_t) __a,
34713
@@ -19749,7 +19749,7 @@
34714
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
34715
vcgtq_u64 (uint64x2_t __a, uint64x2_t __b)
34717
- return (uint64x2_t) __builtin_aarch64_cmhiv2di ((int64x2_t) __a,
34718
+ return (uint64x2_t) __builtin_aarch64_cmgtuv2di ((int64x2_t) __a,
34722
@@ -19762,7 +19762,7 @@
34723
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
34724
vcgtd_u64 (uint64x1_t __a, uint64x1_t __b)
34726
- return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __a,
34727
+ return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __a,
34731
@@ -19801,7 +19801,7 @@
34732
__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
34733
vcle_u8 (uint8x8_t __a, uint8x8_t __b)
34735
- return (uint8x8_t) __builtin_aarch64_cmhsv8qi ((int8x8_t) __b,
34736
+ return (uint8x8_t) __builtin_aarch64_cmgeuv8qi ((int8x8_t) __b,
34740
@@ -19808,7 +19808,7 @@
34741
__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
34742
vcle_u16 (uint16x4_t __a, uint16x4_t __b)
34744
- return (uint16x4_t) __builtin_aarch64_cmhsv4hi ((int16x4_t) __b,
34745
+ return (uint16x4_t) __builtin_aarch64_cmgeuv4hi ((int16x4_t) __b,
34749
@@ -19815,7 +19815,7 @@
34750
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
34751
vcle_u32 (uint32x2_t __a, uint32x2_t __b)
34753
- return (uint32x2_t) __builtin_aarch64_cmhsv2si ((int32x2_t) __b,
34754
+ return (uint32x2_t) __builtin_aarch64_cmgeuv2si ((int32x2_t) __b,
34758
@@ -19822,7 +19822,7 @@
34759
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
34760
vcle_u64 (uint64x1_t __a, uint64x1_t __b)
34762
- return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __b,
34763
+ return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __b,
34767
@@ -19853,7 +19853,7 @@
34768
__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
34769
vcleq_u8 (uint8x16_t __a, uint8x16_t __b)
34771
- return (uint8x16_t) __builtin_aarch64_cmhsv16qi ((int8x16_t) __b,
34772
+ return (uint8x16_t) __builtin_aarch64_cmgeuv16qi ((int8x16_t) __b,
34776
@@ -19860,7 +19860,7 @@
34777
__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
34778
vcleq_u16 (uint16x8_t __a, uint16x8_t __b)
34780
- return (uint16x8_t) __builtin_aarch64_cmhsv8hi ((int16x8_t) __b,
34781
+ return (uint16x8_t) __builtin_aarch64_cmgeuv8hi ((int16x8_t) __b,
34785
@@ -19867,7 +19867,7 @@
34786
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
34787
vcleq_u32 (uint32x4_t __a, uint32x4_t __b)
34789
- return (uint32x4_t) __builtin_aarch64_cmhsv4si ((int32x4_t) __b,
34790
+ return (uint32x4_t) __builtin_aarch64_cmgeuv4si ((int32x4_t) __b,
34794
@@ -19874,7 +19874,7 @@
34795
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
34796
vcleq_u64 (uint64x2_t __a, uint64x2_t __b)
34798
- return (uint64x2_t) __builtin_aarch64_cmhsv2di ((int64x2_t) __b,
34799
+ return (uint64x2_t) __builtin_aarch64_cmgeuv2di ((int64x2_t) __b,
34803
@@ -19919,7 +19919,7 @@
34804
__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
34805
vclt_u8 (uint8x8_t __a, uint8x8_t __b)
34807
- return (uint8x8_t) __builtin_aarch64_cmhiv8qi ((int8x8_t) __b,
34808
+ return (uint8x8_t) __builtin_aarch64_cmgtuv8qi ((int8x8_t) __b,
34812
@@ -19926,7 +19926,7 @@
34813
__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
34814
vclt_u16 (uint16x4_t __a, uint16x4_t __b)
34816
- return (uint16x4_t) __builtin_aarch64_cmhiv4hi ((int16x4_t) __b,
34817
+ return (uint16x4_t) __builtin_aarch64_cmgtuv4hi ((int16x4_t) __b,
34821
@@ -19933,7 +19933,7 @@
34822
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
34823
vclt_u32 (uint32x2_t __a, uint32x2_t __b)
34825
- return (uint32x2_t) __builtin_aarch64_cmhiv2si ((int32x2_t) __b,
34826
+ return (uint32x2_t) __builtin_aarch64_cmgtuv2si ((int32x2_t) __b,
34830
@@ -19940,7 +19940,7 @@
34831
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
34832
vclt_u64 (uint64x1_t __a, uint64x1_t __b)
34834
- return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __b,
34835
+ return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __b,
34839
@@ -19971,7 +19971,7 @@
34840
__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
34841
vcltq_u8 (uint8x16_t __a, uint8x16_t __b)
34843
- return (uint8x16_t) __builtin_aarch64_cmhiv16qi ((int8x16_t) __b,
34844
+ return (uint8x16_t) __builtin_aarch64_cmgtuv16qi ((int8x16_t) __b,
34848
@@ -19978,7 +19978,7 @@
34849
__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
34850
vcltq_u16 (uint16x8_t __a, uint16x8_t __b)
34852
- return (uint16x8_t) __builtin_aarch64_cmhiv8hi ((int16x8_t) __b,
34853
+ return (uint16x8_t) __builtin_aarch64_cmgtuv8hi ((int16x8_t) __b,
34857
@@ -19985,7 +19985,7 @@
34858
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
34859
vcltq_u32 (uint32x4_t __a, uint32x4_t __b)
34861
- return (uint32x4_t) __builtin_aarch64_cmhiv4si ((int32x4_t) __b,
34862
+ return (uint32x4_t) __builtin_aarch64_cmgtuv4si ((int32x4_t) __b,
34866
@@ -19992,7 +19992,7 @@
34867
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
34868
vcltq_u64 (uint64x2_t __a, uint64x2_t __b)
34870
- return (uint64x2_t) __builtin_aarch64_cmhiv2di ((int64x2_t) __b,
34871
+ return (uint64x2_t) __builtin_aarch64_cmgtuv2di ((int64x2_t) __b,
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")]
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)
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)
34910
emit_move_insn (gen_rtx_REG (Pmode, regnum),
34911
- GEN_INT ((~val) & 0xffff));
34912
+ GEN_INT (val | ~(HOST_WIDE_INT) 0xffff));
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)
34921
;; Vector Float modes.
34922
(define_mode_iterator VDQF [V2SF V4SF V2DF])
34924
+;; All Float modes.
34925
+(define_mode_iterator VALLF [V2SF V4SF V2DF SF DF])
34927
;; Vector Float modes with 2 elements.
34928
(define_mode_iterator V2F [V2SF V2DF])
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 @@
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")
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")
34975
+ (V2DF "V2DI") (DF "DI")
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")
34985
+ (V2DF "v2di") (DF "di")
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])
34994
+;; Comparison operators for <F>CM.
34995
+(define_code_iterator COMPARISONS [lt le eq ge gt])
34997
+;; Unsigned comparison operators.
34998
+(define_code_iterator UCOMPARISONS [ltu leu geu gtu])
35000
;; -------------------------------------------------------------------
35002
;; -------------------------------------------------------------------
35003
@@ -571,8 +576,29 @@
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.
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")])
35028
+(define_code_attr CMP [(lt "LT") (le "LE") (eq "EQ") (ge "GE") (gt "GT")
35029
+ (ltu "LTU") (leu "LEU") (geu "GEU") (gtu "GTU")])
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])
35038
-(define_int_iterator VCMP_S [UNSPEC_CMEQ UNSPEC_CMGE UNSPEC_CMGT
35039
- UNSPEC_CMLE UNSPEC_CMLT])
35041
-(define_int_iterator VCMP_U [UNSPEC_CMHS UNSPEC_CMHI UNSPEC_CMTST])
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")])
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")])
35056
(define_int_attr offsetlr [(UNSPEC_SSLI "1") (UNSPEC_USLI "1")
35057
(UNSPEC_SSRI "0") (UNSPEC_USRI "0")])
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 @@
35069
if (TARGET_E500_DOUBLE)
35070
return (SPE_CONST_OFFSET_OK (offset)
35071
&& SPE_CONST_OFFSET_OK (offset + 8));
35072
+ /* fall through */
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"))
35086
(clobber (match_scratch:SI 3 "=r,r"))]
35092
@@ -2425,7 +2425,7 @@
35093
(match_operand:SI 2 "gpc_reg_operand" ""))
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)))
35101
@@ -2440,7 +2440,7 @@
35103
(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
35104
(mult:SI (match_dup 1) (match_dup 2)))]
35110
@@ -2454,7 +2454,7 @@
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)))
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)
35124
builtin_define ("__tile_chip__=1");
35125
builtin_define ("__tile_chip_rev__=0");
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");
35132
TILEPRO_CPU_CPP_ENDIAN_BUILTINS ();
35133
GNU_USER_TARGET_OS_CPP_BUILTINS ();
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 @@
35144
+ /* If we are generating a prefetch, tell the scheduler not to move
35146
+ if (GET_CODE (pat) == PREFETCH)
35147
+ PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
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 @@
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" "")))]
35164
rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, result;
35165
@@ -823,7 +823,7 @@
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" "")))]
35173
rtx lo, hi, clz_lo, clz_hi, clz_lo_plus_32, result;
35174
@@ -851,7 +851,7 @@
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" "")))]
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)
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))
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;
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));
35207
+ arm_load_pic_register (0UL);
35209
seq = get_insns ();
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));
35215
+ else if (arm_pic_register != INVALID_REGNUM
35216
+ && arm_pic_register > LAST_LO_REGNUM
35217
+ && REGNO (pic_reg) <= LAST_LO_REGNUM)
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));
35224
emit_insn (gen_pic_load_addr_unified (pic_reg, pic_rtx, labelno));
35226
@@ -21279,7 +21293,11 @@
35230
- op[argc] = expand_normal (arg[argc]);
35231
+ /* Use EXPAND_MEMORY for NEON_ARG_MEMORY to ensure a MEM_P
35233
+ op[argc] = expand_expr (arg[argc], NULL_RTX, VOIDmode,
35234
+ (thisarg == NEON_ARG_MEMORY
35235
+ ? EXPAND_MEMORY : EXPAND_NORMAL));
35239
@@ -21298,6 +21316,9 @@
35242
case NEON_ARG_MEMORY:
35243
+ /* Check if expand failed. */
35244
+ if (op[argc] == const0_rtx)
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)
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 @@
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)));
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 @@
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
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)))
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>")]
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")]
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")]
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 @@
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)
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)
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 @@
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)
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)
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)
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)
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)
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)
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 @@
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")
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)
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)
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)
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)
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)
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 @@
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")
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)
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)
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)
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)
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)
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 @@
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")
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)
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)
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)
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)
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)
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 @@
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)
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 @@
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)
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)
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)
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 @@
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")
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)
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)
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)
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 @@
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")
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)
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)
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)
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 @@
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")
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)
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)
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)
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 @@
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 @@
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 @@
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")
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)
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 @@
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")
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)
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 @@
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")
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)
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));
36240
-;; Any hard register.
36241
-(define_predicate "arm_hard_register_operand"
36242
+;; Any general register.
36243
+(define_predicate "arm_hard_general_register_operand"
36246
- return REGNO (op) < FIRST_PSEUDO_REGISTER;
36247
+ return REGNO (op) <= LAST_ARM_REGNUM;
36252
&& REGNO_REG_CLASS (REGNO (op)) == VFP_REGS)));
36255
+(define_predicate "vfp_hard_register_operand"
36256
+ (match_code "reg")
36258
+ return (IS_VFP_REGNUM (REGNO (op)));
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)
36272
+let reg_predicate thumb =
36273
+ if thumb then "low_register_operand" else "arm_hard_general_register_operand"
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);
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)
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")])
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")])
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"
36320
@@ -11270,7 +11270,9 @@
36321
(match_operand:SI 1 "" "")
36322
(match_operand:SI 2 "" ""))]
36323
"TARGET_32BIT && arm_arch5e"
36326
+ [(set_attr "type" "load1")]
36329
;; General predication pattern
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)
36338
rtx ret, insn, tmp, t1, t2, tp;
36339
- enum tls_model model = SYMBOL_REF_TLS_MODEL (addr);
36342
+ /* Currently, we can't handle anything but a SYMBOL_REF. */
36343
+ if (GET_CODE (addr) != SYMBOL_REF)
36346
+ switch (SYMBOL_REF_TLS_MODEL (addr))
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));
36354
- if (PA_SYMBOL_REF_TLS_P (x))
36355
+ if (pa_tls_referenced_p (x))
36356
return legitimize_tls_address (x);
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))
36370
int ishighonly = 0;
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);
36379
latehalf[0] = operands[0];
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]);
36390
@@ -7539,7 +7543,7 @@
36391
if (!TARGET_LONG_CALLS && distance < MAX_PCREL17F_OFFSET)
36394
- if (TARGET_LONG_ABS_CALL && !flag_pic)
36399
@@ -8104,7 +8108,8 @@
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)))
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))
36417
if (TARGET_64BIT && GET_CODE (x) == CONST_DOUBLE)
36418
@@ -10522,13 +10527,13 @@
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
36431
+ && (strict || !(reload_in_progress || reload_completed))
36435
@@ -10588,8 +10593,7 @@
36438
if (!INT14_OK_STRICT
36439
- && reload_in_progress
36441
+ && (strict || !(reload_in_progress || reload_completed))
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 @@
36451
#define MAX_REGS_PER_ADDRESS 2
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)
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)
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)
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)
36504
+ ;; Integer operations that are too cumbersome to describe directly.
36509
;; Floating-point moves.
36512
@@ -1294,20 +1299,32 @@
36514
;; Combiner patterns for unsigned byte-add.
36516
-(define_insn "*baddu_si"
36517
+(define_insn "*baddu_si_eb"
36518
[(set (match_operand:SI 0 "register_operand" "=d")
36520
- (plus:QI (match_operand:QI 1 "register_operand" "d")
36521
- (match_operand:QI 2 "register_operand" "d"))))]
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"
36528
[(set_attr "alu_type" "add")])
36530
+(define_insn "*baddu_si_el"
36531
+ [(set (match_operand:SI 0 "register_operand" "=d")
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")])
36540
(define_insn "*baddu_di<mode>"
36541
[(set (match_operand:GPR 0 "register_operand" "=d")
36543
- (plus:QI (truncate:QI (match_operand:DI 1 "register_operand" "d"))
36544
- (truncate:QI (match_operand:DI 2 "register_operand" "d")))))]
36546
+ (plus:DI (match_operand:DI 1 "register_operand" "d")
36547
+ (match_operand:DI 2 "register_operand" "d")))))]
36548
"ISA_HAS_BADDU && TARGET_64BIT"
36550
[(set_attr "alu_type" "add")])
36551
@@ -5367,6 +5384,56 @@
36553
[(set_attr "type" "shift")
36554
(set_attr "mode" "<MODE>")])
36556
+(define_insn "bswaphi2"
36557
+ [(set (match_operand:HI 0 "register_operand" "=d")
36558
+ (bswap:HI (match_operand:HI 1 "register_operand" "d")))]
36561
+ [(set_attr "type" "shift")])
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"
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)))]
36572
+ [(set_attr "length" "8")])
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"
36580
+ [(set (match_dup 0) (unspec:DI [(match_dup 1)] UNSPEC_DSBH))
36581
+ (set (match_dup 0) (unspec:DI [(match_dup 0)] UNSPEC_DSHD))]
36583
+ [(set_attr "length" "8")])
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))]
36590
+ [(set_attr "type" "shift")])
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"
36597
+ [(set_attr "type" "shift")])
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"
36604
+ [(set_attr "type" "shift")])
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 @@
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. */
36620
-mips_truncated_op_cost (rtx x, bool speed)
36622
- if (GET_CODE (x) == TRUNCATE)
36624
- return set_src_cost (x, speed);
36627
/* Implement TARGET_RTX_COSTS. */
36630
@@ -3951,13 +3940,12 @@
36632
if (outer_code == SET
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)
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);
36647
*total = mips_zero_extend_cost (mode, XEXP (x, 0));
36648
@@ -8057,7 +8045,7 @@
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);
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) \
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)
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",
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",
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;
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);
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))
36710
+ if (REG_NOTE_KIND (link) == REG_UNUSED)
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. */
36718
+ && reg_overlap_mentioned_p (XEXP (link, 0), SET_SRC (set)))
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 @@
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
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 \
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 \
36765
+ go/go/build/syslist.go
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
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
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 @@
36793
.PHONY: go/build/check
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
36804
@go_include@ go/doc.lo.dep
36805
go/doc.lo.dep: $(go_go_doc_files)
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)
36814
n->__retaddr = NULL;
36815
+ n->__makefunc_can_recover = 0;
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)
36824
set by __go_set_defer_retaddr which is called by the thunks
36825
created by defer statements. */
36826
const void *__retaddr;
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
36832
+ _Bool __makefunc_can_recover;
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)
36840
if (v < 0 || v > 0x10ffff)
36842
+ else if (0xd800 <= v && v <= 0xdfff)
36849
if (v < 0 || v > 0x10ffff)
36851
+ else if (0xd800 <= v && v <= 0xdfff)
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)
36866
+dup3 (int oldfd __attribute__ ((unused)),
36867
+ int newfd __attribute__ ((unused)),
36868
+ int flags __attribute__ ((unused)))
36875
#ifndef HAVE_EPOLL_CREATE1
36877
epoll_create1 (int flags __attribute__ ((unused)))
36878
@@ -112,6 +123,18 @@
36882
+#ifndef HAVE_GETXATTR
36884
+getxattr (const char *path __attribute__ ((unused)),
36885
+ const char *name __attribute__ ((unused)),
36886
+ void *value __attribute__ ((unused)),
36887
+ size_t size __attribute__ ((unused)))
36894
#ifndef HAVE_INOTIFY_ADD_WATCH
36896
inotify_add_watch (int fd __attribute__ ((unused)),
36897
@@ -151,6 +174,17 @@
36901
+#ifndef HAVE_LISTXATTR
36903
+listxattr (const char *path __attribute__ ((unused)),
36904
+ char *list __attribute__ ((unused)),
36905
+ size_t size __attribute__ ((unused)))
36912
#ifndef HAVE_MKDIRAT
36914
mkdirat (int dirfd __attribute__ ((unused)),
36915
@@ -196,6 +230,16 @@
36919
+#ifndef HAVE_REMOVEXATTR
36921
+removexattr (const char *path __attribute__ ((unused)),
36922
+ const char *name __attribute__ ((unused)))
36929
#ifndef HAVE_RENAMEAT
36931
renameat (int olddirfd __attribute__ ((unused)),
36932
@@ -208,6 +252,19 @@
36936
+#ifndef HAVE_SETXATTR
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)))
36949
#ifndef HAVE_SPLICE
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 @@
36958
void runtime_hashinit(void);
36960
-void runtime_traceback();
36961
+void runtime_traceback(void);
36962
void runtime_tracebackothers(G*);
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;
36971
int32 getproccount(void);
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.
36980
void runtime_entersyscall(void) __attribute__ ((no_split_stack));
36981
+static void doentersyscall(void) __attribute__ ((no_split_stack, noinline));
36984
runtime_entersyscall()
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);
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.
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();
37005
if(m->profilehz > 0)
37006
runtime_setprof(false);
37008
@@ -1736,10 +1756,6 @@
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);
37016
g->status = Gsyscall;
37018
if(runtime_atomicload(&runtime_sched.sysmonwait)) { // TODO: fast atomic
37019
@@ -2239,6 +2255,14 @@
37020
if(prof.fn == nil || prof.hz == 0)
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.
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 @@
37043
+} work __attribute__((aligned(8)));
37046
GC_DEFAULT_PTR = GC_NUM_INSTR,
37047
@@ -239,8 +239,7 @@
37048
// (Manually inlined copy of MHeap_LookupMaybe.)
37049
k = (uintptr)obj>>PageShift;
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)
37057
@@ -418,8 +417,7 @@
37058
// (Manually inlined copy of MHeap_LookupMaybe.)
37059
k = (uintptr)obj>>PageShift;
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)
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];
37077
@@ -585,8 +582,7 @@
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 @@
37095
- runtime_traceback (g);
37096
+ runtime_traceback ();
37097
runtime_tracebackothers (g);
37099
/* The gc library calls runtime_dumpregs here, and provides
37100
@@ -399,6 +399,9 @@
37104
+#ifdef USING_SPLIT_STACK
37105
+ void *stack_context[10];
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 @@
37113
#ifdef USING_SPLIT_STACK
37114
- __splitstack_getcontext (&gp->stack_context[0]);
37115
+ __splitstack_getcontext (&stack_context[0]);
37119
@@ -432,7 +435,7 @@
37122
#ifdef USING_SPLIT_STACK
37123
- __splitstack_setcontext (&gp->stack_context[0]);
37124
+ __splitstack_setcontext (&stack_context[0]);
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)
37133
#include "runtime.h"
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. */
37141
+uint32 runtime_in_callers;
37143
/* Argument passed to callback function. */
37145
struct callers_data
37146
@@ -111,8 +118,10 @@
37147
data.skip = skip + 1;
37150
+ runtime_xadd (&runtime_in_callers, 1);
37151
backtrace_full (__go_get_backtrace_state (), 0, callback, error_callback,
37153
+ runtime_xadd (&runtime_in_callers, -1);
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)
37162
+/* go-cdiv.c -- complex division routines
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. */
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. */
37178
+__go_complex64_div (__complex float a, __complex float b)
37180
+ if (__builtin_expect (b == 0+0i, 0))
37182
+ if (!__builtin_isinff (__real__ a)
37183
+ && !__builtin_isinff (__imag__ a)
37184
+ && (__builtin_isnanf (__real__ a) || __builtin_isnanf (__imag__ a)))
37186
+ /* Pass "1" to nanf to match math/bits.go. */
37187
+ return __builtin_nanf("1") + __builtin_nanf("1")*1i;
37194
+__go_complex128_div (__complex double a, __complex double b)
37196
+ if (__builtin_expect (b == 0+0i, 0))
37198
+ if (!__builtin_isinf (__real__ a)
37199
+ && !__builtin_isinf (__imag__ a)
37200
+ && (__builtin_isnan (__real__ a) || __builtin_isnan (__imag__ a)))
37202
+ /* Pass "1" to nan to match math/bits.go. */
37203
+ return __builtin_nan("1") + __builtin_nan("1")*1i;
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)
37213
const struct __go_struct_field *fields;
37216
+ field_count = descriptor->__fields.__count;
37217
+ if (field_count == 0) {
37218
+ return &ffi_type_void;
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. */
37234
-__go_can_recover (const void* retaddr)
37235
+__go_can_recover (const void *retaddr)
37238
struct __go_defer_stack *d;
37242
+ const byte *name;
37249
dret = (const char *) d->__retaddr;
37250
- return ret <= dret && ret + 16 >= dret;
37251
+ if (ret <= dret && ret + 16 >= dret)
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)
37260
+ if (runtime_callers (2, &loc, 1) < 1)
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)
37268
+ if (loc.function.len < 4)
37270
+ name = loc.function.str;
37271
+ if (*name == '_')
37273
+ if (loc.function.len < 5)
37278
+ if (name[0] == 'f' && name[1] == 'f' && name[2] == 'i' && name[3] == '_')
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)
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. */
37295
+__go_makefunc_can_recover (const void *retaddr)
37297
+ struct __go_defer_stack *d;
37299
+ d = runtime_g ()->defer;
37301
+ && !d->__makefunc_can_recover
37302
+ && __go_can_recover (retaddr))
37303
+ d->__makefunc_can_recover = 1;
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. */
37316
+__go_makefunc_returning (void)
37318
+ struct __go_defer_stack *d;
37320
+ d = runtime_g ()->defer;
37322
+ d->__makefunc_can_recover = 0;
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. */
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 @@
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];
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)
37347
std = (const struct __go_slice_type *) td;
37349
ilen = (intgo) len;
37350
- if (ilen < 0 || (uintptr_t) ilen != len)
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");
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);
37366
- if(sizeof(void*) == 8)
37367
- p -= ((uintptr)h->arena_start>>PageShift);
37368
+ p -= ((uintptr)h->arena_start>>PageShift);
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;
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++)
37382
@@ -241,8 +239,7 @@
37383
mstats.mspan_sys = h->spanalloc.sys;
37384
runtime_MSpan_Init(s, (uintptr)v>>PageShift, ask>>PageShift);
37386
- if(sizeof(void*) == 8)
37387
- p -= ((uintptr)h->arena_start>>PageShift);
37388
+ p -= ((uintptr)h->arena_start>>PageShift);
37390
h->map[p + s->npages - 1] = s;
37391
s->state = MSpanInUse;
37392
@@ -259,8 +256,7 @@
37396
- if(sizeof(void*) == 8)
37397
- p -= (uintptr)h->arena_start;
37398
+ p -= (uintptr)h->arena_start;
37399
return h->map[p >> PageShift];
37402
@@ -281,8 +277,7 @@
37404
p = (uintptr)v>>PageShift;
37406
- if(sizeof(void*) == 8)
37407
- q -= (uintptr)h->arena_start >> PageShift;
37408
+ q -= (uintptr)h->arena_start >> PageShift;
37410
if(s == nil || p < s->start || p - s->start >= s->npages)
37412
@@ -332,8 +327,7 @@
37414
// Coalesce with earlier, later spans.
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}
37430
+# The PRIO constants.
37431
+grep '^const _PRIO_' gen-sysinfo.go | \
37432
+ sed -e 's/^\(const \)_\(PRIO_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
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)
37442
/* Define to 1 if you have the `dl_iterate_phdr' function. */
37443
#undef HAVE_DL_ITERATE_PHDR
37445
+/* Define to 1 if you have the `dup3' function. */
37448
/* Define to 1 if you have the `epoll_create1' function. */
37449
#undef HAVE_EPOLL_CREATE1
37452
/* Define if _Unwind_GetIPInfo is available. */
37453
#undef HAVE_GETIPINFO
37455
+/* Define to 1 if you have the `getxattr' function. */
37456
+#undef HAVE_GETXATTR
37458
/* Define to 1 if you have the `inotify_add_watch' function. */
37459
#undef HAVE_INOTIFY_ADD_WATCH
37461
@@ -111,6 +117,9 @@
37462
/* Define to 1 if you have the <linux/rtnetlink.h> header file. */
37463
#undef HAVE_LINUX_RTNETLINK_H
37465
+/* Define to 1 if you have the `listxattr' function. */
37466
+#undef HAVE_LISTXATTR
37468
/* Define to 1 if the system has the type `loff_t'. */
37471
@@ -171,6 +180,9 @@
37472
/* Define to 1 if you have the `pipe2' function. */
37475
+/* Define to 1 if you have the `removexattr' function. */
37476
+#undef HAVE_REMOVEXATTR
37478
/* Define to 1 if you have the `renameat' function. */
37479
#undef HAVE_RENAMEAT
37481
@@ -180,6 +192,9 @@
37482
/* Define to 1 if you have the `setenv' function. */
37485
+/* Define to 1 if you have the `setxattr' function. */
37486
+#undef HAVE_SETXATTR
37488
/* Define to 1 if you have the `sinl' function. */
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)
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)
37502
AC_CHECK_TYPES([loff_t])
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)
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 {
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)
37524
if v.flag&flagMethod != 0 {
37525
@@ -484,33 +485,6 @@
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 {
37540
- for i, c := range s {
37546
- } else if c == ')' {
37548
- } else if parens == 0 && c == ' ' && s[i+1] != '(' && !sawRet {
37553
- return params > 2
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)
37563
+ if v.flag&flagMethodFn != 0 {
37564
+ if v.typ.Kind() != Func {
37565
+ panic("reflect: MethodFn of non-Func")
37567
+ ft := (*funcType)(unsafe.Pointer(v.typ))
37568
+ if ft.in[0].Kind() != Ptr {
37569
+ v = makeValueMethod(v)
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.
37582
+ f := makeFuncStub
37583
return **(**uintptr)(unsafe.Pointer(&f))
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)
37591
// registers that might hold result values.
37592
type i386Regs struct {
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
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)
37609
var retPtr unsafe.Pointer
37611
retPtr = *(*unsafe.Pointer)(unsafe.Pointer(ap))
37616
for _, rt := range ftyp.in {
37619
// Call the real function.
37622
+ out := c.call(in)
37624
if len(out) != len(ftyp.out) {
37625
panic("reflect: wrong return count from function created by MakeFunc")
37626
@@ -123,13 +128,16 @@
37630
- if v.Kind() != Ptr && v.Kind() != UnsafePointer {
37631
- w = loadIword(unsafe.Pointer(w), v.typ.size)
37634
- case Float32, Float64:
37635
- regs.st0 = uint64(uintptr(w))
37636
+ case Ptr, UnsafePointer:
37637
+ regs.eax = uint32(uintptr(w))
37639
+ regs.st0 = float64(*(*float32)(unsafe.Pointer(w)))
37642
+ regs.st0 = *(*float64)(unsafe.Pointer(w))
37645
- regs.eax = uint32(uintptr(w))
37646
+ regs.eax = uint32(uintptr(loadIword(unsafe.Pointer(w), v.typ.size)))
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)
37654
movdqa %xmm6, 0xa0(%rsp)
37655
movdqa %xmm7, 0xb0(%rsp)
37657
+ /* For MakeFunc functions that call recover. */
37658
+ movq 8(%rbp), %rdi
37660
+ call __go_makefunc_can_recover@PLT
37662
+ call __go_makefunc_can_recover
37665
# Get function type.
37667
call __go_get_closure@PLT
37669
call reflect.MakeFuncStubGo
37672
+ /* MakeFunc functions can no longer call recover. */
37674
+ call __go_makefunc_returning@PLT
37676
+ call __go_makefunc_returning
37679
# The structure will be updated with any return values. Load
37680
# all possible return registers before returning to the caller.
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}
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)
37703
- st0 uint64 // 0x8
37704
+ st0 float64 // 0x8
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. */
37716
leal 8(%ebp), %eax /* Set esp field in struct. */
37717
movl %eax, -24(%ebp)
37719
+ /* For MakeFunc functions that call recover. */
37720
+ movl 4(%ebp), %eax
37721
+ movl %eax, (%esp)
37723
+ call __go_makefunc_can_recover@PLT
37725
+ call __go_makefunc_can_recover
37729
call __go_get_closure@PLT
37731
call __go_get_closure
37733
call reflect.MakeFuncStubGo
37736
+ /* MakeFunc functions can no longer call recover. */
37738
+ call __go_makefunc_returning@PLT
37740
+ call __go_makefunc_returning
37743
/* Set return registers. */
37745
movl -20(%ebp), %eax
37747
+ cmpb $0, -7(%ebp)
37753
@@ -73,12 +97,20 @@
37754
movsd -16(%ebp), %xmm0
37758
+ movb -8(%ebp), %dl
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 @@
37782
+type emptyStruct struct{}
37784
+type nonEmptyStruct struct {
37788
+func returnEmpty() emptyStruct {
37789
+ return emptyStruct{}
37792
+func takesEmpty(e emptyStruct) {
37795
+func returnNonEmpty(i int) nonEmptyStruct {
37796
+ return nonEmptyStruct{member: i}
37799
+func takesNonEmpty(n nonEmptyStruct) int {
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)
37808
+ r = ValueOf(takesEmpty).Call([]Value{ValueOf(emptyStruct{})})
37810
+ t.Errorf("takesEmpty returned values: %s", r)
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)
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)
37822
func TestMakeFunc(t *testing.T) {
37823
switch runtime.GOARCH {
37824
case "amd64", "386":
37825
@@ -1587,9 +1627,13 @@
37829
-/* Not yet implemented for gccgo
37830
+func TestMethodValue(t *testing.T) {
37831
+ switch runtime.GOARCH {
37832
+ case "amd64", "386":
37834
+ t.Skip("reflect method values not implemented for " + runtime.GOARCH)
37837
-func TestMethodValue(t *testing.T) {
37841
@@ -1658,8 +1702,6 @@
37847
// Reflect version of $GOROOT/test/method5.go
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 }
37853
func TestMethod5(t *testing.T) {
37854
- /* Not yet used for gccgo
37855
+ switch runtime.GOARCH {
37856
+ case "amd64", "386":
37858
+ t.Skip("reflect method values not implemented for " + runtime.GOARCH)
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)
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)
37876
- /* Not yet implemented for gccgo
37877
CheckF(name+".M", i.Method(0).Interface().(func(int, byte) (byte, int)), inc)
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)
37889
fn func([]Value) []Value
37891
+ // For gccgo we use the same entry point for functions and for
37892
+ // method values.
37897
// MakeFunc returns a new function of the given Type
37899
dummy := makeFuncStub
37900
code := **(**uintptr)(unsafe.Pointer(&dummy))
37902
- impl := &makeFuncImpl{code: code, typ: ftyp, fn: fn}
37903
+ impl := &makeFuncImpl{code: code, typ: ftyp, fn: fn, method: -1}
37905
return Value{t, unsafe.Pointer(&impl), flag(Func<<flagKindShift) | flagIndir}
37907
@@ -85,15 +90,94 @@
37908
panic("reflect: internal error: invalid use of makePartialFunc")
37911
+ switch runtime.GOARCH {
37912
+ case "amd64", "386":
37914
+ panic("reflect.makeMethodValue not implemented for " + runtime.GOARCH)
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}
37922
+ // v.Type returns the actual type of the method value.
37923
+ ft := v.Type().(*rtype)
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))
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)
37937
- panic("reflect makeMethodValue not implemented")
37938
+ fv := &makeFuncImpl{
37940
+ typ: (*funcType)(unsafe.Pointer(t)),
37941
+ method: int(v.flag) >> flagMethodShift,
37945
+ return Value{ft, unsafe.Pointer(&fv), v.flag&flagRO | flag(Func)<<flagKindShift | flagIndir}
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
37951
+func makeValueMethod(v Value) Value {
37953
+ if typ.Kind() != Func {
37954
+ panic("reflect: call of makeValueMethod with non-Func type")
37956
+ if v.flag&flagMethodFn == 0 {
37957
+ panic("reflect: call of makeValueMethod with non-MethodFn")
37960
+ switch runtime.GOARCH {
37961
+ case "amd64", "386":
37963
+ panic("reflect.makeValueMethod not implemented for " + runtime.GOARCH)
37966
+ t := typ.common()
37967
+ ftyp := (*funcType)(unsafe.Pointer(t))
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))
37975
+ impl := &makeFuncImpl{
37982
+ return Value{t, unsafe.Pointer(&impl), flag(Func<<flagKindShift) | flagIndir}
37985
+// Call the function represented by a makeFuncImpl.
37986
+func (c *makeFuncImpl) call(in []Value) []Value {
37987
+ if c.method == -1 {
37989
+ } else if c.method == -2 {
37990
+ if c.typ.IsVariadic() {
37991
+ return c.rcvr.CallSlice(in)
37993
+ return c.rcvr.Call(in)
37996
+ m := c.rcvr.Method(c.method)
37997
+ if c.typ.IsVariadic() {
37998
+ return m.CallSlice(in)
38000
+ return m.Call(in)
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.
38013
+ out := c.call(in)
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)
38030
if err == nil || err == syscall.EISCONN {
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 {
38043
if err != syscall.EINPROGRESS && err != syscall.EALREADY && err != syscall.EINTR {
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 {
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"
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)
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.
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
38080
+//sysnb Dup3(oldfd int, newfd int, flags int) (err error)
38081
+//dup3(oldfd _C_int, newfd _C_int, flags _C_int) _C_int
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
38086
@@ -268,6 +271,9 @@
38087
return origlen - len(buf), count, names
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
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
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
38100
+//sys Listxattr(path string, dest []byte) (sz int, err error)
38101
+//listxattr(path *byte, list *byte, size Size_t) Ssize_t
38103
//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
38104
//mkdirat(dirfd _C_int, path *byte, mode Mode_t) _C_int
38106
@@ -305,6 +314,9 @@
38107
//sys PivotRoot(newroot string, putold string) (err error)
38108
//pivot_root(newroot *byte, putold *byte) _C_int
38110
+//sys Removexattr(path string, attr string) (err error)
38111
+//removexattr(path *byte, name *byte) _C_int
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
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
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
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)
38134
-const SizeofSockaddrAny = 0x1c
38135
+const SizeofSockaddrAny = 0x6c
38137
type SockaddrInet4 struct {
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)
38147
+//sys Getpriority(which int, who int) (prio int, err error)
38148
+//getpriority(which _C_int, who _C_int) _C_int
38150
//sysnb Getrlimit(resource int, rlim *Rlimit) (err error)
38151
//getrlimit(resource _C_int, rlim *Rlimit) _C_int
38153
@@ -307,6 +310,9 @@
38154
//sysnb Setpgid(pid int, pgid int) (err error)
38155
//setpgid(pid Pid_t, pgid Pid_t) _C_int
38157
+//sys Setpriority(which int, who int, prio int) (err error)
38158
+//setpriority(which _C_int, who _C_int, prio _C_int) _C_int
38160
//sysnb Setreuid(ruid int, euid int) (err error)
38161
//setreuid(ruid Uid_t, euid Uid_t) _C_int
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 \
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 \
38180
+ go/go/build/syslist.go
38181
go_go_doc_files = \
38182
go/go/doc/comment.go \
38184
@@ -2712,15 +2713,6 @@
38186
.PHONY: go/build/check
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
38197
@go_include@ go/doc.lo.dep
38198
go/doc.lo.dep: $(go_go_doc_files)
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)
38205
+2014-03-15 Dominique d'Humieres <dominiq@lps.ens.fr>
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.
38213
+2014-03-15 Jerry DeLisle <jvdelisle@gcc.gnu>
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
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
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>
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.
38247
+2014-02-15 Jerry DeLisle <jvdelisle@gcc.gnu>
38248
+ Dominique d'Humieres <dominiq@lps.ens.fr>
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
38256
+ (output_float_FMT_G_): Fixes rounding issues with -m32.
38258
2013-10-16 Release Manager
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 @@
38267
free_line (st_parameter_dt *dtp)
38269
- dtp->u.p.item_count = 0;
38270
+ dtp->u.p.line_buffer_pos = 0;
38271
dtp->u.p.line_buffer_enabled = 0;
38273
if (dtp->u.p.line_buffer == NULL)
38274
@@ -150,15 +150,15 @@
38276
dtp->u.p.at_eol = 0;
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)
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++;
38290
- dtp->u.p.item_count = 0;
38291
+ dtp->u.p.line_buffer_pos = 0;
38292
dtp->u.p.line_buffer_enabled = 0;
38295
@@ -640,7 +640,7 @@
38296
if (dtp->u.p.line_buffer == NULL)
38297
dtp->u.p.line_buffer = xcalloc (SCRATCH_SIZE, 1);
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;
38304
@@ -750,7 +750,7 @@
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;
38313
@@ -758,14 +758,17 @@
38319
if (nml_bad_return (dtp, c))
38334
@@ -773,6 +776,7 @@
38336
snprintf (message, MSGLEN, "Bad logical value while reading item %d",
38337
dtp->u.p.item_count);
38339
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
38342
@@ -913,9 +917,9 @@
38343
else if (c != '\n')
38347
snprintf (message, MSGLEN, "Bad integer for item %d in list input",
38348
dtp->u.p.item_count);
38350
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
38353
@@ -1298,9 +1302,9 @@
38354
else if (c != '\n')
38358
snprintf (message, MSGLEN, "Bad floating point number for item %d",
38359
dtp->u.p.item_count);
38361
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
38364
@@ -1406,9 +1410,9 @@
38365
else if (c != '\n')
38369
snprintf (message, MSGLEN, "Bad complex value in item %d of list input",
38370
dtp->u.p.item_count);
38372
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
38375
@@ -1770,7 +1774,7 @@
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;
38384
@@ -1789,9 +1793,9 @@
38385
else if (c != '\n')
38389
snprintf (message, MSGLEN, "Bad real number in item %d of list input",
38390
dtp->u.p.item_count);
38392
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
38395
@@ -1806,11 +1810,10 @@
38397
if (dtp->u.p.saved_type != BT_UNKNOWN && dtp->u.p.saved_type != type)
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);
38405
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
38408
@@ -1820,12 +1823,12 @@
38410
if (dtp->u.p.saved_length != len)
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);
38422
@@ -2031,8 +2034,6 @@
38424
finish_list_read (st_parameter_dt *dtp)
38430
fbuf_flush (dtp->u.p.current_unit, dtp->u.p.mode);
38431
@@ -2043,12 +2044,22 @@
38435
- err = eat_line (dtp);
38436
- if (err == LIBERROR_END)
38437
+ if (!is_internal_unit (dtp))
38442
+ c = next_char (dtp);
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 @@
38466
- if (dtp->u.p.blank_status == BLANK_NULL) continue;
38467
+ if (dtp->u.p.blank_status == BLANK_NULL)
38469
+ /* Skip spaces. */
38470
+ for ( ; w > 0; p++, w--)
38471
+ if (*p != ' ') break;
38474
if (dtp->u.p.blank_status == BLANK_ZERO) c = '0';
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
38488
+ unsigned expanded_read : 1;
38489
+ /* 13 unused bits. */
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 @@
38495
struct format_data *fmt;
38496
namelist_info *ionml;
38497
- /* A flag used to identify when a non-standard expanded namelist read
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
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)
38511
#include <stdlib.h>
38512
#include <string.h>
38513
+#include <stdbool.h>
38516
/* IO locking rules:
38517
@@ -375,6 +376,38 @@
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. */
38525
+is_trim_ok (st_parameter_dt *dtp)
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))
38532
+ /* Format strings can not have 'BZ' or '/'. */
38533
+ if (dtp->common.flags & IOPARM_DT_HAS_FORMAT)
38535
+ char *p = dtp->format;
38537
+ if (dtp->common.flags & IOPARM_DT_HAS_BLANK)
38539
+ for (i = 0; i < dtp->format_len; i++)
38541
+ if (p[i] == '/') return false;
38542
+ if (p[i] == 'b' || p[i] == 'B')
38543
+ if (p[i+1] == 'z' || p[i+1] == 'Z')
38547
+ if (dtp->u.p.ionml) /* A namelist. */
38554
get_internal_unit (st_parameter_dt *dtp)
38556
@@ -402,6 +435,22 @@
38557
some other file I/O unit. */
38558
iunit->unit_number = -1;
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))
38566
+ if (dtp->common.unit == 0)
38567
+ len = string_len_trim (dtp->internal_unit_len,
38568
+ dtp->internal_unit);
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;
38576
/* Set up the looping specification from the array descriptor, if any. */
38578
if (is_array_io (dtp))
38579
@@ -414,27 +463,6 @@
38581
start_record *= iunit->recl;
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))
38589
- if (dtp->common.unit == 0)
38591
- dtp->internal_unit_len =
38592
- string_len_trim (dtp->internal_unit_len, dtp->internal_unit);
38593
- iunit->recl = dtp->internal_unit_len;
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;
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 @@
38613
/* Number of digits after the decimal point. */
38615
- /* Number of zeros after the decimal point, whatever the precision. */
38619
int ndigits, edigits;
38620
@@ -138,7 +136,6 @@
38621
p = dtp->u.p.scale_factor;
38626
/* We should always know the field width and precision. */
38628
@@ -191,7 +188,7 @@
38632
- nzero = nzero_real = 0;
38637
@@ -211,7 +208,6 @@
38638
nafter = d + nbefore;
38641
- nzero_real = nzero;
38645
@@ -218,7 +214,7 @@
38649
- nzero = nzero_real = 0;
38654
@@ -373,7 +369,7 @@
38658
- if (w > 0 && d == 0 && p == 0)
38659
+ if (ft != FMT_F && w > 0 && d == 0 && p == 0)
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 @@
38666
if (nbefore + nafter == 0)
38667
+ /* Handle the case Fw.0 and value < 1.0 */
38670
- if (nzero_real == d && digits[0] >= rchar)
38671
+ if (digits[0] >= rchar)
38673
/* We rounded to zero but shouldn't have */
38681
@@ -990,7 +987,7 @@
38682
int d = f->u.real.d;\
38683
int w = f->u.real.w;\
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;\
38693
int nprinted, precision;\
38694
+ volatile GFC_REAL_ ## x temp;\
38696
save_scale_factor = dtp->u.p.scale_factor;\
38698
@@ -1015,10 +1013,13 @@
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)))\
38713
newf.format = FMT_E;\
38714
newf.u.real.w = w;\
38715
@@ -1038,10 +1039,9 @@
38717
while (low <= high)\
38719
- volatile GFC_REAL_ ## x temp;\
38720
mid = (low + high) / 2;\
38722
- temp = (calculate_exp_ ## x (mid - 1) * (1 - r * rexp_d));\
38723
+ temp = (calculate_exp_ ## x (mid - 1) * r_sc);\
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
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. */
38743
#define EN_PREC(x,y)\
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); \
38752
+ nprinted = DTOA(y,0,tmp);\
38753
+ int e = atoi (&buffer[4]);\
38754
+ if (buffer[1] == '1')\
38756
+ tmp = (calculate_exp_ ## x (-e)) * tmp;\
38757
+ tmp = one - (tmp < 0 ? -tmp : tmp); \
38762
+ if (nbefore < 0)\
38763
+ nbefore = 3 + nbefore;\
38768
@@ -1140,6 +1162,7 @@
38771
const size_t size = 10;
38772
+ int nbefore; /* digits before decimal point - 1. */
38776
@@ -1172,16 +1195,6 @@
38777
if (nprinted == -1)
38780
- int e = atoi (&buffer[5]);
38781
- int nbefore; /* digits before decimal point - 1. */
38786
- nbefore = (-e) % 3;
38787
- if (nbefore != 0)
38788
- nbefore = 3 - nbefore;
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 @@
38799
if (macro->paramc == 0)
38801
+ unsigned tokens_count = macro_real_token_count (macro);
38802
if (CPP_OPTION (pfile, track_macro_expansion))
38804
- unsigned int i, count = macro->count;
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);
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)
38824
tokens_buff_add_token (macro_tokens, virt_locs,
38826
@@ -1134,16 +1135,12 @@
38828
(const cpp_token **)
38829
macro_tokens->base,
38831
- num_macro_tokens_counter += count;
38836
- unsigned tokens_count = macro_real_token_count (macro);
38837
- _cpp_push_token_context (pfile, node, macro->exp.tokens,
38839
- num_macro_tokens_counter += tokens_count;
38841
+ _cpp_push_token_context (pfile, node, macro->exp.tokens,
38843
+ num_macro_tokens_counter += tokens_count;
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;
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;
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 @@
38869
struct cpp_dir *dir;
38873
dir = search_path_head (pfile, fname, angle_brackets, type);
38875
@@ -993,19 +994,26 @@
38876
if (type == IT_DEFAULT && file == NULL)
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
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--;
38899
- return _cpp_stack_file (pfile, file, type == IT_IMPORT);
38900
+ stacked = _cpp_stack_file (pfile, file, type == IT_IMPORT);
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++;
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)
38916
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
38918
+ Backport from mainline
38919
+ 2014-02-19 Jakub Jelinek <jakub@redhat.com>
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).
38927
+ 2014-02-07 Jakub Jelinek <jakub@redhat.com>
38929
+ PR preprocessor/56824
38930
+ * line-map.c (linemap_compare_locations): Look through adhoc locations
38931
+ for both l0 and l1.
38933
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
38935
+ PR preprocessor/60400
38936
+ Backport from mainline
38937
+ 2013-06-24 Dehao Chen <dehao@google.com>
38939
+ * files.c (_cpp_stack_include): Fix the highest_location when header
38940
+ file is guarded by #ifndef and is included twice.
38942
2013-10-16 Release Manager
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)
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.
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"
38972
+msgid "conversion from %s to %s not supported by iconv"
38973
+msgstr "sem suporte a conversão de %s para %s por iconv"
38976
+msgid "iconv_open"
38977
+msgstr "iconv_open"
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"
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"
38989
+#: charset.c:797 charset.c:1443
38990
+msgid "converting to execution character set"
38991
+msgstr "convertendo para conjunto de caracteres da execução"
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"
39000
+msgid "Character %x might not be NFKC"
39001
+msgstr "Caractere %x pode não ser NFKC"
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"
39009
+msgid "the meaning of '\\%c' is different in traditional C"
39010
+msgstr "o significado de \"\\%c\" é diferente em C tradicional"
39013
+msgid "In _cpp_valid_ucn but not a UCN"
39014
+msgstr "Em _cpp_valid_ucn, mas não é um UCN"
39018
+msgid "incomplete universal character name %.*s"
39019
+msgstr "nome de caractere universal incompleto %.*s"
39023
+msgid "%.*s is not a valid universal character"
39024
+msgstr "%.*s não é um caractere universal válido"
39026
+#: charset.c:1055 lex.c:1117
39027
+msgid "'$' in identifier or number"
39028
+msgstr "\"$\" em identificador ou número"
39032
+msgid "universal character %.*s is not valid in an identifier"
39033
+msgstr "caractere universal %.*s não é válido em um identificador"
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"
39040
+#: charset.c:1101 charset.c:1673
39041
+msgid "converting UCN to source character set"
39042
+msgstr "convertendo UCN para conjunto de caracteres fonte"
39045
+msgid "converting UCN to execution character set"
39046
+msgstr "convertendo UCN para conjunto de caracteres de execução"
39049
+msgid "the meaning of '\\x' is different in traditional C"
39050
+msgstr "o significado de \"\\x\" é diferente em C tradicional"
39053
+msgid "\\x used with no following hex digits"
39054
+msgstr "\\x usado com nenhum dígito hexa"
39057
+msgid "hex escape sequence out of range"
39058
+msgstr "sequência de escape hexa fora de alcance"
39061
+msgid "octal escape sequence out of range"
39062
+msgstr "sequência de escape octal fora de alcance"
39065
+msgid "the meaning of '\\a' is different in traditional C"
39066
+msgstr "o significado de \"\\a\" é diferente em C tradicional"
39070
+msgid "non-ISO-standard escape sequence, '\\%c'"
39071
+msgstr "sequência de escape não padrão ISO, \"\\%c\""
39075
+msgid "unknown escape sequence: '\\%c'"
39076
+msgstr "sequência de escape desconhecida: \"\\%c\""
39080
+msgid "unknown escape sequence: '\\%s'"
39081
+msgstr "sequência de escape desconhecida: \"\\%s\""
39084
+msgid "converting escape sequence to execution character set"
39085
+msgstr "convertendo sequência de escape para conjunto de caracteres de execução"
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"
39092
+msgid "multi-character character constant"
39093
+msgstr "constante de caractere multi-caractere"
39096
+msgid "empty character constant"
39097
+msgstr "constante caractere vazia"
39101
+msgid "failure to convert %s to %s"
39102
+msgstr "falha ao converter %s para %s"
39104
+#: directives.c:224 directives.c:250
39106
+msgid "extra tokens at end of #%s directive"
39107
+msgstr "tokens extras ao final da diretiva %#s"
39109
+#: directives.c:357
39111
+msgid "#%s is a GCC extension"
39112
+msgstr "#%s é uma extensão GCC"
39114
+#: directives.c:362
39116
+msgid "#%s is a deprecated GCC extension"
39117
+msgstr "#%s é uma extensão GCC obsoleta"
39119
+#: directives.c:375
39120
+msgid "suggest not using #elif in traditional C"
39121
+msgstr "sugere-se não usar #elif em C tradicional"
39123
+#: directives.c:378
39125
+msgid "traditional C ignores #%s with the # indented"
39126
+msgstr "C tradicional ignora #%s com o # com recuo"
39128
+#: directives.c:382
39130
+msgid "suggest hiding #%s from traditional C with an indented #"
39131
+msgstr "sugere-se ocultar #%s do C tradicional com um # com recuo"
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"
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"
39141
+#: directives.c:483
39143
+msgid "invalid preprocessing directive #%s"
39144
+msgstr "diretiva de preprocessamento inválida #%s"
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"
39150
+#: directives.c:557
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++"
39155
+#: directives.c:560
39157
+msgid "no macro name given in #%s directive"
39158
+msgstr "nenhum nome de macro fornecido na diretiva #%s"
39160
+#: directives.c:563
39161
+msgid "macro names must be identifiers"
39162
+msgstr "nomes de macro devem ser identificadores"
39164
+#: directives.c:612
39166
+msgid "undefining \"%s\""
39167
+msgstr "removendo definição de \"%s\""
39169
+#: directives.c:667
39170
+msgid "missing terminating > character"
39171
+msgstr "faltando caractere terminador >"
39173
+#: directives.c:726
39175
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
39176
+msgstr "#%s espera \"NOME DE ARQUIVO\" OU <NOME DE ARQUIVO>"
39178
+#: directives.c:772
39180
+msgid "empty filename in #%s"
39181
+msgstr "nome de arquivo vazio em #%s"
39183
+#: directives.c:782
39184
+msgid "#include nested too deeply"
39185
+msgstr "#include aninhado profundo demais"
39187
+#: directives.c:823
39188
+msgid "#include_next in primary source file"
39189
+msgstr "#include_next no arquivo fonte primário"
39191
+#: directives.c:849
39193
+msgid "invalid flag \"%s\" in line directive"
39194
+msgstr "opção inválida \"%s\" na diretiva line"
39196
+#: directives.c:909
39197
+msgid "unexpected end of file after #line"
39198
+msgstr "fim de arquivo inesperado após #line"
39200
+#: directives.c:912
39202
+msgid "\"%s\" after #line is not a positive integer"
39203
+msgstr "\"%s\" após #line não é um inteiro positivo"
39205
+#: directives.c:918 directives.c:920
39206
+msgid "line number out of range"
39207
+msgstr "número da linha fora de alcance"
39209
+#: directives.c:933 directives.c:1013
39211
+msgid "\"%s\" is not a valid filename"
39212
+msgstr "\"%s\" não é um nome de arquivo válido"
39214
+#: directives.c:973
39216
+msgid "\"%s\" after # is not a positive integer"
39217
+msgstr "\"%s\" após # não é um inteiro positivo"
39219
+#: directives.c:1068 directives.c:1070 directives.c:1072 directives.c:1658
39224
+#: directives.c:1096
39226
+msgid "invalid #%s directive"
39227
+msgstr "diretiva inválida #%s"
39229
+#: directives.c:1159
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"
39234
+#: directives.c:1168
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"
39239
+#: directives.c:1186
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"
39244
+#: directives.c:1189
39246
+msgid "#pragma %s %s is already registered"
39247
+msgstr "#pragma %s %s já está registrado"
39249
+#: directives.c:1192
39251
+msgid "#pragma %s is already registered"
39252
+msgstr "#pragma %s já está registrado"
39254
+#: directives.c:1222
39255
+msgid "registering pragma with NULL handler"
39256
+msgstr "registrando pragma com manipulador NULO"
39258
+#: directives.c:1439
39259
+msgid "#pragma once in main file"
39260
+msgstr "#pragma ocorre uma vez no arquivo principal"
39262
+#: directives.c:1462
39263
+msgid "invalid #pragma push_macro directive"
39264
+msgstr "diretiva inválida #pragma push_macro"
39266
+#: directives.c:1517
39267
+msgid "invalid #pragma pop_macro directive"
39268
+msgstr "diretiva inválida #pragma pop_macro"
39270
+#: directives.c:1572
39271
+msgid "invalid #pragma GCC poison directive"
39272
+msgstr "diretiva inválida #pragma GCC poison"
39274
+#: directives.c:1581
39276
+msgid "poisoning existing macro \"%s\""
39277
+msgstr "envenenando macro existente \"%s\""
39279
+#: directives.c:1600
39280
+msgid "#pragma system_header ignored outside include file"
39281
+msgstr "#pragma system_header ignorado fora do arquivo include"
39283
+#: directives.c:1625
39285
+msgid "cannot find source file %s"
39286
+msgstr "não foi possível localizar o arquivo fonte %s"
39288
+#: directives.c:1629
39290
+msgid "current file is older than %s"
39291
+msgstr "arquivo atual é mais velho do que %s"
39293
+#: directives.c:1653
39295
+msgid "invalid \"#pragma GCC %s\" directive"
39296
+msgstr "diretiva inválida \"#pragma GCC %s\""
39298
+#: directives.c:1847
39299
+msgid "_Pragma takes a parenthesized string literal"
39300
+msgstr "_Pragma leva uma literal de string entre parenteses"
39302
+#: directives.c:1968
39303
+msgid "#else without #if"
39304
+msgstr "#else sem #if"
39306
+#: directives.c:1973
39307
+msgid "#else after #else"
39308
+msgstr "#else após #else"
39310
+#: directives.c:1975 directives.c:2008
39311
+msgid "the conditional began here"
39312
+msgstr "a condicional começou aqui"
39314
+#: directives.c:2001
39315
+msgid "#elif without #if"
39316
+msgstr "#elif sem #if"
39318
+#: directives.c:2006
39319
+msgid "#elif after #else"
39320
+msgstr "#elif após #else"
39322
+#: directives.c:2044
39323
+msgid "#endif without #if"
39324
+msgstr "#endif sem #if"
39326
+#: directives.c:2124
39327
+msgid "missing '(' after predicate"
39328
+msgstr "faltando \"(\" após predicado"
39330
+#: directives.c:2139
39331
+msgid "missing ')' to complete answer"
39332
+msgstr "faltando \")\" para uma resposta completa"
39334
+#: directives.c:2159
39335
+msgid "predicate's answer is empty"
39336
+msgstr "resposta do predicado está vazia"
39338
+#: directives.c:2186
39339
+msgid "assertion without predicate"
39340
+msgstr "asserção sem predicado"
39342
+#: directives.c:2189
39343
+msgid "predicate must be an identifier"
39344
+msgstr "predicado deve ser um identificador"
39346
+#: directives.c:2275
39348
+msgid "\"%s\" re-asserted"
39349
+msgstr "\"%s\" re-assertado"
39351
+#: directives.c:2567
39353
+msgid "unterminated #%s"
39354
+msgstr "#%s não terminado"
39356
+#: directives-only.c:221 lex.c:2234 traditional.c:162
39357
+msgid "unterminated comment"
39358
+msgstr "comentário não terminado"
39362
+msgstr "saída padrão"
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"
39374
+msgid "invalid prefix \"0b\" for floating constant"
39375
+msgstr "prefixo inválido \"0b\" para constante flutuante"
39378
+msgid "use of C99 hexadecimal floating constant"
39379
+msgstr "uso de constante flutuante hexadecimal de C99"
39383
+msgid "invalid suffix \"%.*s\" on floating constant"
39384
+msgstr "sufixo inválido \"%.*s\" na constante flutuante"
39386
+#: expr.c:556 expr.c:616
39388
+msgid "traditional C rejects the \"%.*s\" suffix"
39389
+msgstr "C tradicional rejeita o sufixo \"%.*s\""
39392
+msgid "suffix for double constant is a GCC extension"
39393
+msgstr "sufixo para constante dupla (suffix for double constant) é uma extensão GCC"
39397
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
39398
+msgstr "sufixo inválido \"%.*s\" com constante flutuante hexadecimal"
39401
+msgid "decimal float constants are a GCC extension"
39402
+msgstr "constantes flutuante decimais (decimal float constants) é uma extensão GCC"
39406
+msgid "invalid suffix \"%.*s\" on integer constant"
39407
+msgstr "sufixo inválido \"%.*s\" em constante inteiro"
39410
+msgid "use of C++0x long long integer constant"
39411
+msgstr "uso de constante longo longo inteiro de C++0x"
39414
+msgid "use of C99 long long integer constant"
39415
+msgstr "uso de constante longo longo inteiro de C99"
39418
+msgid "imaginary constants are a GCC extension"
39419
+msgstr "constantes imaginárias (imaginary constants) é uma extensão GCC"
39422
+msgid "binary constants are a GCC extension"
39423
+msgstr "constantes binárias (binary constants) é uma extensão GCC"
39426
+msgid "integer constant is too large for its type"
39427
+msgstr "constante inteira é muito grande para seu tipo"
39430
+msgid "integer constant is so large that it is unsigned"
39431
+msgstr "constante inteira é tão grande que não está assinada"
39434
+msgid "missing ')' after \"defined\""
39435
+msgstr "faltando \")\" após \"defined\""
39438
+msgid "operator \"defined\" requires an identifier"
39439
+msgstr "operador \"defined\" requer um identificador"
39443
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
39444
+msgstr "(\"%s\" é um token alternativo para \"%s\" em C++)"
39447
+msgid "this use of \"defined\" may not be portable"
39448
+msgstr "esse uso de \"defined\" pode não ser portátil"
39451
+msgid "user-defined literal in preprocessor expression"
39452
+msgstr "literal definida pelo usuário em expressão do preprocessador"
39455
+msgid "floating constant in preprocessor expression"
39456
+msgstr "constante flutuante em expressão do preprocessador"
39459
+msgid "imaginary number in preprocessor expression"
39460
+msgstr "número imaginário em expressão do preprocessador"
39464
+msgid "\"%s\" is not defined"
39465
+msgstr "\"%s\" não está definido"
39468
+msgid "assertions are a GCC extension"
39469
+msgstr "asserções (assertions) é uma extensão GCC"
39472
+msgid "assertions are a deprecated extension"
39473
+msgstr "asserções (assertions) é uma extensão obsoleta"
39477
+msgid "unbalanced stack in %s"
39478
+msgstr "pilha não balanceada em %s"
39482
+msgid "impossible operator '%u'"
39483
+msgstr "operador impossível \"%u\""
39486
+msgid "missing ')' in expression"
39487
+msgstr "faltando \")\" na expressão"
39490
+msgid "'?' without following ':'"
39491
+msgstr "\"?\" sem estar seguido por \":\""
39494
+msgid "integer overflow in preprocessor expression"
39495
+msgstr "estouro de inteiro em expressão do preprocessador"
39498
+msgid "missing '(' in expression"
39499
+msgstr "faltando \"(\" na expressão"
39503
+msgid "the left operand of \"%s\" changes sign when promoted"
39504
+msgstr "o operador à esquerda de \"%s\" altera o sinal quando promovido"
39508
+msgid "the right operand of \"%s\" changes sign when promoted"
39509
+msgstr "o operador à direita de \"%s\" altera o sinal quando promovido"
39512
+msgid "traditional C rejects the unary plus operator"
39513
+msgstr "C tradicional rejeita o operador unário mais"
39516
+msgid "comma operator in operand of #if"
39517
+msgstr "operador vírgula em operando de #if"
39520
+msgid "division by zero in #if"
39521
+msgstr "divisão por zero em #if"
39524
+msgid "NULL directory in find_file"
39525
+msgstr "diretório NULO em find_file"
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"
39532
+msgid "use -Winvalid-pch for more information"
39533
+msgstr "use -Winvalid-pch para mais informações"
39537
+msgid "%s is a block device"
39538
+msgstr "%s é um dispositivo de bloco"
39542
+msgid "%s is too large"
39543
+msgstr "%s é muito grande"
39547
+msgid "%s is shorter than expected"
39548
+msgstr "%s é muito menor do que esperado"
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"
39556
+msgid "Multiple include guards may be useful for:\n"
39557
+msgstr "Múltiplos include guards podem ser úteis para:\n"
39560
+msgid "cppchar_t must be an unsigned type"
39561
+msgstr "cppchar_t deve ser um tipo não assinado"
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"
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"
39573
+msgid "target char is less than 8 bits wide"
39574
+msgstr "char alvo é menor do que 8 bits"
39577
+msgid "target wchar_t is narrower than target char"
39578
+msgstr "wchar_t alvo é mais estreito do que o char alvo"
39581
+msgid "target int is narrower than target char"
39582
+msgstr "int alvo é mais estreito do que o char alvo"
39585
+msgid "CPP half-integer narrower than CPP character"
39586
+msgstr "meio-inteiro do CPP é mais estreito do que o caractere do CPP"
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"
39594
+msgid "backslash and newline separated by space"
39595
+msgstr "barra invertida e nova linha separadas por espaço"
39598
+msgid "backslash-newline at end of file"
39599
+msgstr "barra invertida e nova linha no final do arquivo"
39603
+msgid "trigraph ??%c converted to %c"
39604
+msgstr "trígrafo ??%c convertido para %c"
39608
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
39609
+msgstr "trígrafo ??%c ignorado, use -trigraphs para habilitá-lo"
39612
+msgid "\"/*\" within comment"
39613
+msgstr "\"/*\" dentro de comentário"
39617
+msgid "%s in preprocessing directive"
39618
+msgstr "%s em diretiva de preprocessamento"
39621
+msgid "null character(s) ignored"
39622
+msgstr "um ou mais caracteres nulos ignorados"
39626
+msgid "`%.*s' is not in NFKC"
39627
+msgstr "\"%.*s\" não está em NFKC"
39631
+msgid "`%.*s' is not in NFC"
39632
+msgstr "\"%.*s\" não está em NFC"
39634
+#: lex.c:1164 lex.c:1241
39636
+msgid "attempt to use poisoned \"%s\""
39637
+msgstr "tentativa de usar \"%s\" envenenado"
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"
39643
+#: lex.c:1178 lex.c:1255
39645
+msgid "identifier \"%s\" is a special operator name in C++"
39646
+msgstr "identificador \"%s\" é o nome de um operador especial em C++"
39649
+msgid "raw string delimiter longer than 16 characters"
39650
+msgstr "delimitador de string não tratada (raw) maior do que 16 caracteres"
39654
+msgid "invalid character '%c' in raw string delimiter"
39655
+msgstr "caractere inválido \"%c\" em delimitador de string não tratada (raw)"
39657
+#: lex.c:1525 lex.c:1547
39658
+msgid "unterminated raw string"
39659
+msgstr "string não tratada (raw) não terminada"
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"
39666
+msgid "null character(s) preserved in literal"
39667
+msgstr "um ou mais caracteres nulos preservados em literal"
39671
+msgid "missing terminating %c character"
39672
+msgstr "faltando o caractere de terminação %c"
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"
39679
+msgid "(this will be reported only once per input file)"
39680
+msgstr "(isso será relatado apenas uma vez por arquivo de entrada)"
39683
+msgid "multi-line comment"
39684
+msgstr "comentário multilinha"
39688
+msgid "unspellable token %s"
39689
+msgstr "token %s impronunciável"
39693
+msgid "macro \"%s\" is not used"
39694
+msgstr "macro \"%s\" não é usada"
39696
+#: macro.c:229 macro.c:426
39698
+msgid "invalid built-in macro \"%s\""
39699
+msgstr "macro interna inválida \"%s\""
39702
+msgid "could not determine file timestamp"
39703
+msgstr "não foi possível determinar o arquivo de marca de tempo"
39706
+msgid "could not determine date and time"
39707
+msgstr "não foi possível determinar a data e a hora"
39710
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
39711
+msgstr "__COUNTER__ expandido dentro diretiva com -fdirectives-only"
39714
+msgid "invalid string literal, ignoring final '\\'"
39715
+msgstr "literal de string inválida, ignorando final \"\\\""
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"
39723
+msgid "ISO C99 requires rest arguments to be used"
39724
+msgstr "ISO C99 requer que argumentos restantes sejam usados"
39728
+msgid "macro \"%s\" requires %u arguments, but only %u given"
39729
+msgstr "macro \"%s\" requer %u argumentos, mas apenas %u foram fornecidos"
39733
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
39734
+msgstr "macro \"%s\" passou %u argumentos, mas usa apenas %u"
39736
+#: macro.c:923 traditional.c:680
39738
+msgid "unterminated argument list invoking macro \"%s\""
39739
+msgstr "lista de argumentos interminável chamando macro \"%s\""
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"
39746
+# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33305
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"
39754
+msgid "duplicate macro parameter \"%s\""
39755
+msgstr "parâmetro de macro \"%s\" duplicado"
39759
+msgid "\"%s\" may not appear in macro parameter list"
39760
+msgstr "\"%s\" não pode aparecer na lista de parâmetros de macro"
39763
+msgid "macro parameters must be comma-separated"
39764
+msgstr "parâmetros de macro devem ser separados por vírgula"
39767
+msgid "parameter name missing"
39768
+msgstr "faltando nome de parâmetro"
39771
+msgid "anonymous variadic macros were introduced in C99"
39772
+msgstr "macros variádicas anônimas foram introduzidas em C99"
39775
+msgid "ISO C does not permit named variadic macros"
39776
+msgstr "ISO C não permite macros variádicas nomeadas"
39779
+msgid "missing ')' in macro parameter list"
39780
+msgstr "faltando \")\" na lista de parâmetros de macro"
39783
+msgid "'##' cannot appear at either end of a macro expansion"
39784
+msgstr "\"##\" não pode aparecer no final da expansão de macro"
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"
39791
+msgid "missing whitespace after the macro name"
39792
+msgstr "faltando espaço em branco após o nome de macro"
39795
+msgid "'#' is not followed by a macro parameter"
39796
+msgstr "\"#\" não está seguido por um parâmetro de macro"
39800
+msgid "\"%s\" redefined"
39801
+msgstr "\"%s\" re-definido"
39804
+msgid "this is the location of the previous definition"
39805
+msgstr "essa é a localização da definição anterior"
39809
+msgid "macro argument \"%s\" would be stringified in traditional C"
39810
+msgstr "argumento de macro \"%s\" estaria em uma string no C tradicional"
39814
+msgid "invalid hash type %d in cpp_macro_definition"
39815
+msgstr "tipo de hash inválido %d em cpp_macro_definition"
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"
39823
+msgid "%s: not used because `%.*s' is poisoned"
39824
+msgstr "%s: não usado porque \"%.*s\" está envenenado"
39828
+msgid "%s: not used because `%.*s' not defined"
39829
+msgstr "%s: não usado porque \"%.*s\" não está definido"
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\""
39838
+msgid "%s: not used because `%s' is defined"
39839
+msgstr "%s: não usado porque \"%s\" está definido"
39843
+msgid "%s: not used because `__COUNTER__' is invalid"
39844
+msgstr "%s: não usado porque \"__COUNTER__\" é inválido"
39846
+#: pch.c:723 pch.c:898
39847
+msgid "while reading precompiled header"
39848
+msgstr "enquanto realizava leitura de header pré-compilado"
39850
+#: traditional.c:750
39852
+msgid "detected recursion whilst expanding macro \"%s\""
39853
+msgstr "detectada recursão enquanto expandia macro \"%s\""
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)
39863
+2013-12-18 Joseph Myers <joseph@codesourcery.com>
39867
+2013-11-01 Joseph Myers <joseph@codesourcery.com>
39871
2013-10-16 Release Manager
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)
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.
39883
# Nilgün Belma Bugüner <nilgun@buguner.name.tr>, 2001, ..., 2007.
39884
+# Volkan Gezer <vlkngzr@gmail.com>, 2013.
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"
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"
39906
@@ -121,10 +123,9 @@
39907
msgstr "ISO standardı olmayan önceleme dizgesi, '\\%c'"
39910
-#, fuzzy, c-format
39911
-#| msgid "unknown escape sequence '\\%c'"
39913
msgid "unknown escape sequence: '\\%c'"
39914
-msgstr "bilinmeyen önceleme dizgesi '\\%c'"
39915
+msgstr "bilinmeyen kaçış dizgesi: '\\%c'"
39919
@@ -163,10 +164,9 @@
39920
msgstr "#%s bir GCC uzantısıdır"
39922
#: directives.c:362
39923
-#, fuzzy, c-format
39924
-#| msgid "#%s is a GCC extension"
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"
39930
#: directives.c:375
39931
msgid "suggest not using #elif in traditional C"
39932
@@ -247,7 +247,7 @@
39934
#: directives.c:909
39935
msgid "unexpected end of file after #line"
39937
+msgstr "#line satırından sonra beklenmeyen dosya sonu"
39939
#: directives.c:912
39941
@@ -271,7 +271,7 @@
39942
#: directives.c:1068 directives.c:1070 directives.c:1072 directives.c:1658
39948
#: directives.c:1096
39950
@@ -312,16 +312,12 @@
39951
msgstr "main dosyasında '#pragma once'"
39953
#: directives.c:1462
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"
39960
#: directives.c:1517
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"
39967
#: directives.c:1572
39968
msgid "invalid #pragma GCC poison directive"
39969
@@ -347,10 +343,9 @@
39970
msgstr "mevcut dosya %s den daha eski"
39972
#: directives.c:1653
39973
-#, fuzzy, c-format
39974
-#| msgid "invalid #pragma GCC poison directive"
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"
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ış"
39986
-#: directives.c:2566
39987
+#: directives.c:2567
39989
msgid "unterminated #%s"
39990
msgstr "sonlandırılmamış #%s"
39991
@@ -424,16 +419,12 @@
39994
#: expr.c:479 expr.c:577
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"
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ı"
40009
msgid "use of C99 hexadecimal floating constant"
40010
@@ -450,10 +441,8 @@
40011
msgstr "geleneksel C \"%.*s\" sonekini kullanmaz"
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"
40022
@@ -461,10 +450,8 @@
40023
msgstr "onaltılık kayan sabitli \"%.*s\" soneki geçersiz"
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"
40034
@@ -472,10 +459,8 @@
40035
msgstr "tamsayı sabitte sonek \"%.*s\" soneki geçersiz"
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ı"
40045
msgid "use of C99 long long integer constant"
40046
@@ -486,10 +471,8 @@
40047
msgstr "sanal sabitler bir GCC genişletmesidir"
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"
40057
msgid "integer constant is too large for its type"
40058
@@ -517,10 +500,8 @@
40059
msgstr "\"defined\" bu kullanımıyla uyarlanabilir olmayabilir"
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ı"
40069
msgid "floating constant in preprocessor expression"
40070
@@ -536,20 +517,17 @@
40071
msgstr "\"%s\" tanımlı değil"
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"
40081
msgid "assertions are a deprecated extension"
40083
+msgstr "belirteçler artık kullanılmayan bir ifadedir"
40086
-#, fuzzy, c-format
40087
-#| msgid "unbalanced stack in #if"
40089
msgid "unbalanced stack in %s"
40090
-msgstr "#if ifadesinde karşılıksız yığın"
40091
+msgstr "%s içinde dengelenmemiş yığın"
40095
@@ -594,39 +572,39 @@
40096
msgid "division by zero in #if"
40097
msgstr "#if içinde sıfırla bölme"
40101
msgid "NULL directory in find_file"
40102
msgstr "find_file içinde boş dizin"
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"
40111
msgid "use -Winvalid-pch for more information"
40112
msgstr "daha fazla bilgi almak için -Winvalid-pch kullanın"
40117
msgid "%s is a block device"
40118
msgstr "%s bir blok aygıtıdır"
40123
msgid "%s is too large"
40124
msgstr "%s çok büyük"
40129
msgid "%s is shorter than expected"
40130
msgstr "%s beklenenden daha kısa"
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"
40140
msgid "Multiple include guards may be useful for:\n"
40141
msgstr "Çoklu include önlemleri aşağıdakiler için kullanışlı olabilir:\n"
40143
@@ -717,27 +695,24 @@
40144
#: lex.c:1178 lex.c:1255
40146
msgid "identifier \"%s\" is a special operator name in C++"
40148
+msgstr "\"%s\" belirteci, C++'da özel bir işleç adıdır"
40151
msgid "raw string delimiter longer than 16 characters"
40153
+msgstr "ham dizge ayracı 16 karakterden uzun"
40156
-#, fuzzy, c-format
40157
-#| msgid "universal character %.*s is not valid in an identifier"
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'"
40163
#: lex.c:1525 lex.c:1547
40165
-#| msgid "unterminated #%s"
40166
msgid "unterminated raw string"
40167
-msgstr "sonlandırılmamış #%s"
40168
+msgstr "bitirilmemiş ham dizge"
40170
#: lex.c:1573 lex.c:1706
40171
msgid "invalid suffix on literal; C++11 requires a space between literal and identifier"
40173
+msgstr "geçersiz ifade soneki; C++11 ifade ve tanımlayıcı arasında bir boşluk gerektirir"
40176
msgid "null character(s) preserved in literal"
40177
@@ -785,7 +760,7 @@
40180
msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
40182
+msgstr "__COUNTER__ -fdirectives-only ile talimat içerisinde genişletildi"
40185
msgid "invalid string literal, ignoring final '\\'"
40186
@@ -823,7 +798,7 @@
40189
msgid "invoking macro %s argument %d: empty macro arguments are undefined in ISO C90 and ISO C++98"
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"
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"
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"
40205
-#, fuzzy, c-format
40206
-#| msgid "%s: not used because `%s' is defined"
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ı"
40216
msgid "%s: not used because `%.*s' not defined"
40217
msgstr "%s: `%.*s' tanımlı olmadığından kullanılmadı"
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"
40228
msgid "%s: not used because `%s' is defined"
40229
msgstr "%s: `%s' tanımlı olduğundan kullanılmadı"
40232
-#, fuzzy, c-format
40233
-#| msgid "%s: not used because `%s' is defined"
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ı"
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"
40246
===================================================================
40247
--- a/src/. (.../tags/gcc_4_8_2_release)
40248
+++ b/src/. (.../branches/gcc-4_8-branch)
40250
Property changes on: .
40251
___________________________________________________________________
40252
Modified: svn:mergeinfo
40253
Merged /trunk:r202766,204547,206123-206126,206395,206628,207387