1
# DP: updates from the 4.8 branch upto 20140306 (r208384).
5
cat > ${dir}LAST_UPDATED <<EOF
6
Thu Mar 6 15:20:42 CET 2014
7
Thu Mar 6 14:20:42 UTC 2014 (revision 208384)
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-03 Peter Bergner <bergner@vnet.ibm.com>
22
+ Backport from mainline
23
+ 2013-06-20 Torvald Riegel <triegel@redhat.com>
25
+ * query.cc (_ITM_inTransaction): Abort when using the HTM fastpath.
26
+ (_ITM_getTransactionId): Same.
27
+ * config/x86/target.h (htm_transaction_active): New.
29
+ 2013-06-20 Torvald Riegel <triegel@redhat.com>
32
+ * beginend.cc (gtm_thread::begin_transaction): Handle reentrancy in
35
2013-10-16 Release Manager
39
2013-08-02 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
41
* configure.tgt: Add -msoft-float to XCFLAGS.
44
2013-08-14 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
46
* config/s390/sjlj.S: Add file missing from last commit.
47
* config/s390/target.h: Likewise.
50
2013-08-02 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
52
Backports from mainline:
53
Index: libitm/query.cc
54
===================================================================
55
--- a/src/libitm/query.cc (.../tags/gcc_4_8_2_release)
56
+++ b/src/libitm/query.cc (.../branches/gcc-4_8-branch)
58
_ITM_howExecuting ITM_REGPARM
59
_ITM_inTransaction (void)
61
+#if defined(USE_HTM_FASTPATH)
62
+ // If we use the HTM fastpath, we cannot reliably detect whether we are
63
+ // in a transaction because this function can be called outside of
64
+ // a transaction and thus we can't deduce this by looking at just the serial
65
+ // lock. This function isn't used in practice currently, so the easiest
66
+ // way to handle it is to just abort.
67
+ if (htm_fastpath && htm_transaction_active())
70
struct gtm_thread *tx = gtm_thr();
71
if (tx && (tx->nesting > 0))
74
_ITM_transactionId_t ITM_REGPARM
75
_ITM_getTransactionId (void)
77
+#if defined(USE_HTM_FASTPATH)
78
+ // See ITM_inTransaction.
79
+ if (htm_fastpath && htm_transaction_active())
82
struct gtm_thread *tx = gtm_thr();
83
return (tx && (tx->nesting > 0)) ? tx->id : _ITM_noTransactionId;
85
Index: libitm/beginend.cc
86
===================================================================
87
--- a/src/libitm/beginend.cc (.../tags/gcc_4_8_2_release)
88
+++ b/src/libitm/beginend.cc (.../branches/gcc-4_8-branch)
90
// We are executing a transaction now.
91
// Monitor the writer flag in the serial-mode lock, and abort
92
// if there is an active or waiting serial-mode transaction.
93
+ // Note that this can also happen due to an enclosing
94
+ // serial-mode transaction; we handle this case below.
95
if (unlikely(serial_lock.is_write_locked()))
99
tx = new gtm_thread();
102
+ // Check whether there is an enclosing serial-mode transaction;
103
+ // if so, we just continue as a nested transaction and don't
104
+ // try to use the HTM fastpath. This case can happen when an
105
+ // outermost relaxed transaction calls unsafe code that starts
107
+ if (tx->nesting > 0)
109
+ // Another thread is running a serial-mode transaction. Wait.
110
serial_lock.read_lock(tx);
111
serial_lock.read_unlock(tx);
112
// TODO We should probably reset the retry count t here, unless
113
Index: libitm/config/x86/target.h
114
===================================================================
115
--- a/src/libitm/config/x86/target.h (.../tags/gcc_4_8_2_release)
116
+++ b/src/libitm/config/x86/target.h (.../branches/gcc-4_8-branch)
119
return begin_ret & _XABORT_RETRY;
122
+/* Returns true iff a hardware transaction is currently being executed. */
124
+htm_transaction_active ()
126
+ return _xtest() != 0;
131
Index: libgomp/ChangeLog
132
===================================================================
133
--- a/src/libgomp/ChangeLog (.../tags/gcc_4_8_2_release)
134
+++ b/src/libgomp/ChangeLog (.../branches/gcc-4_8-branch)
136
+2013-12-12 Jakub Jelinek <jakub@redhat.com>
139
+ * testsuite/libgomp.fortran/crayptr2.f90: Add private (d) clause to
142
2013-10-16 Release Manager
144
* GCC 4.8.2 released.
145
Index: libgomp/testsuite/libgomp.fortran/crayptr2.f90
146
===================================================================
147
--- a/src/libgomp/testsuite/libgomp.fortran/crayptr2.f90 (.../tags/gcc_4_8_2_release)
148
+++ b/src/libgomp/testsuite/libgomp.fortran/crayptr2.f90 (.../branches/gcc-4_8-branch)
153
-!$omp parallel num_threads (3) reduction (.or.:l)
154
+!$omp parallel num_threads (3) reduction (.or.:l) private (d)
155
if (omp_get_thread_num () .eq. 0) then
157
elseif (omp_get_thread_num () .eq. 1) then
158
Index: libstdc++-v3/configure
159
===================================================================
160
--- a/src/libstdc++-v3/configure (.../tags/gcc_4_8_2_release)
161
+++ b/src/libstdc++-v3/configure (.../branches/gcc-4_8-branch)
162
@@ -71573,7 +71573,7 @@
165
# For libtool versioning info, format is CURRENT:REVISION:AGE
166
-libtool_VERSION=6:18:0
167
+libtool_VERSION=6:19:0
169
# Everything parsed; figure out what files and settings to use.
170
case $enable_symvers in
171
Index: libstdc++-v3/doc/xml/manual/abi.xml
172
===================================================================
173
--- a/src/libstdc++-v3/doc/xml/manual/abi.xml (.../tags/gcc_4_8_2_release)
174
+++ b/src/libstdc++-v3/doc/xml/manual/abi.xml (.../branches/gcc-4_8-branch)
176
<listitem><para>GCC 4.5.0: GCC_4.5.0</para></listitem>
177
<listitem><para>GCC 4.6.0: GCC_4.6.0</para></listitem>
178
<listitem><para>GCC 4.7.0: GCC_4.7.0</para></listitem>
179
+ <listitem><para>GCC 4.8.0: GCC_4.8.0</para></listitem>
184
<listitem><para>GCC 4.6.1: libstdc++.so.6.0.16</para></listitem>
185
<listitem><para>GCC 4.7.0: libstdc++.so.6.0.17</para></listitem>
186
<listitem><para>GCC 4.8.0: libstdc++.so.6.0.18</para></listitem>
187
+ <listitem><para>GCC 4.8.3: libstdc++.so.6.0.19</para></listitem>
190
Note 1: Error should be libstdc++.so.3.0.3.
192
<listitem><para>GCC 4.6.1: GLIBCXX_3.4.16, CXXABI_1.3.5</para></listitem>
193
<listitem><para>GCC 4.7.0: GLIBCXX_3.4.17, CXXABI_1.3.6</para></listitem>
194
<listitem><para>GCC 4.8.0: GLIBCXX_3.4.18, CXXABI_1.3.7</para></listitem>
195
+ <listitem><para>GCC 4.8.3: GLIBCXX_3.4.19, CXXABI_1.3.7</para></listitem>
199
Index: libstdc++-v3/doc/xml/manual/status_cxx2011.xml
200
===================================================================
201
--- a/src/libstdc++-v3/doc/xml/manual/status_cxx2011.xml (.../tags/gcc_4_8_2_release)
202
+++ b/src/libstdc++-v3/doc/xml/manual/status_cxx2011.xml (.../branches/gcc-4_8-branch)
203
@@ -877,10 +877,11 @@
207
+ <?dbhtml bgcolor="#B0B0B0" ?>
208
<entry>20.9.7.6</entry>
209
<entry>Other transformations</entry>
212
+ <entry>Partial</entry>
213
+ <entry>Missing <code>aligned_union</code>.</entry>
217
Index: libstdc++-v3/doc/xml/manual/spine.xml
218
===================================================================
219
--- a/src/libstdc++-v3/doc/xml/manual/spine.xml (.../tags/gcc_4_8_2_release)
220
+++ b/src/libstdc++-v3/doc/xml/manual/spine.xml (.../branches/gcc-4_8-branch)
227
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">FSF</link>
229
Index: libstdc++-v3/doc/html/bk02.html
230
===================================================================
231
--- a/src/libstdc++-v3/doc/html/bk02.html (.../tags/gcc_4_8_2_release)
232
+++ b/src/libstdc++-v3/doc/html/bk02.html (.../branches/gcc-4_8-branch)
234
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
235
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
236
\ No newline at end of file
237
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
238
\ No newline at end of file
239
Index: libstdc++-v3/doc/html/bk03.html
240
===================================================================
241
--- a/src/libstdc++-v3/doc/html/bk03.html (.../tags/gcc_4_8_2_release)
242
+++ b/src/libstdc++-v3/doc/html/bk03.html (.../branches/gcc-4_8-branch)
244
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
245
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
246
\ No newline at end of file
247
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
248
\ No newline at end of file
249
Index: libstdc++-v3/doc/html/faq.html
250
===================================================================
251
--- a/src/libstdc++-v3/doc/html/faq.html (.../tags/gcc_4_8_2_release)
252
+++ b/src/libstdc++-v3/doc/html/faq.html (.../branches/gcc-4_8-branch)
254
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
255
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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 ©
256
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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 ©
259
<a class="link" href="http://www.fsf.org" target="_top">FSF</a>
260
- </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">
261
+ </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">
263
</a></dt><dt>1.2. <a href="faq.html#faq.why">
264
Why should I use libstdc++?
265
Index: libstdc++-v3/doc/html/index.html
266
===================================================================
267
--- a/src/libstdc++-v3/doc/html/index.html (.../tags/gcc_4_8_2_release)
268
+++ b/src/libstdc++-v3/doc/html/index.html (.../branches/gcc-4_8-branch)
270
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
271
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
272
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
273
Copyright (C) 2008-2013
274
<a class="link" href="http://www.fsf.org/" target="_top">FSF
277
</p></li><li class="listitem"><p>
278
<a class="link" href="api.html" title="The GNU C++ Library API Reference">API and Source Documentation</a>
279
</p></li></ul></div><p>
280
- </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.
281
+ </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.
284
</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.
286
</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.
289
-</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.
290
+</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.
293
</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.
296
-</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.
297
+</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.
300
</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.
301
Index: libstdc++-v3/doc/html/api.html
302
===================================================================
303
--- a/src/libstdc++-v3/doc/html/api.html (.../tags/gcc_4_8_2_release)
304
+++ b/src/libstdc++-v3/doc/html/api.html (.../branches/gcc-4_8-branch)
306
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
307
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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 ©
308
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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 ©
314
<a class="link" href="http://www.fsf.org/" target="_top">FSF
316
- </p></div><div><div class="legalnotice"><a id="idp3706336"></a><p>
317
+ </p></div><div><div class="legalnotice"><a id="idm270006235696"></a><p>
318
<a class="link" href="manual/license.html" title="License">License
320
</p></div></div></div><hr /></div><p>
321
Index: libstdc++-v3/doc/html/manual/dynamic_memory.html
322
===================================================================
323
--- a/src/libstdc++-v3/doc/html/manual/dynamic_memory.html (.../tags/gcc_4_8_2_release)
324
+++ b/src/libstdc++-v3/doc/html/manual/dynamic_memory.html (.../branches/gcc-4_8-branch)
326
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
327
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
328
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
331
</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>
332
Index: libstdc++-v3/doc/html/manual/iterators.html
333
===================================================================
334
--- a/src/libstdc++-v3/doc/html/manual/iterators.html (.../tags/gcc_4_8_2_release)
335
+++ b/src/libstdc++-v3/doc/html/manual/iterators.html (.../branches/gcc-4_8-branch)
337
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
338
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
339
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
342
</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.
345
</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.
347
- <a id="idp16156992" class="indexterm"></a>
348
-</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>
349
+ <a id="idm269999374096" class="indexterm"></a>
350
+</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>
352
FAQ <a class="link" href="../faq.html#faq.iterator_as_pod" title="7.1.">entry</a> points out that
353
iterators are not implemented as pointers. They are a generalization
354
Index: libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html
355
===================================================================
356
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html (.../tags/gcc_4_8_2_release)
357
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html (.../branches/gcc-4_8-branch)
359
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
360
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
361
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
362
Let's start by describing how the data on a freelist is laid out in memory.
363
This is the first two blocks in freelist for thread id 3 in bin 3 (8 bytes):
364
</p><pre class="programlisting">
365
Index: libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
366
===================================================================
367
--- a/src/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html (.../tags/gcc_4_8_2_release)
368
+++ b/src/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html (.../branches/gcc-4_8-branch)
370
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
371
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
372
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
375
</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>
376
Index: libstdc++-v3/doc/html/manual/mt_allocator.html
377
===================================================================
378
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator.html (.../tags/gcc_4_8_2_release)
379
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator.html (.../branches/gcc-4_8-branch)
381
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
382
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
383
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
386
-</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>
387
+</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>
388
</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>
389
The mt allocator [hereinafter referred to simply as "the allocator"]
390
is a fixed size (power of two) allocator that was initially
391
Index: libstdc++-v3/doc/html/manual/unordered_associative.html
392
===================================================================
393
--- a/src/libstdc++-v3/doc/html/manual/unordered_associative.html (.../tags/gcc_4_8_2_release)
394
+++ b/src/libstdc++-v3/doc/html/manual/unordered_associative.html (.../branches/gcc-4_8-branch)
396
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
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>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.
398
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
401
</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>
402
Index: libstdc++-v3/doc/html/manual/configure.html
403
===================================================================
404
--- a/src/libstdc++-v3/doc/html/manual/configure.html (.../tags/gcc_4_8_2_release)
405
+++ b/src/libstdc++-v3/doc/html/manual/configure.html (.../branches/gcc-4_8-branch)
407
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
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>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>
409
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
410
When configuring libstdc++, you'll have to configure the entire
411
<span class="emphasis"><em>gccsrcdir</em></span> directory. Consider using the
412
toplevel gcc configuration option
413
Index: libstdc++-v3/doc/html/manual/status.html
414
===================================================================
415
--- a/src/libstdc++-v3/doc/html/manual/status.html (.../tags/gcc_4_8_2_release)
416
+++ b/src/libstdc++-v3/doc/html/manual/status.html (.../branches/gcc-4_8-branch)
418
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
419
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
420
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
423
-</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>
424
+</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>
425
This status table is based on the table of contents of ISO/IEC 14882:2003.
427
This page describes the C++ support in mainline GCC SVN, not in any
429
-</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">
430
+</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">
431
<span class="emphasis"><em>18</em></span>
432
</td><td colspan="3" align="left">
433
<span class="emphasis"><em>Language support</em></span>
436
This page describes the C++11 support in mainline GCC SVN, not in any
438
-</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">
439
+</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">
440
<span class="emphasis"><em>18</em></span>
441
</td><td colspan="3" align="left">
442
<span class="emphasis"><em>Language support</em></span>
444
is_trivially_copy_constructible, is_trivially_move_constructible,
445
is_trivially_assignable, is_trivially_default_assignable,
446
is_trivially_copy_assignable, is_trivially_move_assignable
447
- </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">
448
+ </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">
449
<span class="emphasis"><em>21</em></span>
450
</td><td colspan="3" align="left">
451
<span class="emphasis"><em>Strings</em></span>
454
This page describes the TR1 support in mainline GCC SVN, not in any particular
456
-</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">
457
+</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">
460
<a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">boost::shared_ptr</a>.
463
This page describes the TR 24733 support in mainline GCC SVN, not in any
465
-</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">
466
+</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">
467
<span class="emphasis"><em>0</em></span>
468
</td><td colspan="3" align="left">
469
<span class="emphasis"><em>Introduction</em></span>
470
Index: libstdc++-v3/doc/html/manual/profile_mode_devel.html
471
===================================================================
472
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_devel.html (.../tags/gcc_4_8_2_release)
473
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_devel.html (.../branches/gcc-4_8-branch)
475
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
476
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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
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>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
478
<code class="code">-D_GLIBCXX_PROFILE</code> through preprocessor directives in
479
<code class="code">include/std/*</code>.
480
</p><p>Instrumented implementations are provided in
481
Index: libstdc++-v3/doc/html/manual/debug_mode_design.html
482
===================================================================
483
--- a/src/libstdc++-v3/doc/html/manual/debug_mode_design.html (.../tags/gcc_4_8_2_release)
484
+++ b/src/libstdc++-v3/doc/html/manual/debug_mode_design.html (.../branches/gcc-4_8-branch)
486
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
487
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
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>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>
489
</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>
490
</p><p> The libstdc++ debug mode replaces unsafe (but efficient) standard
491
containers and iterators with semantically equivalent safe standard
493
</p><p> There are several existing implementations of debug modes for C++
494
standard library implementations, although none of them directly
495
supports debugging for programs using libstdc++. The existing
496
- 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>:
497
+ 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>:
498
SafeSTL was the original debugging version of the Standard Template
499
Library (STL), implemented by Cay S. Horstmann on top of the
500
Hewlett-Packard STL. Though it inspired much work in this area, it
501
Index: libstdc++-v3/doc/html/manual/policy_data_structures_design.html
502
===================================================================
503
--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures_design.html (.../tags/gcc_4_8_2_release)
504
+++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures_design.html (.../branches/gcc-4_8-branch)
506
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
507
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
508
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
509
Associative containers are typically parametrized by various
510
policies. For example, a hash-based associative container is
511
parametrized by a hash-functor, transforming each key into an
513
naturally; collision-chaining hash tables (label B) store
514
equivalent-key values in the same bucket, the bucket can be
515
arranged so that equivalent-key values are consecutive.
516
- </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>
517
+ </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>
518
Put differently, the standards' non-unique mapping
519
associative-containers are associative containers that map
520
primary keys to linked lists that are embedded into the
522
first graphic above. Labels A and B, respectively. Each shaded
523
box represents some size-type or secondary
524
associative-container.
525
- </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>
526
+ </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>
527
In the first example above, then, one would use an associative
528
container mapping each user to an associative container which
529
maps each application id to a start time (see
531
shows invariants for order-preserving containers: point-type
532
iterators are synonymous with range-type iterators.
533
Orthogonally, <span class="emphasis"><em>C</em></span>shows invariants for "set"
534
- 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
535
+ 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
536
(hash-based associative containers) lack movement
537
operators, such as <code class="literal">operator++</code> - in fact, this
538
is the reason why this library differentiates from the standard C++ librarys
540
to the question of whether point-type iterators and range-type
541
iterators are valid. The graphic below shows tags corresponding to
542
different types of invalidation guarantees.
543
- </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>
544
+ </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>
545
<code class="classname">basic_invalidation_guarantee</code>
546
corresponds to a basic guarantee that a point-type iterator,
547
a found pointer, or a found reference, remains valid as long
550
This library contains a container tag hierarchy corresponding to the
552
- </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>
553
+ </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>
554
Given any container <span class="type">Cntnr</span>, the tag of
555
the underlying data structure can be found via <code class="literal">typename
556
Cntnr::container_category</code>.
558
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
559
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
560
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
561
- 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
562
+ 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
563
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
564
strings of 3 characters). A hash-table algorithm needs to map
565
elements of U "uniformly" into the range [0,..., m -
567
Z<sub>+</sub>,</p><p>which maps a non-negative hash value, and a non-negative
568
range upper-bound into a non-negative integral in the range
569
between 0 (inclusive) and the range upper bound (exclusive),
570
- 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">
571
+ 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">
572
f(u , m) = g(h(u), m)
573
</span></div></div><br class="equation-break" /><p>From the above, it is obvious that given g and
574
h, f can always be composed (however the converse
576
transforming the sequence of hash values into a sequence of
577
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
578
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
579
- 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">
580
+ 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">
582
</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
583
v (typically powers of 2), and some a. Each of
585
implement using the low
586
level % (modulo) operation (for any m), or the
587
low level & (bit-mask) operation (for the case where
588
- 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">
589
+ 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">
591
- </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">
592
+ </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">
593
g(r, m) = r & m - 1, (with m =
594
2<sup>k</sup> for some k)
595
</span></div></div><br class="equation-break" /><p>respectively.</p><p>The % (modulo) implementation has the advantage that for
597
s = [ s<sub>0</sub>,..., s<sub>t - 1</sub>]
598
</p><p>be a string of t characters, each of which is from
599
domain S. Consider the following ranged-hash
600
- function:</p><div class="equation"><a id="idp18163200"></a><p class="title"><strong>Equation 22.5.
601
+ function:</p><div class="equation"><a id="idm269997367984"></a><p class="title"><strong>Equation 22.5.
602
A Standard String Hash Function
603
</strong></p><div class="equation-contents"><span class="mathphrase">
604
f<sub>1</sub>(s, m) = ∑ <sub>i =
606
of a long DNA sequence (and so S = {'A', 'C', 'G',
607
'T'}). In this case, scanning the entire string might be
608
prohibitively expensive. A possible alternative might be to use
609
- 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.
610
+ 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.
611
Only k String DNA Hash
612
</strong></p><div class="equation-contents"><span class="mathphrase">
613
f<sub>2</sub>(s, m) = ∑ <sub>i
614
@@ -606,12 +606,12 @@
615
the container transforms the key into a non-negative integral
616
using the hash functor (points B and C), and transforms the
617
result into a position using the combining functor (points D
618
- 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
619
+ 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
620
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
621
a ranged-hash function. The graphic below shows an <code class="function">insert</code> sequence
622
diagram. The user inserts an element (point A), the container
623
transforms the key into a position using the combining functor
624
- (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>
625
+ (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>
627
</h6></div></div></div><p><code class="classname">gp_hash_table</code> is parametrized by
628
<code class="classname">Hash_Fn</code>, <code class="classname">Probe_Fn</code>,
630
a linear probe and a quadratic probe function,
631
respectively.</p></li></ol></div><p>
632
The graphic below shows the relationships.
633
- </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
634
+ </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
635
shrink. It is necessary to specify policies to determine how
636
and when a hash table should change its size. Usually, resize
637
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
638
@@ -667,10 +667,10 @@
639
and some load factor be denoted by Α. We would like to
640
calculate the minimal length of k, such that if there were Α
641
m elements in the hash table, a probe sequence of length k would
642
- 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
643
+ 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
644
k appears in bin i by p<sub>i</sub>, the
645
length of the probe sequence of bin i by
646
- l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idp18240448"></a><p class="title"><strong>Equation 22.7.
647
+ l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idm269997290864"></a><p class="title"><strong>Equation 22.7.
648
Probability of Probe Sequence of Length k
649
</strong></p><div class="equation-contents"><span class="mathphrase">
652
l<sub>i</sub> are negatively-dependent
653
(<a class="xref" href="policy_data_structures.html#biblio.dubhashi98neg" title="Balls and bins: A study in negative dependence">[biblio.dubhashi98neg]</a>)
655
- I(.) denote the indicator function. Then</p><div class="equation"><a id="idp18247216"></a><p class="title"><strong>Equation 22.8.
656
+ I(.) denote the indicator function. Then</p><div class="equation"><a id="idm269997284096"></a><p class="title"><strong>Equation 22.8.
657
Probability Probe Sequence in Some Bin
658
</strong></p><div class="equation-contents"><span class="mathphrase">
659
P( exists<sub>i</sub> l<sub>i</sub> ≥ k ) =
661
a resize is needed, and if so, what is the new size (points D
662
to G); following the resize, it notifies the policy that a
663
resize has completed (point H); finally, the element is
664
- 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
665
+ 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
666
decomposed to a size policy and a trigger policy. Consequently,
667
the library contains a single class for instantiating a resize
668
policy: <code class="classname">hash_standard_resize_policy</code>
670
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>)
671
to these policies.</p><p>The two graphics immediately below show sequence diagrams
672
illustrating the interaction between the standard resize policy
673
- 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
674
- 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
675
+ 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
676
+ 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
677
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
678
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>
679
implements a load check trigger policy.</p></li><li class="listitem"><p><code class="classname">cc_hash_max_collision_check_resize_trigger</code>
681
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
682
each node the size of the sub-tree rooted at the node; the
683
second stores at each node the maximal endpoint of the
684
- 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
685
+ 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
686
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
687
should be (if any).</p></li><li class="listitem"><p>Various operations can invalidate node
688
invariants. The graphic below shows how a right rotation,
690
metadata.</p></li><li class="listitem"><p>It is not feasible to know in advance which methods trees
691
can support. Besides the usual <code class="classname">find</code> method, the
692
first tree can support a <code class="classname">find_by_order</code> method, while
693
- 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:
694
+ 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:
695
node iterators, and template-template node updater
696
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
697
types, <code class="classname">const_node_iterator</code>
699
<code class="classname">node_update</code> class, and publicly subclasses
700
<code class="classname">node_update</code>. The graphic below shows this
701
scheme, as well as some predefined policies (which are explained
702
- 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
703
+ 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
704
<code class="classname">Node_Update</code>) must define <code class="classname">metadata_type</code> as
705
the type of metadata it requires. For order statistics,
706
e.g., <code class="classname">metadata_type</code> might be <code class="classname">size_t</code>.
708
<code class="classname">nd_it</code>. For example, say node x in the
709
graphic below label A has an invalid invariant, but its' children,
710
y and z have valid invariants. After the invocation, all three
711
- 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,
712
+ 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,
713
it invokes this method in its <code class="classname">node_update</code> base to
714
restore the invariant. For example, the graphic below shows
715
an <code class="function">insert</code> operation (point A); the tree performs some
717
C, and D). (It is well known that any <code class="function">insert</code>,
718
<code class="function">erase</code>, <code class="function">split</code> or <code class="function">join</code>, can restore
719
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>)
720
- .</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
721
+ .</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
722
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
723
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
724
tree?</p></li><li class="listitem"><p>How can the following cyclic dependency be resolved?
726
node's metadata (this is halting reducible). In the graphic
727
below, assume the shaded node is inserted. The tree would have
728
to traverse the useless path shown to the root, applying
729
- 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>
730
+ 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>
731
solves both these problems. The tree detects that node
732
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.
733
It is possible to split a tree so that it passes
734
@@ -1071,7 +1071,7 @@
735
sub-tree with leafs "a" and "as". The maximal common prefix is
736
"a". The internal node contains, consequently, to const
737
iterators, one pointing to <code class="varname">'a'</code>, and the other to
738
- <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
739
+ <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
740
tree-based containers. There are two minor
741
differences, though, which, unfortunately, thwart sharing them
742
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
743
@@ -1080,7 +1080,7 @@
744
parametrized by <code class="classname">Cmp_Fn</code>.</p></li><li class="listitem"><p>Tree-based containers store values in all nodes, while
745
trie-based containers (at least in this implementation) store
746
values in leafs.</p></li></ol></div><p>The graphic below shows the scheme, as well as some predefined
747
- 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
748
+ 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
749
updating policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
750
<code class="classname">trie_order_statistics_node_update</code>
751
supports order statistics.
752
@@ -1128,7 +1128,7 @@
753
simple list of integer keys. If we search for the integer 6, we
754
are paying an overhead: the link with key 6 is only the fifth
755
link; if it were the first link, it could be accessed
756
- 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
757
+ 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
758
accessed. They try to determine, by the access history, which
759
keys to move to the front of the list. Some of these algorithms
760
require adding some metadata alongside each entry.</p><p>For example, in the graphic below label A shows the counter
761
@@ -1138,7 +1138,7 @@
762
predetermined value, say 10, as shown in label C, the count is set
763
to 0 and the node is moved to the front of the list, as in label
765
- </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
766
+ </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
767
implementing any algorithm moving nodes to the front of the
768
list (policies implementing algorithms interchanging nodes are
769
unsupported).</p><p>Associative containers based on lists are parametrized by a
770
@@ -1310,7 +1310,7 @@
771
sequence; the second uses a tree (or forest of trees), which is
772
typically less structured than an associative container's tree;
773
the third simply uses an associative container. These are
774
- 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
775
+ 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
776
from a priority queue must incur a logarithmic expense (in the
777
amortized sense). Any priority queue implementation that would
778
avoid this, would violate known bounds on comparison-based
779
@@ -1390,7 +1390,7 @@
780
container <code class="classname">Cntnr</code>, the tag of the underlying
781
data structure can be found via <code class="classname">typename
782
Cntnr::container_category</code>; this is one of the possible tags shown in the graphic below.
783
- </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
784
+ </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
785
container type for its attributes. Given any container
786
<code class="classname">Cntnr</code>, then </p><pre class="programlisting">__gnu_pbds::container_traits<Cntnr></pre><p>
787
is a traits class identifying the properties of the
788
Index: libstdc++-v3/doc/html/manual/using.html
789
===================================================================
790
--- a/src/libstdc++-v3/doc/html/manual/using.html (.../tags/gcc_4_8_2_release)
791
+++ b/src/libstdc++-v3/doc/html/manual/using.html (.../branches/gcc-4_8-branch)
793
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
794
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
795
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
798
-</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>
799
+</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>
800
The set of features available in the GNU C++ library is shaped
802
several <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Invoking-GCC.html" target="_top">GCC
804
enumerated and detailed in the table below.
806
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.
807
- </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>,
808
+ </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>,
809
<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>
810
\ No newline at end of file
811
Index: libstdc++-v3/doc/html/manual/profile_mode_impl.html
812
===================================================================
813
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_impl.html (.../tags/gcc_4_8_2_release)
814
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_impl.html (.../branches/gcc-4_8-branch)
816
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
817
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
818
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
819
Accurate stack traces are needed during profiling since we group events by
820
call context and dynamic instance. Without accurate traces, diagnostics
821
may be hard to interpret. For instance, when giving advice to the user
822
Index: libstdc++-v3/doc/html/manual/ext_containers.html
823
===================================================================
824
--- a/src/libstdc++-v3/doc/html/manual/ext_containers.html (.../tags/gcc_4_8_2_release)
825
+++ b/src/libstdc++-v3/doc/html/manual/ext_containers.html (.../branches/gcc-4_8-branch)
827
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
828
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
829
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
832
-</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
833
+</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
834
been made with containers. Those dealing with older SGI-style
835
allocators are dealt with elsewhere. The remaining ones all deal
837
Index: libstdc++-v3/doc/html/manual/ext_concurrency_use.html
838
===================================================================
839
--- a/src/libstdc++-v3/doc/html/manual/ext_concurrency_use.html (.../tags/gcc_4_8_2_release)
840
+++ b/src/libstdc++-v3/doc/html/manual/ext_concurrency_use.html (.../branches/gcc-4_8-branch)
842
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
843
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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:
844
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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:
845
</p><pre class="programlisting">
846
#include <ext/concurrence.h>
848
Index: libstdc++-v3/doc/html/manual/ext_io.html
849
===================================================================
850
--- a/src/libstdc++-v3/doc/html/manual/ext_io.html (.../tags/gcc_4_8_2_release)
851
+++ b/src/libstdc++-v3/doc/html/manual/ext_io.html (.../branches/gcc-4_8-branch)
853
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
854
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
855
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
858
-</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>
859
+</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>
860
Extensions allowing <code class="code">filebuf</code>s to be constructed from
861
"C" types like FILE*s and file descriptors.
862
</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
863
Index: libstdc++-v3/doc/html/manual/termination.html
864
===================================================================
865
--- a/src/libstdc++-v3/doc/html/manual/termination.html (.../tags/gcc_4_8_2_release)
866
+++ b/src/libstdc++-v3/doc/html/manual/termination.html (.../branches/gcc-4_8-branch)
868
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
869
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
870
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
873
</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>
874
Index: libstdc++-v3/doc/html/manual/using_macros.html
875
===================================================================
876
--- a/src/libstdc++-v3/doc/html/manual/using_macros.html (.../tags/gcc_4_8_2_release)
877
+++ b/src/libstdc++-v3/doc/html/manual/using_macros.html (.../branches/gcc-4_8-branch)
879
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
880
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
881
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
882
All library macros begin with <code class="code">_GLIBCXX_</code>.
884
Furthermore, all pre-processor macros, switches, and
885
Index: libstdc++-v3/doc/html/manual/concurrency.html
886
===================================================================
887
--- a/src/libstdc++-v3/doc/html/manual/concurrency.html (.../tags/gcc_4_8_2_release)
888
+++ b/src/libstdc++-v3/doc/html/manual/concurrency.html (.../branches/gcc-4_8-branch)
890
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
891
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
892
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
895
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="atomics.html">Prev</a> </td><th width="60%" align="center">Part II.
898
</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.
900
- <a id="idp16404464" class="indexterm"></a>
901
-</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>
902
+ <a id="idm269999126816" class="indexterm"></a>
903
+</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>
904
Facilities for concurrent operation, and control thereof.
905
</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>
906
All items are declared in one of four standard header files.
907
Index: libstdc++-v3/doc/html/manual/ext_utilities.html
908
===================================================================
909
--- a/src/libstdc++-v3/doc/html/manual/ext_utilities.html (.../tags/gcc_4_8_2_release)
910
+++ b/src/libstdc++-v3/doc/html/manual/ext_utilities.html (.../branches/gcc-4_8-branch)
912
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
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>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.
914
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
917
</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>
918
Index: libstdc++-v3/doc/html/manual/policy_data_structures.html
919
===================================================================
920
--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures.html (.../tags/gcc_4_8_2_release)
921
+++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures.html (.../branches/gcc-4_8-branch)
923
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
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 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.
925
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
928
-</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">
929
+</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">
930
Configuring via Template Parameters
931
</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
932
Querying Container Attributes
934
these invariants, one must supply some policy that is aware
935
of these changes. Without this, it would be better to use a
936
linked list (in itself very efficient for these purposes).
937
- </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>
938
+ </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>
939
The standard C++ library contains associative containers based on
940
red-black trees and collision-chaining hash tables. These are
941
very useful, but they are not ideal for all types of
944
The figure below shows the different underlying data structures
945
currently supported in this library.
946
- </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>
947
+ </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>
948
A shows a collision-chaining hash-table, B shows a probing
949
hash-table, C shows a red-black tree, D shows a splay tree, E shows
950
a tree based on an ordered vector(implicit in the order of the
952
no guarantee that the elements traversed will coincide with the
953
<span class="emphasis"><em>logical</em></span> elements between 1 and 5, as in
955
- </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>
956
+ </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>
957
In our opinion, this problem is not caused just because
958
red-black trees are order preserving while
959
collision-chaining hash tables are (generally) not - it
961
list, as in the graphic below, label B. Here the iterators are as
962
light as can be, but the hash-table's operations are more
964
- </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>
965
+ </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>
966
It should be noted that containers based on collision-chaining
967
hash-tables are not the only ones with this type of behavior;
968
many other self-organizing data structures display it as well.
970
container. The graphic below shows three cases: A1 and A2 show
971
a red-black tree; B1 and B2 show a probing hash-table; C1 and C2
972
show a collision-chaining hash table.
973
- </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>
974
+ </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>
975
Erasing 5 from A1 yields A2. Clearly, an iterator to 3 can
976
be de-referenced and incremented. The sequence of iterators
977
changed, but in a way that is well-defined by the interface.
979
typically less structured than an associative container's tree;
980
the third simply uses an associative container. These are
981
shown in the figure below with labels A1 and A2, B, and C.
982
- </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>
983
+ </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>
984
No single implementation can completely replace any of the
985
others. Some have better <code class="function">push</code>
986
and <code class="function">pop</code> amortized performance, some have
987
@@ -1098,7 +1098,7 @@
988
</span>. </span><span class="publisher"><span class="publishername">
989
Proceedings of International Conference on Very Large Data Bases
990
. </span></span></p></div><div class="biblioentry"><a id="biblio.maverik_lowerbounds"></a><p>[biblio.maverik_lowerbounds] <span class="title"><em>
991
- <a class="link" href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps" target="_top">
992
+ <a class="link" href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps/" target="_top">
993
Deamortization - Part 2: Binomial Heaps
995
</em>. </span><span class="date">
996
@@ -1190,7 +1190,7 @@
997
</span>. </span><span class="publisher"><span class="publishername">
998
Addison-Wesley Publishing Company
999
. </span></span></p></div><div class="biblioentry"><a id="biblio.nelson96stlpq"></a><p>[biblio.nelson96stlpq] <span class="title"><em>
1000
- <a class="link" href="http://www.dogma.net/markn/articles/pq_stl/priority.htm" target="_top">Priority Queues and the STL
1001
+ <a class="link" href="http://marknelson.us/1996/01/01/priority-queues/" target="_top">Priority Queues and the STL
1003
</em>. </span><span class="date">
1005
Index: libstdc++-v3/doc/html/manual/ext_iterators.html
1006
===================================================================
1007
--- a/src/libstdc++-v3/doc/html/manual/ext_iterators.html (.../tags/gcc_4_8_2_release)
1008
+++ b/src/libstdc++-v3/doc/html/manual/ext_iterators.html (.../branches/gcc-4_8-branch)
1010
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1011
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1012
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1015
</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
1016
Index: libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html
1017
===================================================================
1018
--- a/src/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html (.../tags/gcc_4_8_2_release)
1019
+++ b/src/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html (.../branches/gcc-4_8-branch)
1021
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1022
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1023
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1024
The Free List Store (referred to as FLS for the remaining part of this
1025
document) is the Global memory pool that is shared by all instances of
1026
the bitmapped allocator instantiated for any type. This maintains a
1029
Consider a block of size 64 ints. In memory, it would look like this:
1030
(assume a 32-bit system where, size_t is a 32-bit entity).
1031
- </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>
1032
+ </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>
1033
The first Column(268) represents the size of the Block in bytes as
1034
seen by the Bitmap Allocator. Internally, a global free list is
1035
used to keep track of the free blocks used and given back by the
1036
Index: libstdc++-v3/doc/html/manual/appendix_contributing.html
1037
===================================================================
1038
--- a/src/libstdc++-v3/doc/html/manual/appendix_contributing.html (.../tags/gcc_4_8_2_release)
1039
+++ b/src/libstdc++-v3/doc/html/manual/appendix_contributing.html (.../branches/gcc-4_8-branch)
1041
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1042
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1043
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1046
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix.html">Prev</a> </td><th width="60%" align="center">Part IV.
1049
</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>
1051
- <a id="idp21875168" class="indexterm"></a>
1052
-</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>
1053
+ <a id="idm269993657472" class="indexterm"></a>
1054
+</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>
1055
The GNU C++ Library follows an open development model. Active
1056
contributors are assigned maintainer-ship responsibility, and given
1057
write access to the source repository. First time contributors
1059
for this group is quite useful.
1060
</p></li><li class="listitem"><p>
1062
- the <a class="link" href="http://www.gnu.org/prep/standards" target="_top">GNU
1063
+ the <a class="link" href="http://www.gnu.org/prep/standards/" target="_top">GNU
1064
Coding Standards</a>, and chuckle when you hit the part
1065
about <span class="quote">“<span class="quote">Using Languages Other Than C</span>”</span>.
1066
</p></li><li class="listitem"><p>
1067
Index: libstdc++-v3/doc/html/manual/parallel_mode_test.html
1068
===================================================================
1069
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode_test.html (.../tags/gcc_4_8_2_release)
1070
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode_test.html (.../branches/gcc-4_8-branch)
1072
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1073
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1074
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1075
Both the normal conformance and regression tests and the
1076
supplemental performance tests work.
1078
Index: libstdc++-v3/doc/html/manual/profile_mode.html
1079
===================================================================
1080
--- a/src/libstdc++-v3/doc/html/manual/profile_mode.html (.../tags/gcc_4_8_2_release)
1081
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode.html (.../branches/gcc-4_8-branch)
1083
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1084
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1085
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1088
-</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>
1089
+</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>
1090
<span class="emphasis"><em>Goal: </em></span>Give performance improvement advice based on
1091
recognition of suboptimal usage patterns of the standard library.
1095
(Environment variable not supported.)
1096
</p></li></ul></div><p>
1097
- </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">
1098
+ </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">
1099
Perflint: A Context Sensitive Performance Advisor for C++ Programs
1100
</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">
1101
Proceedings of the 2009 International Symposium on Code Generation
1102
Index: libstdc++-v3/doc/html/manual/stringstreams.html
1103
===================================================================
1104
--- a/src/libstdc++-v3/doc/html/manual/stringstreams.html (.../tags/gcc_4_8_2_release)
1105
+++ b/src/libstdc++-v3/doc/html/manual/stringstreams.html (.../branches/gcc-4_8-branch)
1107
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1108
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1109
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1112
</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>
1113
Index: libstdc++-v3/doc/html/manual/traits.html
1114
===================================================================
1115
--- a/src/libstdc++-v3/doc/html/manual/traits.html (.../tags/gcc_4_8_2_release)
1116
+++ b/src/libstdc++-v3/doc/html/manual/traits.html (.../branches/gcc-4_8-branch)
1118
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1119
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1120
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1123
</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>
1124
Index: libstdc++-v3/doc/html/manual/policy_data_structures_ack.html
1125
===================================================================
1126
--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html (.../tags/gcc_4_8_2_release)
1127
+++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html (.../branches/gcc-4_8-branch)
1129
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1130
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1131
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1132
Written by Ami Tavory and Vladimir Dreizin (IBM Haifa Research
1133
Laboratories), and Benjamin Kosnik (Red Hat).
1135
- This library was partially written at
1136
- <a class="link" href="http://www.haifa.il.ibm.com/" target="_top">IBM's Haifa Research Labs</a>.
1137
+ This library was partially written at IBM's Haifa Research Labs.
1138
It is based heavily on policy-based design and uses many useful
1139
techniques from Modern C++ Design: Generic Programming and Design
1140
Patterns Applied by Andrei Alexandrescu.
1141
Index: libstdc++-v3/doc/html/manual/associative.html
1142
===================================================================
1143
--- a/src/libstdc++-v3/doc/html/manual/associative.html (.../tags/gcc_4_8_2_release)
1144
+++ b/src/libstdc++-v3/doc/html/manual/associative.html (.../branches/gcc-4_8-branch)
1146
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1147
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1148
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1151
</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>
1152
Index: libstdc++-v3/doc/html/manual/ext_concurrency.html
1153
===================================================================
1154
--- a/src/libstdc++-v3/doc/html/manual/ext_concurrency.html (.../tags/gcc_4_8_2_release)
1155
+++ b/src/libstdc++-v3/doc/html/manual/ext_concurrency.html (.../branches/gcc-4_8-branch)
1157
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1158
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1159
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1162
-</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>
1163
+</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>
1164
contains all the higher-level
1165
constructs for playing with threads. In contrast to the atomics layer,
1166
the concurrence layer consists largely of types. All types are defined within <code class="code">namespace __gnu_cxx</code>.
1167
Index: libstdc++-v3/doc/html/manual/support.html
1168
===================================================================
1169
--- a/src/libstdc++-v3/doc/html/manual/support.html (.../tags/gcc_4_8_2_release)
1170
+++ b/src/libstdc++-v3/doc/html/manual/support.html (.../branches/gcc-4_8-branch)
1172
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1173
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1174
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1177
</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.
1180
</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.
1182
- <a id="idp13745936" class="indexterm"></a>
1183
-</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>
1184
+ <a id="idm270001786944" class="indexterm"></a>
1185
+</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>
1186
This part deals with the functions called and objects created
1187
automatically during the course of a program's existence.
1189
Index: libstdc++-v3/doc/html/manual/bitmap_allocator.html
1190
===================================================================
1191
--- a/src/libstdc++-v3/doc/html/manual/bitmap_allocator.html (.../tags/gcc_4_8_2_release)
1192
+++ b/src/libstdc++-v3/doc/html/manual/bitmap_allocator.html (.../branches/gcc-4_8-branch)
1194
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1195
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1196
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1199
-</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>
1200
+</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>
1201
</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>
1202
As this name suggests, this allocator uses a bit-map to keep track
1203
of the used and unused memory locations for its book-keeping
1204
Index: libstdc++-v3/doc/html/manual/license.html
1205
===================================================================
1206
--- a/src/libstdc++-v3/doc/html/manual/license.html (.../tags/gcc_4_8_2_release)
1207
+++ b/src/libstdc++-v3/doc/html/manual/license.html (.../branches/gcc-4_8-branch)
1209
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1210
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1211
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1212
There are two licenses affecting GNU libstdc++: one for the code,
1213
and one for the documentation.
1215
Index: libstdc++-v3/doc/html/manual/numerics.html
1216
===================================================================
1217
--- a/src/libstdc++-v3/doc/html/manual/numerics.html (.../tags/gcc_4_8_2_release)
1218
+++ b/src/libstdc++-v3/doc/html/manual/numerics.html (.../branches/gcc-4_8-branch)
1220
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1221
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1222
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1225
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><th width="60%" align="center">Part II.
1228
</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.
1230
- <a id="idp16214640" class="indexterm"></a>
1231
-</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>
1232
+ <a id="idm269999316576" class="indexterm"></a>
1233
+</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>
1234
</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>
1235
</p><p>Using <code class="code">complex<></code> becomes even more comple- er, sorry,
1236
<span class="emphasis"><em>complicated</em></span>, with the not-quite-gratuitously-incompatible
1237
Index: libstdc++-v3/doc/html/manual/using_exceptions.html
1238
===================================================================
1239
--- a/src/libstdc++-v3/doc/html/manual/using_exceptions.html (.../tags/gcc_4_8_2_release)
1240
+++ b/src/libstdc++-v3/doc/html/manual/using_exceptions.html (.../branches/gcc-4_8-branch)
1242
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
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>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>
1244
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1245
The C++ language provides language support for stack unwinding
1246
with <code class="literal">try</code> and <code class="literal">catch</code> blocks and
1247
the <code class="literal">throw</code> keyword.
1251
{ this->_M_setstate(ios_base::badbit); }
1252
-</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>
1253
+</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>
1254
<a class="link" href="http://www.opengroup.org/austin/" target="_top">
1255
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
1257
@@ -274,39 +274,39 @@
1258
. </span><span class="copyright">Copyright © 2008
1259
The Open Group/The Institute of Electrical and Electronics
1261
- . </span></p></div><div class="biblioentry"><a id="idp13647696"></a><p><span class="title"><em>
1262
+ . </span></p></div><div class="biblioentry"><a id="idm270001885328"></a><p><span class="title"><em>
1263
<a class="link" href="http://www.boost.org/community/error_handling.html" target="_top">
1264
Error and Exception Handling
1266
</em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams </span>. </span><span class="publisher"><span class="publishername">
1268
- . </span></span></p></div><div class="biblioentry"><a id="idp13651392"></a><p><span class="title"><em>
1269
+ . </span></span></p></div><div class="biblioentry"><a id="idm270001881632"></a><p><span class="title"><em>
1270
<a class="link" href="http://www.boost.org/community/exception_safety.html" target="_top">
1271
Exception-Safety in Generic Components
1273
</em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams</span>. </span><span class="publisher"><span class="publishername">
1275
- . </span></span></p></div><div class="biblioentry"><a id="idp13655104"></a><p><span class="title"><em>
1276
+ . </span></span></p></div><div class="biblioentry"><a id="idm270001877920"></a><p><span class="title"><em>
1277
<a class="link" href="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf" target="_top">
1278
Standard Library Exception Policy
1280
</em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
1282
- . </span></span></p></div><div class="biblioentry"><a id="idp13658816"></a><p><span class="title"><em>
1283
+ . </span></span></p></div><div class="biblioentry"><a id="idm270001874208"></a><p><span class="title"><em>
1284
<a class="link" href="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html" target="_top">
1285
ia64 c++ abi exception handling
1287
</em>. </span><span class="author"><span class="firstname">Richard</span> <span class="surname">Henderson</span>. </span><span class="publisher"><span class="publishername">
1289
- . </span></span></p></div><div class="biblioentry"><a id="idp13662512"></a><p><span class="title"><em>
1290
+ . </span></span></p></div><div class="biblioentry"><a id="idm270001870512"></a><p><span class="title"><em>
1291
<a class="link" href="http://www.research.att.com/~bs/3rd_safe.pdf" target="_top">
1292
Appendix E: Standard-Library Exception Safety
1294
- </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">
1295
+ </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">
1297
</em>. </span><span class="pagenums">
1298
Exception-Safety Issues and Techniques
1299
- . </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>
1300
+ . </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>
1301
<a class="link" href="http://gcc.gnu.org/PR25191" target="_top">
1302
GCC Bug 25191: exception_defines.h #defines try/catch
1304
Index: libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
1305
===================================================================
1306
--- a/src/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html (.../tags/gcc_4_8_2_release)
1307
+++ b/src/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html (.../branches/gcc-4_8-branch)
1309
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1310
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1311
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1312
For a given container type in this library, the test creates
1313
an object of the container type and an object of the
1314
corresponding standard type (e.g., <code class="classname">std::set</code>). It
1315
Index: libstdc++-v3/doc/html/manual/parallel_mode_design.html
1316
===================================================================
1317
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode_design.html (.../tags/gcc_4_8_2_release)
1318
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode_design.html (.../branches/gcc-4_8-branch)
1320
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1321
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1322
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1323
</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>
1324
All parallel algorithms are intended to have signatures that are
1325
equivalent to the ISO C++ algorithms replaced. For instance, the
1326
Index: libstdc++-v3/doc/html/manual/abi.html
1327
===================================================================
1328
--- a/src/libstdc++-v3/doc/html/manual/abi.html (.../tags/gcc_4_8_2_release)
1329
+++ b/src/libstdc++-v3/doc/html/manual/abi.html (.../branches/gcc-4_8-branch)
1331
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1332
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1333
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1334
Porting and Maintenance
1336
</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>
1337
@@ -493,39 +493,39 @@
1338
<a class="link" href="http://www.codesourcery.com/cxx-abi/" target="_top">
1341
- </em>. </span></p></div><div class="biblioentry"><a id="idp22945936"></a><p><span class="title"><em>
1342
+ </em>. </span></p></div><div class="biblioentry"><a id="idm269992586624"></a><p><span class="title"><em>
1343
<a class="link" href="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm" target="_top">
1344
Intel Compilers for Linux Compatibility with the GNU Compilers
1346
- </em>. </span></p></div><div class="biblioentry"><a id="idp22947792"></a><p><span class="title"><em>
1347
+ </em>. </span></p></div><div class="biblioentry"><a id="idm269992584768"></a><p><span class="title"><em>
1348
<a class="link" href="http://download.oracle.com/docs/cd/E19963-01/html/819-0690/index.html" target="_top">
1349
Linker and Libraries Guide (document 819-0690)
1351
- </em>. </span></p></div><div class="biblioentry"><a id="idp22949632"></a><p><span class="title"><em>
1352
+ </em>. </span></p></div><div class="biblioentry"><a id="idm269992582928"></a><p><span class="title"><em>
1353
<a class="link" href="http://download.oracle.com/docs/cd/E19422-01/819-3689/index.html" target="_top">
1354
Sun Studio 11: C++ Migration Guide (document 819-3689)
1356
- </em>. </span></p></div><div class="biblioentry"><a id="idp22951488"></a><p><span class="title"><em>
1357
+ </em>. </span></p></div><div class="biblioentry"><a id="idm269992581072"></a><p><span class="title"><em>
1358
<a class="link" href="http://www.akkadia.org/drepper/dsohowto.pdf" target="_top">
1359
How to Write Shared Libraries
1361
- </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>
1362
+ </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>
1363
<a class="link" href="http://www.arm.com/miscPDFs/8033.pdf" target="_top">
1364
C++ ABI for the ARM Architecture
1366
- </em>. </span></p></div><div class="biblioentry"><a id="idp22956736"></a><p><span class="title"><em>
1367
+ </em>. </span></p></div><div class="biblioentry"><a id="idm269992575824"></a><p><span class="title"><em>
1368
<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html" target="_top">
1369
Dynamic Shared Objects: Survey and Issues
1371
</em>. </span><span class="subtitle">
1373
- . </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>
1374
+ . </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>
1375
<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html" target="_top">
1376
Versioning With Namespaces
1378
</em>. </span><span class="subtitle">
1380
- . </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>
1381
+ . </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>
1382
<a class="link" href="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf" target="_top">
1383
Binary Compatibility of Shared Libraries Implemented in C++
1384
on GNU/Linux Systems
1385
Index: libstdc++-v3/doc/html/manual/intro.html
1386
===================================================================
1387
--- a/src/libstdc++-v3/doc/html/manual/intro.html (.../tags/gcc_4_8_2_release)
1388
+++ b/src/libstdc++-v3/doc/html/manual/intro.html (.../branches/gcc-4_8-branch)
1390
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
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>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.
1392
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1395
</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.
1397
- <a id="idp9040416" class="indexterm"></a>
1398
-</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>
1399
\ No newline at end of file
1400
+ <a id="idm270013458800" class="indexterm"></a>
1401
+</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>
1402
\ No newline at end of file
1403
Index: libstdc++-v3/doc/html/manual/profile_mode_api.html
1404
===================================================================
1405
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_api.html (.../tags/gcc_4_8_2_release)
1406
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_api.html (.../branches/gcc-4_8-branch)
1408
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1409
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1410
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1411
Many large projects use their own data structures instead of the ones in the
1412
standard library. If these data structures are similar in functionality
1413
to the standard library, they can be instrumented with the same hooks
1414
Index: libstdc++-v3/doc/html/manual/atomics.html
1415
===================================================================
1416
--- a/src/libstdc++-v3/doc/html/manual/atomics.html (.../tags/gcc_4_8_2_release)
1417
+++ b/src/libstdc++-v3/doc/html/manual/atomics.html (.../branches/gcc-4_8-branch)
1419
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1420
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1421
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1424
</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.
1427
</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.
1429
- <a id="idp16390640" class="indexterm"></a>
1430
-</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>
1431
+ <a id="idm269999140704" class="indexterm"></a>
1432
+</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>
1433
Facilities for atomic operations.
1434
</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>
1435
All items are declared in the standard header
1436
Index: libstdc++-v3/doc/html/manual/internals.html
1437
===================================================================
1438
--- a/src/libstdc++-v3/doc/html/manual/internals.html (.../tags/gcc_4_8_2_release)
1439
+++ b/src/libstdc++-v3/doc/html/manual/internals.html (.../branches/gcc-4_8-branch)
1441
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1442
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1443
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1444
Porting and Maintenance
1446
</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>
1447
Index: libstdc++-v3/doc/html/manual/policy_data_structures_using.html
1448
===================================================================
1449
--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures_using.html (.../tags/gcc_4_8_2_release)
1450
+++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures_using.html (.../branches/gcc-4_8-branch)
1452
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1453
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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
1454
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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
1455
other libraries except the standard C++ library . All classes are
1456
defined in namespace <code class="code">__gnu_pbds</code>. The library internally
1457
uses macros beginning with <code class="code">PB_DS</code>, but
1459
In addition, there are the following diagnostics classes,
1460
used to report errors specific to this library's data
1462
- </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>
1463
+ </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>
1464
For the most part, the policy-based containers containers in
1465
namespace <code class="literal">__gnu_pbds</code> have the same interface as
1466
the equivalent containers in the standard C++ library, except for
1467
Index: libstdc++-v3/doc/html/manual/bugs.html
1468
===================================================================
1469
--- a/src/libstdc++-v3/doc/html/manual/bugs.html (.../tags/gcc_4_8_2_release)
1470
+++ b/src/libstdc++-v3/doc/html/manual/bugs.html (.../branches/gcc-4_8-branch)
1472
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1473
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1474
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1475
Information on known bugs, details on efforts to fix them, and
1476
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>,
1477
with the category set to <code class="literal">libstdc++</code>.
1478
Index: libstdc++-v3/doc/html/manual/parallel_mode_using.html
1479
===================================================================
1480
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode_using.html (.../tags/gcc_4_8_2_release)
1481
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode_using.html (.../branches/gcc-4_8-branch)
1483
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1484
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1485
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1486
Any use of parallel functionality requires additional compiler
1487
and runtime support, in particular support for OpenMP. Adding this support is
1488
not difficult: just compile your application with the compiler
1490
flags for atomic operations.)
1491
</p><p> The following table provides the names and headers of all the
1492
parallel algorithms that can be used in a similar manner:
1493
-</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>
1494
\ No newline at end of file
1495
+</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>
1496
\ No newline at end of file
1497
Index: libstdc++-v3/doc/html/manual/ext_numerics.html
1498
===================================================================
1499
--- a/src/libstdc++-v3/doc/html/manual/ext_numerics.html (.../tags/gcc_4_8_2_release)
1500
+++ b/src/libstdc++-v3/doc/html/manual/ext_numerics.html (.../branches/gcc-4_8-branch)
1502
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1503
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1504
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1507
</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>,
1508
Index: libstdc++-v3/doc/html/manual/parallel_mode_semantics.html
1509
===================================================================
1510
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html (.../tags/gcc_4_8_2_release)
1511
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html (.../branches/gcc-4_8-branch)
1513
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1514
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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,
1515
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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,
1516
i.e. user-defined functors must not throw exceptions.
1517
Also, the order of execution is not guaranteed for some functions, of course.
1518
Therefore, user-defined functors should not have any concurrent side effects.
1519
Index: libstdc++-v3/doc/html/manual/std_contents.html
1520
===================================================================
1521
--- a/src/libstdc++-v3/doc/html/manual/std_contents.html (.../tags/gcc_4_8_2_release)
1522
+++ b/src/libstdc++-v3/doc/html/manual/std_contents.html (.../branches/gcc-4_8-branch)
1524
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1525
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1526
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1528
</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.
1530
- </h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="chapter"><a href="support.html">4.
1531
+ </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.
1534
</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.
1536
</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.
1539
-</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.
1540
+</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.
1543
</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.
1546
-</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.
1547
+</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.
1550
</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.
1551
Index: libstdc++-v3/doc/html/manual/appendix.html
1552
===================================================================
1553
--- a/src/libstdc++-v3/doc/html/manual/appendix.html (.../tags/gcc_4_8_2_release)
1554
+++ b/src/libstdc++-v3/doc/html/manual/appendix.html (.../branches/gcc-4_8-branch)
1556
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1557
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1558
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1560
</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.
1562
-</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.
1563
+</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.
1566
</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.
1567
Index: libstdc++-v3/doc/html/manual/memory.html
1568
===================================================================
1569
--- a/src/libstdc++-v3/doc/html/manual/memory.html (.../tags/gcc_4_8_2_release)
1570
+++ b/src/libstdc++-v3/doc/html/manual/memory.html (.../branches/gcc-4_8-branch)
1572
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
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>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.
1574
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1577
</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>
1579
or loading and unloading shared objects in memory. As such, using
1580
caching allocators on systems that do not support
1581
<code class="function">abi::__cxa_atexit</code> is not recommended.
1582
- </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>
1583
+ </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>
1584
The only allocator interface that
1585
is supported is the standard C++ interface. As such, all STL
1586
containers have been adjusted, and all external allocators have
1589
The base class that <code class="classname">allocator</code> is derived from
1590
may not be user-configurable.
1591
-</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>
1592
+</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>
1593
It's difficult to pick an allocation strategy that will provide
1594
maximum utility, without excessively penalizing some behavior. In
1595
fact, it's difficult just deciding which typical actions to measure
1597
The current default choice for
1598
<code class="classname">allocator</code> is
1599
<code class="classname">__gnu_cxx::new_allocator</code>.
1600
- </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>
1601
+ </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>
1602
In use, <code class="classname">allocator</code> may allocate and
1603
deallocate using implementation-specific strategies and
1604
heuristics. Because of this, a given call to an allocator object's
1605
@@ -309,33 +309,33 @@
1606
of the used and unused memory locations. It has its own
1607
<a class="link" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator">chapter</a>
1608
in the documentation.
1609
- </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">
1610
+ </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">
1611
ISO/IEC 14882:1998 Programming languages - C++
1614
- <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="idp13994688"></a><p><span class="title"><em>
1615
- <a class="link" href="http://www.drdobbs.com/cpp/184403759" target="_top">
1616
+ <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="idm270000082384"></a><p><span class="title"><em>
1617
+ <a class="link" href="http://www.drdobbs.com/the-standard-librarian-what-are-allocato/184403759" target="_top">
1618
The Standard Librarian: What Are Allocators Good For?
1620
</em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
1622
- . </span></span></p></div><div class="biblioentry"><a id="idp13998416"></a><p><span class="title"><em>
1623
+ . </span></span></p></div><div class="biblioentry"><a id="idm270000078608"></a><p><span class="title"><em>
1624
<a class="link" href="http://www.hoard.org/" target="_top">
1625
The Hoard Memory Allocator
1627
- </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>
1628
+ </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>
1629
<a class="link" href="http://people.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf" target="_top">
1630
Reconsidering Custom Memory Allocation
1632
- </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>
1633
+ </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>
1634
<a class="link" href="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html" target="_top">
1637
</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">
1639
- . </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">
1640
+ . </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">
1642
- . </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
1643
+ . </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
1644
happen with misuse of the <code class="classname">auto_ptr</code> class
1645
template (called <acronym class="acronym">AP</acronym> here) would take some
1646
time. Suffice it to say that the use of <acronym class="acronym">AP</acronym>
1648
Derived classes override those functions to destroy resources in a context
1649
where the correct dynamic type is known. This is an application of the
1650
technique known as type erasure.
1651
- </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>
1652
+ </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>
1653
A <code class="classname">shared_ptr<T></code> contains a pointer of
1654
type <span class="type">T*</span> and an object of type
1655
<code class="classname">__shared_count</code>. The shared_count contains a
1657
aliasing constructor, make_shared & allocate_shared. Additionally,
1658
the constructors taking <code class="classname">auto_ptr</code> parameters are
1659
deprecated in C++11 mode.
1660
- </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15534784"></a>Thread Safety</h5></div></div></div><p>
1661
+ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999996832"></a>Thread Safety</h5></div></div></div><p>
1663
-<a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
1664
+<a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
1665
Safety</a> section of the Boost shared_ptr documentation says "shared_ptr
1666
objects offer the same level of thread safety as built-in types."
1667
The implementation must ensure that concurrent updates to separate shared_ptr
1669
shared_ptr in libstdc++ the compiler and library are fixed, which
1670
makes things much simpler: we have an atomic CAS or we don't, see Lock
1671
Policy below for details.
1672
-</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>
1673
+</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>
1675
There is a single <code class="classname">_Sp_counted_base</code> class,
1676
which is a template parameterized on the enum
1678
<code class="filename">ext/atomicity.h</code>, which detect if the program
1679
is multi-threaded. If only one thread of execution exists in
1680
the program then less expensive non-atomic operations are used.
1681
- </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>,
1682
+ </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>,
1683
<code class="code">const_pointer_cast</code></span></dt><dd><p>
1684
As noted in N2351, these functions can be implemented non-intrusively using
1685
the alias constructor. However the aliasing constructor is only available
1686
@@ -611,13 +611,13 @@
1687
As well as the extra constructors, this implementation also needs some
1688
members of _Sp_counted_deleter to be protected where they could otherwise
1690
- </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>
1691
+ </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>
1692
Examples of use can be found in the testsuite, under
1693
<code class="filename">testsuite/tr1/2_general_utilities/shared_ptr</code>,
1694
<code class="filename">testsuite/20_util/shared_ptr</code>
1696
<code class="filename">testsuite/20_util/weak_ptr</code>.
1697
- </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15576640"></a>Unresolved Issues</h5></div></div></div><p>
1698
+ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999954912"></a>Unresolved Issues</h5></div></div></div><p>
1699
The <span class="emphasis"><em><code class="classname">shared_ptr</code> atomic access</em></span>
1700
clause in the C++11 standard is not implemented in GCC.
1702
@@ -658,25 +658,25 @@
1703
code to work with, Peter Dimov in particular for his help and
1704
invaluable advice on thread safety. Phillip Jordan and Paolo
1705
Carlini for the lock policy implementation.
1706
- </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>
1707
+ </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>
1708
<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm" target="_top">
1709
Improving shared_ptr for C++0x, Revision 2
1711
</em>. </span><span class="subtitle">
1713
- . </span></p></div><div class="biblioentry"><a id="idp15590224"></a><p><span class="title"><em>
1714
+ . </span></p></div><div class="biblioentry"><a id="idm269999941392"></a><p><span class="title"><em>
1715
<a class="link" href="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html" target="_top">
1716
C++ Standard Library Active Issues List
1718
</em>. </span><span class="subtitle">
1720
- . </span></p></div><div class="biblioentry"><a id="idp15592512"></a><p><span class="title"><em>
1721
+ . </span></p></div><div class="biblioentry"><a id="idm269999939104"></a><p><span class="title"><em>
1722
<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf" target="_top">
1723
Working Draft, Standard for Programming Language C++
1725
</em>. </span><span class="subtitle">
1727
- . </span></p></div><div class="biblioentry"><a id="idp15594816"></a><p><span class="title"><em>
1728
+ . </span></p></div><div class="biblioentry"><a id="idm269999936800"></a><p><span class="title"><em>
1729
<a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">
1730
Boost C++ Libraries documentation, shared_ptr
1732
Index: libstdc++-v3/doc/html/manual/api.html
1733
===================================================================
1734
--- a/src/libstdc++-v3/doc/html/manual/api.html (.../tags/gcc_4_8_2_release)
1735
+++ b/src/libstdc++-v3/doc/html/manual/api.html (.../branches/gcc-4_8-branch)
1737
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1738
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1739
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1740
Porting and Maintenance
1742
</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>
1744
<span class="type">__alloc</span> to select an underlying allocator that
1745
satisfied memory allocation requests. The selection of this
1746
underlying allocator was not user-configurable.
1747
- </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
1748
+ </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
1749
of available allocators. All of these new allocators are
1750
standard-style. The following table includes details, along with
1751
the first released version of GCC that included the extension allocator.
1752
- </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>
1753
+ </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>
1754
Debug mode first appears.
1756
Precompiled header support <acronym class="acronym">PCH</acronym> support.
1757
Index: libstdc++-v3/doc/html/manual/source_organization.html
1758
===================================================================
1759
--- a/src/libstdc++-v3/doc/html/manual/source_organization.html (.../tags/gcc_4_8_2_release)
1760
+++ b/src/libstdc++-v3/doc/html/manual/source_organization.html (.../branches/gcc-4_8-branch)
1762
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1763
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1764
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1767
</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>
1768
Index: libstdc++-v3/doc/html/manual/fstreams.html
1769
===================================================================
1770
--- a/src/libstdc++-v3/doc/html/manual/fstreams.html (.../tags/gcc_4_8_2_release)
1771
+++ b/src/libstdc++-v3/doc/html/manual/fstreams.html (.../branches/gcc-4_8-branch)
1773
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1774
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1775
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1778
</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>
1779
Index: libstdc++-v3/doc/html/manual/ext_demangling.html
1780
===================================================================
1781
--- a/src/libstdc++-v3/doc/html/manual/ext_demangling.html (.../tags/gcc_4_8_2_release)
1782
+++ b/src/libstdc++-v3/doc/html/manual/ext_demangling.html (.../branches/gcc-4_8-branch)
1784
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1785
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1786
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1789
</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>
1790
Index: libstdc++-v3/doc/html/manual/ext_preface.html
1791
===================================================================
1792
--- a/src/libstdc++-v3/doc/html/manual/ext_preface.html (.../tags/gcc_4_8_2_release)
1793
+++ b/src/libstdc++-v3/doc/html/manual/ext_preface.html (.../branches/gcc-4_8-branch)
1795
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1796
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1797
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1800
-</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>
1801
+</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>
1802
Here we will make an attempt at describing the non-Standard
1803
extensions to the library. Some of these are from older versions of
1804
standard library components, namely SGI's STL, and some of these are
1805
Index: libstdc++-v3/doc/html/manual/concept_checking.html
1806
===================================================================
1807
--- a/src/libstdc++-v3/doc/html/manual/concept_checking.html (.../tags/gcc_4_8_2_release)
1808
+++ b/src/libstdc++-v3/doc/html/manual/concept_checking.html (.../branches/gcc-4_8-branch)
1810
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1811
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1812
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1815
</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>
1816
Index: libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html
1817
===================================================================
1818
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html (.../tags/gcc_4_8_2_release)
1819
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html (.../branches/gcc-4_8-branch)
1821
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1822
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1823
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1824
In the ST example we never used the thread_id variable present in each block.
1825
Let's start by explaining the purpose of this in a MT application.
1827
Index: libstdc++-v3/doc/html/manual/ext_compile_checks.html
1828
===================================================================
1829
--- a/src/libstdc++-v3/doc/html/manual/ext_compile_checks.html (.../tags/gcc_4_8_2_release)
1830
+++ b/src/libstdc++-v3/doc/html/manual/ext_compile_checks.html (.../branches/gcc-4_8-branch)
1832
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
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>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.
1834
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1837
</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>
1838
Index: libstdc++-v3/doc/html/manual/strings.html
1839
===================================================================
1840
--- a/src/libstdc++-v3/doc/html/manual/strings.html (.../tags/gcc_4_8_2_release)
1841
+++ b/src/libstdc++-v3/doc/html/manual/strings.html (.../branches/gcc-4_8-branch)
1843
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
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>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.
1845
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1848
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="traits.html">Prev</a> </td><th width="60%" align="center">Part II.
1851
</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.
1853
- <a id="idp15603440" class="indexterm"></a>
1854
-</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>
1855
+ <a id="idm269999928112" class="indexterm"></a>
1856
+</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>
1857
Here are Standard, simple, and portable ways to perform common
1858
transformations on a <code class="code">string</code> instance, such as
1859
"convert to all upper case." The word transformations
1860
Index: libstdc++-v3/doc/html/manual/containers_and_c.html
1861
===================================================================
1862
--- a/src/libstdc++-v3/doc/html/manual/containers_and_c.html (.../tags/gcc_4_8_2_release)
1863
+++ b/src/libstdc++-v3/doc/html/manual/containers_and_c.html (.../branches/gcc-4_8-branch)
1865
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
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>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.
1867
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1870
</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>
1871
Index: libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html
1872
===================================================================
1873
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html (.../tags/gcc_4_8_2_release)
1874
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html (.../branches/gcc-4_8-branch)
1876
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1877
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1878
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
1879
The table below presents all the diagnostics we intend to implement.
1880
Each diagnostic has a corresponding compile time switch
1881
<code class="code">-D_GLIBCXX_PROFILE_<diagnostic></code>.
1883
A high accuracy means that the diagnostic is unlikely to be wrong.
1884
These grades are not perfect. They are just meant to guide users with
1885
specific needs or time budgets.
1886
- </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">
1887
+ </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">
1888
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">
1889
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">
1890
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">
1892
Quick Sort for a particular call context.
1893
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
1895
- <a class="link" href="http://portal.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
1896
+ <a class="link" href="https://dl.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
1897
A framework for adaptive algorithm selection in STAPL</a> and
1898
<a class="link" href="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4228227" target="_top">
1899
Optimizing Sorting with Machine Learning Algorithms</a>.
1901
Keep a shadow for each container. Record iterator dereferences and
1902
container member accesses. Issue advice for elements referenced by
1904
- See paper: <a class="link" href="http://portal.acm.org/citation.cfm?id=207110.207148" target="_top">
1905
+ See paper: <a class="link" href="https://dl.acm.org/citation.cfm?id=207110.207148" target="_top">
1906
The LRPD test: speculative run-time parallelization of loops with
1907
privatization and reduction parallelization</a>.
1908
</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
1909
Index: libstdc++-v3/doc/html/manual/ext_concurrency_impl.html
1910
===================================================================
1911
--- a/src/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html (.../tags/gcc_4_8_2_release)
1912
+++ b/src/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html (.../branches/gcc-4_8-branch)
1914
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1915
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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
1916
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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
1917
implemented via compiler intrinsics (if the underlying host is
1918
capable) or by library fallbacks.</p><p>Compiler intrinsics (builtins) are always preferred. However, as
1919
the compiler builtins for atomics are not universally implemented,
1920
Index: libstdc++-v3/doc/html/manual/io_and_c.html
1921
===================================================================
1922
--- a/src/libstdc++-v3/doc/html/manual/io_and_c.html (.../tags/gcc_4_8_2_release)
1923
+++ b/src/libstdc++-v3/doc/html/manual/io_and_c.html (.../branches/gcc-4_8-branch)
1925
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1926
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1927
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1930
</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>
1931
Index: libstdc++-v3/doc/html/manual/documentation_hacking.html
1932
===================================================================
1933
--- a/src/libstdc++-v3/doc/html/manual/documentation_hacking.html (.../tags/gcc_4_8_2_release)
1934
+++ b/src/libstdc++-v3/doc/html/manual/documentation_hacking.html (.../branches/gcc-4_8-branch)
1936
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1937
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1938
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1939
Porting and Maintenance
1941
</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>
1943
supported, and are always aliased to dummy rules. These
1944
unsupported formats are: <span class="emphasis"><em>info</em></span>,
1945
<span class="emphasis"><em>ps</em></span>, and <span class="emphasis"><em>dvi</em></span>.
1946
- </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>
1947
+ </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>
1948
Prerequisite tools are Bash 2.0 or later,
1949
<a class="link" href="http://www.doxygen.org/" target="_top">Doxygen</a>, and
1950
the <a class="link" href="http://www.gnu.org/software/coreutils/" target="_top">GNU
1954
Some commentary to accompany
1955
- the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/docblocks.html" target="_top">Special
1956
- Documentation Blocks</a> section of
1957
- the Doxygen manual:
1958
+ the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html" target="_top">Special
1959
+ Documentation Blocks</a> section of the Doxygen manual:
1960
</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>
1961
...not the Qt style. The intermediate *'s are preferred.
1962
</p></li><li class="listitem"><p>
1964
writing Doxygen comments. Single and double quotes, and
1965
separators in filenames are two common trouble spots. When in
1966
doubt, consult the following table.
1967
- </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>
1968
+ </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>
1969
Editing the DocBook sources requires an XML editor. Many
1970
exist: some notable options
1971
include <span class="command"><strong>emacs</strong></span>, <span class="application">Kate</span>,
1972
@@ -520,11 +519,11 @@
1973
<a class="link" href="http://www.docbook.org/tdg/en/html/part2.html" target="_top">online</a>.
1974
An incomplete reference for HTML to Docbook conversion is
1975
detailed in the table below.
1976
- </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>,
1977
+ </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>,
1978
<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>
1979
And examples of detailed markup for which there are no real HTML
1980
equivalents are listed in the table below.
1981
-</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">
1982
+</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">
1983
<p><function>clear()</function></p>
1984
<p><function>fs.clear()</function></p>
1985
</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">
1986
Index: libstdc++-v3/doc/html/manual/extensions.html
1987
===================================================================
1988
--- a/src/libstdc++-v3/doc/html/manual/extensions.html (.../tags/gcc_4_8_2_release)
1989
+++ b/src/libstdc++-v3/doc/html/manual/extensions.html (.../branches/gcc-4_8-branch)
1991
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1992
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1993
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
1996
</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.
1998
- <a id="idp16423680" class="indexterm"></a>
1999
-</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
2000
+ <a id="idm269999107536" class="indexterm"></a>
2001
+</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
2002
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">
2003
Configuring via Template Parameters
2004
</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
2005
Index: libstdc++-v3/doc/html/manual/debug_mode_using.html
2006
===================================================================
2007
--- a/src/libstdc++-v3/doc/html/manual/debug_mode_using.html (.../tags/gcc_4_8_2_release)
2008
+++ b/src/libstdc++-v3/doc/html/manual/debug_mode_using.html (.../branches/gcc-4_8-branch)
2010
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2011
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
2012
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
2013
</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
2014
compiler flag <code class="code">-D_GLIBCXX_DEBUG</code>. Note that this flag
2015
changes the sizes and behavior of standard class templates such
2017
mode or with debug mode. The
2018
following table provides the names and headers of the debugging
2020
-</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
2021
+</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
2022
containers have additional debug capability.
2023
-</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>
2024
\ No newline at end of file
2025
+</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>
2026
\ No newline at end of file
2027
Index: libstdc++-v3/doc/html/manual/parallel_mode.html
2028
===================================================================
2029
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode.html (.../tags/gcc_4_8_2_release)
2030
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode.html (.../branches/gcc-4_8-branch)
2032
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2033
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2034
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2037
-</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
2038
+</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
2039
implementation of many algorithms the C++ Standard Library.
2041
Several of the standard algorithms, for instance
2043
specific compiler flag.
2044
</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
2045
<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
2046
-<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">
2047
+<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">
2048
Parallelization of Bulk Operations for STL Dictionaries
2049
</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">
2050
Workshop on Highly Parallel Processing on a Chip (HPPC) 2007. (LNCS)
2051
- . </span></span></p></div><div class="biblioentry"><a id="idp16931936"></a><p><span class="citetitle"><em class="citetitle">
2052
+ . </span></span></p></div><div class="biblioentry"><a id="idm269998599392"></a><p><span class="citetitle"><em class="citetitle">
2053
The Multi-Core Standard Template Library
2054
</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">
2055
Euro-Par 2007: Parallel Processing. (LNCS 4641)
2056
Index: libstdc++-v3/doc/html/manual/debug_mode_semantics.html
2057
===================================================================
2058
--- a/src/libstdc++-v3/doc/html/manual/debug_mode_semantics.html (.../tags/gcc_4_8_2_release)
2059
+++ b/src/libstdc++-v3/doc/html/manual/debug_mode_semantics.html (.../branches/gcc-4_8-branch)
2061
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
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>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>
2063
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
2064
</p><p>A program that uses the C++ standard library correctly
2065
will maintain the same semantics under debug mode as it had with
2066
the normal (release) library. All functional and exception-handling
2067
Index: libstdc++-v3/doc/html/manual/setup.html
2068
===================================================================
2069
--- a/src/libstdc++-v3/doc/html/manual/setup.html (.../tags/gcc_4_8_2_release)
2070
+++ b/src/libstdc++-v3/doc/html/manual/setup.html (.../branches/gcc-4_8-branch)
2072
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2073
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2074
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2077
-</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
2078
+</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
2079
and properly built binaries useful for linking to other software is
2080
a multi-step process. Steps include getting the sources,
2081
configuring and building the sources, testing, and installation.
2082
Index: libstdc++-v3/doc/html/manual/backwards.html
2083
===================================================================
2084
--- a/src/libstdc++-v3/doc/html/manual/backwards.html (.../tags/gcc_4_8_2_release)
2085
+++ b/src/libstdc++-v3/doc/html/manual/backwards.html (.../branches/gcc-4_8-branch)
2087
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2088
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2089
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2090
Porting and Maintenance
2092
</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
2093
@@ -940,15 +940,15 @@
2094
This is a change in behavior from older versions. Now, most
2095
<span class="type">iterator_type</span> typedefs in container classes are POD
2096
objects, not <span class="type">value_type</span> pointers.
2097
-</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>
2098
+</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>
2099
<a class="link" href="http://www.kegel.com/gcc/gcc4.html" target="_top">
2100
Migrating to GCC 4.1
2102
- </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>
2103
+ </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>
2104
<a class="link" href="http://lists.debian.org/debian-gcc/2006/03/msg00405.html" target="_top">
2105
Building the Whole Debian Archive with GCC 4.1: A Summary
2107
- </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>
2108
+ </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>
2109
<a class="link" href="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html" target="_top">
2110
Migration guide for GCC-3.2
2112
Index: libstdc++-v3/doc/html/manual/source_design_notes.html
2113
===================================================================
2114
--- a/src/libstdc++-v3/doc/html/manual/source_design_notes.html (.../tags/gcc_4_8_2_release)
2115
+++ b/src/libstdc++-v3/doc/html/manual/source_design_notes.html (.../branches/gcc-4_8-branch)
2117
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2118
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2119
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2122
</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>
2123
Index: libstdc++-v3/doc/html/manual/ext_sgi.html
2124
===================================================================
2125
--- a/src/libstdc++-v3/doc/html/manual/ext_sgi.html (.../tags/gcc_4_8_2_release)
2126
+++ b/src/libstdc++-v3/doc/html/manual/ext_sgi.html (.../branches/gcc-4_8-branch)
2128
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2129
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
2130
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
2131
The SGI hashing classes <code class="classname">hash_set</code> and
2132
<code class="classname">hash_set</code> have been deprecated by the
2133
unordered_set, unordered_multiset, unordered_map,
2134
Index: libstdc++-v3/doc/html/manual/facets.html
2135
===================================================================
2136
--- a/src/libstdc++-v3/doc/html/manual/facets.html (.../tags/gcc_4_8_2_release)
2137
+++ b/src/libstdc++-v3/doc/html/manual/facets.html (.../branches/gcc-4_8-branch)
2139
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2140
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2141
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2144
-</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>
2145
+</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>
2146
For the required specialization codecvt<wchar_t, char, mbstate_t> ,
2147
conversions are made between the internal character set (always UCS4
2148
on GNU/Linux) and whatever the currently selected locale for the
2150
</p></li><li class="listitem"><p>
2151
Rename abstract base class. See if just smash-overriding is a
2152
better approach. Clarify, add sanity to naming.
2153
- </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">
2154
+ </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">
2156
- </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">
2157
+ </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">
2159
- </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">
2160
+ </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">
2161
ISO/IEC 14882:1998 Programming languages - C++
2162
- </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">
2163
+ </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">
2164
ISO/IEC 9899:1999 Programming languages - C
2165
- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp15805792"></a><p><span class="title"><em>
2166
+ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999725632"></a><p><span class="title"><em>
2167
<a class="link" href="http://www.unix.org/version3/ieee_std.html" target="_top">
2168
The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
2170
</em>. </span><span class="copyright">Copyright © 1999
2171
- 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">
2172
+ 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">
2173
The C++ Programming Language, Special Edition
2174
</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">
2176
- . </span></span></p></div><div class="biblioentry"><a id="idp15813664"></a><p><span class="citetitle"><em class="citetitle">
2177
+ . </span></span></p></div><div class="biblioentry"><a id="idm269999717760"></a><p><span class="citetitle"><em class="citetitle">
2178
Standard C++ IOStreams and Locales
2179
</em>. </span><span class="subtitle">
2180
Advanced Programmer's Guide and Reference
2181
@@ -409,17 +409,17 @@
2182
</p></li><li class="listitem"><p>
2183
wchar_t/char internal buffers and conversions between
2184
internal/external buffers?
2185
- </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">
2186
+ </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">
2188
</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">
2189
Chapters 6 Character Set Handling and 7 Locales and Internationalization
2190
- . </span></p></div><div class="biblioentry"><a id="idp15895888"></a><p><span class="citetitle"><em class="citetitle">
2191
+ . </span></p></div><div class="biblioentry"><a id="idm269999635328"></a><p><span class="citetitle"><em class="citetitle">
2193
- </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">
2194
+ </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">
2195
ISO/IEC 14882:1998 Programming languages - C++
2196
- </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">
2197
+ </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">
2198
ISO/IEC 9899:1999 Programming languages - C
2199
- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp15903536"></a><p><span class="title"><em>
2200
+ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999627680"></a><p><span class="title"><em>
2201
<a class="link" href="http://www.opengroup.org/austin/" target="_top">
2202
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
2204
@@ -426,25 +426,25 @@
2205
</em>. </span><span class="copyright">Copyright © 2008
2206
The Open Group/The Institute of Electrical and Electronics
2208
- . </span></p></div><div class="biblioentry"><a id="idp15906768"></a><p><span class="citetitle"><em class="citetitle">
2209
+ . </span></p></div><div class="biblioentry"><a id="idm269999624448"></a><p><span class="citetitle"><em class="citetitle">
2210
The C++ Programming Language, Special Edition
2211
</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">
2213
- . </span></span></p></div><div class="biblioentry"><a id="idp15911392"></a><p><span class="citetitle"><em class="citetitle">
2214
+ . </span></span></p></div><div class="biblioentry"><a id="idm269999619824"></a><p><span class="citetitle"><em class="citetitle">
2215
Standard C++ IOStreams and Locales
2216
</em>. </span><span class="subtitle">
2217
Advanced Programmer's Guide and Reference
2218
. </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">
2219
Addison Wesley Longman
2220
- . </span></span></p></div><div class="biblioentry"><a id="idp15917056"></a><p><span class="title"><em>
2221
+ . </span></span></p></div><div class="biblioentry"><a id="idm269999614160"></a><p><span class="title"><em>
2222
<a class="link" href="http://www.lysator.liu.se/c/na1.html" target="_top">
2223
A brief description of Normative Addendum 1
2225
- </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>
2226
+ </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>
2227
<a class="link" href="http://tldp.org/HOWTO/Unicode-HOWTO.html" target="_top">
2230
- </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>
2231
+ </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>
2232
<a class="link" href="http://www.cl.cam.ac.uk/~mgk25/unicode.html" target="_top">
2233
UTF-8 and Unicode FAQ for Unix/Linux
2235
@@ -690,16 +690,16 @@
2236
model. As of this writing, it is unknown how to query to see
2237
if a specified message catalog exists using the gettext
2239
- </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">
2240
+ </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">
2242
</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
2243
- . </span></p></div><div class="biblioentry"><a id="idp16008384"></a><p><span class="citetitle"><em class="citetitle">
2244
+ . </span></p></div><div class="biblioentry"><a id="idm269999522832"></a><p><span class="citetitle"><em class="citetitle">
2246
- </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">
2247
+ </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">
2248
ISO/IEC 14882:1998 Programming languages - C++
2249
- </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">
2250
+ </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">
2251
ISO/IEC 9899:1999 Programming languages - C
2252
- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp16016032"></a><p><span class="title"><em>
2253
+ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999515184"></a><p><span class="title"><em>
2254
<a class="link" href="http://www.opengroup.org/austin/" target="_top">
2255
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
2257
@@ -706,23 +706,23 @@
2258
</em>. </span><span class="copyright">Copyright © 2008
2259
The Open Group/The Institute of Electrical and Electronics
2261
- . </span></p></div><div class="biblioentry"><a id="idp16019264"></a><p><span class="citetitle"><em class="citetitle">
2262
+ . </span></p></div><div class="biblioentry"><a id="idm269999511952"></a><p><span class="citetitle"><em class="citetitle">
2263
The C++ Programming Language, Special Edition
2264
</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">
2266
- . </span></span></p></div><div class="biblioentry"><a id="idp16023888"></a><p><span class="citetitle"><em class="citetitle">
2267
+ . </span></span></p></div><div class="biblioentry"><a id="idm269999507328"></a><p><span class="citetitle"><em class="citetitle">
2268
Standard C++ IOStreams and Locales
2269
</em>. </span><span class="subtitle">
2270
Advanced Programmer's Guide and Reference
2271
. </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">
2272
Addison Wesley Longman
2273
- . </span></span></p></div><div class="biblioentry"><a id="idp16029552"></a><p><span class="title"><em>
2274
- <a class="link" href="http://java.sun.com/reference/api/index.html" target="_top">
2275
+ . </span></span></p></div><div class="biblioentry"><a id="idm269999501664"></a><p><span class="title"><em>
2276
+ <a class="link" href="http://www.oracle.com/technetwork/java/api/index.html" target="_top">
2277
API Specifications, Java Platform
2279
</em>. </span><span class="pagenums">java.util.Properties, java.text.MessageFormat,
2280
java.util.Locale, java.util.ResourceBundle
2281
- . </span></p></div><div class="biblioentry"><a id="idp16031888"></a><p><span class="title"><em>
2282
+ . </span></p></div><div class="biblioentry"><a id="idm269999499328"></a><p><span class="title"><em>
2283
<a class="link" href="https://www.gnu.org/software/gettext/" target="_top">
2284
GNU gettext tools, version 0.10.38, Native Language Support
2286
Index: libstdc++-v3/doc/html/manual/diagnostics.html
2287
===================================================================
2288
--- a/src/libstdc++-v3/doc/html/manual/diagnostics.html (.../tags/gcc_4_8_2_release)
2289
+++ b/src/libstdc++-v3/doc/html/manual/diagnostics.html (.../branches/gcc-4_8-branch)
2291
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2292
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2293
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2296
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><th width="60%" align="center">Part II.
2299
</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.
2301
- <a id="idp13835248" class="indexterm"></a>
2302
-</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>
2303
+ <a id="idm270001697504" class="indexterm"></a>
2304
+</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>
2305
All exception objects are defined in one of the standard header
2306
files: <code class="filename">exception</code>,
2307
<code class="filename">stdexcept</code>, <code class="filename">new</code>, and
2308
Index: libstdc++-v3/doc/html/manual/mt_allocator_design.html
2309
===================================================================
2310
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator_design.html (.../tags/gcc_4_8_2_release)
2311
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator_design.html (.../branches/gcc-4_8-branch)
2313
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2314
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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
2315
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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
2316
describing the characteristics of the memory pool, a policy class
2317
containing this pool that links instantiation types to common or
2318
individual pools, and a class inheriting from the policy class that is
2319
Index: libstdc++-v3/doc/html/manual/appendix_free.html
2320
===================================================================
2321
--- a/src/libstdc++-v3/doc/html/manual/appendix_free.html (.../tags/gcc_4_8_2_release)
2322
+++ b/src/libstdc++-v3/doc/html/manual/appendix_free.html (.../branches/gcc-4_8-branch)
2324
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2325
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2326
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2327
Free Software Needs Free Documentation
2329
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><th width="60%" align="center">Part IV.
2332
</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>
2333
Free Software Needs Free Documentation
2334
- <a id="idp23426192" class="indexterm"></a>
2335
+ <a id="idm269992106560" class="indexterm"></a>
2336
</h1></div></div></div><p>
2337
The biggest deficiency in free operating systems is not in the
2338
software--it is the lack of good free manuals that we can include in
2339
Index: libstdc++-v3/doc/html/manual/algorithms.html
2340
===================================================================
2341
--- a/src/libstdc++-v3/doc/html/manual/algorithms.html (.../tags/gcc_4_8_2_release)
2342
+++ b/src/libstdc++-v3/doc/html/manual/algorithms.html (.../branches/gcc-4_8-branch)
2344
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2345
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2346
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2349
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><th width="60%" align="center">Part II.
2352
</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.
2354
- <a id="idp16191968" class="indexterm"></a>
2355
-</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>
2356
+ <a id="idm269999339120" class="indexterm"></a>
2357
+</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>
2358
The neatest accomplishment of the algorithms section is that all the
2359
work is done via iterators, not containers directly. This means two
2361
Index: libstdc++-v3/doc/html/manual/appendix_porting.html
2362
===================================================================
2363
--- a/src/libstdc++-v3/doc/html/manual/appendix_porting.html (.../tags/gcc_4_8_2_release)
2364
+++ b/src/libstdc++-v3/doc/html/manual/appendix_porting.html (.../branches/gcc-4_8-branch)
2366
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2367
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2368
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2369
Porting and Maintenance
2371
</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.
2374
</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>
2375
Porting and Maintenance
2376
- <a id="idp22008864" class="indexterm"></a>
2377
-</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">
2378
+ <a id="idm269993523968" class="indexterm"></a>
2379
+</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">
2380
Qualifying Exception Safety Guarantees
2382
</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">
2384
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
2385
<span class="command"><strong>automake</strong></span>) from the file
2386
<code class="filename">Makefile.am</code>.
2387
-</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>
2388
+</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>
2389
Regenerate all generated files by using the command
2390
<code class="code">autoreconf</code> at the top level of the libstdc++ source
2392
Index: libstdc++-v3/doc/html/manual/profile_mode_cost_model.html
2393
===================================================================
2394
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html (.../tags/gcc_4_8_2_release)
2395
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html (.../branches/gcc-4_8-branch)
2397
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2398
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
2399
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
2400
Currently, the cost model uses formulas with predefined relative weights
2401
for alternative containers or container implementations. For instance,
2402
iterating through a vector is X times faster than iterating through a list.
2403
Index: libstdc++-v3/doc/html/manual/make.html
2404
===================================================================
2405
--- a/src/libstdc++-v3/doc/html/manual/make.html (.../tags/gcc_4_8_2_release)
2406
+++ b/src/libstdc++-v3/doc/html/manual/make.html (.../branches/gcc-4_8-branch)
2408
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2409
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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
2410
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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
2411
<a class="link" href="http://gcc.gnu.org/install/" target="_top">GCC Installation
2412
Instructions</a> first. Read <span class="emphasis"><em>all of them</em></span>.
2413
<span class="emphasis"><em>Twice.</em></span>
2414
Index: libstdc++-v3/doc/html/manual/pairs.html
2415
===================================================================
2416
--- a/src/libstdc++-v3/doc/html/manual/pairs.html (.../tags/gcc_4_8_2_release)
2417
+++ b/src/libstdc++-v3/doc/html/manual/pairs.html (.../branches/gcc-4_8-branch)
2419
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2420
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2421
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2424
</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
2425
Index: libstdc++-v3/doc/html/manual/test.html
2426
===================================================================
2427
--- a/src/libstdc++-v3/doc/html/manual/test.html (.../tags/gcc_4_8_2_release)
2428
+++ b/src/libstdc++-v3/doc/html/manual/test.html (.../branches/gcc-4_8-branch)
2430
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2431
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2432
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2433
Porting and Maintenance
2435
</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>
2437
reporting functions including:
2438
</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>
2439
Qualifying Exception Safety Guarantees
2440
- <a id="idp22628992" class="indexterm"></a>
2441
+ <a id="idm269992903504" class="indexterm"></a>
2442
</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>
2443
Testing is composed of running a particular test sequence,
2444
and looking at what happens to the surrounding code when
2445
Index: libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
2446
===================================================================
2447
--- a/src/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html (.../tags/gcc_4_8_2_release)
2448
+++ b/src/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html (.../branches/gcc-4_8-branch)
2450
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2451
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
2452
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
2453
Or as close as it gets: freestanding. This is a minimal
2454
configuration, with only partial support for the standard
2455
library. Assume only the following header files can be used:
2456
Index: libstdc++-v3/doc/html/manual/using_headers.html
2457
===================================================================
2458
--- a/src/libstdc++-v3/doc/html/manual/using_headers.html (.../tags/gcc_4_8_2_release)
2459
+++ b/src/libstdc++-v3/doc/html/manual/using_headers.html (.../branches/gcc-4_8-branch)
2461
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2462
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
2463
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
2464
The C++ standard specifies the entire set of header files that
2465
must be available to all hosted implementations. Actually, the
2466
word "files" is a misnomer, since the contents of the
2468
the 1998 standard as updated for 2003, and the current 2011 standard.
2470
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>.
2471
- </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>
2472
+ </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>
2473
C++11 include files. These are only available in C++11 compilation
2474
mode, i.e. <code class="literal">-std=c++11</code> or <code class="literal">-std=gnu++11</code>.
2475
-</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>
2476
+</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>
2477
In addition, TR1 includes as:
2478
-</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++
2479
+</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++
2480
compiler supports scalar decimal floating-point types defined via
2481
<code class="code">__attribute__((mode(SD|DD|LD)))</code>.
2482
-</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>
2483
+</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>
2484
Also included are files for the C++ ABI interface:
2485
-</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>
2486
+</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>
2487
And a large variety of extensions.
2488
-</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.
2489
+</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.
2490
</p><p>First, mixing different dialects of the standard headers is not
2491
possible. It's an all-or-nothing affair. Thus, code like
2492
</p><pre class="programlisting">
2493
Index: libstdc++-v3/doc/html/manual/using_namespaces.html
2494
===================================================================
2495
--- a/src/libstdc++-v3/doc/html/manual/using_namespaces.html (.../tags/gcc_4_8_2_release)
2496
+++ b/src/libstdc++-v3/doc/html/manual/using_namespaces.html (.../branches/gcc-4_8-branch)
2498
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2499
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
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>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.
2501
</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
2502
within namespace std." This includes namespaces nested
2503
within <code class="code">namespace std</code>, such as <code class="code">namespace
2504
Index: libstdc++-v3/doc/html/manual/debug.html
2505
===================================================================
2506
--- a/src/libstdc++-v3/doc/html/manual/debug.html (.../tags/gcc_4_8_2_release)
2507
+++ b/src/libstdc++-v3/doc/html/manual/debug.html (.../branches/gcc-4_8-branch)
2509
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2510
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
2511
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
2512
There are numerous things that can be done to improve the ease with
2513
which C++ binaries are debugged when using the GNU tool chain. Here
2517
<a class="link" href="http://valgrind.org/docs/manual/hg-manual.html" target="_top">
2519
- <a class="link" href="http://code.google.com/p/data-race-test" target="_top">
2520
+ <a class="link" href="http://code.google.com/p/data-race-test/" target="_top">
2521
ThreadSanitizer</a>.
2523
With DRD, Helgrind and ThreadSanitizer you will need to define
2524
Index: libstdc++-v3/doc/html/manual/localization.html
2525
===================================================================
2526
--- a/src/libstdc++-v3/doc/html/manual/localization.html (.../tags/gcc_4_8_2_release)
2527
+++ b/src/libstdc++-v3/doc/html/manual/localization.html (.../branches/gcc-4_8-branch)
2529
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2530
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
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>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.
2534
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><th width="60%" align="center">Part II.
2537
</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.
2539
- <a id="idp15701088" class="indexterm"></a>
2540
-</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>
2541
+ <a id="idm269999830208" class="indexterm"></a>
2542
+</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>
2543
Describes the basic locale object, including nested
2544
classes id, facet, and the reference-counted implementation object,
2546
@@ -402,18 +402,18 @@
2547
What should non-required facet instantiations do? If the
2548
generic implementation is provided, then how to end-users
2549
provide specializations?
2550
- </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">
2551
+ </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">
2553
</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">
2554
Chapters 6 Character Set Handling and 7 Locales and
2555
Internationalization
2556
- . </span></p></div><div class="biblioentry"><a id="idp15748832"></a><p><span class="citetitle"><em class="citetitle">
2557
+ . </span></p></div><div class="biblioentry"><a id="idm269999782464"></a><p><span class="citetitle"><em class="citetitle">
2559
- </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">
2560
+ </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">
2561
ISO/IEC 14882:1998 Programming languages - C++
2562
- </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">
2563
+ </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">
2564
ISO/IEC 9899:1999 Programming languages - C
2565
- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp15756480"></a><p><span class="title"><em>
2566
+ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999774816"></a><p><span class="title"><em>
2567
<a class="link" href="http://www.opengroup.org/austin/" target="_top">
2568
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
2570
@@ -420,11 +420,11 @@
2571
</em>. </span><span class="copyright">Copyright © 2008
2572
The Open Group/The Institute of Electrical and Electronics
2574
- . </span></p></div><div class="biblioentry"><a id="idp15759712"></a><p><span class="citetitle"><em class="citetitle">
2575
+ . </span></p></div><div class="biblioentry"><a id="idm269999771584"></a><p><span class="citetitle"><em class="citetitle">
2576
The C++ Programming Language, Special Edition
2577
</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">
2579
- . </span></span></p></div><div class="biblioentry"><a id="idp15764336"></a><p><span class="citetitle"><em class="citetitle">
2580
+ . </span></span></p></div><div class="biblioentry"><a id="idm269999766960"></a><p><span class="citetitle"><em class="citetitle">
2581
Standard C++ IOStreams and Locales
2582
</em>. </span><span class="subtitle">
2583
Advanced Programmer's Guide and Reference
2584
Index: libstdc++-v3/doc/html/manual/ext_algorithms.html
2585
===================================================================
2586
--- a/src/libstdc++-v3/doc/html/manual/ext_algorithms.html (.../tags/gcc_4_8_2_release)
2587
+++ b/src/libstdc++-v3/doc/html/manual/ext_algorithms.html (.../branches/gcc-4_8-branch)
2589
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2590
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2591
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2594
</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
2595
Index: libstdc++-v3/doc/html/manual/debug_mode.html
2596
===================================================================
2597
--- a/src/libstdc++-v3/doc/html/manual/debug_mode.html (.../tags/gcc_4_8_2_release)
2598
+++ b/src/libstdc++-v3/doc/html/manual/debug_mode.html (.../branches/gcc-4_8-branch)
2600
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2601
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2602
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2605
-</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
2606
+</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
2607
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>
2608
By default, libstdc++ is built with efficiency in mind, and
2609
therefore performs little or no error checking that is not
2610
Index: libstdc++-v3/doc/html/manual/profile_mode_design.html
2611
===================================================================
2612
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_design.html (.../tags/gcc_4_8_2_release)
2613
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_design.html (.../branches/gcc-4_8-branch)
2615
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2616
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
2617
-</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
2618
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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>
2619
+</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
2620
only included from <code class="code">impl/profiler.h</code>, which is the only
2621
file included from the public headers.</td></tr></tbody></table></div></div><br class="table-break" /><p>
2622
</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>
2623
Index: libstdc++-v3/doc/html/manual/using_concurrency.html
2624
===================================================================
2625
--- a/src/libstdc++-v3/doc/html/manual/using_concurrency.html (.../tags/gcc_4_8_2_release)
2626
+++ b/src/libstdc++-v3/doc/html/manual/using_concurrency.html (.../branches/gcc-4_8-branch)
2628
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2629
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>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
2630
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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
2631
of multithreaded applications which use the Standard C++
2632
library. This information is GCC-specific since the C++
2633
standard does not address matters of multithreaded applications.
2634
Index: libstdc++-v3/doc/html/manual/mt_allocator_impl.html
2635
===================================================================
2636
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator_impl.html (.../tags/gcc_4_8_2_release)
2637
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator_impl.html (.../branches/gcc-4_8-branch)
2639
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2640
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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
2641
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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
2642
exists a nested <code class="code">struct __pool_base::_Tune</code> that contains all
2643
these parameters, which include settings for
2644
</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
2645
Index: libstdc++-v3/doc/html/manual/appendix_gfdl.html
2646
===================================================================
2647
--- a/src/libstdc++-v3/doc/html/manual/appendix_gfdl.html (.../tags/gcc_4_8_2_release)
2648
+++ b/src/libstdc++-v3/doc/html/manual/appendix_gfdl.html (.../branches/gcc-4_8-branch)
2650
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2651
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2652
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2654
</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>
2655
Copyright © 2000, 2001, 2002, 2007, 2008
2656
Index: libstdc++-v3/doc/html/manual/containers.html
2657
===================================================================
2658
--- a/src/libstdc++-v3/doc/html/manual/containers.html (.../tags/gcc_4_8_2_release)
2659
+++ b/src/libstdc++-v3/doc/html/manual/containers.html (.../branches/gcc-4_8-branch)
2661
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2662
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2663
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2666
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><th width="60%" align="center">Part II.
2669
</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.
2671
- <a id="idp16037808" class="indexterm"></a>
2672
-</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>
2673
+ <a id="idm269999493408" class="indexterm"></a>
2674
+</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>
2675
Yes it is, and that's okay. This is a decision that we preserved
2676
when we imported SGI's STL implementation. The following is
2677
quoted from <a class="link" href="http://www.sgi.com/tech/stl/FAQ.html" target="_top">their FAQ</a>:
2678
Index: libstdc++-v3/doc/html/manual/io.html
2679
===================================================================
2680
--- a/src/libstdc++-v3/doc/html/manual/io.html (.../tags/gcc_4_8_2_release)
2681
+++ b/src/libstdc++-v3/doc/html/manual/io.html (.../branches/gcc-4_8-branch)
2683
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2684
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
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>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.
2688
</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.
2691
</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.
2693
- <a id="idp16257600" class="indexterm"></a>
2694
-</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
2695
+ <a id="idm269999273616" class="indexterm"></a>
2696
+</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
2697
only include the headers you really need. Many people simply include
2698
<iostream> when they don't need to -- and that can <span class="emphasis"><em>penalize
2699
your runtime as well.</em></span> Here are some tips on which header to use
2700
Index: libstdc++-v3/doc/html/manual/index.html
2701
===================================================================
2702
--- a/src/libstdc++-v3/doc/html/manual/index.html (.../tags/gcc_4_8_2_release)
2703
+++ b/src/libstdc++-v3/doc/html/manual/index.html (.../branches/gcc-4_8-branch)
2705
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2706
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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
2707
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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
2708
<a class="link" href="http://www.fsf.org" target="_top">FSF</a>
2709
- </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.
2710
+ </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.
2713
</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.
2715
</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.
2718
-</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.
2719
+</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.
2722
</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.
2725
-</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.
2726
+</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.
2729
</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.
2730
@@ -143,19 +143,19 @@
2732
</a></span></dt><dt><span class="appendix"><a href="appendix_gpl.html">D.
2733
<acronym class="acronym">GNU</acronym> General Public License version 3
2734
- </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">
2735
+ </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">
2736
Effect of embedded lists in
2737
<code class="classname">std::multimap</code>
2738
- </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
2739
- 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
2740
- diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idp18277664">Standard resize policy size sequence
2741
- 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">
2742
+ </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
2743
+ 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
2744
+ diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idm269997253712">Standard resize policy size sequence
2745
+ 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">
2746
A Standard String Hash Function
2747
- </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idp18169344">
2748
+ </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idm269997361840">
2749
Only k String DNA Hash
2750
- </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idp18240448">
2751
+ </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idm269997290864">
2752
Probability of Probe Sequence of Length k
2753
- </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idp18247216">
2754
+ </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idm269997284096">
2755
Probability Probe Sequence in Some Bin
2756
</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.
2758
Index: libstdc++-v3/doc/html/manual/numerics_and_c.html
2759
===================================================================
2760
--- a/src/libstdc++-v3/doc/html/manual/numerics_and_c.html (.../tags/gcc_4_8_2_release)
2761
+++ b/src/libstdc++-v3/doc/html/manual/numerics_and_c.html (.../branches/gcc-4_8-branch)
2763
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2764
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2765
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2768
</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
2769
Index: libstdc++-v3/doc/html/manual/appendix_gpl.html
2770
===================================================================
2771
--- a/src/libstdc++-v3/doc/html/manual/appendix_gpl.html (.../tags/gcc_4_8_2_release)
2772
+++ b/src/libstdc++-v3/doc/html/manual/appendix_gpl.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>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.
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>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.
2777
<acronym class="acronym">GNU</acronym> General Public License version 3
2778
</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.
2782
The precise terms and conditions for copying, distribution and modification
2784
- </p><h2><a id="idp23466384"></a>
2785
+ </p><h2><a id="idm269992066368"></a>
2786
TERMS AND CONDITIONS
2787
</h2><h2><a id="gpl-3-definitions"></a>
2790
waiver of all civil liability in connection with the Program, unless a
2791
warranty or assumption of liability accompanies a copy of the Program in
2793
- </p><h2><a id="idp23565184"></a>
2794
+ </p><h2><a id="idm269991967568"></a>
2795
END OF TERMS AND CONDITIONS
2796
</h2><h2><a id="HowToApply"></a>
2797
How to Apply These Terms to Your New Programs
2798
Index: libstdc++-v3/doc/html/manual/source_code_style.html
2799
===================================================================
2800
--- a/src/libstdc++-v3/doc/html/manual/source_code_style.html (.../tags/gcc_4_8_2_release)
2801
+++ b/src/libstdc++-v3/doc/html/manual/source_code_style.html (.../branches/gcc-4_8-branch)
2803
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2804
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2805
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2808
</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>
2809
Index: libstdc++-v3/doc/html/manual/streambufs.html
2810
===================================================================
2811
--- a/src/libstdc++-v3/doc/html/manual/streambufs.html (.../tags/gcc_4_8_2_release)
2812
+++ b/src/libstdc++-v3/doc/html/manual/streambufs.html (.../branches/gcc-4_8-branch)
2814
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2815
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2816
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2819
</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>
2820
Index: libstdc++-v3/doc/html/manual/utilities.html
2821
===================================================================
2822
--- a/src/libstdc++-v3/doc/html/manual/utilities.html (.../tags/gcc_4_8_2_release)
2823
+++ b/src/libstdc++-v3/doc/html/manual/utilities.html (.../branches/gcc-4_8-branch)
2825
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2826
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2827
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.
2830
</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.
2833
</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.
2835
- <a id="idp13862416" class="indexterm"></a>
2836
-</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
2837
+ <a id="idm270001670464" class="indexterm"></a>
2838
+</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
2839
get slightly the wrong idea. In the interest of not reinventing
2840
the wheel, we will refer you to the introduction to the functor
2841
concept written by SGI as part of their STL, in
2842
Index: libstdc++-v3/include/debug/functions.h
2843
===================================================================
2844
--- a/src/libstdc++-v3/include/debug/functions.h (.../tags/gcc_4_8_2_release)
2845
+++ b/src/libstdc++-v3/include/debug/functions.h (.../branches/gcc-4_8-branch)
2846
@@ -345,11 +345,13 @@
2847
return __check_sorted_set_aux(__first, __last, __pred, _SameType());
2850
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
2851
+ // 270. Binary search requirements overly strict
2852
+ // Determine if a sequence is partitioned w.r.t. this element.
2853
template<typename _ForwardIterator, typename _Tp>
2855
- __check_partitioned_lower_aux(_ForwardIterator __first,
2856
- _ForwardIterator __last, const _Tp& __value,
2857
- std::forward_iterator_tag)
2858
+ __check_partitioned_lower(_ForwardIterator __first,
2859
+ _ForwardIterator __last, const _Tp& __value)
2861
while (__first != __last && *__first < __value)
2863
@@ -362,38 +364,11 @@
2864
return __first == __last;
2867
- // For performance reason, as the iterator range has been validated, check on
2868
- // random access safe iterators is done using the base iterator.
2869
- template<typename _Iterator, typename _Sequence, typename _Tp>
2871
- __check_partitioned_lower_aux(
2872
- const _Safe_iterator<_Iterator, _Sequence>& __first,
2873
- const _Safe_iterator<_Iterator, _Sequence>& __last,
2874
- const _Tp& __value,
2875
- std::random_access_iterator_tag __tag)
2877
- return __check_partitioned_lower_aux(__first.base(), __last.base(),
2881
- // _GLIBCXX_RESOLVE_LIB_DEFECTS
2882
- // 270. Binary search requirements overly strict
2883
- // Determine if a sequence is partitioned w.r.t. this element.
2884
template<typename _ForwardIterator, typename _Tp>
2886
- __check_partitioned_lower(_ForwardIterator __first,
2887
+ __check_partitioned_upper(_ForwardIterator __first,
2888
_ForwardIterator __last, const _Tp& __value)
2890
- return __check_partitioned_lower_aux(__first, __last, __value,
2891
- std::__iterator_category(__first));
2894
- template<typename _ForwardIterator, typename _Tp>
2896
- __check_partitioned_upper_aux(_ForwardIterator __first,
2897
- _ForwardIterator __last, const _Tp& __value,
2898
- std::forward_iterator_tag)
2900
while (__first != __last && !(__value < *__first))
2902
if (__first != __last)
2903
@@ -405,35 +380,12 @@
2904
return __first == __last;
2907
- // For performance reason, as the iterator range has been validated, check on
2908
- // random access safe iterators is done using the base iterator.
2909
- template<typename _Iterator, typename _Sequence, typename _Tp>
2911
- __check_partitioned_upper_aux(
2912
- const _Safe_iterator<_Iterator, _Sequence>& __first,
2913
- const _Safe_iterator<_Iterator, _Sequence>& __last,
2914
- const _Tp& __value,
2915
- std::random_access_iterator_tag __tag)
2917
- return __check_partitioned_upper_aux(__first.base(), __last.base(),
2921
- template<typename _ForwardIterator, typename _Tp>
2923
- __check_partitioned_upper(_ForwardIterator __first,
2924
- _ForwardIterator __last, const _Tp& __value)
2926
- return __check_partitioned_upper_aux(__first, __last, __value,
2927
- std::__iterator_category(__first));
2930
+ // Determine if a sequence is partitioned w.r.t. this element.
2931
template<typename _ForwardIterator, typename _Tp, typename _Pred>
2933
- __check_partitioned_lower_aux(_ForwardIterator __first,
2934
- _ForwardIterator __last, const _Tp& __value,
2936
- std::forward_iterator_tag)
2937
+ __check_partitioned_lower(_ForwardIterator __first,
2938
+ _ForwardIterator __last, const _Tp& __value,
2941
while (__first != __last && bool(__pred(*__first, __value)))
2943
@@ -446,39 +398,12 @@
2944
return __first == __last;
2947
- // For performance reason, as the iterator range has been validated, check on
2948
- // random access safe iterators is done using the base iterator.
2949
- template<typename _Iterator, typename _Sequence,
2950
- typename _Tp, typename _Pred>
2952
- __check_partitioned_lower_aux(
2953
- const _Safe_iterator<_Iterator, _Sequence>& __first,
2954
- const _Safe_iterator<_Iterator, _Sequence>& __last,
2955
- const _Tp& __value, _Pred __pred,
2956
- std::random_access_iterator_tag __tag)
2958
- return __check_partitioned_lower_aux(__first.base(), __last.base(),
2959
- __value, __pred, __tag);
2962
- // Determine if a sequence is partitioned w.r.t. this element.
2963
template<typename _ForwardIterator, typename _Tp, typename _Pred>
2965
- __check_partitioned_lower(_ForwardIterator __first,
2966
+ __check_partitioned_upper(_ForwardIterator __first,
2967
_ForwardIterator __last, const _Tp& __value,
2970
- return __check_partitioned_lower_aux(__first, __last, __value, __pred,
2971
- std::__iterator_category(__first));
2974
- template<typename _ForwardIterator, typename _Tp, typename _Pred>
2976
- __check_partitioned_upper_aux(_ForwardIterator __first,
2977
- _ForwardIterator __last, const _Tp& __value,
2979
- std::forward_iterator_tag)
2981
while (__first != __last && !bool(__pred(__value, *__first)))
2983
if (__first != __last)
2984
@@ -490,31 +415,6 @@
2985
return __first == __last;
2988
- // For performance reason, as the iterator range has been validated, check on
2989
- // random access safe iterators is done using the base iterator.
2990
- template<typename _Iterator, typename _Sequence,
2991
- typename _Tp, typename _Pred>
2993
- __check_partitioned_upper_aux(
2994
- const _Safe_iterator<_Iterator, _Sequence>& __first,
2995
- const _Safe_iterator<_Iterator, _Sequence>& __last,
2996
- const _Tp& __value, _Pred __pred,
2997
- std::random_access_iterator_tag __tag)
2999
- return __check_partitioned_upper_aux(__first.base(), __last.base(),
3000
- __value, __pred, __tag);
3003
- template<typename _ForwardIterator, typename _Tp, typename _Pred>
3005
- __check_partitioned_upper(_ForwardIterator __first,
3006
- _ForwardIterator __last, const _Tp& __value,
3009
- return __check_partitioned_upper_aux(__first, __last, __value, __pred,
3010
- std::__iterator_category(__first));
3013
// Helper struct to detect random access safe iterators.
3014
template<typename _Iterator>
3015
struct __is_safe_random_iterator
3016
Index: libstdc++-v3/include/debug/macros.h
3017
===================================================================
3018
--- a/src/libstdc++-v3/include/debug/macros.h (.../tags/gcc_4_8_2_release)
3019
+++ b/src/libstdc++-v3/include/debug/macros.h (.../branches/gcc-4_8-branch)
3021
w.r.t. the value _Value. */
3022
#define __glibcxx_check_partitioned_lower(_First,_Last,_Value) \
3023
__glibcxx_check_valid_range(_First,_Last); \
3024
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
3026
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower( \
3027
+ __gnu_debug::__base(_First), \
3028
+ __gnu_debug::__base(_Last), _Value), \
3029
_M_message(__gnu_debug::__msg_unpartitioned) \
3030
._M_iterator(_First, #_First) \
3031
._M_iterator(_Last, #_Last) \
3034
#define __glibcxx_check_partitioned_upper(_First,_Last,_Value) \
3035
__glibcxx_check_valid_range(_First,_Last); \
3036
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
3038
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper( \
3039
+ __gnu_debug::__base(_First), \
3040
+ __gnu_debug::__base(_Last), _Value), \
3041
_M_message(__gnu_debug::__msg_unpartitioned) \
3042
._M_iterator(_First, #_First) \
3043
._M_iterator(_Last, #_Last) \
3045
w.r.t. the value _Value and predicate _Pred. */
3046
#define __glibcxx_check_partitioned_lower_pred(_First,_Last,_Value,_Pred) \
3047
__glibcxx_check_valid_range(_First,_Last); \
3048
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
3050
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower( \
3051
+ __gnu_debug::__base(_First), \
3052
+ __gnu_debug::__base(_Last), _Value, _Pred), \
3053
_M_message(__gnu_debug::__msg_unpartitioned_pred) \
3054
._M_iterator(_First, #_First) \
3055
._M_iterator(_Last, #_Last) \
3057
w.r.t. the value _Value and predicate _Pred. */
3058
#define __glibcxx_check_partitioned_upper_pred(_First,_Last,_Value,_Pred) \
3059
__glibcxx_check_valid_range(_First,_Last); \
3060
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
3062
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper( \
3063
+ __gnu_debug::__base(_First), \
3064
+ __gnu_debug::__base(_Last), _Value, _Pred), \
3065
_M_message(__gnu_debug::__msg_unpartitioned_pred) \
3066
._M_iterator(_First, #_First) \
3067
._M_iterator(_Last, #_Last) \
3068
Index: libstdc++-v3/include/bits/stl_algo.h
3069
===================================================================
3070
--- a/src/libstdc++-v3/include/bits/stl_algo.h (.../tags/gcc_4_8_2_release)
3071
+++ b/src/libstdc++-v3/include/bits/stl_algo.h (.../branches/gcc-4_8-branch)
3072
@@ -2279,7 +2279,7 @@
3073
_RandomAccessIterator __last)
3075
_RandomAccessIterator __mid = __first + (__last - __first) / 2;
3076
- std::__move_median_to_first(__first, __first + 1, __mid, (__last - 2));
3077
+ std::__move_median_to_first(__first, __first + 1, __mid, __last - 1);
3078
return std::__unguarded_partition(__first + 1, __last, *__first);
3081
@@ -2291,7 +2291,7 @@
3082
_RandomAccessIterator __last, _Compare __comp)
3084
_RandomAccessIterator __mid = __first + (__last - __first) / 2;
3085
- std::__move_median_to_first(__first, __first + 1, __mid, (__last - 2),
3086
+ std::__move_median_to_first(__first, __first + 1, __mid, __last - 1,
3088
return std::__unguarded_partition(__first + 1, __last, *__first, __comp);
3090
Index: libstdc++-v3/include/bits/shared_ptr_base.h
3091
===================================================================
3092
--- a/src/libstdc++-v3/include/bits/shared_ptr_base.h (.../tags/gcc_4_8_2_release)
3093
+++ b/src/libstdc++-v3/include/bits/shared_ptr_base.h (.../branches/gcc-4_8-branch)
3096
template<typename... _Args>
3097
_Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
3098
- : _M_impl(__a), _M_storage()
3101
_M_impl._M_ptr = static_cast<_Tp*>(static_cast<void*>(&_M_storage));
3102
// _GLIBCXX_RESOLVE_LIB_DEFECTS
3104
: _M_ptr(__r.get()), _M_refcount()
3106
__glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>)
3107
- auto __tmp = std::__addressof(*__r.get());
3108
+ auto __tmp = __r.get();
3109
_M_refcount = __shared_count<_Lp>(std::move(__r));
3110
__enable_shared_from_this_helper(_M_refcount, __tmp, __tmp);
3112
Index: libstdc++-v3/include/c_global/cstdio
3113
===================================================================
3114
--- a/src/libstdc++-v3/include/c_global/cstdio (.../tags/gcc_4_8_2_release)
3115
+++ b/src/libstdc++-v3/include/c_global/cstdio (.../branches/gcc-4_8-branch)
3124
Index: libstdc++-v3/ChangeLog
3125
===================================================================
3126
--- a/src/libstdc++-v3/ChangeLog (.../tags/gcc_4_8_2_release)
3127
+++ b/src/libstdc++-v3/ChangeLog (.../branches/gcc-4_8-branch)
3129
+2014-01-27 Jason Merrill <jason@redhat.com>
3134
+ * libsupc++/eh_throw.cc (__cxa_throw): Set uncaughtExceptions.
3135
+ * libsupc++/eh_alloc.cc (__cxa_allocate_dependent_exception)
3136
+ (__cxa_allocate_exception): Don't set it here.
3138
+2013-12-15 H.J. Lu <hongjiu.lu@intel.com>
3140
+ * config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt: Update.
3142
+2013-11-22 Jonathan Wakely <jwakely.gcc@gmail.com>
3144
+ * acinclude.m4 (libtool_VERSION): Bump.
3145
+ * configure: Regenerate.
3146
+ * doc/xml/manual/abi.xml: Update version information.
3148
+2013-11-05 Jonathan Wakely <jwakely.gcc@gmail.com>
3150
+ * doc/xml/manual/status_cxx2011.xml: Document aligned_union as
3153
+ * doc/xml/manual/spine.xml: Update copyright years.
3154
+ * doc/html/*: Regenerate.
3156
+2013-11-01 Paolo Carlini <paolo.carlini@oracle.com>
3158
+ PR libstdc++/58952
3159
+ * include/c_global/cstdio: Undef getchar.
3161
+2013-10-31 Jonathan Wakely <jwakely.gcc@gmail.com>
3163
+ * testsuite/20_util/shared_ptr/cons/58839.cc: Do not use
3164
+ default_delete<void>.
3166
+2013-10-30 Chris Studholme <cvs@cs.utoronto.ca>
3168
+ PR libstdc++/58912
3169
+ * include/bits/shared_ptr_base.h (_Sp_counted_ptr_inplace): Remove
3170
+ unnecessary initialization of storage buffer.
3172
+2013-10-29 Jonathan Wakely <jwakely.gcc@gmail.com>
3174
+ PR libstdc++/58839
3175
+ * include/bits/shared_ptr_base.h
3176
+ (__shared_ptr<T>::__shared_ptr(unique_ptr<U,D>&&)): Do not dereference
3178
+ * testsuite/20_util/shared_ptr/cons/58839.cc: New.
3180
+2013-10-20 Chris Jefferson <chris@bubblescope.net>
3181
+ Paolo Carlini <paolo.carlini@oracle.com>
3183
+ PR libstdc++/58800
3184
+ * include/bits/stl_algo.h (__unguarded_partition_pivot): Change
3185
+ __last - 2 to __last - 1.
3186
+ * testsuite/25_algorithms/nth_element/58800.cc: New
3188
+2013-10-16 François Dumont <fdumont@gcc.gnu.org>
3190
+ PR libstdc++/58191
3191
+ * include/debug/macros.h (__glibcxx_check_partitioned_lower): Add
3192
+ __gnu_debug::__base calls on iterators passed to internal debug
3194
+ (__glibcxx_check_partitioned_lower_pred): Likewise.
3195
+ (__glibcxx_check_partitioned_upper): Likewise.
3196
+ (__glibcxx_check_partitioned_upper_pred): Likewise.
3197
+ * include/debug/functions.h (__check_partitioned_lower):
3198
+ Remove code to detect safe iterators.
3199
+ (__check_partitioned_upper): Likewise.
3201
2013-10-16 Release Manager
3203
* GCC 4.8.2 released.
3204
Index: libstdc++-v3/libsupc++/eh_alloc.cc
3205
===================================================================
3206
--- a/src/libstdc++-v3/libsupc++/eh_alloc.cc (.../tags/gcc_4_8_2_release)
3207
+++ b/src/libstdc++-v3/libsupc++/eh_alloc.cc (.../branches/gcc-4_8-branch)
3208
@@ -129,12 +129,6 @@
3212
- // We have an uncaught exception as soon as we allocate memory. This
3213
- // yields uncaught_exception() true during the copy-constructor that
3214
- // initializes the exception object. See Issue 475.
3215
- __cxa_eh_globals *globals = __cxa_get_globals ();
3216
- globals->uncaughtExceptions += 1;
3218
memset (ret, 0, sizeof (__cxa_refcounted_exception));
3220
return (void *)((char *)ret + sizeof (__cxa_refcounted_exception));
3221
@@ -191,12 +185,6 @@
3225
- // We have an uncaught exception as soon as we allocate memory. This
3226
- // yields uncaught_exception() true during the copy-constructor that
3227
- // initializes the exception object. See Issue 475.
3228
- __cxa_eh_globals *globals = __cxa_get_globals ();
3229
- globals->uncaughtExceptions += 1;
3231
memset (ret, 0, sizeof (__cxa_dependent_exception));
3234
Index: libstdc++-v3/libsupc++/eh_throw.cc
3235
===================================================================
3236
--- a/src/libstdc++-v3/libsupc++/eh_throw.cc (.../tags/gcc_4_8_2_release)
3237
+++ b/src/libstdc++-v3/libsupc++/eh_throw.cc (.../branches/gcc-4_8-branch)
3240
PROBE2 (throw, obj, tinfo);
3242
+ __cxa_eh_globals *globals = __cxa_get_globals ();
3243
+ globals->uncaughtExceptions += 1;
3245
// Definitely a primary.
3246
__cxa_refcounted_exception *header
3247
= __get_refcounted_exception_header_from_obj (obj);
3248
Index: libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc
3249
===================================================================
3250
--- a/src/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc (.../tags/gcc_4_8_2_release)
3251
+++ b/src/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc (.../branches/gcc-4_8-branch)
3253
+// Copyright (C) 2013 Free Software Foundation, Inc.
3255
+// This file is part of the GNU ISO C++ Library. This library is free
3256
+// software; you can redistribute it and/or modify it under the
3257
+// terms of the GNU General Public License as published by the
3258
+// Free Software Foundation; either version 3, or (at your option)
3259
+// any later version.
3261
+// This library is distributed in the hope that it will be useful,
3262
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
3263
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3264
+// GNU General Public License for more details.
3266
+// You should have received a copy of the GNU General Public License along
3267
+// with this library; see the file COPYING3. If not see
3268
+// <http://www.gnu.org/licenses/>.
3270
+// 25.3.2 [lib.alg.nth.element]
3272
+// { dg-options "-std=gnu++11" }
3274
+#include <algorithm>
3275
+#include <testsuite_hooks.h>
3276
+#include <testsuite_iterators.h>
3278
+using __gnu_test::test_container;
3279
+using __gnu_test::random_access_iterator_wrapper;
3281
+typedef test_container<int, random_access_iterator_wrapper> Container;
3285
+ std::vector<int> v = {
3295
+ Container con(v.data(), v.data() + 7);
3297
+ std::nth_element(con.begin(), con.begin() + 3, con.end());
3305
Index: libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc
3306
===================================================================
3307
--- a/src/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc (.../tags/gcc_4_8_2_release)
3308
+++ b/src/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc (.../branches/gcc-4_8-branch)
3310
+// { dg-options "-std=gnu++11" }
3311
+// { dg-do compile }
3313
+// Copyright (C) 2013 Free Software Foundation, Inc.
3315
+// This file is part of the GNU ISO C++ Library. This library is free
3316
+// software; you can redistribute it and/or modify it under the
3317
+// terms of the GNU General Public License as published by the
3318
+// Free Software Foundation; either version 3, or (at your option)
3319
+// any later version.
3321
+// This library is distributed in the hope that it will be useful,
3322
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
3323
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3324
+// GNU General Public License for more details.
3326
+// You should have received a copy of the GNU General Public License along
3327
+// with this library; see the file COPYING3. If not see
3328
+// <http://www.gnu.org/licenses/>.
3335
+ void operator()(void*) const noexcept { }
3340
+ std::unique_ptr<void, D> y;
3341
+ std::shared_ptr<void> x = std::move(y);
3343
Index: libstdc++-v3/testsuite/20_util/bind/57899.cc
3344
===================================================================
3345
--- a/src/libstdc++-v3/testsuite/20_util/bind/57899.cc (.../tags/gcc_4_8_2_release)
3346
+++ b/src/libstdc++-v3/testsuite/20_util/bind/57899.cc (.../branches/gcc-4_8-branch)
3348
+// Copyright (C) 2010-2014 Free Software Foundation, Inc.
3350
+// This file is part of the GNU ISO C++ Library. This library is free
3351
+// software; you can redistribute it and/or modify it under the
3352
+// terms of the GNU General Public License as published by the
3353
+// Free Software Foundation; either version 3, or (at your option)
3354
+// any later version.
3356
+// This library is distributed in the hope that it will be useful,
3357
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
3358
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3359
+// GNU General Public License for more details.
3361
+// You should have received a copy of the GNU General Public License along
3362
+// with this library; see the file COPYING3. If not see
3363
+// <http://www.gnu.org/licenses/>.
3365
+// 20.7.11 Function template bind
3368
+// { dg-do compile }
3369
+// { dg-options -std=c++11 }
3371
+#include <functional>
3373
+using std::placeholders::_1;
3375
+struct S { int i; };
3381
+ const S& operator()(const P& p) const { return p.s; }
3384
+int gi(const S& s) { return s.i; }
3386
+bool cmp(int, int) { return true; }
3391
+ auto f1 = bind(gs, _1);
3392
+ auto f2 = bind(gi, f1);
3393
+ auto f3 = bind(cmp, f2, 5);
3396
Index: libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
3397
===================================================================
3398
--- a/src/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt (.../tags/gcc_4_8_2_release)
3399
+++ b/src/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt (.../branches/gcc-4_8-branch)
3401
FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE6getlocEv@@GLIBCXX_3.4
3402
FUNC:_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4
3403
FUNC:_ZNKSt15basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4
3404
+FUNC:_ZNKSt17bad_function_call4whatEv@@GLIBCXX_3.4.18
3405
FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4
3406
FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4
3407
FUNC:_ZNKSt18basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4
3409
FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewm@@GLIBCXX_3.4
3410
FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewx@@GLIBCXX_3.4
3411
FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewy@@GLIBCXX_3.4
3412
+FUNC:_ZNKSt8__detail20_Prime_rehash_policy11_M_next_bktEj@@GLIBCXX_3.4.18
3413
+FUNC:_ZNKSt8__detail20_Prime_rehash_policy14_M_need_rehashEjjj@@GLIBCXX_3.4.18
3414
FUNC:_ZNKSt8bad_cast4whatEv@@GLIBCXX_3.4.9
3415
FUNC:_ZNKSt8ios_base7failure4whatEv@@GLIBCXX_3.4
3416
FUNC:_ZNKSt8messagesIcE18_M_convert_to_charERKSs@@GLIBCXX_3.4
3417
@@ -1207,6 +1210,7 @@
3418
FUNC:_ZNSt11regex_errorD0Ev@@GLIBCXX_3.4.15
3419
FUNC:_ZNSt11regex_errorD1Ev@@GLIBCXX_3.4.15
3420
FUNC:_ZNSt11regex_errorD2Ev@@GLIBCXX_3.4.15
3421
+FUNC:_ZNSt11this_thread11__sleep_forENSt6chrono8durationIxSt5ratioILx1ELx1EEEENS1_IxS2_ILx1ELx1000000000EEEE@@GLIBCXX_3.4.18
3422
FUNC:_ZNSt12__basic_fileIcE2fdEv@@GLIBCXX_3.4
3423
FUNC:_ZNSt12__basic_fileIcE4fileEv@@GLIBCXX_3.4.1
3424
FUNC:_ZNSt12__basic_fileIcE4openEPKcSt13_Ios_Openmodei@@GLIBCXX_3.4
3425
@@ -1485,6 +1489,11 @@
3426
FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEt@@GLIBCXX_3.4
3427
FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEx@@GLIBCXX_3.4
3428
FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEy@@GLIBCXX_3.4
3429
+FUNC:_ZNSt13random_device14_M_init_pretr1ERKSs@@GLIBCXX_3.4.18
3430
+FUNC:_ZNSt13random_device16_M_getval_pretr1Ev@@GLIBCXX_3.4.18
3431
+FUNC:_ZNSt13random_device7_M_finiEv@@GLIBCXX_3.4.18
3432
+FUNC:_ZNSt13random_device7_M_initERKSs@@GLIBCXX_3.4.18
3433
+FUNC:_ZNSt13random_device9_M_getvalEv@@GLIBCXX_3.4.18
3434
FUNC:_ZNSt13runtime_errorC1ERKSs@@GLIBCXX_3.4
3435
FUNC:_ZNSt13runtime_errorC2ERKSs@@GLIBCXX_3.4
3436
FUNC:_ZNSt13runtime_errorD0Ev@@GLIBCXX_3.4
3437
@@ -1929,6 +1938,8 @@
3438
FUNC:_ZNSt6__norm15_List_node_base8transferEPS0_S1_@@GLIBCXX_3.4.9
3439
FUNC:_ZNSt6__norm15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14
3440
FUNC:_ZNSt6chrono12system_clock3nowEv@@GLIBCXX_3.4.11
3441
+FUNC:_ZNSt6chrono3_V212steady_clock3nowEv@@GLIBCXX_3.4.19
3442
+FUNC:_ZNSt6chrono3_V212system_clock3nowEv@@GLIBCXX_3.4.19
3443
FUNC:_ZNSt6gslice8_IndexerC1EjRKSt8valarrayIjES4_@@GLIBCXX_3.4
3444
FUNC:_ZNSt6gslice8_IndexerC2EjRKSt8valarrayIjES4_@@GLIBCXX_3.4
3445
FUNC:_ZNSt6locale11_M_coalesceERKS_S1_i@@GLIBCXX_3.4
3446
@@ -2467,6 +2478,7 @@
3447
FUNC:__cxa_guard_release@@CXXABI_1.3
3448
FUNC:__cxa_pure_virtual@@CXXABI_1.3
3449
FUNC:__cxa_rethrow@@CXXABI_1.3
3450
+FUNC:__cxa_thread_atexit@@CXXABI_1.3.7
3451
FUNC:__cxa_throw@@CXXABI_1.3
3452
FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
3453
FUNC:__cxa_vec_cctor@@CXXABI_1.3
3454
@@ -2491,6 +2503,7 @@
3455
OBJECT:0:CXXABI_1.3.4
3456
OBJECT:0:CXXABI_1.3.5
3457
OBJECT:0:CXXABI_1.3.6
3458
+OBJECT:0:CXXABI_1.3.7
3459
OBJECT:0:CXXABI_TM_1
3460
OBJECT:0:GLIBCXX_3.4
3461
OBJECT:0:GLIBCXX_3.4.1
3462
@@ -2502,6 +2515,8 @@
3463
OBJECT:0:GLIBCXX_3.4.15
3464
OBJECT:0:GLIBCXX_3.4.16
3465
OBJECT:0:GLIBCXX_3.4.17
3466
+OBJECT:0:GLIBCXX_3.4.18
3467
+OBJECT:0:GLIBCXX_3.4.19
3468
OBJECT:0:GLIBCXX_3.4.2
3469
OBJECT:0:GLIBCXX_3.4.3
3470
OBJECT:0:GLIBCXX_3.4.4
3471
@@ -3033,6 +3048,8 @@
3472
OBJECT:1:_ZNSt21__numeric_limits_base9is_moduloE@@GLIBCXX_3.4
3473
OBJECT:1:_ZNSt21__numeric_limits_base9is_signedE@@GLIBCXX_3.4
3474
OBJECT:1:_ZNSt6chrono12system_clock12is_monotonicE@@GLIBCXX_3.4.11
3475
+OBJECT:1:_ZNSt6chrono3_V212steady_clock9is_steadyE@@GLIBCXX_3.4.19
3476
+OBJECT:1:_ZNSt6chrono3_V212system_clock9is_steadyE@@GLIBCXX_3.4.19
3477
OBJECT:1:_ZSt10adopt_lock@@GLIBCXX_3.4.11
3478
OBJECT:1:_ZSt10defer_lock@@GLIBCXX_3.4.11
3479
OBJECT:1:_ZSt11try_to_lock@@GLIBCXX_3.4.11
3480
Index: libstdc++-v3/acinclude.m4
3481
===================================================================
3482
--- a/src/libstdc++-v3/acinclude.m4 (.../tags/gcc_4_8_2_release)
3483
+++ b/src/libstdc++-v3/acinclude.m4 (.../branches/gcc-4_8-branch)
3484
@@ -3266,7 +3266,7 @@
3487
# For libtool versioning info, format is CURRENT:REVISION:AGE
3488
-libtool_VERSION=6:18:0
3489
+libtool_VERSION=6:19:0
3491
# Everything parsed; figure out what files and settings to use.
3492
case $enable_symvers in
3493
Index: boehm-gc/include/private/gcconfig.h
3494
===================================================================
3495
--- a/src/boehm-gc/include/private/gcconfig.h (.../tags/gcc_4_8_2_release)
3496
+++ b/src/boehm-gc/include/private/gcconfig.h (.../branches/gcc-4_8-branch)
3497
@@ -837,7 +837,15 @@
3498
# define NO_PTHREAD_TRYLOCK
3501
+# if defined(__powerpc64__)
3502
+# define ALIGNMENT 8
3503
+# define CPP_WORDSZ 64
3505
+# define HBLKSIZE 4096
3508
# define ALIGNMENT 4
3510
# define OS_TYPE "FREEBSD"
3511
# ifndef GC_FREEBSD_THREADS
3512
# define MPROTECT_VDB
3513
Index: boehm-gc/ChangeLog
3514
===================================================================
3515
--- a/src/boehm-gc/ChangeLog (.../tags/gcc_4_8_2_release)
3516
+++ b/src/boehm-gc/ChangeLog (.../branches/gcc-4_8-branch)
3518
+2013-12-29 Andreas Tobler <andreast@gcc.gnu.org>
3521
+ * include/private/gcconfig.h: Add FreeBSD powerpc64 defines.
3523
2013-10-16 Release Manager
3525
* GCC 4.8.2 released.
3526
Index: contrib/ChangeLog
3527
===================================================================
3528
--- a/src/contrib/ChangeLog (.../tags/gcc_4_8_2_release)
3529
+++ b/src/contrib/ChangeLog (.../branches/gcc-4_8-branch)
3531
+2013-10-21 Mike Stump <mikestump@comcast.net>
3533
+ * gcc_update (configure): Update to handle svn 1.8.1.
3535
2013-10-16 Release Manager
3537
* GCC 4.8.2 released.
3538
Index: contrib/gcc_update
3539
===================================================================
3540
--- a/src/contrib/gcc_update (.../tags/gcc_4_8_2_release)
3541
+++ b/src/contrib/gcc_update (.../branches/gcc-4_8-branch)
3545
revision=`$GCC_SVN info | awk '/Revision:/ { print $2 }'`
3546
- branch=`$GCC_SVN info | sed -ne "/URL:/ {
3547
+ branch=`$GCC_SVN info | sed -ne "/^URL:/ {
3551
Index: libatomic/cas_n.c
3552
===================================================================
3553
--- a/src/libatomic/cas_n.c (.../tags/gcc_4_8_2_release)
3554
+++ b/src/libatomic/cas_n.c (.../branches/gcc-4_8-branch)
3556
#if !DONE && N <= WORDSIZE && defined(atomic_compare_exchange_w)
3558
SIZE(libat_compare_exchange) (UTYPE *mptr, UTYPE *eptr, UTYPE newval,
3559
- int smodel, int fmodel UNUSED)
3560
+ int smodel, int fmodel)
3562
UWORD mask, shift, weval, woldval, wnewval, t, *wptr;
3565
pre_barrier (smodel);
3569
while (!atomic_compare_exchange_w (wptr, &woldval, t, true,
3570
__ATOMIC_RELAXED, __ATOMIC_RELAXED));
3572
+ post_barrier (smodel);
3576
*eptr = woldval >> shift;
3578
- post_barrier (smodel);
3580
+ post_barrier (fmodel);
3585
@@ -102,18 +102,17 @@
3592
pre_seq_barrier (smodel);
3593
magic = protect_start (mptr);
3596
- if (oldval == *eptr)
3602
+ ret = (oldval == *eptr);
3608
protect_end (mptr, magic);
3609
post_seq_barrier (smodel);
3610
Index: libatomic/ChangeLog
3611
===================================================================
3612
--- a/src/libatomic/ChangeLog (.../tags/gcc_4_8_2_release)
3613
+++ b/src/libatomic/ChangeLog (.../branches/gcc-4_8-branch)
3615
+2014-02-20 Richard Henderson <rth@redhat.com>
3618
+ * cas_n.c (libat_compare_exchange): Conditionalize on failure
3619
+ the store back to EPTR.
3621
2013-10-16 Release Manager
3623
* GCC 4.8.2 released.
3624
Index: libbacktrace/configure
3625
===================================================================
3626
--- a/src/libbacktrace/configure (.../tags/gcc_4_8_2_release)
3627
+++ b/src/libbacktrace/configure (.../branches/gcc-4_8-branch)
3628
@@ -11667,12 +11667,13 @@
3632
-if ac_fn_c_try_compile "$LINENO"; then :
3633
+if ac_fn_c_try_link "$LINENO"; then :
3634
have_unwind_getipinfo=yes
3636
have_unwind_getipinfo=no
3638
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
3639
+rm -f core conftest.err conftest.$ac_objext \
3640
+ conftest$ac_exeext conftest.$ac_ext
3641
CFLAGS="$ac_save_CFLAGS"
3642
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_unwind_getipinfo" >&5
3643
$as_echo "$have_unwind_getipinfo" >&6; }
3644
Index: libbacktrace/Makefile.in
3645
===================================================================
3646
--- a/src/libbacktrace/Makefile.in (.../tags/gcc_4_8_2_release)
3647
+++ b/src/libbacktrace/Makefile.in (.../branches/gcc-4_8-branch)
3651
# Makefile.am -- Backtrace Makefile.
3652
-# Copyright (C) 2012 Free Software Foundation, Inc.
3653
+# Copyright (C) 2012-2013 Free Software Foundation, Inc.
3655
# Redistribution and use in source and binary forms, with or without
3656
# modification, are permitted provided that the following conditions are
3657
Index: libbacktrace/dwarf.c
3658
===================================================================
3659
--- a/src/libbacktrace/dwarf.c (.../tags/gcc_4_8_2_release)
3660
+++ b/src/libbacktrace/dwarf.c (.../branches/gcc-4_8-branch)
3661
@@ -2507,7 +2507,6 @@
3662
if (pfvec->count == 0)
3665
- addrs = (struct function_addrs *) pfvec->vec.base;
3666
addrs_count = pfvec->count;
3669
@@ -2514,12 +2513,17 @@
3671
if (!backtrace_vector_release (state, &lvec.vec, error_callback, data))
3673
+ addrs = (struct function_addrs *) pfvec->vec.base;
3677
/* Finish this list of addresses, but leave the remaining space in
3678
the vector available for the next function unit. */
3679
- backtrace_vector_finish (state, &fvec->vec);
3680
+ addrs = ((struct function_addrs *)
3681
+ backtrace_vector_finish (state, &fvec->vec,
3682
+ error_callback, data));
3683
+ if (addrs == NULL)
3688
Index: libbacktrace/ChangeLog
3689
===================================================================
3690
--- a/src/libbacktrace/ChangeLog (.../tags/gcc_4_8_2_release)
3691
+++ b/src/libbacktrace/ChangeLog (.../branches/gcc-4_8-branch)
3693
+2014-02-07 Misty De Meo <misty@brew.sh>
3696
+ * configure.ac: Use AC_LINK_IFELSE in check for
3697
+ _Unwind_GetIPInfo.
3698
+ * configure: Regenerate.
3700
+2013-12-05 Ian Lance Taylor <iant@google.com>
3702
+ * alloc.c (backtrace_vector_finish): Add error_callback and data
3703
+ parameters. Call backtrace_vector_release. Return address base.
3704
+ * mmap.c (backtrace_vector_finish): Add error_callback and data
3705
+ parameters. Return address base.
3706
+ * dwarf.c (read_function_info): Get new address base from
3707
+ backtrace_vector_finish.
3708
+ * internal.h (backtrace_vector_finish): Update declaration.
3710
+2013-11-30 Ian Lance Taylor <iant@google.com>
3712
+ Backport from mainline:
3713
+ 2013-10-17 Ian Lance Taylor <iant@google.com>
3715
+ * elf.c (elf_add): Don't get the wrong offsets if a debug section
3718
2013-10-16 Release Manager
3720
* GCC 4.8.2 released.
3721
Index: libbacktrace/elf.c
3722
===================================================================
3723
--- a/src/libbacktrace/elf.c (.../tags/gcc_4_8_2_release)
3724
+++ b/src/libbacktrace/elf.c (.../branches/gcc-4_8-branch)
3729
+ if (sections[i].size == 0)
3731
if (min_offset == 0 || sections[i].offset < min_offset)
3732
min_offset = sections[i].offset;
3733
end = sections[i].offset + sections[i].size;
3734
@@ -751,8 +753,13 @@
3737
for (i = 0; i < (int) DEBUG_MAX; ++i)
3738
- sections[i].data = ((const unsigned char *) debug_view.data
3739
- + (sections[i].offset - min_offset));
3741
+ if (sections[i].size == 0)
3742
+ sections[i].data = NULL;
3744
+ sections[i].data = ((const unsigned char *) debug_view.data
3745
+ + (sections[i].offset - min_offset));
3748
if (!backtrace_dwarf_add (state, base_address,
3749
sections[DEBUG_INFO].data,
3750
Index: libbacktrace/internal.h
3751
===================================================================
3752
--- a/src/libbacktrace/internal.h (.../tags/gcc_4_8_2_release)
3753
+++ b/src/libbacktrace/internal.h (.../branches/gcc-4_8-branch)
3754
@@ -192,13 +192,17 @@
3755
struct backtrace_vector *vec);
3757
/* Finish the current allocation on VEC. Prepare to start a new
3758
- allocation. The finished allocation will never be freed. */
3759
+ allocation. The finished allocation will never be freed. Returns
3760
+ a pointer to the base of the finished entries, or NULL on
3763
-extern void backtrace_vector_finish (struct backtrace_state *state,
3764
- struct backtrace_vector *vec);
3765
+extern void* backtrace_vector_finish (struct backtrace_state *state,
3766
+ struct backtrace_vector *vec,
3767
+ backtrace_error_callback error_callback,
3770
-/* Release any extra space allocated for VEC. Returns 1 on success, 0
3772
+/* Release any extra space allocated for VEC. This may change
3773
+ VEC->base. Returns 1 on success, 0 on failure. */
3775
extern int backtrace_vector_release (struct backtrace_state *state,
3776
struct backtrace_vector *vec,
3777
Index: libbacktrace/configure.ac
3778
===================================================================
3779
--- a/src/libbacktrace/configure.ac (.../tags/gcc_4_8_2_release)
3780
+++ b/src/libbacktrace/configure.ac (.../branches/gcc-4_8-branch)
3782
ac_save_CFFLAGS="$CFLAGS"
3783
CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
3784
AC_MSG_CHECKING([for _Unwind_GetIPInfo])
3785
- AC_COMPILE_IFELSE(
3788
[#include "unwind.h"
3789
struct _Unwind_Context *context;
3790
Index: libbacktrace/alloc.c
3791
===================================================================
3792
--- a/src/libbacktrace/alloc.c (.../tags/gcc_4_8_2_release)
3793
+++ b/src/libbacktrace/alloc.c (.../branches/gcc-4_8-branch)
3794
@@ -113,12 +113,24 @@
3796
/* Finish the current allocation on VEC. */
3799
-backtrace_vector_finish (struct backtrace_state *state ATTRIBUTE_UNUSED,
3800
- struct backtrace_vector *vec)
3802
+backtrace_vector_finish (struct backtrace_state *state,
3803
+ struct backtrace_vector *vec,
3804
+ backtrace_error_callback error_callback,
3807
- vec->base = (char *) vec->base + vec->size;
3810
+ /* With this allocator we call realloc in backtrace_vector_grow,
3811
+ which means we can't easily reuse the memory here. So just
3813
+ if (!backtrace_vector_release (state, vec, error_callback, data))
3822
/* Release any extra space allocated for VEC. */
3823
Index: libbacktrace/mmap.c
3824
===================================================================
3825
--- a/src/libbacktrace/mmap.c (.../tags/gcc_4_8_2_release)
3826
+++ b/src/libbacktrace/mmap.c (.../branches/gcc-4_8-branch)
3827
@@ -230,12 +230,19 @@
3829
/* Finish the current allocation on VEC. */
3832
-backtrace_vector_finish (struct backtrace_state *state ATTRIBUTE_UNUSED,
3833
- struct backtrace_vector *vec)
3835
+backtrace_vector_finish (
3836
+ struct backtrace_state *state ATTRIBUTE_UNUSED,
3837
+ struct backtrace_vector *vec,
3838
+ backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
3839
+ void *data ATTRIBUTE_UNUSED)
3844
vec->base = (char *) vec->base + vec->size;
3849
/* Release any extra space allocated for VEC. */
3850
Index: libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
3851
===================================================================
3852
--- a/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c (.../tags/gcc_4_8_2_release)
3853
+++ b/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c (.../branches/gcc-4_8-branch)
3855
#include <pango/pango.h>
3856
#include <pango/pangoft2.h>
3857
#include <pango/pangofc-font.h>
3858
-#include <freetype/ftglyph.h>
3859
-#include <freetype/ftoutln.h>
3860
-#include <freetype/fttypes.h>
3861
-#include <freetype/tttables.h>
3862
+#include <ft2build.h>
3863
+#include FT_GLYPH_H
3864
+#include FT_OUTLINE_H
3865
+#include FT_TYPES_H
3866
+#include FT_TRUETYPE_TABLES_H
3867
#include "gdkfont.h"
3868
#include "gtkpeer.h"
3869
#include "gnu_java_awt_peer_gtk_GdkFontPeer.h"
3870
Index: libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c
3871
===================================================================
3872
--- a/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c (.../tags/gcc_4_8_2_release)
3873
+++ b/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c (.../branches/gcc-4_8-branch)
3875
#include <pango/pango.h>
3876
#include <pango/pangoft2.h>
3877
#include <pango/pangofc-font.h>
3878
-#include <freetype/ftglyph.h>
3879
-#include <freetype/ftoutln.h>
3880
+#include <ft2build.h>
3881
+#include FT_GLYPH_H
3882
+#include FT_OUTLINE_H
3884
#include "gdkfont.h"
3885
#include "gnu_java_awt_peer_gtk_FreetypeGlyphVector.h"
3886
Index: libjava/classpath/ChangeLog.gcj
3887
===================================================================
3888
--- a/src/libjava/classpath/ChangeLog.gcj (.../tags/gcc_4_8_2_release)
3889
+++ b/src/libjava/classpath/ChangeLog.gcj (.../branches/gcc-4_8-branch)
3891
+2013-11-29 Matthias Klose <doko@ubuntu.com>
3893
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c,
3894
+ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c:
3895
+ Fix freetype includes.
3897
2013-03-22 Jakub Jelinek <jakub@redhat.com>
3900
Index: libjava/classpath
3901
===================================================================
3902
--- a/src/libjava/classpath (.../tags/gcc_4_8_2_release)
3903
+++ b/src/libjava/classpath (.../branches/gcc-4_8-branch)
3905
Property changes on: libjava/classpath
3906
___________________________________________________________________
3907
Modified: svn:mergeinfo
3908
Merged /trunk/libjava/classpath:r206395
3909
Index: gnattools/configure
3910
===================================================================
3911
--- a/src/gnattools/configure (.../tags/gcc_4_8_2_release)
3912
+++ b/src/gnattools/configure (.../branches/gcc-4_8-branch)
3913
@@ -2029,66 +2029,59 @@
3914
# Per-target case statement
3915
# -------------------------
3917
- alpha*-dec-vx*) # Unlike all other Vxworks
3919
+ TOOLS_TARGET_PAIRS="\
3920
+ mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
3921
+ indepsw.adb<indepsw-aix.adb"
3924
- | powerpc*-wrs-vxworks \
3925
- | sparc*-wrs-vx* \
3926
- | *86-wrs-vxworks \
3928
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb"
3930
+ TOOLS_TARGET_PAIRS="\
3931
+ mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \
3932
+ indepsw.adb<indepsw-darwin.adb"
3934
- sparc-sun-solaris*)
3935
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
3937
+ TOOLS_TARGET_PAIRS="\
3938
+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
3939
+ indepsw.adb<indepsw-gnu.adb"
3941
- *86-*-solaris2* | x86_64-*-solaris2.1[0-9]*)
3942
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
3945
- | powerpc*-*-linux* \
3946
- | *ia64-*-linux* \
3947
- | alpha*-*-linux* \
3948
- | sparc*-*-linux* \
3949
- | hppa*-*-linux* \
3950
- | *x86_64-*-linux*)
3952
TOOLS_TARGET_PAIRS="\
3953
mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
3954
indepsw.adb<indepsw-gnu.adb"
3957
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb"
3959
+ TOOLS_TARGET_PAIRS="\
3960
+ mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
3961
+ indepsw.adb<indepsw-gnu.adb"
3965
+ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
3968
TOOLS_TARGET_PAIRS="\
3969
- mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
3970
+ mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb \
3971
indepsw.adb<indepsw-gnu.adb"
3973
- hppa*-hp-hpux10*) # Unlike hpux11
3977
TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-hpux.adb"
3980
- TOOLS_TARGET_PAIRS="\
3981
- mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
3982
- indepsw.adb<indepsw-aix.adb"
3984
+ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-ia64-hpux.adb"
3986
- alpha*-dec-vms* | alpha*-dec-openvms* | alpha*-dec-vms* \
3987
- | alpha*-hp-vms* | alpha*-hp-openvms* | alpha*-hp-vms*)
3988
+ alpha*-*-vms* | alpha*-*-openvms*)
3989
TOOLS_TARGET_PAIRS="\
3990
mlib-tgt-specific.adb<mlib-tgt-specific-vms-alpha.adb \
3991
symbols.adb<symbols-vms.adb \
3992
symbols-processing.adb<symbols-processing-vms-alpha.adb"
3994
EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
3996
- ia64*-dec-vms* | ia64*-dec-openvms* | ia64*-dec-vms* \
3997
- | ia64*-hp-vms* | ia64*-hp-openvms* | ia64*-hp-vms*)
3998
+ ia64-*-vms* | ia64-*-openvms*)
3999
TOOLS_TARGET_PAIRS="\
4000
mlib-tgt-specific.adb<mlib-tgt-specific-vms-ia64.adb \
4001
symbols.adb<symbols-vms.adb \
4002
symbols-processing.adb<symbols-processing-vms-ia64.adb"
4004
EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
4006
*-*-cygwin32* | *-*-mingw32* | *-*-pe)
4007
@@ -2097,14 +2090,6 @@
4008
indepsw.adb<indepsw-mingw.adb"
4009
EXTRA_GNATTOOLS='../../gnatdll$(exeext)'
4012
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb"
4015
- TOOLS_TARGET_PAIRS="\
4016
- mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
4017
- indepsw.adb<indepsw-gnu.adb"
4021
# From user or toplevel makefile.
4022
Index: gnattools/Makefile.in
4023
===================================================================
4024
--- a/src/gnattools/Makefile.in (.../tags/gcc_4_8_2_release)
4025
+++ b/src/gnattools/Makefile.in (.../branches/gcc-4_8-branch)
4031
+host_alias = @host_alias@
4034
INSTALL_DATA = @INSTALL_DATA@
4036
TOOLS_FLAGS_TO_PASS_RE= \
4037
"CC=../../xgcc -B../../" \
4038
"CFLAGS=$(CFLAGS)" \
4039
+ "LDFLAGS=$(LDFLAGS)" \
4040
"ADAFLAGS=$(ADAFLAGS)" \
4041
"ADA_CFLAGS=$(ADA_CFLAGS)" \
4042
"INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
4046
# Variables for gnattools, cross
4047
+ifeq ($(build), $(host))
4048
+ GNATMAKE_FOR_HOST=gnatmake
4049
+ GNATLINK_FOR_HOST=gnatlink
4050
+ GNATBIND_FOR_HOST=gnatbind
4051
+ GNATLS_FOR_HOST=gnatls
4053
+ GNATMAKE_FOR_HOST=$(host_alias)-gnatmake
4054
+ GNATLINK_FOR_HOST=$(host_alias)-gnatlink
4055
+ GNATBIND_FOR_HOST=$(host_alias)-gnatbind
4056
+ GNATLS_FOR_HOST=$(host_alias)-gnatls
4059
+# Put the host RTS dir first in the PATH to hide the default runtime
4060
+# files that are among the sources
4061
+RTS_DIR:=$(strip $(subst \,/,$(shell $(GNATLS_FOR_HOST) -v | grep adalib )))
4063
TOOLS_FLAGS_TO_PASS_CROSS= \
4065
"CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
4067
"exeext=$(exeext)" \
4068
"fsrcdir=$(fsrcdir)" \
4069
"srcdir=$(fsrcdir)" \
4070
- "GNATMAKE=gnatmake" \
4071
- "GNATLINK=gnatlink" \
4072
- "GNATBIND=gnatbind" \
4073
+ "GNATMAKE=$(GNATMAKE_FOR_HOST)" \
4074
+ "GNATLINK=$(GNATLINK_FOR_HOST)" \
4075
+ "GNATBIND=$(GNATBIND_FOR_HOST)" \
4079
@@ -179,11 +198,6 @@
4080
$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
4081
$(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools
4083
-# For cross builds of gnattools,
4084
-# put the host RTS dir first in the PATH to hide the default runtime
4085
-# files that are among the sources
4086
-# FIXME: This should be done in configure.
4087
-RTS_DIR:=$(strip $(subst \,/,$(shell gnatls -v | grep adalib )))
4088
gnattools-cross: $(GCC_DIR)/stamp-tools
4090
$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
4091
Index: gnattools/configure.ac
4092
===================================================================
4093
--- a/src/gnattools/configure.ac (.../tags/gcc_4_8_2_release)
4094
+++ b/src/gnattools/configure.ac (.../branches/gcc-4_8-branch)
4096
# Per-target case statement
4097
# -------------------------
4099
- alpha*-dec-vx*) # Unlike all other Vxworks
4101
+ TOOLS_TARGET_PAIRS="\
4102
+ mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
4103
+ indepsw.adb<indepsw-aix.adb"
4106
- | powerpc*-wrs-vxworks \
4107
- | sparc*-wrs-vx* \
4108
- | *86-wrs-vxworks \
4110
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb"
4112
+ TOOLS_TARGET_PAIRS="\
4113
+ mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \
4114
+ indepsw.adb<indepsw-darwin.adb"
4116
- sparc-sun-solaris*)
4117
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
4119
+ TOOLS_TARGET_PAIRS="\
4120
+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
4121
+ indepsw.adb<indepsw-gnu.adb"
4123
- *86-*-solaris2* | x86_64-*-solaris2.1[[0-9]]*)
4124
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
4127
- | powerpc*-*-linux* \
4128
- | *ia64-*-linux* \
4129
- | alpha*-*-linux* \
4130
- | sparc*-*-linux* \
4131
- | hppa*-*-linux* \
4132
- | *x86_64-*-linux*)
4134
TOOLS_TARGET_PAIRS="\
4135
mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
4136
indepsw.adb<indepsw-gnu.adb"
4139
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb"
4141
+ TOOLS_TARGET_PAIRS="\
4142
+ mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
4143
+ indepsw.adb<indepsw-gnu.adb"
4147
+ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
4150
TOOLS_TARGET_PAIRS="\
4151
- mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
4152
+ mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb \
4153
indepsw.adb<indepsw-gnu.adb"
4155
- hppa*-hp-hpux10*) # Unlike hpux11
4159
TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-hpux.adb"
4162
- TOOLS_TARGET_PAIRS="\
4163
- mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
4164
- indepsw.adb<indepsw-aix.adb"
4166
+ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-ia64-hpux.adb"
4168
- alpha*-dec-vms* | alpha*-dec-openvms* | alpha*-dec-vms* \
4169
- | alpha*-hp-vms* | alpha*-hp-openvms* | alpha*-hp-vms*)
4170
+ alpha*-*-vms* | alpha*-*-openvms*)
4171
TOOLS_TARGET_PAIRS="\
4172
mlib-tgt-specific.adb<mlib-tgt-specific-vms-alpha.adb \
4173
symbols.adb<symbols-vms.adb \
4174
symbols-processing.adb<symbols-processing-vms-alpha.adb"
4176
EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
4178
- ia64*-dec-vms* | ia64*-dec-openvms* | ia64*-dec-vms* \
4179
- | ia64*-hp-vms* | ia64*-hp-openvms* | ia64*-hp-vms*)
4180
+ ia64-*-vms* | ia64-*-openvms*)
4181
TOOLS_TARGET_PAIRS="\
4182
mlib-tgt-specific.adb<mlib-tgt-specific-vms-ia64.adb \
4183
symbols.adb<symbols-vms.adb \
4184
symbols-processing.adb<symbols-processing-vms-ia64.adb"
4186
EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
4188
*-*-cygwin32* | *-*-mingw32* | *-*-pe)
4189
@@ -137,14 +130,6 @@
4190
indepsw.adb<indepsw-mingw.adb"
4191
EXTRA_GNATTOOLS='../../gnatdll$(exeext)'
4194
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb"
4197
- TOOLS_TARGET_PAIRS="\
4198
- mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
4199
- indepsw.adb<indepsw-gnu.adb"
4203
# From user or toplevel makefile.
4204
Index: gnattools/ChangeLog
4205
===================================================================
4206
--- a/src/gnattools/ChangeLog (.../tags/gcc_4_8_2_release)
4207
+++ b/src/gnattools/ChangeLog (.../branches/gcc-4_8-branch)
4209
+2013-12-12 Eric Botcazou <ebotcazou@adacore.com>
4210
+ Iain Sandoe <iain@codesourcery.com>
4213
+ * Makefile.in (host): Define.
4214
+ (host_alias): Likewise.
4215
+ (TOOLS_FLAGS_TO_PASS_RE): Add LDFLAGS.
4216
+ (GNATMAKE_FOR_HOST): Define.
4217
+ (GNATLINK_FOR_HOST): Likewise.
4218
+ (GNATBIND_FOR_HOST): Likewise.
4219
+ (GNATLS_FOR_HOST): Likewise.
4220
+ (RTS_DIR): Move around and use GNATLS_FOR_HOST.
4221
+ (TOOLS_FLAGS_TO_PASS_CROSS): Use the other *_HOST variables.
4223
+2013-12-04 Eric Botcazou <ebotcazou@adacore.com>
4226
+ * configure.ac (target parameterization): Rewrite.
4227
+ * configure: Regenerate.
4229
2013-10-16 Release Manager
4231
* GCC 4.8.2 released.
4232
Index: maintainer-scripts/ChangeLog
4233
===================================================================
4234
--- a/src/maintainer-scripts/ChangeLog (.../tags/gcc_4_8_2_release)
4235
+++ b/src/maintainer-scripts/ChangeLog (.../branches/gcc-4_8-branch)
4237
+2014-02-01 Dmitry Gorbachev <d.g.gorbachev@gmail.com>
4240
+ * gcc_release: Avoid printing empty line to generated MD5SUMS files.
4241
+ Bump copyright year.
4243
2013-10-16 Release Manager
4245
* GCC 4.8.2 released.
4246
Index: maintainer-scripts/gcc_release
4247
===================================================================
4248
--- a/src/maintainer-scripts/gcc_release (.../tags/gcc_4_8_2_release)
4249
+++ b/src/maintainer-scripts/gcc_release (.../branches/gcc-4_8-branch)
4252
# Script to create a GCC release.
4254
-# Copyright (c) 2001, 2002, 2006, 2009, 2010, 2011 Free Software Foundation.
4255
+# Copyright (c) 2001-2014 Free Software Foundation.
4257
# This file is part of GCC.
4262
# md5sum -c MD5SUMS | grep -v \"OK$\"
4267
sed -e 's:^\./::' -e '/MD5SUMS/d' |
4268
Index: libgcc/config.host
4269
===================================================================
4270
--- a/src/libgcc/config.host (.../tags/gcc_4_8_2_release)
4271
+++ b/src/libgcc/config.host (.../branches/gcc-4_8-branch)
4272
@@ -331,10 +331,10 @@
4274
arm*-*-uclinux*) # ARM ucLinux
4275
tmake_file="${tmake_file} t-fixedpoint-gnu-prefix"
4276
+ tmake_file="$tmake_file arm/t-arm arm/t-elf t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
4277
tmake_file="${tmake_file} arm/t-bpabi"
4278
tm_file="$tm_file arm/bpabi-lib.h"
4279
unwind_header=config/arm/unwind-arm.h
4280
- tmake_file="$tmake_file arm/t-arm arm/t-elf t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
4281
extra_parts="$extra_parts crti.o crtn.o"
4283
arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems*)
4284
@@ -718,6 +718,10 @@
4285
tmake_file="${tmake_file} microblaze/t-microblaze t-fdpbit"
4286
extra_parts="$extra_parts crtbeginS.o crtendS.o crtbeginT.o crti.o crtn.o"
4288
+microblaze*-*-rtems*)
4289
+ tmake_file="${tmake_file} microblaze/t-microblaze t-fdpbit"
4290
+ extra_parts="$extra_parts crtbeginS.o crtendS.o crtbeginT.o crti.o crtn.o"
4292
mips*-*-netbsd*) # NetBSD/mips, either endian.
4294
mips*-*-linux*) # Linux MIPS, either endian.
4295
@@ -1098,7 +1102,7 @@
4296
extra_parts="$extra_parts crti.o crtn.o"
4299
- tmake_file="$tmake_file xtensa/t-xtensa xtensa/t-linux"
4300
+ tmake_file="$tmake_file xtensa/t-xtensa xtensa/t-linux t-slibgcc-libgcc"
4301
md_unwind_header=xtensa/linux-unwind.h
4304
Index: libgcc/ChangeLog
4305
===================================================================
4306
--- a/src/libgcc/ChangeLog (.../tags/gcc_4_8_2_release)
4307
+++ b/src/libgcc/ChangeLog (.../branches/gcc-4_8-branch)
4309
+2014-02-28 Joey Ye <joey.ye@arm.com>
4311
+ Backport from mainline r208229
4312
+ 2014-02-28 Joey Ye <joey.ye@arm.com>
4315
+ * config/arm/sfp-machine.h (_FP_NANFRAC_H,
4316
+ _FP_NANFRAC_S, _FP_NANFRAC_D, _FP_NANFRAC_Q):
4319
+2014-02-18 Kai Tietz <ktietz@redhat.com>
4320
+ Jonathan Schleifer <js@webkeks.org>
4323
+ * unwind-seh.c (_GCC_specific_handler): Pass proper
4324
+ value to unwind-handler.
4326
+2014-01-25 Walter Lee <walt@tilera.com>
4328
+ Backport from mainline
4329
+ 2014-01-25 Walter Lee <walt@tilera.com>
4331
+ * config/tilepro/atomic.c (pre_atomic_barrier): Mark inline.
4332
+ (post_atomic_barrier): Ditto.
4333
+ (__fetch_and_do): New macro.
4334
+ (__atomic_fetch_and_do): Use __fetch_and_do.
4335
+ (__sync_fetch_and_do): New macro.
4336
+ (__sync_fetch_and_add_4): New function.
4337
+ (__sync_fetch_and_sub_4): New function.
4338
+ (__sync_fetch_and_or_4): New function.
4339
+ (__sync_fetch_and_and_4): New function.
4340
+ (__sync_fetch_and_xor_4): New function.
4341
+ (__sync_fetch_and_nand_4): New function.
4342
+ (__sync_fetch_and_add_8): New function.
4343
+ (__sync_fetch_and_sub_8): New function.
4344
+ (__sync_fetch_and_or_8): New function.
4345
+ (__sync_fetch_and_and_8): New function.
4346
+ (__sync_fetch_and_xor_8): New function.
4347
+ (__sync_fetch_and_nand_8): New function.
4348
+ (__do_and_fetch): New macro.
4349
+ (__atomic_do_and_fetch): Use __do_and_fetch.
4350
+ (__sync_do_and_fetch): New macro.
4351
+ (__sync_add_and_fetch_4): New function.
4352
+ (__sync_sub_and_fetch_4): New function.
4353
+ (__sync_or_and_fetch_4): New function.
4354
+ (__sync_and_and_fetch_4): New function.
4355
+ (__sync_xor_and_fetch_4): New function.
4356
+ (__sync_nand_and_fetch_4): New function.
4357
+ (__sync_add_and_fetch_8): New function.
4358
+ (__sync_sub_and_fetch_8): New function.
4359
+ (__sync_or_and_fetch_8): New function.
4360
+ (__sync_and_and_fetch_8): New function.
4361
+ (__sync_xor_and_fetch_8): New function.
4362
+ (__sync_nand_and_fetch_8): New function.
4363
+ (__sync_exchange_methods): New macro.
4364
+ (__sync_val_compare_and_swap_4): New function.
4365
+ (__sync_bool_compare_and_swap_4): New function.
4366
+ (__sync_lock_test_and_test_4): New function.
4367
+ (__sync_val_compare_and_swap_8): New function.
4368
+ (__sync_bool_compare_and_swap_8): New function.
4369
+ (__sync_lock_test_and_test_8): New function.
4370
+ (__subword_cmpxchg_body): New macro.
4371
+ (__atomic_compare_exchange_1): Use __subword_cmpxchg_body.
4372
+ (__atomic_compare_exchange_2): Ditto.
4373
+ (__sync_subword_cmpxchg): New macro.
4374
+ (__sync_val_compare_and_swap_1): New function.
4375
+ (__sync_bool_compare_and_swap_1): New function.
4376
+ (__sync_val_compare_and_swap_2): New function.
4377
+ (__sync_bool_compare_and_swap_2): New function.
4378
+ (__atomic_subword): Rename to ...
4379
+ (__subword): ... New name.
4380
+ (__atomic_subword_fetch): Use __subword.
4381
+ (__sync_subword_fetch): New macro.
4382
+ (__sync_fetch_and_add_1): New function.
4383
+ (__sync_fetch_and_sub_1): New function.
4384
+ (__sync_fetch_and_or_1): New function.
4385
+ (__sync_fetch_and_and_1): New function.
4386
+ (__sync_fetch_and_xor_1): New function.
4387
+ (__sync_fetch_and_nand_1): New function.
4388
+ (__sync_fetch_and_add_2): New function.
4389
+ (__sync_fetch_and_sub_2): New function.
4390
+ (__sync_fetch_and_or_2): New function.
4391
+ (__sync_fetch_and_and_2): New function.
4392
+ (__sync_fetch_and_xor_2): New function.
4393
+ (__sync_fetch_and_nand_2): New function.
4394
+ (__sync_add_and_fetch_1): New function.
4395
+ (__sync_sub_and_fetch_1): New function.
4396
+ (__sync_or_and_fetch_1): New function.
4397
+ (__sync_and_and_fetch_1): New function.
4398
+ (__sync_xor_and_fetch_1): New function.
4399
+ (__sync_nand_and_fetch_1): New function.
4400
+ (__sync_add_and_fetch_2): New function.
4401
+ (__sync_sub_and_fetch_2): New function.
4402
+ (__sync_or_and_fetch_2): New function.
4403
+ (__sync_and_and_fetch_2): New function.
4404
+ (__sync_xor_and_fetch_2): New function.
4405
+ (__sync_nand_and_fetch_2): New function.
4406
+ (__atomic_subword_lock): Use __subword.
4407
+ (__sync_subword_lock): New macro.
4408
+ (__sync_lock_test_and_set_1): New function.
4409
+ (__sync_lock_test_and_set_2): New function.
4411
+2014-01-25 Walter Lee <walt@tilera.com>
4413
+ Backport from mainline
4414
+ 2014-01-25 Walter Lee <walt@tilera.com>
4416
+ * config/tilepro/atomic.c (BIT_OFFSET): Define.
4417
+ (__atomic_subword_cmpxchg): Use BIT_OFFSET.
4418
+ (__atomic_subword): Ditto.
4420
+2014-01-25 Walter Lee <walt@tilera.com>
4422
+ Backport from mainline
4423
+ 2014-01-25 Walter Lee <walt@tilera.com>
4425
+ * config/tilepro/atomic.c (__atomic_do_and_fetch): Add
4426
+ a prefix op argument.
4427
+ (__atomic_nand_fetch_4): Add prefix op.
4428
+ (__atomic_nand_fetch_8): Ditto.
4430
+2014-01-21 Baruch Siach <barch@tkos.co.il>
4432
+ * config.host (tmake_file): add t-slibgcc-libgcc for xtensa*-*-linux*.
4434
+2014-01-03 Joseph Myers <joseph@codesourcery.com>
4436
+ * config/rs6000/ibm-ldouble.c (__gcc_qdiv): Scale up arguments in
4437
+ case of small numerator and finite nonzero result.
4439
+2013-12-12 Zhenqiang Chen <zhenqiang.chen@arm.com>
4441
+ Backport from trunk r205917.
4442
+ 2013-12-12 Zhenqiang Chen <zhenqiang.chen@arm.com>
4443
+ * config.host (arm*-*-uclinux*): Move t-arm before t-bpabi.
4445
+2013-12-10 Uros Bizjak <ubizjak@gmail.com>
4447
+ * config/i386/sfp-exceptions.c (__sfp_handle_exceptions): Emit SSE
4448
+ instructions when __SSE_MATH__ is defined.
4450
+2013-12-06 Ralf Corsépius <ralf.corsepius@rtems.org>
4452
+ * config.host (microblaze-*-rtems*): New.
4454
+2013-11-10 Kai Tietz <ktietz@redhat.com>
4456
+ Back-merged from trunk
4457
+ * config/i386/cygming-crtbegin.c (__gcc_register_frame):
4458
+ Increment load-count on use of LIBGCC_SONAME DLL.
4459
+ (hmod_libgcc): New static variable to hold handle of
4460
+ LIBGCC_SONAME DLL.
4461
+ (__gcc_deregister_frame): Decrement load-count of
4462
+ LIBGCC_SONAME DLL.
4464
+2013-11-07 Uros Bizjak <ubizjak@gmail.com>
4466
+ * config/i386/sfp-exceptions.c (__sfp_handle_exceptions): Handle
4467
+ FP_EX_DENORM. Store result to volatile location after SSE division
4468
+ to close interrupt window. Remove unneeded fwait after x87
4469
+ division since interrupt window will be closed by emitted fstp.
4470
+ Rewrite FP_EX_INEXACT handling.
4472
2013-10-16 Release Manager
4474
* GCC 4.8.2 released.
4476
* config/mips/crtn.S (fini, init): New labels.
4478
2012-02-19 Edgar E. Iglesias <edgar.iglesias@gmail.com>
4479
- * config/microblaze/modsi3.S (modsi3): Fix case with 0x80000000
4480
+ * config/microblaze/modsi3.S (modsi3): Fix case with 0x80000000
4483
2013-02-16 Alan Modra <amodra@gmail.com>
4484
Index: libgcc/config/i386/sfp-exceptions.c
4485
===================================================================
4486
--- a/src/libgcc/config/i386/sfp-exceptions.c (.../tags/gcc_4_8_2_release)
4487
+++ b/src/libgcc/config/i386/sfp-exceptions.c (.../branches/gcc-4_8-branch)
4489
if (_fex & FP_EX_INVALID)
4493
+#ifdef __SSE_MATH__
4494
+ volatile float r __attribute__ ((unused));
4495
asm volatile ("%vdivss\t{%0, %d0|%d0, %0}" : "+x" (f));
4496
+ r = f; /* Needed to trigger exception. */
4498
asm volatile ("fdiv\t{%y0, %0|%0, %y0}" : "+t" (f));
4499
- asm volatile ("fwait");
4500
+ /* No need for fwait, exception is triggered by emitted fstp. */
4503
+ if (_fex & FP_EX_DENORM)
4506
+ asm volatile ("fnstenv\t%0" : "=m" (temp));
4507
+ temp.__status_word |= FP_EX_DENORM;
4508
+ asm volatile ("fldenv\t%0" : : "m" (temp));
4509
+ asm volatile ("fwait");
4511
if (_fex & FP_EX_DIVZERO)
4513
float f = 1.0f, g = 0.0f;
4515
+#ifdef __SSE_MATH__
4516
+ volatile float r __attribute__ ((unused));
4517
asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g));
4518
+ r = f; /* Needed to trigger exception. */
4520
asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g));
4521
- asm volatile ("fwait");
4522
+ /* No need for fwait, exception is triggered by emitted fstp. */
4525
if (_fex & FP_EX_OVERFLOW)
4528
if (_fex & FP_EX_INEXACT)
4531
- asm volatile ("fnstenv\t%0" : "=m" (temp));
4532
- temp.__status_word |= FP_EX_INEXACT;
4533
- asm volatile ("fldenv\t%0" : : "m" (temp));
4534
- asm volatile ("fwait");
4535
+ float f = 1.0f, g = 3.0f;
4536
+#ifdef __SSE_MATH__
4537
+ volatile float r __attribute__ ((unused));
4538
+ asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g));
4539
+ r = f; /* Needed to trigger exception. */
4541
+ asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g));
4542
+ /* No need for fwait, exception is triggered by emitted fstp. */
4547
Index: libgcc/config/i386/cygming-crtbegin.c
4548
===================================================================
4549
--- a/src/libgcc/config/i386/cygming-crtbegin.c (.../tags/gcc_4_8_2_release)
4550
+++ b/src/libgcc/config/i386/cygming-crtbegin.c (.../branches/gcc-4_8-branch)
4554
static struct object obj;
4556
+/* Handle of libgcc's DLL reference. */
4557
+HANDLE hmod_libgcc;
4560
#if TARGET_USE_JCR_SECTION
4563
void (*register_frame_fn) (const void *, struct object *);
4564
HANDLE h = GetModuleHandle (LIBGCC_SONAME);
4567
- register_frame_fn = (void (*) (const void *, struct object *))
4568
- GetProcAddress (h, "__register_frame_info");
4570
+ /* Increasing the load-count of LIBGCC_SONAME DLL. */
4571
+ hmod_libgcc = LoadLibrary (LIBGCC_SONAME);
4572
+ register_frame_fn = (void (*) (const void *, struct object *))
4573
+ GetProcAddress (h, "__register_frame_info");
4576
register_frame_fn = __register_frame_info;
4577
if (register_frame_fn)
4579
deregister_frame_fn = __deregister_frame_info;
4580
if (deregister_frame_fn)
4581
deregister_frame_fn (__EH_FRAME_BEGIN__);
4583
+ FreeLibrary (hmod_libgcc);
4586
Index: libgcc/config/rs6000/ibm-ldouble.c
4587
===================================================================
4588
--- a/src/libgcc/config/rs6000/ibm-ldouble.c (.../tags/gcc_4_8_2_release)
4589
+++ b/src/libgcc/config/rs6000/ibm-ldouble.c (.../branches/gcc-4_8-branch)
4590
@@ -188,7 +188,16 @@
4594
- /* Finite nonzero result requires corrections to the highest order term. */
4595
+ /* Finite nonzero result requires corrections to the highest order
4596
+ term. These corrections require the low part of c * t to be
4597
+ exactly represented in double. */
4598
+ if (fabs (a) <= 0x1p-969)
4606
s = c * t; /* (s,sigma) = c*t exactly. */
4607
w = -(-b + d * t); /* Written to get fnmsub for speed, but not
4608
Index: libgcc/config/tilepro/atomic.c
4609
===================================================================
4610
--- a/src/libgcc/config/tilepro/atomic.c (.../tags/gcc_4_8_2_release)
4611
+++ b/src/libgcc/config/tilepro/atomic.c (.../branches/gcc-4_8-branch)
4613
/* This code should be inlined by the compiler, but for now support
4614
it as out-of-line methods in libgcc. */
4618
pre_atomic_barrier (int model)
4620
switch ((enum memmodel) model)
4627
post_atomic_barrier (int model)
4629
switch ((enum memmodel) model)
4632
#define __unused __attribute__((unused))
4634
-#define __atomic_fetch_and_do(type, size, opname) \
4636
-__atomic_fetch_##opname##_##size(type* p, type i, int model) \
4637
+#define __fetch_and_do(proto, type, size, opname, top, bottom) \
4640
- pre_atomic_barrier(model); \
4642
type rv = arch_atomic_##opname(p, i); \
4643
- post_atomic_barrier(model); \
4648
+#define __atomic_fetch_and_do(type, size, opname) \
4649
+ __fetch_and_do(type __atomic_fetch_##opname##_##size(type* p, type i, int model), \
4650
+ type, size, opname, \
4651
+ pre_atomic_barrier(model), \
4652
+ post_atomic_barrier(model)) \
4654
__atomic_fetch_and_do (int, 4, add)
4655
__atomic_fetch_and_do (int, 4, sub)
4656
__atomic_fetch_and_do (int, 4, or)
4658
__atomic_fetch_and_do (long long, 8, and)
4659
__atomic_fetch_and_do (long long, 8, xor)
4660
__atomic_fetch_and_do (long long, 8, nand)
4661
-#define __atomic_do_and_fetch(type, size, opname, op) \
4663
-__atomic_##opname##_fetch_##size(type* p, type i, int model) \
4665
- pre_atomic_barrier(model); \
4666
- type rv = arch_atomic_##opname(p, i) op i; \
4667
- post_atomic_barrier(model); \
4670
+#define __sync_fetch_and_do(type, size, opname) \
4671
+ __fetch_and_do(type __sync_fetch_and_##opname##_##size(type* p, type i), \
4672
+ type, size, opname, \
4673
+ arch_atomic_write_barrier(), \
4674
+ arch_atomic_read_barrier())
4676
+__sync_fetch_and_do (int, 4, add)
4677
+__sync_fetch_and_do (int, 4, sub)
4678
+__sync_fetch_and_do (int, 4, or)
4679
+__sync_fetch_and_do (int, 4, and)
4680
+__sync_fetch_and_do (int, 4, xor)
4681
+__sync_fetch_and_do (int, 4, nand)
4682
+__sync_fetch_and_do (long long, 8, add)
4683
+__sync_fetch_and_do (long long, 8, sub)
4684
+__sync_fetch_and_do (long long, 8, or)
4685
+__sync_fetch_and_do (long long, 8, and)
4686
+__sync_fetch_and_do (long long, 8, xor)
4687
+__sync_fetch_and_do (long long, 8, nand)
4689
+#define __do_and_fetch(proto, type, size, opname, op, op2, top, bottom) \
4693
+ type rv = op2 (arch_atomic_##opname(p, i) op i); \
4697
-__atomic_do_and_fetch (int, 4, add, +)
4698
-__atomic_do_and_fetch (int, 4, sub, -)
4699
-__atomic_do_and_fetch (int, 4, or, |)
4700
-__atomic_do_and_fetch (int, 4, and, &)
4701
-__atomic_do_and_fetch (int, 4, xor, |)
4702
-__atomic_do_and_fetch (int, 4, nand, &)
4703
-__atomic_do_and_fetch (long long, 8, add, +)
4704
-__atomic_do_and_fetch (long long, 8, sub, -)
4705
-__atomic_do_and_fetch (long long, 8, or, |)
4706
-__atomic_do_and_fetch (long long, 8, and, &)
4707
-__atomic_do_and_fetch (long long, 8, xor, |)
4708
-__atomic_do_and_fetch (long long, 8, nand, &)
4710
+#define __atomic_do_and_fetch(type, size, opname, op, op2) \
4711
+ __do_and_fetch(type __atomic_##opname##_fetch_##size(type* p, type i, int model), \
4712
+ type, size, opname, op, op2, \
4713
+ pre_atomic_barrier(model), \
4714
+ post_atomic_barrier(model)) \
4716
+__atomic_do_and_fetch (int, 4, add, +, )
4717
+__atomic_do_and_fetch (int, 4, sub, -, )
4718
+__atomic_do_and_fetch (int, 4, or, |, )
4719
+__atomic_do_and_fetch (int, 4, and, &, )
4720
+__atomic_do_and_fetch (int, 4, xor, |, )
4721
+__atomic_do_and_fetch (int, 4, nand, &, ~)
4722
+__atomic_do_and_fetch (long long, 8, add, +, )
4723
+__atomic_do_and_fetch (long long, 8, sub, -, )
4724
+__atomic_do_and_fetch (long long, 8, or, |, )
4725
+__atomic_do_and_fetch (long long, 8, and, &, )
4726
+__atomic_do_and_fetch (long long, 8, xor, |, )
4727
+__atomic_do_and_fetch (long long, 8, nand, &, ~)
4729
+#define __sync_do_and_fetch(type, size, opname, op, op2) \
4730
+ __do_and_fetch(type __sync_##opname##_and_fetch_##size(type* p, type i), \
4731
+ type, size, opname, op, op2, \
4732
+ arch_atomic_write_barrier(), \
4733
+ arch_atomic_read_barrier()) \
4735
+__sync_do_and_fetch (int, 4, add, +, )
4736
+__sync_do_and_fetch (int, 4, sub, -, )
4737
+__sync_do_and_fetch (int, 4, or, |, )
4738
+__sync_do_and_fetch (int, 4, and, &, )
4739
+__sync_do_and_fetch (int, 4, xor, |, )
4740
+__sync_do_and_fetch (int, 4, nand, &, ~)
4741
+__sync_do_and_fetch (long long, 8, add, +, )
4742
+__sync_do_and_fetch (long long, 8, sub, -, )
4743
+__sync_do_and_fetch (long long, 8, or, |, )
4744
+__sync_do_and_fetch (long long, 8, and, &, )
4745
+__sync_do_and_fetch (long long, 8, xor, |, )
4746
+__sync_do_and_fetch (long long, 8, nand, &, ~)
4748
#define __atomic_exchange_methods(type, size) \
4750
__atomic_compare_exchange_##size(volatile type* ptr, type* oldvalp, \
4751
@@ -128,49 +179,117 @@
4752
post_atomic_barrier(model); \
4756
__atomic_exchange_methods (int, 4)
4757
__atomic_exchange_methods (long long, 8)
4759
+#define __sync_exchange_methods(type, size) \
4761
+__sync_val_compare_and_swap_##size(type* ptr, type oldval, type newval) \
4763
+ arch_atomic_write_barrier(); \
4764
+ type retval = arch_atomic_val_compare_and_exchange(ptr, oldval, newval); \
4765
+ arch_atomic_read_barrier(); \
4770
+__sync_bool_compare_and_swap_##size(type* ptr, type oldval, type newval) \
4772
+ arch_atomic_write_barrier(); \
4773
+ bool retval = arch_atomic_bool_compare_and_exchange(ptr, oldval, newval); \
4774
+ arch_atomic_read_barrier(); \
4779
+__sync_lock_test_and_set_##size(type* ptr, type val) \
4781
+ type retval = arch_atomic_exchange(ptr, val); \
4782
+ arch_atomic_acquire_barrier_value(retval); \
4786
+__sync_exchange_methods (int, 4)
4787
+__sync_exchange_methods (long long, 8)
4789
+#ifdef __LITTLE_ENDIAN__
4790
+#define BIT_OFFSET(n, type) ((n) * 8)
4792
+#define BIT_OFFSET(n, type) ((4 - sizeof(type) - (n)) * 8)
4795
/* Subword methods require the same approach for both TILEPro and
4796
TILE-Gx. We load the background data for the word, insert the
4797
desired subword piece, then compare-and-exchange it into place. */
4798
#define u8 unsigned char
4799
#define u16 unsigned short
4801
+#define __subword_cmpxchg_body(type, size, ptr, guess, val) \
4803
+ unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL); \
4804
+ const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type); \
4805
+ const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1; \
4806
+ const unsigned int bgmask = ~(valmask << shift); \
4807
+ unsigned int oldword = *p; \
4808
+ type oldval = (oldword >> shift) & valmask; \
4809
+ if (__builtin_expect((oldval == guess), 1)) { \
4810
+ unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
4811
+ oldword = arch_atomic_val_compare_and_exchange(p, oldword, word); \
4812
+ oldval = (oldword >> shift) & valmask; \
4817
#define __atomic_subword_cmpxchg(type, size) \
4820
-__atomic_compare_exchange_##size(volatile type* ptr, type* guess, \
4821
+__atomic_compare_exchange_##size(volatile type* ptr, type* guess_ptr, \
4822
type val, bool weak __unused, int models, \
4823
int modelf __unused) \
4825
pre_atomic_barrier(models); \
4826
- unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL); \
4827
- const int shift = ((unsigned long)ptr & 3UL) * 8; \
4828
- const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1; \
4829
- const unsigned int bgmask = ~(valmask << shift); \
4830
- unsigned int oldword = *p; \
4831
- type oldval = (oldword >> shift) & valmask; \
4832
- if (__builtin_expect((oldval == *guess), 1)) { \
4833
- unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
4834
- oldword = arch_atomic_val_compare_and_exchange(p, oldword, word); \
4835
- oldval = (oldword >> shift) & valmask; \
4837
+ type guess = *guess_ptr; \
4838
+ type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val); \
4839
post_atomic_barrier(models); \
4840
- bool success = (oldval == *guess); \
4841
- *guess = oldval; \
4842
+ bool success = (oldval == guess); \
4843
+ *guess_ptr = oldval; \
4847
__atomic_subword_cmpxchg (u8, 1)
4848
__atomic_subword_cmpxchg (u16, 2)
4850
+#define __sync_subword_cmpxchg(type, size) \
4853
+__sync_val_compare_and_swap_##size(type* ptr, type guess, type val) \
4855
+ arch_atomic_write_barrier(); \
4856
+ type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val); \
4857
+ arch_atomic_read_barrier(); \
4862
+__sync_bool_compare_and_swap_##size(type* ptr, type guess, type val) \
4864
+ type oldval = __sync_val_compare_and_swap_##size(ptr, guess, val); \
4865
+ return oldval == guess; \
4868
+__sync_subword_cmpxchg (u8, 1)
4869
+__sync_subword_cmpxchg (u16, 2)
4871
/* For the atomic-update subword methods, we use the same approach as
4872
above, but we retry until we succeed if the compare-and-exchange
4874
-#define __atomic_subword(type, proto, top, expr, bottom) \
4875
+#define __subword(type, proto, top, expr, bottom) \
4879
unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL); \
4880
- const int shift = ((unsigned long)ptr & 3UL) * 8; \
4881
+ const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type); \
4882
const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1; \
4883
const unsigned int bgmask = ~(valmask << shift); \
4884
unsigned int oldword, xword = *p; \
4885
@@ -184,12 +303,14 @@
4886
} while (__builtin_expect(xword != oldword, 0)); \
4890
#define __atomic_subword_fetch(type, funcname, expr, retval) \
4891
- __atomic_subword(type, \
4892
- type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
4893
- pre_atomic_barrier(model);, \
4895
- post_atomic_barrier(model); return retval;)
4897
+ type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
4898
+ pre_atomic_barrier(model);, \
4900
+ post_atomic_barrier(model); return retval;)
4902
__atomic_subword_fetch (u8, fetch_add_1, oldval + i, oldval)
4903
__atomic_subword_fetch (u8, fetch_sub_1, oldval - i, oldval)
4904
__atomic_subword_fetch (u8, fetch_or_1, oldval | i, oldval)
4906
__atomic_subword_fetch (u8, fetch_and_1, oldval & i, oldval)
4907
__atomic_subword_fetch (u8, fetch_xor_1, oldval ^ i, oldval)
4908
__atomic_subword_fetch (u8, fetch_nand_1, ~(oldval & i), oldval)
4910
__atomic_subword_fetch (u16, fetch_add_2, oldval + i, oldval)
4911
__atomic_subword_fetch (u16, fetch_sub_2, oldval - i, oldval)
4912
__atomic_subword_fetch (u16, fetch_or_2, oldval | i, oldval)
4914
__atomic_subword_fetch (u16, fetch_and_2, oldval & i, oldval)
4915
__atomic_subword_fetch (u16, fetch_xor_2, oldval ^ i, oldval)
4916
__atomic_subword_fetch (u16, fetch_nand_2, ~(oldval & i), oldval)
4918
__atomic_subword_fetch (u8, add_fetch_1, oldval + i, val)
4919
__atomic_subword_fetch (u8, sub_fetch_1, oldval - i, val)
4920
__atomic_subword_fetch (u8, or_fetch_1, oldval | i, val)
4922
__atomic_subword_fetch (u8, and_fetch_1, oldval & i, val)
4923
__atomic_subword_fetch (u8, xor_fetch_1, oldval ^ i, val)
4924
__atomic_subword_fetch (u8, nand_fetch_1, ~(oldval & i), val)
4926
__atomic_subword_fetch (u16, add_fetch_2, oldval + i, val)
4927
__atomic_subword_fetch (u16, sub_fetch_2, oldval - i, val)
4928
__atomic_subword_fetch (u16, or_fetch_2, oldval | i, val)
4929
@@ -214,12 +338,58 @@
4930
__atomic_subword_fetch (u16, and_fetch_2, oldval & i, val)
4931
__atomic_subword_fetch (u16, xor_fetch_2, oldval ^ i, val)
4932
__atomic_subword_fetch (u16, nand_fetch_2, ~(oldval & i), val)
4934
+#define __sync_subword_fetch(type, funcname, expr, retval) \
4936
+ type __sync_ ## funcname(type *ptr, type i), \
4937
+ arch_atomic_read_barrier();, \
4939
+ arch_atomic_write_barrier(); return retval;)
4941
+__sync_subword_fetch (u8, fetch_and_add_1, oldval + i, oldval)
4942
+__sync_subword_fetch (u8, fetch_and_sub_1, oldval - i, oldval)
4943
+__sync_subword_fetch (u8, fetch_and_or_1, oldval | i, oldval)
4944
+__sync_subword_fetch (u8, fetch_and_and_1, oldval & i, oldval)
4945
+__sync_subword_fetch (u8, fetch_and_xor_1, oldval ^ i, oldval)
4946
+__sync_subword_fetch (u8, fetch_and_nand_1, ~(oldval & i), oldval)
4948
+__sync_subword_fetch (u16, fetch_and_add_2, oldval + i, oldval)
4949
+__sync_subword_fetch (u16, fetch_and_sub_2, oldval - i, oldval)
4950
+__sync_subword_fetch (u16, fetch_and_or_2, oldval | i, oldval)
4951
+__sync_subword_fetch (u16, fetch_and_and_2, oldval & i, oldval)
4952
+__sync_subword_fetch (u16, fetch_and_xor_2, oldval ^ i, oldval)
4953
+__sync_subword_fetch (u16, fetch_and_nand_2, ~(oldval & i), oldval)
4955
+__sync_subword_fetch (u8, add_and_fetch_1, oldval + i, val)
4956
+__sync_subword_fetch (u8, sub_and_fetch_1, oldval - i, val)
4957
+__sync_subword_fetch (u8, or_and_fetch_1, oldval | i, val)
4958
+__sync_subword_fetch (u8, and_and_fetch_1, oldval & i, val)
4959
+__sync_subword_fetch (u8, xor_and_fetch_1, oldval ^ i, val)
4960
+__sync_subword_fetch (u8, nand_and_fetch_1, ~(oldval & i), val)
4962
+__sync_subword_fetch (u16, add_and_fetch_2, oldval + i, val)
4963
+__sync_subword_fetch (u16, sub_and_fetch_2, oldval - i, val)
4964
+__sync_subword_fetch (u16, or_and_fetch_2, oldval | i, val)
4965
+__sync_subword_fetch (u16, and_and_fetch_2, oldval & i, val)
4966
+__sync_subword_fetch (u16, xor_and_fetch_2, oldval ^ i, val)
4967
+__sync_subword_fetch (u16, nand_and_fetch_2, ~(oldval & i), val)
4969
#define __atomic_subword_lock(type, size) \
4971
-__atomic_subword(type, \
4972
- type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
4973
- pre_atomic_barrier(model);, \
4975
- post_atomic_barrier(model); return oldval;)
4977
+ type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
4978
+ pre_atomic_barrier(model);, \
4980
+ post_atomic_barrier(model); return oldval;)
4982
__atomic_subword_lock (u8, 1)
4983
__atomic_subword_lock (u16, 2)
4985
+#define __sync_subword_lock(type, size) \
4987
+ type __sync_lock_test_and_set_##size(type* ptr, type nval), \
4990
+ arch_atomic_acquire_barrier_value(oldval); return oldval;)
4992
+__sync_subword_lock (u8, 1)
4993
+__sync_subword_lock (u16, 2)
4994
Index: libgcc/config/arm/sfp-machine.h
4995
===================================================================
4996
--- a/src/libgcc/config/arm/sfp-machine.h (.../tags/gcc_4_8_2_release)
4997
+++ b/src/libgcc/config/arm/sfp-machine.h (.../branches/gcc-4_8-branch)
4999
#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
5000
#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
5002
-#define _FP_NANFRAC_H ((_FP_QNANBIT_H << 1) - 1)
5003
-#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
5004
-#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1
5005
-#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
5006
+/* According to RTABI, QNAN is only with the most significant bit of the
5007
+ significand set, and all other significand bits zero. */
5008
+#define _FP_NANFRAC_H 0
5009
+#define _FP_NANFRAC_S 0
5010
+#define _FP_NANFRAC_D 0, 0
5011
+#define _FP_NANFRAC_Q 0, 0, 0, 0
5012
#define _FP_NANSIGN_H 0
5013
#define _FP_NANSIGN_S 0
5014
#define _FP_NANSIGN_D 0
5015
Index: libgcc/unwind-seh.c
5016
===================================================================
5017
--- a/src/libgcc/unwind-seh.c (.../tags/gcc_4_8_2_release)
5018
+++ b/src/libgcc/unwind-seh.c (.../branches/gcc-4_8-branch)
5020
ms_exc->ExceptionInformation[3] = gcc_context.reg[1];
5022
/* Begin phase 2. Perform the unwinding. */
5023
- RtlUnwindEx (this_frame, gcc_context.ra, ms_exc, gcc_exc,
5024
- ms_orig_context, ms_disp->HistoryTable);
5025
+ RtlUnwindEx (this_frame, gcc_context.ra, ms_exc,
5026
+ (PVOID)gcc_context.reg[0], ms_orig_context,
5027
+ ms_disp->HistoryTable);
5030
/* In _Unwind_RaiseException we return _URC_FATAL_PHASE1_ERROR. */
5031
Index: gcc/tree-vrp.c
5032
===================================================================
5033
--- a/src/gcc/tree-vrp.c (.../tags/gcc_4_8_2_release)
5034
+++ b/src/gcc/tree-vrp.c (.../branches/gcc-4_8-branch)
5035
@@ -5271,9 +5271,13 @@
5037
else if (CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (op_def)))
5039
- /* Recurse through the type conversion. */
5040
- retval |= register_edge_assert_for_1 (gimple_assign_rhs1 (op_def),
5042
+ /* Recurse through the type conversion, unless it is a narrowing
5043
+ conversion or conversion from non-integral type. */
5044
+ tree rhs = gimple_assign_rhs1 (op_def);
5045
+ if (INTEGRAL_TYPE_P (TREE_TYPE (rhs))
5046
+ && (TYPE_PRECISION (TREE_TYPE (rhs))
5047
+ <= TYPE_PRECISION (TREE_TYPE (op))))
5048
+ retval |= register_edge_assert_for_1 (rhs, code, e, bsi);
5052
@@ -7453,7 +7457,8 @@
5054
else if ((operand_less_p (vr1min, *vr0max) == 1
5055
|| operand_equal_p (vr1min, *vr0max, 0))
5056
- && operand_less_p (*vr0min, vr1min) == 1)
5057
+ && operand_less_p (*vr0min, vr1min) == 1
5058
+ && operand_less_p (*vr0max, vr1max) == 1)
5060
/* [ ( ] ) or [ ]( ) */
5061
if (*vr0type == VR_RANGE
5062
@@ -7487,7 +7492,8 @@
5064
else if ((operand_less_p (*vr0min, vr1max) == 1
5065
|| operand_equal_p (*vr0min, vr1max, 0))
5066
- && operand_less_p (vr1min, *vr0min) == 1)
5067
+ && operand_less_p (vr1min, *vr0min) == 1
5068
+ && operand_less_p (vr1max, *vr0max) == 1)
5070
/* ( [ ) ] or ( )[ ] */
5071
if (*vr0type == VR_RANGE
5072
Index: gcc/loop-unswitch.c
5073
===================================================================
5074
--- a/src/gcc/loop-unswitch.c (.../tags/gcc_4_8_2_release)
5075
+++ b/src/gcc/loop-unswitch.c (.../branches/gcc-4_8-branch)
5081
for (i = 0; i < 2; i++)
5083
op[i] = XEXP (test, i);
5084
@@ -205,11 +206,15 @@
5087
op[i] = get_iv_value (&iv, const0_rtx);
5088
+ if (iv.extend != IV_UNKNOWN_EXTEND
5089
+ && iv.mode != iv.extend_mode)
5090
+ op[i] = lowpart_subreg (iv.mode, op[i], iv.extend_mode);
5091
+ if (mode == VOIDmode)
5094
+ gcc_assert (mode == iv.mode);
5097
- mode = GET_MODE (op[0]);
5098
- if (mode == VOIDmode)
5099
- mode = GET_MODE (op[1]);
5100
if (GET_MODE_CLASS (mode) == MODE_CC)
5102
if (at != BB_END (bb))
5103
Index: gcc/tree-ssa-loop-im.c
5104
===================================================================
5105
--- a/src/gcc/tree-ssa-loop-im.c (.../tags/gcc_4_8_2_release)
5106
+++ b/src/gcc/tree-ssa-loop-im.c (.../branches/gcc-4_8-branch)
5107
@@ -1190,6 +1190,67 @@
5108
fini_walk_dominator_tree (&walk_data);
5111
+/* Return true if CODE is an operation that when operating on signed
5112
+ integer types involves undefined behavior on overflow and the
5113
+ operation can be expressed with unsigned arithmetic. */
5116
+arith_code_with_undefined_signed_overflow (tree_code code)
5124
+ case POINTER_PLUS_EXPR:
5131
+/* Rewrite STMT, an assignment with a signed integer or pointer arithmetic
5132
+ operation that can be transformed to unsigned arithmetic by converting
5133
+ its operand, carrying out the operation in the corresponding unsigned
5134
+ type and converting the result back to the original type.
5136
+ Returns a sequence of statements that replace STMT and also contain
5137
+ a modified form of STMT itself. */
5140
+rewrite_to_defined_overflow (gimple stmt)
5142
+ if (dump_file && (dump_flags & TDF_DETAILS))
5144
+ fprintf (dump_file, "rewriting stmt with undefined signed "
5146
+ print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
5149
+ tree lhs = gimple_assign_lhs (stmt);
5150
+ tree type = unsigned_type_for (TREE_TYPE (lhs));
5151
+ gimple_seq stmts = NULL;
5152
+ for (unsigned i = 1; i < gimple_num_ops (stmt); ++i)
5154
+ gimple_seq stmts2 = NULL;
5155
+ gimple_set_op (stmt, i,
5156
+ force_gimple_operand (fold_convert (type,
5157
+ gimple_op (stmt, i)),
5158
+ &stmts2, true, NULL_TREE));
5159
+ gimple_seq_add_seq (&stmts, stmts2);
5161
+ gimple_assign_set_lhs (stmt, make_ssa_name (type, stmt));
5162
+ if (gimple_assign_rhs_code (stmt) == POINTER_PLUS_EXPR)
5163
+ gimple_assign_set_rhs_code (stmt, PLUS_EXPR);
5164
+ gimple_seq_add_stmt (&stmts, stmt);
5165
+ gimple cvt = gimple_build_assign_with_ops
5166
+ (NOP_EXPR, lhs, gimple_assign_lhs (stmt), NULL_TREE);
5167
+ gimple_seq_add_stmt (&stmts, cvt);
5172
/* Hoist the statements in basic block BB out of the loops prescribed by
5173
data stored in LIM_DATA structures associated with each statement. Callback
5174
for walk_dominator_tree. */
5175
@@ -1321,7 +1382,21 @@
5178
gsi_remove (&bsi, false);
5179
- gsi_insert_on_edge (e, stmt);
5180
+ /* In case this is a stmt that is not unconditionally executed
5181
+ when the target loop header is executed and the stmt may
5182
+ invoke undefined integer or pointer overflow rewrite it to
5183
+ unsigned arithmetic. */
5184
+ if (is_gimple_assign (stmt)
5185
+ && INTEGRAL_TYPE_P (TREE_TYPE (gimple_assign_lhs (stmt)))
5186
+ && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (gimple_assign_lhs (stmt)))
5187
+ && arith_code_with_undefined_signed_overflow
5188
+ (gimple_assign_rhs_code (stmt))
5189
+ && (!ALWAYS_EXECUTED_IN (bb)
5190
+ || !(ALWAYS_EXECUTED_IN (bb) == level
5191
+ || flow_loop_nested_p (ALWAYS_EXECUTED_IN (bb), level))))
5192
+ gsi_insert_seq_on_edge (e, rewrite_to_defined_overflow (stmt));
5194
+ gsi_insert_on_edge (e, stmt);
5198
Index: gcc/tree-ssa-tail-merge.c
5199
===================================================================
5200
--- a/src/gcc/tree-ssa-tail-merge.c (.../tags/gcc_4_8_2_release)
5201
+++ b/src/gcc/tree-ssa-tail-merge.c (.../branches/gcc-4_8-branch)
5204
def_operand_p def_p;
5206
- if (gimple_has_side_effects (stmt))
5207
+ if (gimple_has_side_effects (stmt)
5208
+ || gimple_vdef (stmt) != NULL_TREE)
5211
def_p = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_DEF);
5212
Index: gcc/cgraphbuild.c
5213
===================================================================
5214
--- a/src/gcc/cgraphbuild.c (.../tags/gcc_4_8_2_release)
5215
+++ b/src/gcc/cgraphbuild.c (.../branches/gcc-4_8-branch)
5217
decl = get_base_var (*tp);
5218
if (TREE_CODE (decl) == FUNCTION_DECL)
5220
- struct cgraph_node *node = cgraph_get_create_node (decl);
5221
+ struct cgraph_node *node = cgraph_get_create_real_symbol_node (decl);
5222
if (!ctx->only_vars)
5223
cgraph_mark_address_taken_node (node);
5224
ipa_record_reference ((symtab_node)ctx->varpool_node,
5227
struct cgraph_node *per_node;
5229
- per_node = cgraph_get_create_node (DECL_FUNCTION_PERSONALITY (node->symbol.decl));
5230
+ per_node = cgraph_get_create_real_symbol_node (DECL_FUNCTION_PERSONALITY (node->symbol.decl));
5231
ipa_record_reference ((symtab_node)node, (symtab_node)per_node, IPA_REF_ADDR, NULL);
5232
cgraph_mark_address_taken_node (per_node);
5234
@@ -218,12 +218,12 @@
5235
/* Mark address taken in STMT. */
5238
-mark_address (gimple stmt, tree addr, void *data)
5239
+mark_address (gimple stmt, tree addr, tree, void *data)
5241
addr = get_base_address (addr);
5242
if (TREE_CODE (addr) == FUNCTION_DECL)
5244
- struct cgraph_node *node = cgraph_get_create_node (addr);
5245
+ struct cgraph_node *node = cgraph_get_create_real_symbol_node (addr);
5246
cgraph_mark_address_taken_node (node);
5247
ipa_record_reference ((symtab_node)data,
5250
/* Mark load of T. */
5253
-mark_load (gimple stmt, tree t, void *data)
5254
+mark_load (gimple stmt, tree t, tree, void *data)
5256
t = get_base_address (t);
5257
if (t && TREE_CODE (t) == FUNCTION_DECL)
5260
/* ??? This can happen on platforms with descriptors when these are
5261
directly manipulated in the code. Pretend that it's an address. */
5262
- struct cgraph_node *node = cgraph_get_create_node (t);
5263
+ struct cgraph_node *node = cgraph_get_create_real_symbol_node (t);
5264
cgraph_mark_address_taken_node (node);
5265
ipa_record_reference ((symtab_node)data,
5268
/* Mark store of T. */
5271
-mark_store (gimple stmt, tree t, void *data)
5272
+mark_store (gimple stmt, tree t, tree, void *data)
5274
t = get_base_address (t);
5275
if (t && TREE_CODE (t) == VAR_DECL
5278
tree fn = gimple_omp_parallel_child_fn (stmt);
5279
ipa_record_reference ((symtab_node)node,
5280
- (symtab_node)cgraph_get_create_node (fn),
5281
+ (symtab_node)cgraph_get_create_real_symbol_node (fn),
5282
IPA_REF_ADDR, stmt);
5284
if (gimple_code (stmt) == GIMPLE_OMP_TASK)
5285
@@ -338,12 +338,12 @@
5286
tree fn = gimple_omp_task_child_fn (stmt);
5288
ipa_record_reference ((symtab_node)node,
5289
- (symtab_node) cgraph_get_create_node (fn),
5290
+ (symtab_node) cgraph_get_create_real_symbol_node (fn),
5291
IPA_REF_ADDR, stmt);
5292
fn = gimple_omp_task_copy_fn (stmt);
5294
ipa_record_reference ((symtab_node)node,
5295
- (symtab_node)cgraph_get_create_node (fn),
5296
+ (symtab_node)cgraph_get_create_real_symbol_node (fn),
5297
IPA_REF_ADDR, stmt);
5300
Index: gcc/tree-ssa-uninit.c
5301
===================================================================
5302
--- a/src/gcc/tree-ssa-uninit.c (.../tags/gcc_4_8_2_release)
5303
+++ b/src/gcc/tree-ssa-uninit.c (.../branches/gcc-4_8-branch)
5305
#include "hashtab.h"
5306
#include "tree-pass.h"
5307
#include "diagnostic-core.h"
5308
+#include "params.h"
5310
/* This implements the pass that does predicate aware warning on uses of
5311
possibly uninitialized variables. The pass first collects the set of
5314
/* Computes the control dependence chains (paths of edges)
5315
for DEP_BB up to the dominating basic block BB (the head node of a
5316
- chain should be dominated by it). CD_CHAINS is pointer to a
5317
- dynamic array holding the result chains. CUR_CD_CHAIN is the current
5318
+ chain should be dominated by it). CD_CHAINS is pointer to an
5319
+ array holding the result chains. CUR_CD_CHAIN is the current
5320
chain being computed. *NUM_CHAINS is total number of chains. The
5321
function returns true if the information is successfully computed,
5322
return false if there is no control dependence or not computed. */
5324
compute_control_dep_chain (basic_block bb, basic_block dep_bb,
5325
vec<edge> *cd_chains,
5327
- vec<edge> *cur_cd_chain)
5328
+ vec<edge> *cur_cd_chain,
5333
@@ -267,6 +269,10 @@
5334
if (EDGE_COUNT (bb->succs) < 2)
5337
+ if (*num_calls > PARAM_VALUE (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS))
5341
/* Could use a set instead. */
5342
cur_chain_len = cur_cd_chain->length ();
5343
if (cur_chain_len > MAX_CHAIN_LEN)
5346
/* Now check if DEP_BB is indirectly control dependent on BB. */
5347
if (compute_control_dep_chain (cd_bb, dep_bb, cd_chains,
5348
- num_chains, cur_cd_chain))
5349
+ num_chains, cur_cd_chain, num_calls))
5351
found_cd_chain = true;
5353
@@ -438,14 +444,12 @@
5356
size_t num_chains = 0, i;
5357
- vec<edge> *dep_chains = 0;
5358
+ int num_calls = 0;
5359
+ vec<edge> dep_chains[MAX_NUM_CHAINS];
5360
vec<edge> cur_chain = vNULL;
5361
bool has_valid_pred = false;
5362
basic_block cd_root = 0;
5364
- typedef vec<edge> vec_edge_heap;
5365
- dep_chains = XCNEWVEC (vec_edge_heap, MAX_NUM_CHAINS);
5367
/* First find the closest bb that is control equivalent to PHI_BB
5368
that also dominates USE_BB. */
5370
@@ -458,20 +462,16 @@
5374
- compute_control_dep_chain (cd_root, use_bb,
5375
- dep_chains, &num_chains,
5377
+ compute_control_dep_chain (cd_root, use_bb, dep_chains, &num_chains,
5378
+ &cur_chain, &num_calls);
5381
- = convert_control_dep_chain_into_preds (dep_chains,
5385
+ = convert_control_dep_chain_into_preds (dep_chains, num_chains, preds,
5387
/* Free individual chain */
5388
cur_chain.release ();
5389
for (i = 0; i < num_chains; i++)
5390
dep_chains[i].release ();
5391
- free (dep_chains);
5392
return has_valid_pred;
5396
size_t *num_preds, gimple phi)
5398
size_t num_chains = 0, i, n;
5399
- vec<edge> *dep_chains = 0;
5400
+ vec<edge> dep_chains[MAX_NUM_CHAINS];
5401
vec<edge> cur_chain = vNULL;
5402
vec<edge> def_edges = vNULL;
5403
bool has_valid_pred = false;
5405
basic_block phi_bb, cd_root = 0;
5406
struct pointer_set_t *visited_phis;
5408
- typedef vec<edge> vec_edge_heap;
5409
- dep_chains = XCNEWVEC (vec_edge_heap, MAX_NUM_CHAINS);
5411
phi_bb = gimple_bb (phi);
5412
/* First find the closest dominating bb to be
5413
the control dependence root */
5414
@@ -567,38 +564,33 @@
5415
for (i = 0; i < n; i++)
5418
+ int num_calls = 0;
5421
opnd_edge = def_edges[i];
5422
prev_nc = num_chains;
5423
- compute_control_dep_chain (cd_root, opnd_edge->src,
5424
- dep_chains, &num_chains,
5426
- /* Free individual chain */
5427
- cur_chain.release ();
5428
+ compute_control_dep_chain (cd_root, opnd_edge->src, dep_chains,
5429
+ &num_chains, &cur_chain, &num_calls);
5431
/* Now update the newly added chains with
5432
the phi operand edge: */
5433
if (EDGE_COUNT (opnd_edge->src->succs) > 1)
5435
- if (prev_nc == num_chains
5436
- && num_chains < MAX_NUM_CHAINS)
5438
+ if (prev_nc == num_chains && num_chains < MAX_NUM_CHAINS)
5439
+ dep_chains[num_chains++] = vNULL;
5440
for (j = prev_nc; j < num_chains; j++)
5442
- dep_chains[j].safe_push (opnd_edge);
5444
+ dep_chains[j].safe_push (opnd_edge);
5448
+ /* Free individual chain */
5449
+ cur_chain.release ();
5452
- = convert_control_dep_chain_into_preds (dep_chains,
5456
+ = convert_control_dep_chain_into_preds (dep_chains, num_chains, preds,
5458
for (i = 0; i < num_chains; i++)
5459
dep_chains[i].release ();
5460
- free (dep_chains);
5461
return has_valid_pred;
5464
Index: gcc/tree-ssa-loop-niter.c
5465
===================================================================
5466
--- a/src/gcc/tree-ssa-loop-niter.c (.../tags/gcc_4_8_2_release)
5467
+++ b/src/gcc/tree-ssa-loop-niter.c (.../branches/gcc-4_8-branch)
5468
@@ -2075,7 +2075,8 @@
5472
- if (gimple_code (stmt) != GIMPLE_ASSIGN)
5473
+ if (gimple_code (stmt) != GIMPLE_ASSIGN
5474
+ || gimple_assign_rhs_class (stmt) == GIMPLE_TERNARY_RHS)
5477
code = gimple_assign_rhs_code (stmt);
5478
@@ -2143,7 +2144,7 @@
5482
- gcc_assert (is_gimple_min_invariant (base));
5483
+ gcc_checking_assert (is_gimple_min_invariant (base));
5487
@@ -2152,7 +2153,7 @@
5488
if (gimple_code (stmt) == GIMPLE_PHI)
5491
- gcc_assert (is_gimple_assign (stmt));
5492
+ gcc_checking_assert (is_gimple_assign (stmt));
5494
/* STMT must be either an assignment of a single SSA name or an
5495
expression involving an SSA name and a constant. Try to fold that
5496
Index: gcc/c-family/ChangeLog
5497
===================================================================
5498
--- a/src/gcc/c-family/ChangeLog (.../tags/gcc_4_8_2_release)
5499
+++ b/src/gcc/c-family/ChangeLog (.../branches/gcc-4_8-branch)
5501
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
5503
+ Backport from mainline
5504
+ 2014-02-19 Jakub Jelinek <jakub@redhat.com>
5507
+ * c-common.c (c_common_nodes_and_builtins): When initializing
5508
+ c_uint{16,32,64}_type_node, also set corresponding
5509
+ uint{16,32,64}_type_node to the same value.
5511
+ 2014-02-12 Jakub Jelinek <jakub@redhat.com>
5514
+ * c-common.c (merge_tlist): If copy is true, call new_tlist,
5515
+ if false, add ADD itself, rather than vice versa.
5516
+ (verify_tree): For COND_EXPR, don't call merge_tlist with non-zero
5517
+ copy. For SAVE_EXPR, only call merge_tlist once.
5519
+2013-11-29 Jakub Jelinek <jakub@redhat.com>
5522
+ * c-common.c (get_priority): If TREE_VALUE (args) is IDENTIFIER_NODE,
5523
+ goto invalid. If it is error_mark_node, don't issue further
5526
+2013-11-04 Marek Polacek <polacek@redhat.com>
5528
+ Backport from mainline
5529
+ 2013-11-04 Marek Polacek <polacek@redhat.com>
5532
+ * c-common.c (invalid_indirection_error): Handle RO_ARROW_STAR case.
5534
2013-10-16 Release Manager
5536
* GCC 4.8.2 released.
5537
Index: gcc/c-family/c-common.c
5538
===================================================================
5539
--- a/src/gcc/c-family/c-common.c (.../tags/gcc_4_8_2_release)
5540
+++ b/src/gcc/c-family/c-common.c (.../branches/gcc-4_8-branch)
5541
@@ -2894,7 +2894,7 @@
5545
- *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
5546
+ *end = copy ? new_tlist (NULL, add->expr, add->writer) : add;
5547
end = &(*end)->next;
5550
@@ -3052,7 +3052,7 @@
5551
verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
5552
warn_for_collisions (tmp_list2);
5553
merge_tlist (pbefore_sp, tmp_before, 0);
5554
- merge_tlist (pbefore_sp, tmp_list2, 1);
5555
+ merge_tlist (pbefore_sp, tmp_list2, 0);
5557
tmp_list3 = tmp_nosp = 0;
5558
verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
5559
@@ -3156,12 +3156,7 @@
5560
warn_for_collisions (tmp_nosp);
5565
- struct tlist *t = tmp_nosp;
5566
- tmp_nosp = t->next;
5567
- merge_tlist (&tmp_list3, t, 0);
5569
+ merge_tlist (&tmp_list3, tmp_nosp, 0);
5570
t->cache_before_sp = tmp_before;
5571
t->cache_after_sp = tmp_list3;
5573
@@ -5511,13 +5506,13 @@
5575
TREE_TYPE (identifier_global_value (c_get_ident (UINT8_TYPE)));
5577
- c_uint16_type_node =
5578
+ c_uint16_type_node = uint16_type_node =
5579
TREE_TYPE (identifier_global_value (c_get_ident (UINT16_TYPE)));
5581
- c_uint32_type_node =
5582
+ c_uint32_type_node = uint32_type_node =
5583
TREE_TYPE (identifier_global_value (c_get_ident (UINT32_TYPE)));
5585
- c_uint64_type_node =
5586
+ c_uint64_type_node = uint64_type_node =
5587
TREE_TYPE (identifier_global_value (c_get_ident (UINT64_TYPE)));
5588
if (INT_LEAST8_TYPE)
5589
int_least8_type_node =
5590
@@ -6917,6 +6912,10 @@
5593
arg = TREE_VALUE (args);
5594
+ if (TREE_CODE (arg) == IDENTIFIER_NODE)
5596
+ if (arg == error_mark_node)
5597
+ return DEFAULT_INIT_PRIORITY;
5598
arg = default_conversion (arg);
5599
if (!host_integerp (arg, /*pos=*/0)
5600
|| !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
5601
@@ -9763,6 +9762,11 @@
5602
"invalid type argument of %<->%> (have %qT)",
5605
+ case RO_ARROW_STAR:
5607
+ "invalid type argument of %<->*%> (have %qT)",
5610
case RO_IMPLICIT_CONVERSION:
5612
"invalid type argument of implicit conversion (have %qT)",
5613
Index: gcc/c/c-typeck.c
5614
===================================================================
5615
--- a/src/gcc/c/c-typeck.c (.../tags/gcc_4_8_2_release)
5616
+++ b/src/gcc/c/c-typeck.c (.../branches/gcc-4_8-branch)
5617
@@ -3629,7 +3629,8 @@
5618
/* Report invalid types. */
5620
if (typecode != POINTER_TYPE && typecode != FIXED_POINT_TYPE
5621
- && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
5622
+ && typecode != INTEGER_TYPE && typecode != REAL_TYPE
5623
+ && typecode != VECTOR_TYPE)
5625
if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
5626
error_at (location, "wrong type argument to increment");
5627
@@ -3694,7 +3695,9 @@
5631
- inc = integer_one_node;
5632
+ inc = (TREE_CODE (argtype) == VECTOR_TYPE
5633
+ ? build_one_cst (argtype)
5634
+ : integer_one_node);
5635
inc = convert (argtype, inc);
5638
@@ -4331,8 +4334,10 @@
5642
- op1 = remove_c_maybe_const_expr (op1);
5643
- op2 = remove_c_maybe_const_expr (op2);
5644
+ /* Use c_fully_fold here, since C_MAYBE_CONST_EXPR might be
5645
+ nested inside of the expression. */
5646
+ op1 = c_fully_fold (op1, false, NULL);
5647
+ op2 = c_fully_fold (op2, false, NULL);
5649
ret = build3 (COND_EXPR, result_type, ifexp, op1, op2);
5651
@@ -10618,7 +10623,8 @@
5652
"%qE has invalid type for %<reduction%>", t);
5655
- else if (FLOAT_TYPE_P (TREE_TYPE (t)))
5656
+ else if (FLOAT_TYPE_P (TREE_TYPE (t))
5657
+ || TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
5659
enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
5660
const char *r_name = NULL;
5661
@@ -10628,8 +10634,14 @@
5667
+ if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
5671
+ if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
5676
@@ -10641,10 +10653,12 @@
5679
case TRUTH_ANDIF_EXPR:
5681
+ if (FLOAT_TYPE_P (TREE_TYPE (t)))
5684
case TRUTH_ORIF_EXPR:
5686
+ if (FLOAT_TYPE_P (TREE_TYPE (t)))
5691
Index: gcc/c/ChangeLog
5692
===================================================================
5693
--- a/src/gcc/c/ChangeLog (.../tags/gcc_4_8_2_release)
5694
+++ b/src/gcc/c/ChangeLog (.../branches/gcc-4_8-branch)
5696
+2014-01-23 Jakub Jelinek <jakub@redhat.com>
5698
+ PR middle-end/58809
5699
+ * c-typeck.c (c_finish_omp_clause): Reject MIN_EXPR, MAX_EXPR,
5700
+ BIT_AND_EXPR, BIT_IOR_EXPR and BIT_XOR_EXPR on COMPLEX_TYPEs.
5702
+2014-01-22 Marek Polacek <polacek@redhat.com>
5704
+ Backport from mainline
5705
+ 2014-01-22 Marek Polacek <polacek@redhat.com>
5708
+ * c-typeck.c (build_conditional_expr): Call c_fully_fold instead
5709
+ of remove_c_maybe_const_expr on op1 and op2.
5711
+2013-12-03 Marek Polacek <polacek@redhat.com>
5713
+ Backport from mainline
5714
+ 2013-12-03 Marek Polacek <polacek@redhat.com>
5717
+ * c-decl.c (build_compound_literal): Allow compound literals with
5718
+ empty initial value.
5720
+2013-11-27 Tom de Vries <tom@codesourcery.com>
5721
+ Marc Glisse <marc.glisse@inria.fr>
5724
+ * c-typeck.c (build_unary_op): Allow vector increment and decrement.
5726
2013-10-16 Release Manager
5728
* GCC 4.8.2 released.
5729
Index: gcc/c/c-decl.c
5730
===================================================================
5731
--- a/src/gcc/c/c-decl.c (.../tags/gcc_4_8_2_release)
5732
+++ b/src/gcc/c/c-decl.c (.../branches/gcc-4_8-branch)
5733
@@ -4632,7 +4632,9 @@
5735
int failure = complete_array_type (&TREE_TYPE (decl),
5736
DECL_INITIAL (decl), true);
5737
- gcc_assert (!failure);
5738
+ /* If complete_array_type returns 3, it means that the
5739
+ initial value of the compound literal is empty. Allow it. */
5740
+ gcc_assert (failure == 0 || failure == 3);
5742
type = TREE_TYPE (decl);
5743
TREE_TYPE (DECL_INITIAL (decl)) = type;
5745
===================================================================
5746
--- a/src/gcc/cgraph.c (.../tags/gcc_4_8_2_release)
5747
+++ b/src/gcc/cgraph.c (.../branches/gcc-4_8-branch)
5748
@@ -2596,4 +2596,47 @@
5749
FOR_EACH_FUNCTION (node)
5750
verify_cgraph_node (node);
5753
+/* Create external decl node for DECL.
5754
+ The difference i nbetween cgraph_get_create_node and
5755
+ cgraph_get_create_real_symbol_node is that cgraph_get_create_node
5756
+ may return inline clone, while cgraph_get_create_real_symbol_node
5757
+ will create a new node in this case.
5758
+ FIXME: This function should be removed once clones are put out of decl
5761
+struct cgraph_node *
5762
+cgraph_get_create_real_symbol_node (tree decl)
5764
+ struct cgraph_node *first_clone = cgraph_get_node (decl);
5765
+ struct cgraph_node *node;
5766
+ /* create symbol table node. even if inline clone exists, we can not take
5767
+ it as a target of non-inlined call. */
5768
+ node = cgraph_get_node (decl);
5769
+ if (node && !node->global.inlined_to)
5772
+ node = cgraph_create_node (decl);
5774
+ /* ok, we previously inlined the function, then removed the offline copy and
5775
+ now we want it back for external call. this can happen when devirtualizing
5776
+ while inlining function called once that happens after extern inlined and
5777
+ virtuals are already removed. in this case introduce the external node
5778
+ and make it available for call. */
5781
+ first_clone->clone_of = node;
5782
+ node->clones = first_clone;
5783
+ symtab_prevail_in_asm_name_hash ((symtab_node) node);
5784
+ symtab_insert_node_to_hashtable ((symtab_node) node);
5786
+ fprintf (dump_file, "Introduced new external node "
5787
+ "(%s/%i) and turned into root of the clone tree.\n",
5788
+ xstrdup (cgraph_node_name (node)), node->uid);
5790
+ else if (dump_file)
5791
+ fprintf (dump_file, "Introduced new external node "
5792
+ "(%s/%i).\n", xstrdup (cgraph_node_name (node)), node->uid);
5795
#include "gt-cgraph.h"
5797
===================================================================
5798
--- a/src/gcc/cgraph.h (.../tags/gcc_4_8_2_release)
5799
+++ b/src/gcc/cgraph.h (.../branches/gcc-4_8-branch)
5801
struct cgraph_node * cgraph_create_node (tree);
5802
struct cgraph_node * cgraph_create_empty_node (void);
5803
struct cgraph_node * cgraph_get_create_node (tree);
5804
+struct cgraph_node * cgraph_get_create_real_symbol_node (tree);
5805
struct cgraph_node * cgraph_same_body_alias (struct cgraph_node *, tree, tree);
5806
struct cgraph_node * cgraph_add_thunk (struct cgraph_node *, tree, tree, bool, HOST_WIDE_INT,
5807
HOST_WIDE_INT, tree, tree);
5809
===================================================================
5810
--- a/src/gcc/optabs.c (.../tags/gcc_4_8_2_release)
5811
+++ b/src/gcc/optabs.c (.../branches/gcc-4_8-branch)
5812
@@ -4558,8 +4558,11 @@
5813
if (!COMPARISON_P (comparison))
5816
+ /* State variables we need to save and restore if cmove can't be used. */
5817
+ int save_pending_stack_adjust = pending_stack_adjust;
5818
+ int save_stack_pointer_delta = stack_pointer_delta;
5819
+ last = get_last_insn ();
5820
do_pending_stack_adjust ();
5821
- last = get_last_insn ();
5822
prepare_cmp_insn (XEXP (comparison, 0), XEXP (comparison, 1),
5823
GET_CODE (comparison), NULL_RTX, unsignedp, OPTAB_WIDEN,
5824
&comparison, &cmode);
5825
@@ -4579,6 +4582,8 @@
5828
delete_insns_since (last);
5829
+ pending_stack_adjust = save_pending_stack_adjust;
5830
+ stack_pointer_delta = save_stack_pointer_delta;
5834
@@ -6233,7 +6238,7 @@
5836
/* If the optabs changed, record it. */
5837
if (memcmp (tmp_optabs, this_target_optabs, sizeof (struct target_optabs)))
5838
- TREE_OPTIMIZATION_OPTABS (optnode) = (unsigned char *) tmp_optabs;
5839
+ TREE_OPTIMIZATION_OPTABS (optnode) = tmp_optabs;
5842
TREE_OPTIMIZATION_OPTABS (optnode) = NULL;
5843
@@ -7035,8 +7040,7 @@
5845
create_output_operand (&ops[0], target, mode);
5846
create_fixed_operand (&ops[1], mem);
5847
- /* VAL may have been promoted to a wider mode. Shrink it if so. */
5848
- create_convert_operand_to (&ops[2], val, mode, true);
5849
+ create_input_operand (&ops[2], val, mode);
5850
create_integer_operand (&ops[3], model);
5851
if (maybe_expand_insn (icode, 4, ops))
5852
return ops[0].value;
5853
@@ -7075,8 +7079,7 @@
5854
struct expand_operand ops[3];
5855
create_output_operand (&ops[0], target, mode);
5856
create_fixed_operand (&ops[1], mem);
5857
- /* VAL may have been promoted to a wider mode. Shrink it if so. */
5858
- create_convert_operand_to (&ops[2], val, mode, true);
5859
+ create_input_operand (&ops[2], val, mode);
5860
if (maybe_expand_insn (icode, 3, ops))
5861
return ops[0].value;
5863
@@ -7118,8 +7121,6 @@
5865
if (!target || !register_operand (target, mode))
5866
target = gen_reg_rtx (mode);
5867
- if (GET_MODE (val) != VOIDmode && GET_MODE (val) != mode)
5868
- val = convert_modes (mode, GET_MODE (val), val, 1);
5869
if (expand_compare_and_swap_loop (mem, target, val, NULL_RTX))
5872
@@ -7331,8 +7332,8 @@
5873
create_output_operand (&ops[0], target_bool, bool_mode);
5874
create_output_operand (&ops[1], target_oval, mode);
5875
create_fixed_operand (&ops[2], mem);
5876
- create_convert_operand_to (&ops[3], expected, mode, true);
5877
- create_convert_operand_to (&ops[4], desired, mode, true);
5878
+ create_input_operand (&ops[3], expected, mode);
5879
+ create_input_operand (&ops[4], desired, mode);
5880
create_integer_operand (&ops[5], is_weak);
5881
create_integer_operand (&ops[6], succ_model);
5882
create_integer_operand (&ops[7], fail_model);
5883
@@ -7353,8 +7354,8 @@
5885
create_output_operand (&ops[0], target_oval, mode);
5886
create_fixed_operand (&ops[1], mem);
5887
- create_convert_operand_to (&ops[2], expected, mode, true);
5888
- create_convert_operand_to (&ops[3], desired, mode, true);
5889
+ create_input_operand (&ops[2], expected, mode);
5890
+ create_input_operand (&ops[3], desired, mode);
5891
if (!maybe_expand_insn (icode, 4, ops))
5894
Index: gcc/DATESTAMP
5895
===================================================================
5896
--- a/src/gcc/DATESTAMP (.../tags/gcc_4_8_2_release)
5897
+++ b/src/gcc/DATESTAMP (.../branches/gcc-4_8-branch)
5901
Index: gcc/value-prof.c
5902
===================================================================
5903
--- a/src/gcc/value-prof.c (.../tags/gcc_4_8_2_release)
5904
+++ b/src/gcc/value-prof.c (.../branches/gcc-4_8-branch)
5905
@@ -1270,8 +1270,7 @@
5907
/* Build an EH edge for the direct call if necessary. */
5908
lp_nr = lookup_stmt_eh_lp (icall_stmt);
5910
- && stmt_could_throw_p (dcall_stmt))
5911
+ if (lp_nr > 0 && stmt_could_throw_p (dcall_stmt))
5916
===================================================================
5917
--- a/src/gcc/tree.h (.../tags/gcc_4_8_2_release)
5918
+++ b/src/gcc/tree.h (.../branches/gcc-4_8-branch)
5919
@@ -3589,7 +3589,7 @@
5921
/* Target optabs for this set of optimization options. This is of
5922
type `struct target_optabs *'. */
5923
- unsigned char *GTY ((atomic)) optabs;
5924
+ void *GTY ((atomic)) optabs;
5926
/* The value of this_target_optabs against which the optabs above were
5928
@@ -5854,6 +5854,7 @@
5929
extern tree fold_builtin_fputs (location_t, tree, tree, bool, bool, tree);
5930
extern tree fold_builtin_strcpy (location_t, tree, tree, tree, tree);
5931
extern tree fold_builtin_strncpy (location_t, tree, tree, tree, tree, tree);
5932
+extern tree fold_builtin_strcat (location_t, tree, tree, tree);
5933
extern tree fold_builtin_memory_chk (location_t, tree, tree, tree, tree, tree, tree, bool,
5934
enum built_in_function);
5935
extern tree fold_builtin_stxcpy_chk (location_t, tree, tree, tree, tree, tree, bool,
5936
@@ -6545,4 +6546,18 @@
5937
&& builtin_info.implicit_p[uns_fncode]);
5940
+/* Return pointer to optimization flags of FNDECL. */
5941
+static inline struct cl_optimization *
5942
+opts_for_fn (const_tree fndecl)
5944
+ tree fn_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (fndecl);
5945
+ if (fn_opts == NULL_TREE)
5946
+ fn_opts = optimization_default_node;
5947
+ return TREE_OPTIMIZATION (fn_opts);
5950
+/* opt flag for function FNDECL, e.g. opts_for_fn (fndecl, optimize) is
5951
+ the optimization level of function fndecl. */
5952
+#define opt_for_fn(fndecl, opt) (opts_for_fn (fndecl)->x_##opt)
5954
#endif /* GCC_TREE_H */
5956
===================================================================
5957
--- a/src/gcc/ipa-cp.c (.../tags/gcc_4_8_2_release)
5958
+++ b/src/gcc/ipa-cp.c (.../branches/gcc-4_8-branch)
5960
reason = "not a tree_versionable_function";
5961
else if (cgraph_function_body_availability (node) <= AVAIL_OVERWRITABLE)
5962
reason = "insufficient body availability";
5963
+ else if (!opt_for_fn (node->symbol.decl, optimize)
5964
+ || !opt_for_fn (node->symbol.decl, flag_ipa_cp))
5965
+ reason = "non-optimized function";
5967
if (reason && dump_file && !node->alias && !node->thunk.thunk_p)
5968
fprintf (dump_file, "Function %s/%i is not versionable, reason: %s.\n",
5969
@@ -3119,6 +3122,7 @@
5970
struct cgraph_node *node)
5972
struct ipa_node_params *orig_caller_info = IPA_NODE_REF (cs->caller);
5973
+ struct ipa_node_params *orig_node_info;
5974
struct ipa_agg_replacement_value *aggval;
5977
@@ -3133,6 +3137,7 @@
5978
if (aggval->index >= ec)
5981
+ orig_node_info = IPA_NODE_REF (IPA_NODE_REF (node)->ipcp_orig_node);
5982
if (orig_caller_info->ipcp_orig_node)
5983
orig_caller_info = IPA_NODE_REF (orig_caller_info->ipcp_orig_node);
5985
@@ -3150,7 +3155,7 @@
5989
- plats = ipa_get_parm_lattices (orig_caller_info, aggval->index);
5990
+ plats = ipa_get_parm_lattices (orig_node_info, aggval->index);
5991
if (plats->aggs_bottom)
5994
Index: gcc/configure
5995
===================================================================
5996
--- a/src/gcc/configure (.../tags/gcc_4_8_2_release)
5997
+++ b/src/gcc/configure (.../branches/gcc-4_8-branch)
5998
@@ -11202,13 +11202,11 @@
5999
/* | A-Za-z:\\/* ) realsrcdir=${srcdir};;
6000
*) realsrcdir=../${srcdir};;
6002
- saved_CFLAGS="${CFLAGS}"
6003
CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
6004
- LDFLAGS="${LDFLAGS_FOR_BUILD}" \
6005
+ LDFLAGS="${LDFLAGS_FOR_BUILD}" GMPINC="" \
6006
${realsrcdir}/configure \
6007
--enable-languages=${enable_languages-all} \
6008
--target=$target_alias --host=$build_alias --build=$build_alias
6009
- CFLAGS="${saved_CFLAGS}"
6011
# We just finished tests for the build machine, so rename
6012
# the file auto-build.h in the gcc directory.
6013
@@ -11703,6 +11701,7 @@
6014
if test x$build != x$host || test "x$coverage_flags" != x
6016
BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
6017
+ BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CXXFLAGS_FOR_BUILD)'
6018
BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
6021
@@ -17828,7 +17827,7 @@
6022
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
6023
lt_status=$lt_dlunknown
6024
cat > conftest.$ac_ext <<_LT_EOF
6025
-#line 17831 "configure"
6026
+#line 17830 "configure"
6027
#include "confdefs.h"
6030
@@ -17934,7 +17933,7 @@
6031
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
6032
lt_status=$lt_dlunknown
6033
cat > conftest.$ac_ext <<_LT_EOF
6034
-#line 17937 "configure"
6035
+#line 17936 "configure"
6036
#include "confdefs.h"
6039
@@ -24263,6 +24262,43 @@
6040
$as_echo "#define HAVE_AS_SPARC4 1" >>confdefs.h
6044
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for LEON instructions" >&5
6045
+$as_echo_n "checking assembler for LEON instructions... " >&6; }
6046
+if test "${gcc_cv_as_sparc_leon+set}" = set; then :
6047
+ $as_echo_n "(cached) " >&6
6049
+ gcc_cv_as_sparc_leon=no
6050
+ if test x$gcc_cv_as != x; then
6052
+ .register %g2, #scratch
6053
+ .register %g3, #scratch
6055
+ smac %g2, %g3, %g1
6056
+ umac %g2, %g3, %g1
6057
+ cas [%g2], %g3, %g1' > conftest.s
6058
+ if { ac_try='$gcc_cv_as $gcc_cv_as_flags -Aleon -o conftest.o conftest.s >&5'
6059
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
6060
+ (eval $ac_try) 2>&5
6062
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
6063
+ test $ac_status = 0; }; }
6065
+ gcc_cv_as_sparc_leon=yes
6067
+ echo "configure: failed program was" >&5
6068
+ cat conftest.s >&5
6070
+ rm -f conftest.o conftest.s
6073
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_sparc_leon" >&5
6074
+$as_echo "$gcc_cv_as_sparc_leon" >&6; }
6075
+if test $gcc_cv_as_sparc_leon = yes; then
6077
+$as_echo "#define HAVE_AS_LEON 1" >>confdefs.h
6082
i[34567]86-*-* | x86_64-*-*)
6083
@@ -24745,6 +24781,10 @@
6085
# These two are used unconditionally by i386.[ch]; it is to be defined
6086
# to 1 if the feature is present, 0 otherwise.
6087
+ as_ix86_gotoff_in_data_opt=
6088
+ if test x$gas = xyes; then
6089
+ as_ix86_gotoff_in_data_opt="--32"
6091
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for GOTOFF in data" >&5
6092
$as_echo_n "checking assembler for GOTOFF in data... " >&6; }
6093
if test "${gcc_cv_as_ix86_gotoff_in_data+set}" = set; then :
6094
@@ -24761,7 +24801,7 @@
6097
.long .L0@GOTOFF' > conftest.s
6098
- if { ac_try='$gcc_cv_as $gcc_cv_as_flags -o conftest.o conftest.s >&5'
6099
+ if { ac_try='$gcc_cv_as $gcc_cv_as_flags $as_ix86_gotoff_in_data_opt -o conftest.o conftest.s >&5'
6100
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
6103
@@ -24822,6 +24862,37 @@
6107
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for ud2 mnemonic" >&5
6108
+$as_echo_n "checking assembler for ud2 mnemonic... " >&6; }
6109
+if test "${gcc_cv_as_ix86_ud2+set}" = set; then :
6110
+ $as_echo_n "(cached) " >&6
6112
+ gcc_cv_as_ix86_ud2=no
6113
+ if test x$gcc_cv_as != x; then
6114
+ $as_echo 'ud2' > conftest.s
6115
+ if { ac_try='$gcc_cv_as $gcc_cv_as_flags -o conftest.o conftest.s >&5'
6116
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
6117
+ (eval $ac_try) 2>&5
6119
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
6120
+ test $ac_status = 0; }; }
6122
+ gcc_cv_as_ix86_ud2=yes
6124
+ echo "configure: failed program was" >&5
6125
+ cat conftest.s >&5
6127
+ rm -f conftest.o conftest.s
6130
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_ix86_ud2" >&5
6131
+$as_echo "$gcc_cv_as_ix86_ud2" >&6; }
6132
+if test $gcc_cv_as_ix86_ud2 = yes; then
6134
+$as_echo "#define HAVE_AS_IX86_UD2 1" >>confdefs.h
6138
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for R_386_TLS_GD_PLT reloc" >&5
6139
$as_echo_n "checking assembler for R_386_TLS_GD_PLT reloc... " >&6; }
6140
if test "${gcc_cv_as_ix86_tlsgdplt+set}" = set; then :
6141
@@ -27239,8 +27310,8 @@
6142
$as_echo_n "checking for exported symbols... " >&6; }
6143
if test "x$export_sym_check" != x; then
6144
echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
6145
- ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest > /dev/null 2>&1
6146
- if $export_sym_check conftest | grep foobar > /dev/null; then
6147
+ ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > /dev/null 2>&1
6148
+ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
6149
: # No need to use a flag
6150
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
6151
$as_echo "yes" >&6; }
6152
@@ -27249,8 +27320,8 @@
6153
$as_echo "yes" >&6; }
6154
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -rdynamic" >&5
6155
$as_echo_n "checking for -rdynamic... " >&6; }
6156
- ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest > /dev/null 2>&1
6157
- if $export_sym_check conftest | grep foobar > /dev/null; then
6158
+ ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest$ac_exeext > /dev/null 2>&1
6159
+ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
6161
pluginlibs="-rdynamic"
6163
Index: gcc/builtins.c
6164
===================================================================
6165
--- a/src/gcc/builtins.c (.../tags/gcc_4_8_2_release)
6166
+++ b/src/gcc/builtins.c (.../branches/gcc-4_8-branch)
6168
static tree fold_builtin_strpbrk (location_t, tree, tree, tree);
6169
static tree fold_builtin_strstr (location_t, tree, tree, tree);
6170
static tree fold_builtin_strrchr (location_t, tree, tree, tree);
6171
-static tree fold_builtin_strcat (location_t, tree, tree);
6172
static tree fold_builtin_strncat (location_t, tree, tree, tree);
6173
static tree fold_builtin_strspn (location_t, tree, tree);
6174
static tree fold_builtin_strcspn (location_t, tree, tree);
6175
@@ -1958,6 +1957,7 @@
6176
tree fndecl = get_callee_fndecl (exp);
6177
enum machine_mode mode;
6178
bool errno_set = false;
6179
+ bool try_widening = false;
6182
if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
6183
@@ -1969,6 +1969,7 @@
6185
CASE_FLT_FN (BUILT_IN_SQRT):
6186
errno_set = ! tree_expr_nonnegative_p (arg);
6187
+ try_widening = true;
6188
builtin_optab = sqrt_optab;
6190
CASE_FLT_FN (BUILT_IN_EXP):
6191
@@ -2025,8 +2026,10 @@
6192
if (! flag_errno_math || ! HONOR_NANS (mode))
6195
- /* Before working hard, check whether the instruction is available. */
6196
- if (optab_handler (builtin_optab, mode) != CODE_FOR_nothing
6197
+ /* Before working hard, check whether the instruction is available, but try
6198
+ to widen the mode for specific operations. */
6199
+ if ((optab_handler (builtin_optab, mode) != CODE_FOR_nothing
6200
+ || (try_widening && !excess_precision_type (TREE_TYPE (exp))))
6201
&& (!errno_set || !optimize_insn_for_size_p ()))
6203
rtx result = gen_reg_rtx (mode);
6204
@@ -5347,7 +5350,7 @@
6205
expand_builtin_atomic_compare_exchange (enum machine_mode mode, tree exp,
6208
- rtx expect, desired, mem, oldval;
6209
+ rtx expect, desired, mem, oldval, label;
6210
enum memmodel success, failure;
6213
@@ -5385,14 +5388,26 @@
6214
if (host_integerp (weak, 0) && tree_low_cst (weak, 0) != 0)
6218
- if (!expand_atomic_compare_and_swap ((target == const0_rtx ? NULL : &target),
6219
- &oldval, mem, oldval, desired,
6220
+ if (target == const0_rtx)
6223
+ /* Lest the rtl backend create a race condition with an imporoper store
6224
+ to memory, always create a new pseudo for OLDVAL. */
6227
+ if (!expand_atomic_compare_and_swap (&target, &oldval, mem, expect, desired,
6228
is_weak, success, failure))
6231
- if (oldval != expect)
6232
- emit_move_insn (expect, oldval);
6233
+ /* Conditionally store back to EXPECT, lest we create a race condition
6234
+ with an improper store to memory. */
6235
+ /* ??? With a rearrangement of atomics at the gimple level, we can handle
6236
+ the normal case where EXPECT is totally private, i.e. a register. At
6237
+ which point the store can be unconditional. */
6238
+ label = gen_label_rtx ();
6239
+ emit_cmp_and_jump_insns (target, const0_rtx, NE, NULL, VOIDmode, 1, label);
6240
+ emit_move_insn (expect, oldval);
6241
+ emit_label (label);
6245
@@ -10766,7 +10781,7 @@
6246
return fold_builtin_strstr (loc, arg0, arg1, type);
6248
case BUILT_IN_STRCAT:
6249
- return fold_builtin_strcat (loc, arg0, arg1);
6250
+ return fold_builtin_strcat (loc, arg0, arg1, NULL_TREE);
6252
case BUILT_IN_STRSPN:
6253
return fold_builtin_strspn (loc, arg0, arg1);
6254
@@ -11809,8 +11824,9 @@
6255
COMPOUND_EXPR in the chain will contain the tree for the simplified
6256
form of the builtin function call. */
6259
-fold_builtin_strcat (location_t loc ATTRIBUTE_UNUSED, tree dst, tree src)
6261
+fold_builtin_strcat (location_t loc ATTRIBUTE_UNUSED, tree dst, tree src,
6264
if (!validate_arg (dst, POINTER_TYPE)
6265
|| !validate_arg (src, POINTER_TYPE))
6266
@@ -11828,22 +11844,17 @@
6267
/* See if we can store by pieces into (dst + strlen(dst)). */
6269
tree strlen_fn = builtin_decl_implicit (BUILT_IN_STRLEN);
6270
- tree strcpy_fn = builtin_decl_implicit (BUILT_IN_STRCPY);
6271
+ tree memcpy_fn = builtin_decl_implicit (BUILT_IN_MEMCPY);
6273
- if (!strlen_fn || !strcpy_fn)
6274
+ if (!strlen_fn || !memcpy_fn)
6277
- /* If we don't have a movstr we don't want to emit an strcpy
6278
- call. We have to do that if the length of the source string
6279
- isn't computable (in that case we can use memcpy probably
6280
- later expanding to a sequence of mov instructions). If we
6281
- have movstr instructions we can emit strcpy calls. */
6284
- tree len = c_strlen (src, 1);
6285
- if (! len || TREE_SIDE_EFFECTS (len))
6288
+ /* If the length of the source string isn't computable don't
6289
+ split strcat into strlen and memcpy. */
6291
+ len = c_strlen (src, 1);
6292
+ if (! len || TREE_SIDE_EFFECTS (len))
6295
/* Stabilize the argument list. */
6296
dst = builtin_save_expr (dst);
6297
@@ -11855,7 +11866,11 @@
6298
newdst = fold_build_pointer_plus_loc (loc, dst, newdst);
6299
newdst = builtin_save_expr (newdst);
6301
- call = build_call_expr_loc (loc, strcpy_fn, 2, newdst, src);
6302
+ len = fold_convert_loc (loc, size_type_node, len);
6303
+ len = size_binop_loc (loc, PLUS_EXPR, len,
6304
+ build_int_cst (size_type_node, 1));
6306
+ call = build_call_expr_loc (loc, memcpy_fn, 3, newdst, src, len);
6307
return build2 (COMPOUND_EXPR, TREE_TYPE (dst), call, dst);
6310
Index: gcc/fold-const.c
6311
===================================================================
6312
--- a/src/gcc/fold-const.c (.../tags/gcc_4_8_2_release)
6313
+++ b/src/gcc/fold-const.c (.../branches/gcc-4_8-branch)
6314
@@ -2664,10 +2664,11 @@
6316
/* Handle operand 2 the same as for ARRAY_REF. Operand 0
6317
may be NULL when we're called to compare MEM_EXPRs. */
6318
- if (!OP_SAME_WITH_NULL (0))
6319
+ if (!OP_SAME_WITH_NULL (0)
6322
flags &= ~OEP_CONSTANT_ADDRESS_OF;
6323
- return OP_SAME (1) && OP_SAME_WITH_NULL (2);
6324
+ return OP_SAME_WITH_NULL (2);
6328
@@ -4920,12 +4921,16 @@
6329
int in0_p, in1_p, in_p;
6330
tree low0, low1, low, high0, high1, high;
6331
bool strict_overflow_p = false;
6332
- tree lhs = make_range (op0, &in0_p, &low0, &high0, &strict_overflow_p);
6333
- tree rhs = make_range (op1, &in1_p, &low1, &high1, &strict_overflow_p);
6335
+ tree tem, lhs, rhs;
6336
const char * const warnmsg = G_("assuming signed overflow does not occur "
6337
"when simplifying range test");
6339
+ if (!INTEGRAL_TYPE_P (type))
6342
+ lhs = make_range (op0, &in0_p, &low0, &high0, &strict_overflow_p);
6343
+ rhs = make_range (op1, &in1_p, &low1, &high1, &strict_overflow_p);
6345
/* If this is an OR operation, invert both sides; we will invert
6346
again at the end. */
6348
@@ -10927,6 +10932,13 @@
6349
fold_build2_loc (loc, MULT_EXPR, type,
6350
build_int_cst (type, 2) , arg1));
6352
+ /* ((T) (X /[ex] C)) * C cancels out if the conversion is
6353
+ sign-changing only. */
6354
+ if (TREE_CODE (arg1) == INTEGER_CST
6355
+ && TREE_CODE (arg0) == EXACT_DIV_EXPR
6356
+ && operand_equal_p (arg1, TREE_OPERAND (arg0, 1), 0))
6357
+ return fold_convert_loc (loc, type, TREE_OPERAND (arg0, 0));
6359
strict_overflow_p = false;
6360
if (TREE_CODE (arg1) == INTEGER_CST
6361
&& 0 != (tem = extract_muldiv (op0, arg1, code, NULL_TREE,
6362
@@ -16587,7 +16599,7 @@
6363
unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
6364
tree index = bitsize_int (indexi);
6366
- if (offset/part_widthi <= TYPE_VECTOR_SUBPARTS (op00type))
6367
+ if (offset / part_widthi < TYPE_VECTOR_SUBPARTS (op00type))
6368
return fold_build3_loc (loc,
6369
BIT_FIELD_REF, type, op00,
6372
===================================================================
6373
--- a/src/gcc/reorg.c (.../tags/gcc_4_8_2_release)
6374
+++ b/src/gcc/reorg.c (.../branches/gcc-4_8-branch)
6375
@@ -1105,6 +1105,7 @@
6378
struct resources cc_set;
6381
/* We can't do anything if there are more delay slots in SEQ than we
6382
can handle, or if we don't know that it will be a taken branch.
6383
@@ -1145,6 +1146,7 @@
6387
+ redundant = XALLOCAVEC (bool, XVECLEN (seq, 0));
6388
for (i = 1; i < XVECLEN (seq, 0); i++)
6390
rtx trial = XVECEXP (seq, 0, i);
6391
@@ -1166,7 +1168,8 @@
6393
/* If this insn was already done (usually in a previous delay slot),
6394
pretend we put it in our delay slot. */
6395
- if (redundant_insn (trial, insn, new_delay_list))
6396
+ redundant[i] = redundant_insn (trial, insn, new_delay_list);
6400
/* We will end up re-vectoring this branch, so compute flags
6401
@@ -1199,6 +1202,12 @@
6405
+ /* Record the effect of the instructions that were redundant and which
6406
+ we therefore decided not to copy. */
6407
+ for (i = 1; i < XVECLEN (seq, 0); i++)
6409
+ update_block (XVECEXP (seq, 0, i), insn);
6411
/* Show the place to which we will be branching. */
6412
*pnew_thread = first_active_target_insn (JUMP_LABEL (XVECEXP (seq, 0, 0)));
6414
@@ -1262,6 +1271,7 @@
6415
/* If this insn was already done, we don't need it. */
6416
if (redundant_insn (trial, insn, delay_list))
6418
+ update_block (trial, insn);
6419
delete_from_delay_slot (trial);
6422
@@ -3266,6 +3276,7 @@
6423
to reprocess this insn. */
6424
if (redundant_insn (XVECEXP (pat, 0, 1), delay_insn, 0))
6426
+ update_block (XVECEXP (pat, 0, 1), insn);
6427
delete_from_delay_slot (XVECEXP (pat, 0, 1));
6428
next = prev_active_insn (next);
6430
@@ -3385,6 +3396,7 @@
6431
&& redirect_with_delay_slots_safe_p (delay_insn, target_label,
6434
+ update_block (XVECEXP (PATTERN (trial), 0, 1), insn);
6435
reorg_redirect_jump (delay_insn, target_label);
6438
Index: gcc/tree-ssa-sccvn.c
6439
===================================================================
6440
--- a/src/gcc/tree-ssa-sccvn.c (.../tags/gcc_4_8_2_release)
6441
+++ b/src/gcc/tree-ssa-sccvn.c (.../branches/gcc-4_8-branch)
6445
/* For non-calls, store the information that makes up the address. */
6450
vn_reference_op_s temp;
6451
@@ -711,7 +711,15 @@
6452
.arshift (BITS_PER_UNIT == 8
6453
? 3 : exact_log2 (BITS_PER_UNIT),
6454
HOST_BITS_PER_DOUBLE_INT);
6455
- if (off.fits_shwi ())
6456
+ if (off.fits_shwi ()
6457
+ /* Probibit value-numbering zero offset components
6458
+ of addresses the same before the pass folding
6459
+ __builtin_object_size had a chance to run
6460
+ (checking cfun->after_inlining does the
6462
+ && (TREE_CODE (orig) != ADDR_EXPR
6463
+ || !off.is_zero ()
6464
+ || cfun->after_inlining))
6468
Index: gcc/ChangeLog
6469
===================================================================
6470
--- a/src/gcc/ChangeLog (.../tags/gcc_4_8_2_release)
6471
+++ b/src/gcc/ChangeLog (.../branches/gcc-4_8-branch)
6473
+2014-03-06 Matthias Klose <doko@ubuntu.com>
6475
+ * Makefile.in (s-mlib): Only pass MULTIARCH_DIRNAME if
6476
+ MULTILIB_OSDIRNAMES is not defined.
6478
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
6480
+ PR tree-optimization/60276
6481
+ * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Avoid
6482
+ a -Wsign-compare warning.
6484
+ * Makefile.in (tree-ssa-uninit.o): Depend on $(PARAMS_H).
6486
+ Backport from mainline
6487
+ 2014-02-21 Jakub Jelinek <jakub@redhat.com>
6489
+ PR tree-optimization/56490
6490
+ * params.def (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS): New param.
6491
+ * tree-ssa-uninit.c: Include params.h.
6492
+ (compute_control_dep_chain): Add num_calls argument, return false
6493
+ if it exceed PARAM_UNINIT_CONTROL_DEP_ATTEMPTS param, pass
6494
+ num_calls to recursive call.
6495
+ (find_predicates): Change dep_chain into normal array, add num_calls
6496
+ variable and adjust compute_control_dep_chain caller.
6497
+ (find_def_preds): Likewise.
6499
+ 2014-02-13 Jakub Jelinek <jakub@redhat.com>
6502
+ * expr.c (compress_float_constant): If x is a hard register,
6503
+ extend into a pseudo and then move to x.
6505
+ 2014-02-11 Richard Henderson <rth@redhat.com>
6506
+ Jakub Jelinek <jakub@redhat.com>
6509
+ * tree-sra.c (load_assign_lhs_subreplacements): Add VIEW_CONVERT_EXPR
6510
+ around drhs if type conversion to lacc->type is not useless.
6512
+ 2014-02-08 Jakub Jelinek <jakub@redhat.com>
6515
+ * ipa-cp.c (determine_versionability): Fail at -O0
6516
+ or __attribute__((optimize (0))) or -fno-ipa-cp functions.
6517
+ * tree-sra.c (ipa_sra_preliminary_function_checks): Similarly.
6519
+ 2014-02-06 Jakub Jelinek <jakub@redhat.com>
6522
+ * tree.h (opts_for_fn): New inline function.
6523
+ (opt_for_fn): Define.
6524
+ * config/i386/i386.c (ix86_function_regparm): Use
6525
+ opt_for_fn (decl, optimize) instead of optimize.
6527
+ 2014-02-05 Jakub Jelinek <jakub@redhat.com>
6529
+ PR middle-end/57499
6530
+ * tree-eh.c (cleanup_empty_eh): Bail out on totally empty
6531
+ bb with no successors.
6533
+2014-03-04 Richard Biener <rguenther@suse.de>
6535
+ PR tree-optimization/60382
6536
+ * tree-vect-loop.c (vect_is_simple_reduction_1): Do not consider
6537
+ dead PHIs a reduction.
6539
+2014-02-25 Richard Biener <rguenther@suse.de>
6541
+ Backport from mainline
6542
+ 2014-02-21 Richard Biener <rguenther@suse.de>
6544
+ PR tree-optimization/60276
6545
+ * tree-vectorizer.h (struct _stmt_vec_info): Add min_neg_dist field.
6546
+ (STMT_VINFO_MIN_NEG_DIST): New macro.
6547
+ * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Record
6548
+ STMT_VINFO_MIN_NEG_DIST.
6549
+ * tree-vect-stmts.c (vectorizable_load): Verify if assumptions
6550
+ made for negative dependence distances still hold.
6552
+2014-02-25 Richard Biener <rguenther@suse.de>
6554
+ Backport from mainline
6555
+ 2014-02-21 Richard Biener <rguenther@suse.de>
6557
+ PR middle-end/60291
6558
+ * tree-ssa-live.c (mark_all_vars_used_1): Do not walk
6559
+ DECL_INITIAL for globals not in the current function context.
6561
+ 2014-02-20 Richard Biener <rguenther@suse.de>
6563
+ PR middle-end/60221
6564
+ * tree-eh.c (execute_cleanup_eh_1): Also cleanup empty EH
6567
+ 2014-02-14 Richard Biener <rguenther@suse.de>
6569
+ PR tree-optimization/60183
6570
+ * tree-ssa-phiprop.c (propagate_with_phi): Avoid speculating
6572
+ (tree_ssa_phiprop): Calculate and free post-dominators.
6574
+2014-02-25 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
6577
+ * config/arm/arm.h (CANNOT_CHANGE_MODE_CLASS): Allow 128 to 64-bit
6580
+2014-02-24 John David Anglin <danglin@gcc.gnu.org>
6582
+ * config/pa/pa.c (pa_output_move_double): Don't valididate when
6583
+ adjusting offsetable addresses.
6585
+2014-02-23 David Holsgrove <david.holsgrove@xilinx.com>
6587
+ * config/microblaze/microblaze.md: Correct ashrsi_reg / lshrsi_reg names
6589
+2014-02-23 Edgar E. Iglesias <edgar.iglesias@xilinx.com>
6591
+ * config/microblaze/microblaze.h: Remove SECONDARY_MEMORY_NEEDED
6594
+2014-02-23 David Holsgrove <david.holsgrove@xilinx.com>
6596
+ * /config/microblaze/microblaze.c: Add microblaze_asm_output_mi_thunk
6597
+ and define TARGET_ASM_OUTPUT_MI_THUNK and
6598
+ TARGET_ASM_CAN_OUTPUT_MI_THUNK.
6600
+2014-02-23 David Holsgrove <david.holsgrove@xilinx.com>
6602
+ * config/microblaze/predicates.md: Add cmp_op predicate.
6603
+ * config/microblaze/microblaze.md: Add branch_compare instruction
6604
+ which uses cmp_op predicate and emits cmp insn before branch.
6605
+ * config/microblaze/microblaze.c (microblaze_emit_compare): Rename
6606
+ to microblaze_expand_conditional_branch and consolidate logic.
6607
+ (microblaze_expand_conditional_branch): emit branch_compare
6608
+ insn instead of handling cmp op separate from branch insn.
6610
+2014-02-21 Martin Jambor <mjambor@suse.cz>
6613
+ * ipa-cp.c (cgraph_edge_brings_all_agg_vals_for_node): Uce correct
6614
+ info when checking whether lattices are bottom.
6616
+2014-02-21 Jakub Jelinek <jakub@redhat.com>
6618
+ * config/i386/i386.c (ix86_expand_vec_perm): Use V8SImode
6619
+ mode for mask of V8SFmode permutation.
6621
+2014-02-20 Richard Henderson <rth@redhat.com>
6624
+ * builtins.c (expand_builtin_atomic_compare_exchange): Conditionalize
6625
+ on failure the store back into EXPECT. Always make a new pseudo for
6628
+2014-02-20 Jakub Jelinek <jakub@redhat.com>
6631
+ * config/i386/i386.c (expand_vec_perm_interleave2): Don't call
6632
+ gen_reg_rtx if d->testing_p.
6633
+ (expand_vec_perm_pshufb2, expand_vec_perm_even_odd_1,
6634
+ expand_vec_perm_broadcast_1): Return early if d->testing_p and
6635
+ we will certainly return true.
6637
+2014-02-20 Richard Biener <rguenther@suse.de>
6639
+ * tree-cfg.c (replace_uses_by): Mark altered BBs before
6640
+ doing the substitution.
6642
+2014-02-19 H.J. Lu <hongjiu.lu@intel.com>
6644
+ Backport from mainline
6645
+ 2014-02-19 H.J. Lu <hongjiu.lu@intel.com>
6648
+ * config/i386/i386.c (construct_container): Remove TFmode check
6649
+ for X86_64_INTEGER_CLASS.
6651
+2014-02-19 Uros Bizjak <ubizjak@gmail.com>
6653
+ Backport from mainline
6654
+ 2014-02-19 Uros Bizjak <ubizjak@gmail.com>
6657
+ * config/i386/i386.c (type_natural_mode): Warn for ABI changes
6658
+ only when -Wpsabi is enabled.
6660
+2014-02-19 Terry Guo <terry.guo@arm.com>
6662
+ Backport from mainline
6663
+ 2014-02-08 Terry Guo <terry.guo@arm.com>
6665
+ * doc/invoke.texi: Document ARM -march=armv7e-m.
6667
+2014-02-18 Kai Tietz <ktietz@redhat.com>
6669
+ Backport from mainline
6670
+ 2014-02-18 Kai Tietz <ktietz@redhat.com>
6673
+ * config/i386/i386.c (ix86_expand_prologue): Use
6674
+ rax register as displacement for restoring %r10, %rax.
6675
+ Additional fix wrong offset for restoring both-registers.
6677
+2014-02-18 Eric Botcazou <ebotcazou@adacore.com>
6679
+ * ipa-prop.c (compute_complex_ancestor_jump_func): Replace overzealous
6680
+ assertion with conditional return.
6682
+2014-02-18 Jakub Jelinek <jakub@redhat.com>
6683
+ Uros Bizjak <ubizjak@gmail.com>
6686
+ * config/i386/driver-i386.c (host_detect_local_cpu): If
6687
+ YMM state is not saved by the OS, also clear has_f16c. Move
6688
+ CPUID 0x80000001 handling before YMM state saving checking.
6690
+2014-02-14 Roland McGrath <mcgrathr@google.com>
6692
+ * configure.ac (HAVE_AS_IX86_UD2): New test for 'ud2' mnemonic.
6693
+ * configure: Regenerated.
6694
+ * config.in: Regenerated.
6695
+ * config/i386/i386.md (trap) [HAVE_AS_IX86_UD2]: Use the mnemonic
6696
+ instead of ASM_SHORT.
6698
+2014-02-13 Uros Bizjak <ubizjak@gmail.com>
6700
+ Backport from mainline
6701
+ 2014-02-13 Uros Bizjak <ubizjak@gmail.com>
6703
+ * config/i386/sse.md (xop_vmfrcz<mode>2): Generate const0 in
6704
+ operands[2], not operands[3].
6706
+2014-02-13 Dominik Vogt <vogt@linux.vnet.ibm.com>
6708
+ * config/s390/s390.c (s390_asm_output_function_label): Fix crash
6709
+ caused by bad second argument to warning_at() with -mhotpatch and
6710
+ nested functions (e.g. with gfortran).
6712
+2014-02-12 H.J. Lu <hongjiu.lu@intel.com>
6714
+ Backport from mainline
6715
+ 2014-02-12 H.J. Lu <hongjiu.lu@intel.com>
6716
+ Uros Bizjak <ubizjak@gmail.com>
6719
+ * configure.ac (HAVE_AS_GOTOFF_IN_DATA): Pass --32 to GNU assembler.
6721
+2014-02-12 Eric Botcazou <ebotcazou@adacore.com>
6723
+ PR rtl-optimization/60116
6724
+ * combine.c (try_combine): Also remove dangling REG_DEAD notes on the
6725
+ other_insn once the combination has been validated.
6727
+2014-02-10 Nagaraju Mekala <nagaraju.mekala@xilinx.com>
6729
+ * config/microblaze/microblaze.md: Add movsi4_rev insn pattern.
6730
+ * config/microblaze/predicates.md: Add reg_or_mem_operand predicate.
6732
+2014-02-10 Nagaraju Mekala <nagaraju.mekala@xilinx.com>
6734
+ * config/microblaze/microblaze.c: Extend mcpu version format
6736
+2014-02-10 David Holsgrove <david.holsgrove@xilinx.com>
6738
+ * config/microblaze/microblaze.h: Define SIZE_TYPE and PTRDIFF_TYPE.
6740
+2014-02-10 Richard Biener <rguenther@suse.de>
6742
+ Backport from mainline
6743
+ 2014-01-30 Richard Biener <rguenther@suse.de>
6745
+ PR tree-optimization/59903
6746
+ * tree-vect-loop.c (vect_transform_loop): Guard multiple-types
6749
+ 2014-02-10 Richard Biener <rguenther@suse.de>
6751
+ PR tree-optimization/60115
6752
+ * tree-eh.c (tree_could_trap_p): Unify TARGET_MEM_REF and
6753
+ MEM_REF handling. Properly verify that the accesses are not
6754
+ out of the objects bound.
6756
+2014-02-05 James Greenhalgh <james.greenhalgh@arm.com>
6758
+ Backport from mainline.
6759
+ 2014-02-05 James Greenhalgh <james.greenhalgh@arm.com>
6762
+ * doc/invoke.texi (-march): Clarify documentation for ARM.
6763
+ (-mtune): Likewise.
6764
+ (-mcpu): Likewise.
6766
+2014-02-04 John David Anglin <danglin@gcc.gnu.org>
6769
+ * config/pa/pa.c (legitimize_tls_address): Return original address
6770
+ if not passed a SYMBOL_REF rtx.
6771
+ (hppa_legitimize_address): Call legitimize_tls_address for all TLS
6773
+ (pa_emit_move_sequence): Simplify TLS source operands.
6774
+ (pa_legitimate_constant_p): Reject all TLS constants.
6775
+ * config/pa/pa.h (PA_SYMBOL_REF_TLS_P): Correct comment.
6776
+ (CONSTANT_ADDRESS_P): Reject TLS CONST addresses.
6778
+2014-02-04 Uros Bizjak <ubizjak@gmail.com>
6780
+ Backport from mainline
6781
+ 2014-02-02 Uros Bizjak <ubizjak@gmail.com>
6784
+ * config/i386/i386.c (classify_argument): Fix handling of bit_offset
6785
+ when calculating size of integer atomic types.
6787
+2014-02-02 Uros Bizjak <ubizjak@gmail.com>
6789
+ Backport from mainline
6790
+ 2014-01-30 Jakub Jelinek <jakub@redhat.com>
6792
+ * config/i386/f16cintrin.h (_cvtsh_ss): Avoid -Wnarrowing warning.
6794
+2014-01-31 Richard Henderson <rth@redhat.com>
6796
+ PR middle-end/60004
6797
+ * tree-eh.c (lower_try_finally_switch): Delay lowering finally block
6798
+ until after else_eh is processed.
6800
+2014-01-30 David Holsgrove <david.holsgrove@xilinx.com>
6802
+ Backport from mainline
6803
+ * config/microblaze/microblaze.md(cstoresf4, cbranchsf4): Replace
6804
+ comparison_operator with ordered_comparison_operator.
6806
+2014-01-25 Walter Lee <walt@tilera.com>
6808
+ Backport from mainline
6809
+ 2014-01-25 Walter Lee <walt@tilera.com>
6811
+ * config/tilegx/sync.md (atomic_fetch_sub): Fix negation and
6812
+ avoid clobbering a live register.
6814
+2014-01-25 Walter Lee <walt@tilera.com>
6816
+ Backport from mainline
6817
+ 2014-01-25 Walter Lee <walt@tilera.com>
6819
+ * config/tilegx/tilegx-c.c (tilegx_cpu_cpp_builtins):
6820
+ Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1,2}.
6821
+ * config/tilegx/tilepro-c.c (tilepro_cpu_cpp_builtins):
6822
+ Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1,2,4,8}.
6824
+2014-01-25 Walter Lee <walt@tilera.com>
6826
+ Backport from mainline
6827
+ 2014-01-25 Walter Lee <walt@tilera.com>
6829
+ * config/tilegx/tilegx.c (tilegx_gen_bundles): Delete barrier
6830
+ insns before bundling.
6831
+ * config/tilegx/tilegx.md (tile_network_barrier): Update comment.
6833
+2014-01-25 Walter Lee <walt@tilera.com>
6835
+ Backport from mainline
6836
+ 2014-01-25 Walter Lee <walt@tilera.com>
6838
+ * config/tilegx/tilegx.c (tilegx_expand_builtin): Set
6839
+ PREFETCH_SCHEDULE_BARRIER_P to true for prefetches.
6840
+ * config/tilepro/tilepro.c (tilepro_expand_builtin): Ditto.
6842
+2014-01-25 Walter Lee <walt@tilera.com>
6844
+ Backport from mainline
6845
+ 2014-01-25 Walter Lee <walt@tilera.com>
6847
+ * config/tilepro/tilepro.md (ctzdi2): Use register_operand
6852
+2014-01-25 Walter Lee <walt@tilera.com>
6854
+ Backport from mainline
6855
+ 2014-01-25 Walter Lee <walt@tilera.com>
6857
+ * config/tilegx/tilegx.c (tilegx_expand_to_rtl_hook): New.
6858
+ (TARGET_EXPAND_TO_RTL_HOOK): Define.
6860
+2014-01-24 H.J. Lu <hongjiu.lu@intel.com>
6862
+ Backport from mainline
6863
+ 2014-01-23 H.J. Lu <hongjiu.lu@intel.com>
6866
+ * config/i386/i386.md (pushsf splitter): Get stack adjustment
6867
+ from push operand if code of push isn't PRE_DEC.
6869
+2014-01-23 David Holsgrove <david.holsgrove@xilinx.com>
6871
+ Backport from mainline.
6872
+ * config/microblaze/microblaze.md: Add trap insn and attribute
6874
+2014-01-23 Marek Polacek <polacek@redhat.com>
6876
+ Backport from mainline
6877
+ 2013-10-21 Marek Polacek <polacek@redhat.com>
6879
+ PR middle-end/58809
6880
+ * fold-const.c (fold_range_test): Return 0 if the type is not
6883
+2014-01-22 David Holsgrove <david.holsgrove@xilinx.com>
6885
+ * config/microblaze/microblaze.md: Correct bswaphi2 insn.
6887
+2014-01-22 Uros Bizjak <ubizjak@gmail.com>
6889
+ Backport from mainline
6890
+ 2014-01-20 Uros Bizjak <ubizjak@gmail.com>
6892
+ * config/i386/i386.c (ix86_avoid_lea_for_addr): Return false
6893
+ for SImode_address_operand operands, having only a REG argument.
6895
+ 2014-01-20 Jakub Jelinek <jakub@redhat.com>
6898
+ * config/i386/i386.c (ix86_avoid_lea_for_addr): Return false
6899
+ if operands[1] is a REG or ZERO_EXTEND of a REG.
6901
+ 2014-01-18 Uros Bizjak <ubizjak@gmail.com>
6902
+ H.J. Lu <hongjiu.lu@intel.com>
6905
+ * config/i386/i386.md (*lea<mode>): Zero-extend return register
6906
+ to DImode for zero-extended addresses.
6908
+2014-01-21 Andrew Pinski <apinski@cavium.com>
6909
+ Steve Ellcey <sellcey@mips.com>
6912
+ * config/mips/mips.c (mips_print_operand): Check operand mode instead
6915
+2014-01-21 Andrey Belevantsev <abel@ispras.ru>
6917
+ Backport from mainline
6918
+ 2013-12-23 Andrey Belevantsev <abel@ispras.ru>
6920
+ PR rtl-optimization/57422
6921
+ * sel-sched.c (mark_unavailable_hard_regs): Fix typo when calling
6922
+ add_to_hard_reg_set.
6924
+2014-01-20 Jakub Jelinek <jakub@redhat.com>
6926
+ PR middle-end/59860
6927
+ * tree.h (fold_builtin_strcat): New prototype.
6928
+ * builtins.c (fold_builtin_strcat): No longer static. Add len
6929
+ argument, if non-NULL, don't call c_strlen. Optimize
6930
+ directly into __builtin_memcpy instead of __builtin_strcpy.
6931
+ (fold_builtin_2): Adjust fold_builtin_strcat caller.
6932
+ * gimple-fold.c (gimple_fold_builtin): Handle BUILT_IN_STRCAT.
6934
+2014-01-20 Richard Biener <rguenther@suse.de>
6936
+ PR middle-end/59860
6937
+ * builtins.c (fold_builtin_strcat): Remove case better handled
6938
+ by tree-ssa-strlen.c.
6940
+2014-01-19 John David Anglin <danglin@gcc.gnu.org>
6942
+ * config/pa/pa.c (pa_attr_length_millicode_call): Correct length of
6943
+ long non-pic millicode calls.
6945
+2014-01-17 John David Anglin <danglin@gcc.gnu.org>
6947
+ * config/pa/pa.c (pa_attr_length_indirect_call): Don't output a short
6948
+ call to $$dyncall when TARGET_LONG_CALLS is true.
6950
+2014-01-17 H.J. Lu <hongjiu.lu@intel.com>
6952
+ Backport from mainline
6953
+ 2014-01-14 H.J. Lu <hongjiu.lu@intel.com>
6956
+ * config/i386/i386.c (type_natural_mode): Add a bool parameter
6957
+ to indicate if type is used for function return value. Warn
6958
+ ABI change if the vector mode isn't available for function
6960
+ (ix86_function_arg_advance): Pass false to type_natural_mode.
6961
+ (ix86_function_arg): Likewise.
6962
+ (ix86_gimplify_va_arg): Likewise.
6963
+ (function_arg_32): Don't warn ABI change.
6964
+ (ix86_function_value): Pass true to type_natural_mode.
6965
+ (ix86_return_in_memory): Likewise.
6966
+ (ix86_struct_value_rtx): Removed.
6967
+ (TARGET_STRUCT_VALUE_RTX): Likewise.
6969
+2014-01-17 Charles Baylis <charles.baylis@linaro.org>
6971
+ Backport from mainline
6972
+ 2013-12-19 Charles Baylis <charles.baylis@linaro.org>
6975
+ * config/arm/arm-ldmstm.ml: Use low_register_operand for Thumb
6977
+ * config/arm/ldmstm.md: Regenerate.
6979
+ 2013-12-19 Charles Baylis <charles.baylis@linaro.org>
6982
+ * config/arm/predicates.md (arm_hard_general_register_operand):
6984
+ (arm_hard_register_operand): Remove.
6985
+ * config/arm/arm-ldmstm.ml: Use arm_hard_general_register_operand
6987
+ * config/arm/ldmstm.md: Regenerate.
6989
+ 2013-12-19 Charles Baylis <charles.baylis@linaro.org>
6992
+ * config/arm/predicates.md (vfp_hard_register_operand): New predicate.
6993
+ * config/arm/arm.md (vfp_pop_multiple_with_writeback): Use
6994
+ vfp_hard_register_operand.
6996
+2014-01-17 Kugan Vivekanandarajah <kuganv@linaro.org>
6998
+ Backport from mainline
6999
+ 2014-01-15 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
7000
+ Kugan Vivekanandarajah <kuganv@linaro.org>
7003
+ * config/aarch64/aarch64.c (aarch64_build_constant): Fix incorrect
7006
+2014-01-17 Terry Guo <terry.guo@arm.com>
7009
+ * config/arm/arm.md (prefetch): Set insn type attribute to load1.
7011
+2014-01-16 Jakub Jelinek <jakub@redhat.com>
7014
+ * config/i386/i386.c (ix86_expand_builtin): If target doesn't
7015
+ satisfy operand 0 predicate for gathers, use a new pseudo as
7018
+2014-01-16 Richard Henderson <rth@redhat.com>
7021
+ * reginfo.c (global_regs_decl): Globalize.
7022
+ * rtl.h (global_regs_decl): Declare.
7023
+ * ira.c (do_reload): Diagnose frame_pointer_needed and it
7024
+ reserved via global_regs.
7026
+2014-01-16 Peter Bergner <bergner@vnet.ibm.com>
7028
+ Backport from mainline
7029
+ 2014-01-15 Uros Bizjak <ubizjak@gmail.com>
7031
+ * config/i386/i386.c (ix86_hard_regno_mode_ok): Use
7032
+ VALID_AVX256_REG_OR_OI_MODE.
7034
+ 2013-09-05 Peter Bergner <bergner@vnet.ibm.com>
7037
+ * reginfo.c (choose_hard_reg_mode): Scan through all mode classes
7038
+ looking for widest mode.
7040
+2014-01-16 Marek Polacek <polacek@redhat.com>
7042
+ Backported from mainline
7043
+ 2014-01-16 Marek Polacek <polacek@redhat.com>
7045
+ PR middle-end/59827
7046
+ * gimple-low.c (gimple_check_call_args): Don't use DECL_ARG_TYPE if
7047
+ it is error_mark_node.
7049
+2014-01-15 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
7052
+ * config/s390/s390.c (s390_preferred_reload_class): Don't return
7053
+ ADDR_REGS for invalid symrefs in non-PIC code.
7055
+2014-01-14 Uros Bizjak <ubizjak@gmail.com>
7058
+ 2014-01-08 Uros Bizjak <ubizjak@gmail.com>
7060
+ * config/i386/i386.c (ix86_data_alignment): Calculate max_align
7061
+ from prefetch_block tune setting.
7063
+2014-01-13 Jakub Jelinek <jakub@redhat.com>
7065
+ Backported from mainline
7066
+ 2014-01-10 Jakub Jelinek <jakub@redhat.com>
7068
+ PR tree-optimization/59745
7069
+ * tree-predcom.c (tree_predictive_commoning_loop): Call
7070
+ free_affine_expand_cache if giving up because components is NULL.
7072
+2014-01-10 Yufeng Zhang <yufeng.zhang@arm.com>
7074
+ * config/arm/arm.c (arm_expand_neon_args): Call expand_expr
7075
+ with EXPAND_MEMORY for NEON_ARG_MEMORY; check if the returned
7076
+ rtx is const0_rtx or not.
7078
+2014-01-10 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
7080
+ * config/s390/s390.c (s390_expand_tbegin): Remove jump over CC
7081
+ extraction in good case.
7083
+2014-01-10 Huacai Chen <chenhc@lemote.com>
7085
+ * config/mips/driver-native.c (host_detect_local_cpu): Handle new
7086
+ kernel strings for Loongson-2E/2F/3A.
7088
+2014-01-10 Richard Biener <rguenther@suse.de>
7090
+ PR tree-optimization/59715
7091
+ * tree-flow.h (split_critical_edges): Declare.
7092
+ * tree-cfg.c (split_critical_edges): Export.
7093
+ * tree-ssa-sink.c (execute_sink_code): Split critical edges.
7095
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
7097
+ * config/mips/mips.h (ISA_HAS_WSBH): Define.
7098
+ * config/mips/mips.md (UNSPEC_WSBH, UNSPEC_DSBH, UNSPEC_DSHD): New
7100
+ (bswaphi2, bswapsi2, bswapdi2, wsbh, dsbh, dshd): New patterns.
7102
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
7104
+ PR rtl-optimization/59137
7105
+ * reorg.c (steal_delay_list_from_target): Call update_block for
7107
+ (steal_delay_list_from_fallthrough, relax_delay_slots): Likewise.
7109
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
7112
+ 2012-10-07 Richard Sandiford <rdsandiford@googlemail.com>
7114
+ * config/mips/mips.c (mips_truncated_op_cost): New function.
7115
+ (mips_rtx_costs): Adjust test for BADDU.
7116
+ * config/mips/mips.md (*baddu_di<mode>): Push truncates to operands.
7118
+ 2012-10-02 Richard Sandiford <rdsandiford@googlemail.com>
7120
+ * config/mips/mips.md (*baddu_si_eb, *baddu_si_el): Merge into...
7121
+ (*baddu_si): ...this new pattern.
7123
+2014-01-09 Richard Biener <rguenther@suse.de>
7125
+ Backport from mainline
7126
+ 2013-11-18 Richard Biener <rguenther@suse.de>
7128
+ PR tree-optimization/59125
7129
+ PR tree-optimization/54570
7130
+ * tree-ssa-sccvn.c (copy_reference_ops_from_ref): When inlining
7131
+ is not complete do not treat component-references with offset zero
7132
+ but different fields as equal.
7133
+ * tree-object-size.c: Include tree-phinodes.h and ssa-iterators.h.
7134
+ (compute_object_sizes): Apply TLC. Propagate the constant
7135
+ results into all uses and fold their stmts.
7136
+ * passes.def (pass_all_optimizations): Move pass_object_sizes
7137
+ after the first pass_forwprop and before pass_fre.
7139
+ 2013-12-03 Jakub Jelinek <jakub@redhat.com>
7141
+ PR tree-optimization/59362
7142
+ * tree-object-size.c (object_sizes): Change into array of
7143
+ vec<unsigned HOST_WIDE_INT>.
7144
+ (compute_builtin_object_size): Check computed bitmap for
7145
+ non-NULL instead of object_sizes. Call safe_grow on object_sizes
7146
+ vector if new SSA_NAMEs appeared.
7147
+ (init_object_sizes): Check computed bitmap for non-NULL.
7148
+ Call safe_grow on object_sizes elements instead of initializing
7150
+ (fini_object_sizes): Call release on object_sizes elements, don't
7153
+2014-01-09 Richard Earnshaw <rearnsha@arm.com>
7155
+ PR rtl-optimization/54300
7156
+ * regcprop.c (copyprop_hardreg_forward_1): Ensure any unused
7157
+ outputs in a single-set are killed from the value chains.
7159
+2014-01-09 Jakub Jelinek <jakub@redhat.com>
7161
+ PR rtl-optimization/59724
7162
+ * ifcvt.c (cond_exec_process_if_block): Don't call
7163
+ flow_find_head_matching_sequence with 0 longest_match.
7164
+ * cfgcleanup.c (flow_find_head_matching_sequence): Count even
7165
+ non-active insns if !stop_after.
7166
+ (try_head_merge_bb): Revert 2014-01-07 changes.
7168
+2014-01-09 Hans-Peter Nilsson <hp@axis.com>
7170
+ Backport from mainline
7171
+ 2013-12-23 Hans-Peter Nilsson <hp@axis.com>
7173
+ PR middle-end/59584
7174
+ * config/cris/predicates.md (cris_nonsp_register_operand):
7175
+ New define_predicate.
7176
+ * config/cris/cris.md: Replace register_operand with
7177
+ cris_nonsp_register_operand for destinations in all
7178
+ define_splits where a register is set more than once.
7180
+2014-01-08 H.J. Lu <hongjiu.lu@intel.com>
7182
+ Backport from mainline
7183
+ 2013-12-25 H.J. Lu <hongjiu.lu@intel.com>
7186
+ * config/i386/i386.c (struct ptt): Add a field for processor name.
7187
+ (processor_target_table): Sync with processor_type. Add
7189
+ (cpu_names): Removed.
7190
+ (ix86_option_override_internal): Default x_ix86_tune_string
7191
+ to processor_target_table[TARGET_CPU_DEFAULT].name.
7192
+ (ix86_function_specific_print): Assert arch and tune <
7193
+ PROCESSOR_max. Use processor_target_table to print arch and
7195
+ * config/i386/i386.h (TARGET_CPU_DEFAULT): Default to
7196
+ PROCESSOR_GENERIC32.
7197
+ (target_cpu_default): Removed.
7198
+ (processor_type): Reordered.
7200
+2014-01-08 Uros Bizjak <ubizjak@gmail.com>
7202
+ Backport from mainline
7203
+ 2014-01-05 Uros Bizjak <ubizjak@gmail.com>
7205
+ * config/i386/i386.c (ix86_data_alignment): Calculate max_align
7206
+ from prefetch_block tune setting.
7207
+ (nocona_cost): Correct size of prefetch block to 64.
7209
+2014-01-08 Martin Jambor <mjambor@suse.cz>
7212
+ * ipa-prop.c (ipa_compute_jump_functions): Bail out if not optimizing.
7213
+ (parm_preserved_before_stmt_p): Assume modification present when not
7216
+2014-01-07 John David Anglin <danglin@gcc.gnu.org>
7219
+ * config/pa/pa.c (pa_legitimate_address_p): Return false before reload
7220
+ for 14-bit register offsets when INT14_OK_STRICT is false.
7222
+2014-01-07 Roland Stigge <stigge@antcom.de>
7223
+ Michael Meissner <meissner@linux.vnet.ibm.com>
7226
+ * config/rs6000/rs6000.c (rs6000_legitimate_offset_address_p):
7227
+ Only check TFmode for SPE constants. Don't check TImode or TDmode.
7229
+2014-01-07 Jakub Jelinek <jakub@redhat.com>
7231
+ PR rtl-optimization/58668
7232
+ * cfgcleanup.c (flow_find_cross_jump): Don't count
7233
+ any jumps if dir_p is NULL. Remove p1 variable and make USE/CLOBBER
7234
+ check consistent with other places.
7235
+ (flow_find_head_matching_sequence): Don't count USE or CLOBBER insns.
7236
+ (try_head_merge_bb): Adjust for the flow_find_head_matching_sequence
7238
+ * ifcvt.c (count_bb_insns): Don't count USE or CLOBBER insns.
7240
+2014-01-07 Mike Stump <mikestump@comcast.net>
7241
+ Jakub Jelinek <jakub@redhat.com>
7244
+ * tree.h (struct tree_optimization_option): Change optabs
7245
+ type from unsigned char * to void *.
7246
+ * optabs.c (init_tree_optimization_optabs): Adjust
7247
+ TREE_OPTIMIZATION_OPTABS initialization.
7249
+2014-01-07 Jakub Jelinek <jakub@redhat.com>
7251
+ Backported from mainline
7252
+ 2013-12-16 Jakub Jelinek <jakub@redhat.com>
7254
+ PR middle-end/58956
7255
+ PR middle-end/59470
7256
+ * gimple.h (walk_stmt_load_store_addr_fn): New typedef.
7257
+ (walk_stmt_load_store_addr_ops, walk_stmt_load_store_ops): Use it
7258
+ for callback params.
7259
+ * gimple.c (walk_stmt_load_store_ops): Likewise.
7260
+ (walk_stmt_load_store_addr_ops): Likewise. Adjust all callback
7261
+ calls to supply the gimple operand containing the base tree
7262
+ as an extra argument.
7263
+ * tree-ssa-ter.c (find_ssaname, find_ssaname_in_store): New helper
7265
+ (find_replaceable_in_bb): For calls or GIMPLE_ASM, only set
7266
+ same_root_var if USE is used somewhere in the stores of the stmt.
7267
+ * ipa-prop.c (visit_ref_for_mod_analysis): Remove name of the stmt
7268
+ argument and ATTRIBUTE_UNUSED, add another unnamed tree argument.
7269
+ * ipa-pure-const.c (check_load, check_store, check_ipa_load,
7270
+ check_ipa_store): Likewise.
7271
+ * gimple.c (gimple_ior_addresses_taken_1): Likewise.
7272
+ * ipa-split.c (test_nonssa_use, mark_nonssa_use): Likewise.
7273
+ (verify_non_ssa_vars, visit_bb): Adjust their callers.
7274
+ * cfgexpand.c (add_scope_conflicts_1): Use
7275
+ walk_stmt_load_store_addr_fn type for visit variable.
7276
+ (visit_op, visit_conflict): Remove name of the stmt
7277
+ argument and ATTRIBUTE_UNUSED, add another unnamed tree argument.
7278
+ * tree-sra.c (asm_visit_addr): Likewise. Remove name of the data
7279
+ argument and ATTRIBUTE_UNUSED.
7280
+ * cgraphbuild.c (mark_address, mark_load, mark_store): Add another
7281
+ unnamed tree argument.
7283
+2014-01-03 Andreas Schwab <schwab@linux-m68k.org>
7285
+ * config/m68k/m68k.c (handle_move_double): Handle pushes with
7286
+ overlapping registers also for registers other than the stack
7289
+2014-01-03 Jakub Jelinek <jakub@redhat.com>
7292
+ * config/i386/i386.c (ix86_avoid_jump_mispredicts): Don't consider
7295
+2014-01-01 Jakub Jelinek <jakub@redhat.com>
7297
+ PR rtl-optimization/59647
7298
+ * cse.c (cse_process_notes_1): Don't substitute negative VOIDmode
7299
+ new_rtx into UNSIGNED_FLOAT rtxes.
7301
+2013-12-28 Eric Botcazou <ebotcazou@adacore.com>
7303
+ * doc/invoke.texi (output file options): Document -fada-spec-parent.
7305
+2013-12-26 Uros Bizjak <ubizjak@gmail.com>
7307
+ * config/i386/driver-i386.c (decode_caches_intel): Add missing entries.
7309
+2013-12-20 Jakub Jelinek <jakub@redhat.com>
7312
+ Backported from mainline
7313
+ 2013-08-19 Dehao Chen <dehao@google.com>
7315
+ * value-prof.c (gimple_ic): Fix the bug of adding EH edge.
7317
+2013-12-19 James Greenhalgh <james.greenhalgh@arm.com>
7319
+ Backport from Mainline.
7320
+ 2013-05-01 James Greenhalgh <james.greenhalgh@arm.com>
7322
+ * config/aarch64/aarch64-simd-builtins.def (cmhs): Rename to...
7324
+ (cmhi): Rename to...
7326
+ * config/aarch64/aarch64-simd.md
7327
+ (simd_mode): Add SF.
7328
+ (aarch64_vcond_internal): Use new names for unsigned comparison insns.
7329
+ (aarch64_cm<optab><mode>): Rewrite to not use UNSPECs.
7330
+ * config/aarch64/aarch64.md (*cstore<mode>_neg): Rename to...
7331
+ (cstore<mode>_neg): ...This.
7332
+ * config/aarch64/iterators.md
7334
+ (unspec): Remove UNSPEC_CM<EQ, LE, LT, GE, GT, HS, HI, TST>.
7335
+ (COMPARISONS): New.
7336
+ (UCOMPARISONS): Likewise.
7337
+ (optab): Add missing comparisons.
7339
+ (cmp_1): Likewise.
7340
+ (cmp_2): Likewise.
7343
+ (VCMP_S): Likewise.
7344
+ (VCMP_U): Likewise.
7345
+ (V_cmp_result): Add DF, SF modes.
7346
+ (v_cmp_result): Likewise.
7348
+ (vmtype): Likewise.
7349
+ * config/aarch64/predicates.md (aarch64_reg_or_fp_zero): New.
7351
+ Partial Backport from mainline.
7352
+ 2013-05-01 James Greenhalgh <james.greenhalgh@arm.com>
7354
+ * config/aarch64/arm_neon.h
7355
+ (vc<eq, lt, le, gt, ge, tst><qsd>_<u><8,16,32,64>): Remap
7356
+ to builtins or C as appropriate.
7358
+2013-12-19 Dominik Vogt <vogt@linux.vnet.ibm.com>
7359
+ Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
7361
+ Backport from mainline
7362
+ 2013-12-19 Dominik Vogt <vogt@linux.vnet.ibm.com>
7363
+ * config/s390/s390.c (s390_hotpatch_trampoline_halfwords_default): New
7365
+ (s390_hotpatch_trampoline_halfwords_max): New constant
7366
+ (s390_hotpatch_trampoline_halfwords): New static variable
7367
+ (get_hotpatch_attribute): New function
7368
+ (s390_handle_hotpatch_attribute): New function
7369
+ (s390_attribute_table): New target specific attribute table to implement
7370
+ the hotpatch attribute
7371
+ (s390_option_override): Parse hotpatch options
7372
+ (s390_function_num_hotpatch_trampoline_halfwords): New function
7373
+ (s390_can_inline_p): Implement target hook to
7374
+ suppress hotpatching for explicitly inlined functions
7375
+ (s390_asm_output_function_label): Generate hotpatch prologue
7376
+ (TARGET_ATTRIBUTE_TABLE): Define to implement target attribute table
7377
+ (TARGET_CAN_INLINE_P): Define to implement target hook
7378
+ * config/s390/s390.opt (mhotpatch): New options -mhotpatch, -mhotpatch=
7379
+ * config/s390/s390-protos.h (s390_asm_output_function_label): Add
7381
+ * config/s390/s390.h (ASM_OUTPUT_FUNCTION_LABEL): Target specific
7382
+ function label generation for hotpatching
7383
+ (FUNCTION_BOUNDARY): Align functions to eight bytes
7384
+ * doc/extend.texi: Document hotpatch attribute
7385
+ * doc/invoke.texi: Document -mhotpatch option
7387
+2013-12-18 Eric Botcazou <ebotcazou@adacore.com>
7389
+ * config/arm/arm.c (arm_expand_epilogue_apcs_frame): Fix thinko.
7391
+2013-12-12 Vladimir Makarov <vmakarov@redhat.com>
7393
+ PR middle-end/59470
7394
+ * lra-coalesce.c (lra_coalesce): Invalidate inheritance pseudo
7395
+ values if necessary.
7397
+2013-12-12 Jakub Jelinek <jakub@redhat.com>
7400
+ * gimplify.c (omp_check_private): Add copyprivate argument, if it
7401
+ is true, don't check omp_privatize_by_reference.
7402
+ (gimplify_scan_omp_clauses): For OMP_CLAUSE_COPYPRIVATE verify
7403
+ decl is private in outer context. Adjust omp_check_private caller.
7405
+2013-12-10 Eric Botcazou <ebotcazou@adacore.com>
7407
+ PR rtl-optimization/58295
7408
+ * simplify-rtx.c (simplify_truncation): Restrict the distribution for
7409
+ WORD_REGISTER_OPERATIONS targets.
7411
+2013-12-10 Kai Tietz <ktietz@redhat.com>
7414
+ * config/i386/i386.c (ix86_expand_prologue): Address saved
7415
+ registers stack-relative, not via frame-pointer.
7417
+2013-12-09 Alan Modra <amodra@gmail.com>
7419
+ Apply from mainline
7420
+ 2013-12-05 Alan Modra <amodra@gmail.com>
7421
+ * configure.ac (BUILD_CXXFLAGS) Don't use ALL_CXXFLAGS for
7423
+ <recursive call for build != host>: Clear GMPINC. Don't bother
7425
+ * configure: Regenerate.
7427
+2013-12-08 Uros Bizjak <ubizjak@gmail.com>
7429
+ Backport from mainline
7430
+ 2013-12-06 Uros Bizjak <ubizjak@gmail.com>
7433
+ * config/i386/i386.c (type_natural_mode): Properly handle
7434
+ size 8 for !TARGET_64BIT.
7436
+2013-12-07 Ralf Corsépius <ralf.corsepius@rtems.org>
7438
+ * config.gcc (microblaze*-*-rtems*): Add TARGET_BIG_ENDIAN_DEFAULT.
7440
+2013-12-06 Jakub Jelinek <jakub@redhat.com>
7442
+ PR tree-optimization/59388
7443
+ * tree-ssa-reassoc.c (update_range_test): If op == range->exp,
7444
+ gimplify tem after stmt rather than before it.
7446
+2013-12-06 Oleg Endo <olegendo@gcc.gnu.org>
7448
+ Backport from mainline
7449
+ 2013-11-26 Oleg Endo <olegendo@gcc.gnu.org>
7453
+ * config/sh/sh.c (max_mov_insn_displacement, disp_addr_displacement):
7454
+ Prefix function names with 'sh_'. Make them non-static.
7455
+ * config/sh/sh-protos.h (sh_disp_addr_displacement,
7456
+ sh_max_mov_insn_displacement): Add declarations.
7457
+ * config/sh/constraints.md (Q): Reject QImode.
7458
+ (Sdd): Use match_code "mem".
7459
+ (Snd): Fix erroneous matching of non-memory operands.
7460
+ * config/sh/predicates.md (short_displacement_mem_operand): New
7462
+ (general_movsrc_operand): Disallow PC relative QImode loads.
7463
+ * config/sh/sh.md (*mov<mode>_reg_reg): Remove it.
7464
+ (*movqi, *movhi): Merge both insns into...
7465
+ (*mov<mode>): ... this new insn. Replace generic 'm' constraints with
7466
+ 'Snd' and 'Sdd' constraints. Calculate insn length dynamically based
7467
+ on the operand types.
7469
+2013-12-06 Richard Biener <rguenther@suse.de>
7471
+ Backport from mainline
7472
+ 2013-11-29 Richard Biener <rguenther@suse.de>
7474
+ PR tree-optimization/59334
7475
+ * tree-ssa-dce.c (eliminate_unnecessary_stmts): Fix bug
7476
+ in previous commit.
7478
+ 2013-11-28 Richard Biener <rguenther@suse.de>
7480
+ PR tree-optimization/59330
7481
+ * tree-ssa-dce.c (eliminate_unnecessary_stmts): Simplify
7482
+ and fix delayed marking of free calls not necessary.
7484
+2013-12-06 Richard Biener <rguenther@suse.de>
7486
+ Backport from mainline
7487
+ 2013-11-27 Richard Biener <rguenther@suse.de>
7489
+ PR tree-optimization/59288
7490
+ * tree-vect-loop.c (get_initial_def_for_induction): Do not
7491
+ re-analyze the PHI but use STMT_VINFO_LOOP_PHI_EVOLUTION_PART.
7493
+ 2013-11-19 Richard Biener <rguenther@suse.de>
7495
+ PR tree-optimization/59164
7496
+ * tree-vect-loop.c (vect_analyze_loop_operations): Adjust
7497
+ check whether we can create an epilogue loop to reflect the
7498
+ cases where we create one.
7500
+ 2013-09-05 Richard Biener <rguenther@suse.de>
7502
+ PR tree-optimization/58137
7503
+ * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size):
7504
+ Do not create vectors of pointers.
7505
+ * tree-vect-loop.c (get_initial_def_for_induction): Use proper
7506
+ types for the components of the vector initializer.
7507
+ * tree-cfg.c (verify_gimple_assign_binary): Remove special-casing
7508
+ allowing pointer vectors with PLUS_EXPR/MINUS_EXPR.
7510
+2013-12-06 Oleg Endo <olegendo@gcc.gnu.org>
7514
+ * config/sh/sh.md (*cbranch_t): Check that there are no labels between
7515
+ the s1 insn and the testing insn. Remove REG_DEAD note from s1 insn.
7517
+2013-12-05 Richard Biener <rguenther@suse.de>
7519
+ Backport from mainline
7520
+ 2013-11-19 Richard Biener <rguenther@suse.de>
7522
+ PR middle-end/58956
7523
+ * tree-ssa-ter.c (find_replaceable_in_bb): Avoid forwarding
7524
+ loads into stmts that may clobber it.
7526
+2013-12-04 Jakub Jelinek <jakub@redhat.com>
7528
+ PR rtl-optimization/58726
7529
+ * combine.c (force_to_mode): Fix comment typo. Don't destructively
7530
+ modify x for ROTATE, ROTATERT and IF_THEN_ELSE.
7532
+2013-12-04 Jakub Jelinek <jakub@redhat.com>
7533
+ Uros Bizjak <ubizjak@gmail.com>
7536
+ * config/i386/i386.c (ix86_legitimate_combined_insn): If for
7537
+ !TARGET_AVX there is misaligned MEM operand with vector mode
7538
+ and get_attr_ssememalign is 0, return false.
7539
+ (ix86_expand_special_args_builtin): Add get_pointer_alignment
7540
+ computed alignment and for non-temporal loads/stores also
7541
+ at least GET_MODE_ALIGNMENT as MEM_ALIGN.
7542
+ * config/i386/sse.md
7543
+ (<sse>_loadu<ssemodesuffix><avxsizesuffix>,
7544
+ <sse>_storeu<ssemodesuffix><avxsizesuffix>,
7545
+ <sse2>_loaddqu<avxsizesuffix>,
7546
+ <sse2>_storedqu<avxsizesuffix>, <sse3>_lddqu<avxsizesuffix>,
7547
+ sse_vmrcpv4sf2, sse_vmrsqrtv4sf2, sse2_cvtdq2pd, sse_movhlps,
7548
+ sse_movlhps, sse_storehps, sse_loadhps, sse_loadlps,
7549
+ *vec_interleave_highv2df, *vec_interleave_lowv2df,
7550
+ *vec_extractv2df_1_sse, sse2_loadhpd, sse2_loadlpd, sse2_movsd,
7551
+ sse4_1_<code>v8qiv8hi2, sse4_1_<code>v4qiv4si2,
7552
+ sse4_1_<code>v4hiv4si2, sse4_1_<code>v2qiv2di2,
7553
+ sse4_1_<code>v2hiv2di2, sse4_1_<code>v2siv2di2, sse4_2_pcmpestr,
7554
+ *sse4_2_pcmpestr_unaligned, sse4_2_pcmpestri, sse4_2_pcmpestrm,
7555
+ sse4_2_pcmpestr_cconly, sse4_2_pcmpistr, *sse4_2_pcmpistr_unaligned,
7556
+ sse4_2_pcmpistri, sse4_2_pcmpistrm, sse4_2_pcmpistr_cconly): Add
7557
+ ssememalign attribute.
7558
+ * config/i386/i386.md (ssememalign): New define_attr.
7560
+2013-12-03 Jakub Jelinek <jakub@redhat.com>
7562
+ PR middle-end/59011
7563
+ * gimplify.c (nonlocal_vla_vars): New variable.
7564
+ (gimplify_var_or_parm_decl): Put VAR_DECLs for VLAs into
7565
+ nonlocal_vla_vars chain.
7566
+ (gimplify_body): Call declare_vars on nonlocal_vla_vars chain
7567
+ if outer_bind has DECL_INITIAL (current_function_decl) block.
7570
+ * optabs.c (emit_conditional_move): Save and restore
7571
+ pending_stack_adjust and stack_pointer_delta if cmove can't be used.
7573
+2013-12-02 Jakub Jelinek <jakub@redhat.com>
7575
+ PR tree-optimization/59358
7576
+ * tree-vrp.c (union_ranges): To check for the partially
7577
+ overlapping ranges or adjacent ranges, also compare *vr0max
7580
+2013-12-02 Richard Biener <rguenther@suse.de>
7582
+ PR tree-optimization/59139
7583
+ * tree-ssa-loop-niter.c (chain_of_csts_start): Properly match
7584
+ code in get_val_for.
7585
+ (get_val_for): Use gcc_checking_asserts.
7587
+2013-11-27 Tom de Vries <tom@codesourcery.com>
7588
+ Marc Glisse <marc.glisse@inria.fr>
7590
+ PR middle-end/59037
7591
+ * fold-const.c (fold_indirect_ref_1): Don't create out-of-bounds
7593
+ * gimplify.c (gimple_fold_indirect_ref): Same.
7595
+2013-12-01 Eric Botcazou <ebotcazou@adacore.com>
7597
+ * config/i386/winnt.c (i386_pe_asm_named_section): Be prepared for an
7600
+2013-12-01 Bernd Edlinger <bernd.edlinger@hotmail.de>
7602
+ * expr.c (emit_group_store): Fix off-by-one BITFIELD_END argument.
7604
+2013-11-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
7606
+ Backport from mainline
7607
+ 2013-11-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
7609
+ * config/arm/iterators.md (vrint_conds): New int attribute.
7610
+ * config/arm/vfp.md (<vrint_pattern><SDF:mode>2): Set conds attribute.
7611
+ (smax<mode>3): Likewise.
7612
+ (smin<mode>3): Likewise.
7614
+2013-11-28 Uros Bizjak <ubizjak@gmail.com>
7616
+ Backport from mainline
7617
+ 2013-11-27 Uros Bizjak <ubizjak@gmail.com>
7618
+ Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
7621
+ * gcc.target/i386/xop-frczX.c: New test.
7623
+2013-11-28 Terry Guo <terry.guo@arm.com>
7625
+ Backport mainline r205391
7626
+ 2013-11-26 Terry Guo <terry.guo@arm.com>
7628
+ * config/arm/arm.c (require_pic_register): Handle high pic base
7629
+ register for thumb-1.
7630
+ (arm_load_pic_register): Also initialize high pic base register.
7631
+ * doc/invoke.texi: Update documentation for option -mpic-register.
7633
+2013-11-27 Jakub Jelinek <jakub@redhat.com>
7635
+ Backported from mainline
7636
+ 2013-11-26 Jakub Jelinek <jakub@redhat.com>
7638
+ PR tree-optimization/59014
7639
+ * tree-vrp.c (register_edge_assert_for_1): Don't look
7640
+ through conversions from non-integral types or through
7641
+ narrowing conversions.
7643
+2013-11-27 Eric Botcazou <ebotcazou@adacore.com>
7645
+ PR middle-end/59138
7646
+ * expr.c (emit_group_store): Don't write past the end of the structure.
7647
+ (store_bit_field): Fix formatting.
7649
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
7651
+ Backport from mainline
7652
+ 2013-09-17 Sebastian Huber <sebastian.huber@embedded-brains.de>
7654
+ * config/sparc/t-rtems: Add leon3 multilibs.
7656
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
7658
+ Backport from mainline
7659
+ 2013-08-09 Eric Botcazou <ebotcazou@adacore.com>
7661
+ * configure.ac: Add GAS check for LEON instructions on SPARC.
7662
+ * configure: Regenerate.
7663
+ * config.in: Likewise.
7664
+ * config.gcc (with_cpu): Remove sparc-leon*-* and deal with LEON in the
7666
+ * config/sparc/sparc.opt (LEON, LEON3): New masks.
7667
+ * config/sparc/sparc.h (ASM_CPU32_DEFAULT_SPEC): Set to AS_LEON_FLAG
7668
+ for LEON or LEON3.
7669
+ (ASM_CPU_SPEC): Pass AS_LEON_FLAG if -mcpu=leon or -mcpu=leon3.
7670
+ (AS_LEON_FLAG): New macro.
7671
+ * config/sparc/sparc.c (sparc_option_override): Set MASK_LEON for leon
7672
+ and MASK_LEON3 for leon3 and unset them if HAVE_AS_LEON is not defined.
7673
+ Deal with LEON and LEON3 for the memory model.
7674
+ * config/sparc/sync.md (atomic_compare_and_swap<mode>): Enable if LEON3
7675
+ (atomic_compare_and_swap<mode>_1): Likewise.
7676
+ (*atomic_compare_and_swap<mode>_1): Likewise.
7678
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
7680
+ Backport from mainline
7681
+ 2013-07-23 Eric Botcazou <ebotcazou@adacore.com>
7683
+ * doc/invoke.texi (SPARC Options): Document new leon3 processor value.
7685
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
7687
+ Backport from mainline
7688
+ 2013-07-22 Eric Botcazou <ebotcazou@adacore.com>
7690
+ * config.gcc (sparc*-*-*): Accept leon3 processor.
7691
+ (sparc-leon*-*): Merge with sparc*-*-* and add leon3 support.
7692
+ * doc/invoke.texi (SPARC Options): Adjust -mfix-ut699 entry.
7693
+ * config/sparc/sparc-opts.h (enum processor_type): Add PROCESSOR_LEON3.
7694
+ * config/sparc/sparc.opt (enum processor_type): Add leon3.
7695
+ (mfix-ut699): Adjust comment.
7696
+ * config/sparc/sparc.h (TARGET_CPU_leon3): New define.
7697
+ (CPP_CPU32_DEFAULT_SPEC): Add leon3 support.
7698
+ (CPP_CPU_SPEC): Likewise.
7699
+ (ASM_CPU_SPEC): Likewise.
7700
+ * config/sparc/sparc.c (leon3_cost): New constant.
7701
+ (sparc_option_override): Add leon3 support.
7702
+ (mem_ref): New function.
7703
+ (sparc_gate_work_around_errata): Return true if -mfix-ut699 is enabled.
7704
+ (sparc_do_work_around_errata): Look into the instruction in the delay
7705
+ slot and adjust accordingly. Add fix for the data cache nullify issues
7706
+ of the UT699. Change insertion position for the NOP.
7707
+ * config/sparc/leon.md (leon_fpalu, leon_fpmds, write_buf): Delete.
7708
+ (leon3_load): New reservation.
7709
+ (leon_store): Bump latency to 2.
7710
+ (grfpu): New automaton.
7711
+ (grfpu_alu): New unit.
7712
+ (grfpu_ds): Likewise.
7713
+ (leon_fp_alu): Adjust.
7714
+ (leon_fp_mult): Delete.
7715
+ (leon_fp_div): Split into leon_fp_divs and leon_fp_divd.
7716
+ (leon_fp_sqrt): Split into leon_fp_sqrts and leon_fp_sqrtd.
7717
+ * config/sparc/sparc.md (cpu): Add leon3.
7718
+ * config/sparc/sync.md (atomic_exchangesi): Disable if -mfix-ut699.
7719
+ (swapsi): Likewise.
7720
+ (atomic_test_and_set): Likewise.
7721
+ (ldstub): Likewise.
7723
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
7725
+ Backport from mainline
7726
+ 2013-04-10 Steven Bosscher <steven@gcc.gnu.org>
7728
+ * config/sparc/sparc.c: Include tree-pass.h.
7729
+ (TARGET_MACHINE_DEPENDENT_REORG): Do not redefine.
7730
+ (sparc_reorg): Rename to sparc_do_work_around_errata. Move to
7731
+ head of file. Change return type. Split off gate function.
7732
+ (sparc_gate_work_around_errata): New function.
7733
+ (pass_work_around_errata): New pass definition.
7734
+ (insert_pass_work_around_errata) New pass insert definition to
7735
+ insert pass_work_around_errata just after delayed-branch scheduling.
7736
+ (sparc_option_override): Insert the pass.
7737
+ * config/sparc/t-sparc (sparc.o): Add TREE_PASS_H dependence.
7739
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
7741
+ Backport from mainline
7742
+ 2013-05-28 Eric Botcazou <ebotcazou@adacore.com>
7744
+ * doc/invoke.texi (SPARC Options): Document -mfix-ut699.
7745
+ * builtins.c (expand_builtin_mathfn) <BUILT_IN_SQRT>: Try to widen the
7746
+ mode if the instruction isn't available in the original mode.
7747
+ * config/sparc/sparc.opt (mfix-ut699): New option.
7748
+ * config/sparc/sparc.md (muldf3_extend): Disable if -mfix-ut699.
7749
+ (divdf3): Turn into expander.
7750
+ (divdf3_nofix): New insn.
7751
+ (divdf3_fix): Likewise.
7752
+ (divsf3): Disable if -mfix-ut699.
7753
+ (sqrtdf2): Turn into expander.
7754
+ (sqrtdf2_nofix): New insn.
7755
+ (sqrtdf2_fix): Likewise.
7756
+ (sqrtsf2): Disable if -mfix-ut699.
7758
+2013-11-22 Eric Botcazou <ebotcazou@adacore.com>
7760
+ * print-rtl.c (print_rtx) <case MEM>: Output a space if no MEM_EXPR.
7762
+2013-11-21 Zhenqiang Chen <zhenqiang.chen@linaro.org>
7764
+ PR bootstrap/57683
7765
+ Backport from mainline: r197467 and r198999.
7766
+ 2013-04-03 Jeff Law <law@redhat.com>
7768
+ * Makefile.in (lra-constraints.o): Depend on $(OPTABS_H).
7769
+ (lra-eliminations.o): Likewise.
7771
+ 2013-05-16 Jeff Law <law@redhat.com>
7773
+ * Makefile.in (tree-switch-conversion.o): Depend on $(OPTABS_H).
7775
+2013-11-20 Eric Botcazou <ebotcazou@adacore.com>
7778
+ * config/sparc/sparc.c (sparc_fold_builtin) <case CODE_FOR_pdist_vis>:
7779
+ Make sure neg2_ovf is set before being used.
7781
+2013-11-20 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
7782
+ Dominik Vogt <vogt@linux.vnet.ibm.com>
7784
+ Backport from mainline
7785
+ * config/s390/s390.c (s390_canonicalize_comparison): Don't fold
7786
+ int comparisons with an out of range condition code.
7787
+ (s390_optimize_nonescaping_tx): Skip empty BBs.
7788
+ Generate the new tbegin RTX when removing the FPR clobbers (with
7790
+ (s390_expand_tbegin): Fix the retry loop counter. Copy CC to the
7791
+ result before doing the retry calculations.
7792
+ (s390_init_builtins): Make tbegin "returns_twice" and tabort
7794
+ * config/s390/s390.md (UNSPECV_TBEGIN_TDB): New constant used for
7795
+ the TDB setting part of an tbegin.
7796
+ ("tbegin_1", "tbegin_nofloat_1"): Add a set for the TDB.
7797
+ ("tx_assist"): Set unused argument to an immediate zero instead of
7798
+ loading zero into a GPR and pass it as argument.
7799
+ * config/s390/htmxlintrin.h (__TM_simple_begin, __TM_begin):
7800
+ Remove inline and related attributes.
7801
+ (__TM_nesting_depth, __TM_is_user_abort, __TM_is_named_user_abort)
7802
+ (__TM_is_illegal, __TM_is_footprint_exceeded)
7803
+ (__TM_is_nested_too_deep, __TM_is_conflict): Fix format value
7806
+2013-11-19 Uros Bizjak <ubizjak@gmail.com>
7808
+ Backport from mainline
7809
+ 2013-11-18 Uros Bizjak <ubizjak@gmail.com>
7811
+ * config/i386/i386.c (ix86_decompose_address): Use REG_P instead of
7812
+ ix86_address_subreg_operand. Move subreg checks to
7813
+ ix86_validate_address_register. Move address override check to
7814
+ ix86_legitimate_address_p.
7815
+ (ix86_validate_address_register): New function.
7816
+ (ix86_legitimate_address_p): Call ix86_validate_address_register
7817
+ to validate base and index registers. Add address override check
7818
+ from ix86_decompose_address.
7819
+ (ix86_decompose_address): Remove.
7821
+ Backport from mainline
7822
+ 2013-11-17 Uros Bizjak <ubizjak@gmail.com>
7825
+ * config/i386/i386.c (ix86_address_subreg_operand): Do not
7826
+ reject non-integer subregs.
7827
+ (ix86_decompose_address): Do not reject invalid CONST_INT RTXes.
7828
+ Move check for invalid x32 constant addresses ...
7829
+ (ix86_legitimate_address_p): ... here.
7831
+2013-11-19 Richard Biener <rguenther@suse.de>
7833
+ Backport from mainline
7834
+ 2013-11-07 Richard Biener <rguenther@suse.de>
7836
+ * tree-dfa.c (get_ref_base_and_extent): Fix casting.
7838
+2013-11-19 Richard Biener <rguenther@suse.de>
7840
+ PR tree-optimization/57517
7841
+ * tree-predcom.c (combinable_refs_p): Verify the combination
7842
+ is always executed when the refs are.
7844
+2013-11-19 Richard Biener <rguenther@suse.de>
7846
+ Backport from mainline
7847
+ 2013-11-05 Richard Biener <rguenther@suse.de>
7849
+ PR middle-end/58941
7850
+ * tree-dfa.c (get_ref_base_and_extent): Merge common code
7851
+ in MEM_REF and TARGET_MEM_REF handling. Make sure to
7852
+ process trailing array detection before diving into the
7853
+ view-converted object (and possibly apply some extra offset).
7855
+2013-11-18 Richard Biener <rguenther@suse.de>
7857
+ Backport from mainline
7858
+ 2013-10-21 Richard Biener <rguenther@suse.de>
7860
+ PR tree-optimization/58794
7861
+ * fold-const.c (operand_equal_p): Compare FIELD_DECL operand
7862
+ of COMPONENT_REFs with OEP_CONSTANT_ADDRESS_OF left in place.
7864
+ 2013-10-21 Richard Biener <rguenther@suse.de>
7866
+ PR middle-end/58742
7867
+ * fold-const.c (fold_binary_loc): Fold ((T) (X /[ex] C)) * C
7868
+ to (T) X for sign-changing conversions (or no conversion).
7870
+ 2013-11-06 Richard Biener <rguenther@suse.de>
7872
+ PR tree-optimization/58653
7873
+ * tree-predcom.c (ref_at_iteration): Rewrite to generate
7875
+ (prepare_initializers_chain): Adjust.
7877
+ PR tree-optimization/59047
7878
+ * tree-predcom.c (ref_at_iteration): Handle bitfield accesses
7881
+ 2013-10-15 Richard Biener <rguenther@suse.de>
7883
+ PR tree-optimization/58143
7884
+ * tree-ssa-loop-im.c (arith_code_with_undefined_signed_overflow):
7886
+ (rewrite_to_defined_overflow): Likewise.
7887
+ (move_computations_dom_walker::before_dom): Rewrite stmts
7888
+ with undefined signed overflow that are not always executed
7889
+ into unsigned arithmetic.
7891
+2013-11-14 Uros Bizjak <ubizjak@gmail.com>
7893
+ Backport from mainline
7894
+ 2013-11-10 Uros Bizjak <ubizjak@gmail.com>
7896
+ * mode-switching.c (optimize_mode_switching): Mark block as
7897
+ nontransparent, if last_mode at block exit is different from no_mode.
7899
+ Backport from mainline
7900
+ 2013-11-06 Uros Bizjak <ubizjak@gmail.com>
7903
+ * config/i386/i386.c (ix86_avx_u128_mode_needed): Require
7904
+ AVX_U128_DIRTY mode for call_insn RTXes that use AVX256 registers.
7905
+ (ix86_avx_u128_mode_needed): Return AVX_U128_DIRTY mode for call_insn
7906
+ RTXes that return in AVX256 register.
7908
+2013-11-14 Jakub Jelinek <jakub@redhat.com>
7909
+ Uros Bizjak <ubizjak@gmail.com>
7912
+ * config/i386/i386.md (*anddi_2): Only allow CCZmode if
7913
+ operands[2] satisfies_constraint_Z that might have bit 31 set.
7915
+2013-11-12 H.J. Lu <hongjiu.lu@intel.com>
7917
+ Backported from mainline
7918
+ 2013-11-12 H.J. Lu <hongjiu.lu@intel.com>
7921
+ * config/i386/i386.c (initial_ix86_tune_features): Set
7922
+ X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL and
7923
+ X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL for m_HASWELL.
7925
+2013-11-11 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
7927
+ Backported from mainline
7928
+ 2013-10-30 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
7931
+ * config/arm/arm.c (arm_expand_epilogue_apcs_frame): Emit blockage
7933
+2013-11-11 Jakub Jelinek <jakub@redhat.com>
7935
+ Backported from mainline
7936
+ 2013-11-06 Jakub Jelinek <jakub@redhat.com>
7938
+ PR middle-end/58970
7939
+ * expr.c (get_bit_range): Handle *offset == NULL_TREE.
7940
+ (expand_assignment): If *bitpos is negative, set *offset
7941
+ and adjust *bitpos, so that it is not negative.
7943
+ 2013-11-05 Jakub Jelinek <jakub@redhat.com>
7945
+ PR rtl-optimization/58997
7946
+ * loop-iv.c (iv_subreg): For IV_UNKNOWN_EXTEND, expect
7947
+ get_iv_value to be in iv->mode rather than iv->extend_mode.
7948
+ (iv_extend): Likewise. Otherwise, if iv->extend != extend,
7949
+ use lowpart_subreg on get_iv_value before calling simplify_gen_unary.
7950
+ * loop-unswitch.c (may_unswitch_on): Make sure op[i] is in the right
7953
+2013-11-10 Karlson2k <k2k@narod.ru>
7954
+ Kai Tietz <ktietz@redhat.com>
7958
+ * configure.ac: Adding for exported symbols check
7959
+ and for rdynamic-check executable-extension.
7960
+ * configure: Regenerated.
7962
+2013-11-07 H.J. Lu <hongjiu.lu@intel.com>
7965
+ * config/i386/i386.md (push peepholer/splitter): Use Pmode
7966
+ with stack_pointer_rtx.
7968
+2013-11-05 Uros Bizjak <ubizjak@gmail.com>
7970
+ * config/i386/t-rtems (MULTILIB_MATCHES): Fix option typos.
7972
+2013-11-05 Jakub Jelinek <jakub@redhat.com>
7974
+ PR tree-optimization/58984
7975
+ * ipa-prop.c (ipa_load_from_parm_agg_1): Add SIZE_P argument,
7976
+ set *SIZE_P if non-NULL on success.
7977
+ (ipa_load_from_parm_agg, ipa_analyze_indirect_call_uses): Adjust
7979
+ (ipcp_transform_function): Likewise. Punt if size of access
7980
+ is different from TYPE_SIZE on v->value's type.
7982
+2013-11-03 H.J. Lu <hongjiu.lu@intel.com>
7984
+ Backport from mainline
7985
+ 2013-10-12 H.J. Lu <hongjiu.lu@intel.com>
7988
+ * config/i386/i386.c (ix86_copy_addr_to_reg): New function.
7989
+ (ix86_expand_movmem): Replace copy_addr_to_reg with
7990
+ ix86_copy_addr_to_reg.
7991
+ (ix86_expand_setmem): Likewise.
7993
+2013-10-29 Uros Bizjak <ubizjak@gmail.com>
7995
+ Backport from mainline
7996
+ 2013-08-08 Richard Sandiford <rdsandiford@googlemail.com>
7998
+ PR rtl-optimization/58079
7999
+ * combine.c (combine_simplify_rtx): Avoid using SUBST if
8000
+ simplify_comparison has widened a comparison with an integer.
8002
+2013-10-29 Martin Jambor <mjambor@suse.cz>
8004
+ PR middle-end/58789
8005
+ Backport from mainline
8006
+ 2013-05-09 Martin Jambor <mjambor@suse.cz>
8009
+ * gimple-fold.c (canonicalize_constructor_val): Call
8010
+ cgraph_get_create_real_symbol_node instead of cgraph_get_create_node.
8012
+ Backport from mainline
8013
+ 2013-03-16 Jan Hubicka <jh@suse.cz>
8015
+ * cgraph.h (cgraph_get_create_real_symbol_node): Declare.
8016
+ * cgraph.c (cgraph_get_create_real_symbol_node): New function.
8017
+ * cgrpahbuild.c: Use cgraph_get_create_real_symbol_node instead
8018
+ of cgraph_get_create_node.
8019
+ * ipa-prop.c (ipa_make_edge_direct_to_target): Likewise.
8021
+2013-10-28 Tom de Vries <tom@codesourcery.com>
8023
+ * cfgexpand.c (gimple_expand_cfg): Remove test for parm_birth_insn.
8024
+ Don't commit insertions after NOTE_INSN_FUNCTION_BEG.
8026
+2013-10-26 Uros Bizjak <ubizjak@gmail.com>
8028
+ Backport from mainline
8029
+ 2013-10-22 Uros Bizjak <ubizjak@gmail.com>
8032
+ * config/i386/i386.c (put_condition_code) <case GTU, case LEU>:
8033
+ Remove CCCmode handling.
8034
+ <case LTU>: Return 'c' suffix for CCCmode.
8035
+ <case GEU>: Return 'nc' suffix for CCCmode.
8036
+ (ix86_cc_mode) <case GTU, case LEU>: Do not generate overflow checks.
8037
+ * config/i386/i386.md (*sub<mode>3_cconly_overflow): Remove.
8038
+ (*sub<mode>3_cc_overflow): Ditto.
8039
+ (*subsi3_zext_cc_overflow): Ditto.
8041
+2013-10-26 Uros Bizjak <ubizjak@gmail.com>
8043
+ Backport from mainline
8044
+ 2013-10-19 Uros Bizjak <ubizjak@gmail.com>
8047
+ * config/i386/i386.c (ix86_function_value_regno): Add DX_REG,
8048
+ ST1_REG and XMM1_REG for 32bit and 64bit targets. Also add DI_REG
8049
+ and SI_REG for 64bit SYSV ABI targets.
8051
+2013-08-25 Richard Henderson <rth@twiddle.net>
8054
+ * optabs.c (maybe_emit_atomic_exchange): Use create_input_operand
8055
+ instead of create_convert_operand_to.
8056
+ (maybe_emit_sync_lock_test_and_set): Likewise.
8057
+ (expand_atomic_compare_and_swap): Likewise.
8058
+ (maybe_emit_compare_and_swap_exchange_loop): Don't convert_modes.
8060
+2013-10-25 Eric Botcazou <ebotcazou@adacore.com>
8062
+ PR rtl-optimization/58831
8063
+ * alias.c (init_alias_analysis): At the beginning of each iteration, set
8064
+ the reg_seen[N] bit if static_reg_base_value[N] is non-null.
8066
+2013-10-25 Eric Botcazou <ebotcazou@adacore.com>
8068
+ * recog.c (search_ofs): New static variable moved from...
8069
+ (peep2_find_free_register): ...here.
8070
+ (peephole2_optimize): Initialize it.
8072
+2013-10-24 David Edelsohn <dje.gcc@gmail.com>
8074
+ Backport from mainline
8075
+ 2013-10-23 David Edelsohn <dje.gcc@gmail.com>
8078
+ * config/rs6000/rs6000.md (mulsi3_internal1 and splitter): Add
8079
+ TARGET_32BIT final condition.
8080
+ (mulsi3_internal2 and splitter): Same.
8082
+2013-10-23 Tom de Vries <tom@codesourcery.com>
8084
+ PR tree-optimization/58805
8085
+ * tree-ssa-tail-merge.c (stmt_local_def): Add gimple_vdef check.
8087
+2013-10-23 Richard Biener <rguenther@suse.de>
8089
+ Backport from mainline
8090
+ 2013-06-24 Richard Biener <rguenther@suse.de>
8092
+ PR tree-optimization/57488
8093
+ * tree-ssa-pre.c (insert): Clear NEW sets before each iteration.
8095
+2013-10-16 Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
8097
+ Backport from mainline
8098
+ 2013-10-16 Ganesh Gopalasubramanian
8099
+ <Ganesh.Gopalasubramanian@amd.com>
8101
+ * config/i386/i386.c (ix86_option_override_internal): Enable FMA4
8104
2013-10-16 Release Manager
8106
* GCC 4.8.2 released.
8107
@@ -639,7 +2275,7 @@
8108
2013-07-31 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
8110
Backport from mainline
8111
- 2013-03-27 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
8112
+ 2013-03-27 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
8114
* config/s390/s390.h (TARGET_FLT_EVAL_METHOD): Define.
8116
Index: gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c
8117
===================================================================
8118
--- a/src/gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c (.../tags/gcc_4_8_2_release)
8119
+++ b/src/gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c (.../branches/gcc-4_8-branch)
8121
+/* { dg-do compile } */
8122
+/* { dg-require-effective-target arm_thumb1_ok } */
8123
+/* { dg-options "-mthumb -fpic -msingle-pic-base" } */
8132
Index: gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c
8133
===================================================================
8134
--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c (.../tags/gcc_4_8_2_release)
8135
+++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c (.../branches/gcc-4_8-branch)
8137
+/* Test the `vst1Q_laneu64' ARM Neon intrinsic. */
8139
+/* Detect ICE in the case of unaligned memory address. */
8141
+/* { dg-do compile } */
8142
+/* { dg-require-effective-target arm_neon_ok } */
8143
+/* { dg-add-options arm_neon } */
8145
+#include "arm_neon.h"
8147
+unsigned char dummy_store[1000];
8152
+ uint8x16_t vdata = vld1q_u8 (addr);
8153
+ vst1q_lane_u64 ((uint64_t*) &dummy_store, vreinterpretq_u64_u8 (vdata), 0);
8157
+bar (uint64x2_t vdata)
8159
+ vdata = vld1q_lane_u64 ((uint64_t*) &dummy_store, vdata, 0);
8160
+ return vgetq_lane_u64 (vdata, 0);
8162
Index: gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c
8163
===================================================================
8164
--- a/src/gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c (.../tags/gcc_4_8_2_release)
8165
+++ b/src/gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c (.../branches/gcc-4_8-branch)
8167
+/* { dg-do compile } */
8168
+/* { dg-require-effective-target arm_thumb1_ok } */
8169
+/* { dg-options "-mthumb -fpic -mpic-register=9" } */
8178
Index: gcc/testsuite/gcc.target/arm/require-pic-register-loc.c
8179
===================================================================
8180
--- a/src/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c (.../tags/gcc_4_8_2_release)
8181
+++ b/src/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c (.../branches/gcc-4_8-branch)
8183
+/* { dg-do compile } */
8184
+/* { dg-options "-g -fPIC" } */
8187
+void a (void *x) { }
8191
+main (int argc) /* line 9. */
8193
+ if (argc == 12345) /* line 11. */
8203
+/* { dg-final { scan-assembler-not "\.loc 1 7 0" } } */
8204
+/* { dg-final { scan-assembler-not "\.loc 1 8 0" } } */
8205
+/* { dg-final { scan-assembler-not "\.loc 1 9 0" } } */
8207
+/* The loc at the start of the prologue. */
8208
+/* { dg-final { scan-assembler-times "\.loc 1 10 0" 1 } } */
8210
+/* The loc at the end of the prologue, with the first user line. */
8211
+/* { dg-final { scan-assembler-times "\.loc 1 11 0" 1 } } */
8212
Index: gcc/testsuite/gcc.target/arm/vrinta-ce.c
8213
===================================================================
8214
--- a/src/gcc/testsuite/gcc.target/arm/vrinta-ce.c (.../tags/gcc_4_8_2_release)
8215
+++ b/src/gcc/testsuite/gcc.target/arm/vrinta-ce.c (.../branches/gcc-4_8-branch)
8217
+/* { dg-do compile } */
8218
+/* { dg-require-effective-target arm_v8_vfp_ok } */
8219
+/* { dg-options "-O2 -marm -march=armv8-a" } */
8220
+/* { dg-add-options arm_v8_vfp } */
8222
+double foo (double a)
8225
+ return __builtin_round (a);
8230
+/* { dg-final { scan-assembler-times "vrinta.f64\td\[0-9\]+" 1 } } */
8232
Index: gcc/testsuite/gcc.target/arm/pr54300.C
8233
===================================================================
8234
--- a/src/gcc/testsuite/gcc.target/arm/pr54300.C (.../tags/gcc_4_8_2_release)
8235
+++ b/src/gcc/testsuite/gcc.target/arm/pr54300.C (.../branches/gcc-4_8-branch)
8237
+/* { dg-do run } */
8238
+/* { dg-require-effective-target arm_neon } */
8239
+/* { dg-options "-O2" } */
8240
+/* { dg-add-options arm_neon } */
8242
+#include <arm_neon.h>
8243
+#include <stdlib.h>
8245
+struct __attribute__ ((aligned(8))) _v16u8_ {
8247
+ _v16u8_( const int16x8_t &src) { val = vreinterpretq_u8_s16(src); }
8248
+ operator int16x8_t () const { return vreinterpretq_s16_u8(val); }
8250
+typedef struct _v16u8_ v16u8;
8252
+struct __attribute__ ((aligned(4))) _v8u8_ {
8254
+ _v8u8_( const uint8x8_t &src) { val = src; }
8255
+ operator int16x4_t () const { return vreinterpret_s16_u8(val); }
8257
+typedef struct _v8u8_ v8u8;
8259
+typedef v16u8 v8i16;
8260
+typedef int32x4_t v4i32;
8261
+typedef const short cv1i16;
8262
+typedef const unsigned char cv1u8;
8263
+typedef const v8i16 cv8i16;
8265
+static inline __attribute__((always_inline)) v8u8 zero_64(){ return vdup_n_u8( 0 ); }
8267
+static inline __attribute__((always_inline)) v8i16 loadlo_8i16( cv8i16* p ){
8268
+ return vcombine_s16( vld1_s16( (cv1i16 *)p ), zero_64() );
8270
+static inline __attribute__((always_inline)) v8i16 _loadlo_8i16( cv8i16* p, int offset ){
8271
+ return loadlo_8i16( (cv8i16*)(&((cv1u8*)p)[offset]) );
8274
+void __attribute__((noinline))
8275
+test(unsigned short *_Inp, int32_t *_Out,
8276
+ unsigned int s1v, unsigned int dv0,
8277
+ unsigned int smask_v)
8279
+ int32x4_t c = vdupq_n_s32(0);
8281
+ for(unsigned int sv=0 ; sv!=dv0 ; sv=(sv+s1v)&smask_v )
8284
+ s = vmovl_s16( vget_low_s16( _loadlo_8i16( (cv8i16*) _Inp, sv ) ) );
8285
+ c = vaddq_s32( c, s );
8287
+ vst1q_s32( _Out, c );
8292
+ unsigned short a[4] = {1, 2, 3, 4};
8293
+ int32_t b[4] = {0, 0, 0, 0};
8294
+ test(a, b, 1, 1, ~0);
8295
+ if (b[0] != 1 || b[1] != 2 || b[2] != 3 || b[3] != 4)
8298
Index: gcc/testsuite/gcc.target/arm/pr59826.c
8299
===================================================================
8300
--- a/src/gcc/testsuite/gcc.target/arm/pr59826.c (.../tags/gcc_4_8_2_release)
8301
+++ b/src/gcc/testsuite/gcc.target/arm/pr59826.c (.../branches/gcc-4_8-branch)
8303
+/* { dg-do compile } */
8304
+/* { dg-options "-mthumb -mcpu=cortex-m4 -fprefetch-loop-arrays -O2" } */
8306
+typedef struct genxWriter_rec * genxWriter;
8307
+typedef unsigned char * utf8;
8308
+typedef const unsigned char * constUtf8;
8310
+int genxScrubText(genxWriter w, constUtf8 in, utf8 out)
8313
+ constUtf8 last = in;
8317
+ int c = genxNextUnicodeChar(&in);
8325
+ if (!isXMLChar(w, c))
8338
Index: gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c
8339
===================================================================
8340
--- a/src/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c (.../tags/gcc_4_8_2_release)
8341
+++ b/src/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c (.../branches/gcc-4_8-branch)
8343
+/* Test accuracy of long double division (glibc bug 15396). */
8344
+/* { dg-do run { target powerpc*-*-linux* powerpc*-*-darwin* powerpc*-*-aix* rs6000-*-* } } */
8345
+/* { dg-options "-mlong-double-128" } */
8347
+extern void exit (int);
8348
+extern void abort (void);
8350
+volatile long double a = 0x1p-1024L;
8351
+volatile long double b = 0x3p-53L;
8352
+volatile long double r;
8353
+volatile long double expected = 0x1.55555555555555555555555555p-973L;
8359
+ /* Allow error up to 2ulp. */
8360
+ if (__builtin_fabsl (r - expected) > 0x1p-1073L)
8364
Index: gcc/testsuite/gcc.target/microblaze/others/mem_reload.c
8365
===================================================================
8366
--- a/src/gcc/testsuite/gcc.target/microblaze/others/mem_reload.c (.../tags/gcc_4_8_2_release)
8367
+++ b/src/gcc/testsuite/gcc.target/microblaze/others/mem_reload.c (.../branches/gcc-4_8-branch)
8369
+/* { dg-options "-O2 -fPIC" } */
8371
+typedef struct test_struct
8373
+ unsigned long long h[8];
8374
+ unsigned long long Nl,Nh;
8376
+ unsigned long long d[16];
8377
+ unsigned char p[(16*8)];
8379
+ unsigned int num,md_len;
8382
+static const unsigned long long K512[12] = {
8383
+ 0x428a2f98d728ae22,0x7137449123ef65cd,
8384
+ 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc,
8385
+ 0x3956c25bf348b538,0x59f111f1b605d019,
8386
+ 0x923f82a4af194f9b,0xab1c5ed5da6d8118,
8387
+ 0xd807aa98a3030242,0x12835b0145706fbe,
8388
+ 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2};
8390
+#define ROTR(x,s) (((x)>>s) | (x)<<(64-s))
8391
+#define Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
8392
+#define Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41))
8393
+#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z)))
8394
+#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
8396
+#define ROUND_00_15(i,a,b,c,d,e,f,g,h) do { \
8397
+ T1 += h + Sigma1(e) + Ch(e,f,g) + K512[i]; \
8398
+ h = Sigma0(a) + Maj(a,b,c); \
8399
+ d += T1; h += T1; } while (0)
8401
+#define ROUND_16_80(i,a,b,c,d,e,f,g,h,X) do { \
8402
+ T1 = X[(i)&0x0f] += s0 + s1 + X[(i+9)&0x0f]; \
8403
+ ROUND_00_15(i,a,b,c,d,e,f,g,h); } while (0)
8405
+static void testfunc1 (TEST_STRUCT *ctx, const void *in, unsigned int num)
8407
+ const unsigned long long *W=in;
8408
+ unsigned long long a,b,c,d,e,f,g,h,s0,s1,T1;
8409
+ unsigned long long X[16];
8414
+ T1 = X[0] = W[0]; ROUND_00_15(0,a,b,c,d,e,f,g,h);
8415
+ T1 = X[1] = W[1]; ROUND_00_15(1,h,a,b,c,d,e,f,g);
8416
+ T1 = X[2] = W[2]; ROUND_00_15(2,g,h,a,b,c,d,e,f);
8417
+ T1 = X[3] = W[3]; ROUND_00_15(3,f,g,h,a,b,c,d,e);
8418
+ T1 = X[4] = W[4]; ROUND_00_15(4,e,f,g,h,a,b,c,d);
8419
+ T1 = X[5] = W[5]; ROUND_00_15(5,d,e,f,g,h,a,b,c);
8420
+ T1 = X[6] = W[6]; ROUND_00_15(6,c,d,e,f,g,h,a,b);
8421
+ T1 = X[7] = W[7]; ROUND_00_15(7,b,c,d,e,f,g,h,a);
8422
+ T1 = X[8] = W[8]; ROUND_00_15(8,a,b,c,d,e,f,g,h);
8423
+ T1 = X[9] = W[9]; ROUND_00_15(9,h,a,b,c,d,e,f,g);
8425
+ for (i=16;i<80;i+=8)
8427
+ ROUND_16_80(i+0,a,b,c,d,e,f,g,h,X);
8430
+ ctx->h[4] += e; ctx->h[5] += f; ctx->h[6] += g; ctx->h[7] += h;
8434
+int testfunc2 (TEST_STRUCT *c, const void *_data, unsigned int len)
8436
+ const unsigned char *data=(const unsigned char *)_data;
8438
+ unsigned char *p=(unsigned char *)c->u.p;
8440
+ testfunc1 (c,p,0);
8441
+ testfunc1 (c,data,len/sizeof(c->u));
8443
Index: gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c
8444
===================================================================
8445
--- a/src/gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c (.../tags/gcc_4_8_2_release)
8446
+++ b/src/gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c (.../branches/gcc-4_8-branch)
8448
+/* { dg-do compile } */
8452
+ __builtin_trap ();
8455
+/* { dg-final { scan-assembler "brki\tr0,-1" } } */
8456
\ No newline at end of file
8457
Index: gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c
8458
===================================================================
8459
--- a/src/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c (.../tags/gcc_4_8_2_release)
8460
+++ b/src/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c (.../branches/gcc-4_8-branch)
8462
+/* { dg-options "-O3 -mcpu=v6.00.a -mhard-float" } */
8464
+void float_func(float f1, float f2, float f3)
8466
+ /* { 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]" } } */
8467
+ /* { 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]" } } */
8468
+ if(f1==f2 && f1<=f3)
8469
+ print ("f1 eq f2 && f1 le f3");
8471
Index: gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c
8472
===================================================================
8473
--- a/src/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c (.../tags/gcc_4_8_2_release)
8474
+++ b/src/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c (.../branches/gcc-4_8-branch)
8476
/* { dg-do compile } */
8477
/* { dg-options "-O2" } */
8479
-#include "../../../config/aarch64/arm_neon.h"
8480
+#include <arm_neon.h>
8482
+/* Used to force a variable to a SIMD register. */
8483
+#define force_simd(V1) asm volatile ("mov %d0, %1.d[0]" \
8486
+ : /* No clobbers */);
8488
/* { dg-final { scan-assembler-times "\\tadd\\tx\[0-9\]+" 2 } } */
8493
test_vceqd_s64 (int64x1_t a, int64x1_t b)
8495
- return vceqd_s64 (a, b);
8499
+ res = vceqd_s64 (a, b);
8504
/* { dg-final { scan-assembler-times "\\tcmeq\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
8507
test_vceqzd_s64 (int64x1_t a)
8509
- return vceqzd_s64 (a);
8512
+ res = vceqzd_s64 (a);
8517
/* { dg-final { scan-assembler-times "\\tcmge\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
8520
test_vcged_s64 (int64x1_t a, int64x1_t b)
8522
- return vcged_s64 (a, b);
8526
+ res = vcged_s64 (a, b);
8532
test_vcled_s64 (int64x1_t a, int64x1_t b)
8534
- return vcled_s64 (a, b);
8538
+ res = vcled_s64 (a, b);
8543
-/* { dg-final { scan-assembler-times "\\tcmge\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
8544
+/* Idiom recognition will cause this testcase not to generate
8545
+ the expected cmge instruction, so do not check for it. */
8548
test_vcgezd_s64 (int64x1_t a)
8550
- return vcgezd_s64 (a);
8553
+ res = vcgezd_s64 (a);
8558
/* { dg-final { scan-assembler-times "\\tcmhs\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
8561
test_vcged_u64 (uint64x1_t a, uint64x1_t b)
8563
- return vcged_u64 (a, b);
8567
+ res = vcged_u64 (a, b);
8572
/* { dg-final { scan-assembler-times "\\tcmgt\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
8573
@@ -77,13 +112,23 @@
8575
test_vcgtd_s64 (int64x1_t a, int64x1_t b)
8577
- return vcgtd_s64 (a, b);
8581
+ res = vcgtd_s64 (a, b);
8587
test_vcltd_s64 (int64x1_t a, int64x1_t b)
8589
- return vcltd_s64 (a, b);
8593
+ res = vcltd_s64 (a, b);
8598
/* { dg-final { scan-assembler-times "\\tcmgt\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
8601
test_vcgtzd_s64 (int64x1_t a)
8603
- return vcgtzd_s64 (a);
8606
+ res = vcgtzd_s64 (a);
8611
/* { dg-final { scan-assembler-times "\\tcmhi\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
8614
test_vcgtd_u64 (uint64x1_t a, uint64x1_t b)
8616
- return vcgtd_u64 (a, b);
8620
+ res = vcgtd_u64 (a, b);
8625
/* { dg-final { scan-assembler-times "\\tcmle\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
8626
@@ -107,15 +161,24 @@
8628
test_vclezd_s64 (int64x1_t a)
8630
- return vclezd_s64 (a);
8633
+ res = vclezd_s64 (a);
8638
-/* { dg-final { scan-assembler-times "\\tcmlt\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
8639
+/* Idiom recognition will cause this testcase not to generate
8640
+ the expected cmlt instruction, so do not check for it. */
8643
test_vcltzd_s64 (int64x1_t a)
8645
- return vcltzd_s64 (a);
8648
+ res = vcltzd_s64 (a);
8653
/* { dg-final { scan-assembler-times "\\tdup\\tb\[0-9\]+, v\[0-9\]+\.b" 2 } } */
8654
@@ -179,13 +242,23 @@
8656
test_vtst_s64 (int64x1_t a, int64x1_t b)
8658
- return vtstd_s64 (a, b);
8662
+ res = vtstd_s64 (a, b);
8668
test_vtst_u64 (uint64x1_t a, uint64x1_t b)
8670
- return vtstd_u64 (a, b);
8674
+ res = vtstd_s64 (a, b);
8679
/* { dg-final { scan-assembler-times "\\taddp\\td\[0-9\]+, v\[0-9\]+\.2d" 1 } } */
8680
@@ -722,8 +795,11 @@
8681
return vrshld_u64 (a, b);
8684
-/* { dg-final { scan-assembler-times "\\tasr\\tx\[0-9\]+" 1 } } */
8685
+/* Other intrinsics can generate an asr instruction (vcltzd, vcgezd),
8686
+ so we cannot check scan-assembler-times. */
8688
+/* { dg-final { scan-assembler "\\tasr\\tx\[0-9\]+" } } */
8691
test_vshrd_n_s64 (int64x1_t a)
8693
Index: gcc/testsuite/gcc.target/i386/pr59405.c
8694
===================================================================
8695
--- a/src/gcc/testsuite/gcc.target/i386/pr59405.c (.../tags/gcc_4_8_2_release)
8696
+++ b/src/gcc/testsuite/gcc.target/i386/pr59405.c (.../branches/gcc-4_8-branch)
8698
+/* { dg-do run } */
8699
+/* { dg-options "-mmmx -mfpmath=387" } */
8701
+#include "mmx-check.h"
8703
+#include <mmintrin.h>
8705
+typedef float float32x2_t __attribute__ ((vector_size (8)));
8708
+foo32x2_be (float32x2_t x)
8717
+ float32x2_t b = { 0.0f, 1.0f };
8719
+ if (foo32x2_be (b) != 1.0f)
8722
Index: gcc/testsuite/gcc.target/i386/pr59794-5.c
8723
===================================================================
8724
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-5.c (.../tags/gcc_4_8_2_release)
8725
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-5.c (.../branches/gcc-4_8-branch)
8727
+/* PR target/59794 */
8728
+/* { dg-do compile { target { ia32 } } } */
8729
+/* { dg-options "-O2 -mno-sse" } */
8730
+/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
8732
+typedef int __v4si __attribute__ ((__vector_size__ (16)));
8738
+{ /* { dg-warning "SSE vector return without SSE enabled changes the ABI" } */
8741
Index: gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c
8742
===================================================================
8743
--- a/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c (.../tags/gcc_4_8_2_release)
8744
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c (.../branches/gcc-4_8-branch)
8746
/* { dg-do compile { target lp64 } } */
8747
-/* { dg-options "-O2 -mavx -mabi=ms -mtune=generic -dp" } */
8748
+/* { dg-options "-O2 -mavx -mabi=ms -maccumulate-outgoing-args -dp" } */
8750
typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));
8752
Index: gcc/testsuite/gcc.target/i386/pr54694.c
8753
===================================================================
8754
--- a/src/gcc/testsuite/gcc.target/i386/pr54694.c (.../tags/gcc_4_8_2_release)
8755
+++ b/src/gcc/testsuite/gcc.target/i386/pr54694.c (.../branches/gcc-4_8-branch)
8757
+/* { dg-do compile } */
8758
+/* { dg-options "-O" } */
8760
+register void *hfp __asm__("%ebp"); /* { dg-message "note: for" } */
8762
+extern void g(void *);
8764
+void f(int x) /* { dg-error "frame pointer required" } */
8766
+ g(__builtin_alloca(x));
8768
Index: gcc/testsuite/gcc.target/i386/pr59470.c
8769
===================================================================
8770
--- a/src/gcc/testsuite/gcc.target/i386/pr59470.c (.../tags/gcc_4_8_2_release)
8771
+++ b/src/gcc/testsuite/gcc.target/i386/pr59470.c (.../branches/gcc-4_8-branch)
8773
+/* PR middle-end/58956 */
8774
+/* PR middle-end/59470 */
8775
+/* { dg-do run } */
8776
+/* { dg-options "-O2" } */
8784
+ asm ("{movl $6, (%2); movl $1, %0|mov dword ptr [%2], 6; mov %0, 1}"
8785
+ : "=r" (d[c]) : "rm" (b), "r" (&a) : "memory");
8786
+ if (d[0] != 1 || d[6] != 0)
8787
+ __builtin_abort ();
8790
Index: gcc/testsuite/gcc.target/i386/pr59034-1.c
8791
===================================================================
8792
--- a/src/gcc/testsuite/gcc.target/i386/pr59034-1.c (.../tags/gcc_4_8_2_release)
8793
+++ b/src/gcc/testsuite/gcc.target/i386/pr59034-1.c (.../branches/gcc-4_8-branch)
8795
+/* { dg-do compile { target { ! { ia32 } } } } */
8796
+/* { dg-require-effective-target maybe_x32 } */
8797
+/* { dg-options "-O -mx32 -mtune=corei7 -maddress-mode=short" } */
8799
+extern int foo(int, ...);
8801
+ long double l = 1.2345E6;
8805
Index: gcc/testsuite/gcc.target/i386/pr58690.c
8806
===================================================================
8807
--- a/src/gcc/testsuite/gcc.target/i386/pr58690.c (.../tags/gcc_4_8_2_release)
8808
+++ b/src/gcc/testsuite/gcc.target/i386/pr58690.c (.../branches/gcc-4_8-branch)
8810
+/* { dg-do compile { target { ! { ia32 } } } } */
8811
+/* { dg-require-effective-target maybe_x32 } */
8812
+/* { dg-options "-O2 -mx32 -maddress-mode=short" } */
8818
+extern __thread struct gomp_thread gomp_tls_data;
8822
+ __builtin_memset (&gomp_tls_data, '\0', sizeof (gomp_tls_data));
8824
Index: gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c
8825
===================================================================
8826
--- a/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c (.../tags/gcc_4_8_2_release)
8827
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c (.../branches/gcc-4_8-branch)
8832
- double e [4] __attribute__ ((aligned (8))) = {0.0};
8833
+ double e [4] __attribute__ ((aligned (32))) = {0.0};
8835
u.x = _mm256_set_pd (39578.467285, 7856.342941, 85632.783567, 47563.234215);
8837
Index: gcc/testsuite/gcc.target/i386/pr9771-1.c
8838
===================================================================
8839
--- a/src/gcc/testsuite/gcc.target/i386/pr9771-1.c (.../tags/gcc_4_8_2_release)
8840
+++ b/src/gcc/testsuite/gcc.target/i386/pr9771-1.c (.../branches/gcc-4_8-branch)
8846
+/* main usually performs dynamic realignment of the stack in case
8847
+ _start would fail to properly align the stack, but for dynamic
8848
+ stack realignment we need frame pointer which is incompatible
8849
+ with -ffixed-ebp and the global register var. So, cheat here
8850
+ and hide from the compiler that main is really main. */
8851
+#define ASMNAME(cname) ASMNAME2 (__USER_LABEL_PREFIX__, cname)
8852
+#define ASMNAME2(prefix, cname) STRING (prefix) cname
8853
+#define STRING(x) #x
8854
+int real_main() __asm (ASMNAME ("main"));
8860
Index: gcc/testsuite/gcc.target/i386/pr59794-2.c
8861
===================================================================
8862
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-2.c (.../tags/gcc_4_8_2_release)
8863
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-2.c (.../branches/gcc-4_8-branch)
8865
+/* PR target/59794 */
8866
+/* { dg-prune-output "ABI for passing parameters" } */
8867
+/* { dg-options "-O2 -mno-sse" } */
8868
+/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
8870
+typedef double __v2df __attribute__ ((__vector_size__ (16)));
8874
+extern void bar (__v2df);
8878
+ bar (x); /* { dg-message "warning: SSE vector argument without SSE enabled changes the ABI" } */
8880
Index: gcc/testsuite/gcc.target/i386/pr57003.c
8881
===================================================================
8882
--- a/src/gcc/testsuite/gcc.target/i386/pr57003.c (.../tags/gcc_4_8_2_release)
8883
+++ b/src/gcc/testsuite/gcc.target/i386/pr57003.c (.../branches/gcc-4_8-branch)
8885
/* PR rtl-optimization/57003 */
8887
-/* { dg-options "-O2" } */
8888
+/* { dg-options "-O2 -maccumulate-outgoing-args" } */
8891
unsigned short *b, *c, *d;
8892
Index: gcc/testsuite/gcc.target/i386/pr59929.c
8893
===================================================================
8894
--- a/src/gcc/testsuite/gcc.target/i386/pr59929.c (.../tags/gcc_4_8_2_release)
8895
+++ b/src/gcc/testsuite/gcc.target/i386/pr59929.c (.../branches/gcc-4_8-branch)
8897
+/* { dg-do run } */
8898
+/* { dg-options "-O0 -mno-accumulate-outgoing-args" } */
8899
+/* { dg-options "-O0 -mno-accumulate-outgoing-args -mx32 -maddress-mode=short" { target x32 } } */
8902
+__attribute__ ((noinline))
8903
+test (float x1, float x2, float x3, float x4, float x5, float x6,
8904
+ float x7, float x8, float x9, float x10, float x11, float x12,
8905
+ float x13, float x14, float x15, float x16)
8923
+ __builtin_abort ();
8926
+float x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13,
8948
+ test (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13,
8952
Index: gcc/testsuite/gcc.target/i386/pr59794-6.c
8953
===================================================================
8954
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-6.c (.../tags/gcc_4_8_2_release)
8955
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-6.c (.../branches/gcc-4_8-branch)
8957
+/* PR target/59794 */
8958
+/* { dg-do compile { target { ! ia32 } } } */
8959
+/* { dg-options "-O2 -mno-sse" } */
8960
+/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
8962
+typedef int __v4si __attribute__ ((__vector_size__ (16)));
8968
+{ /* { dg-error "SSE register return with SSE disabled" } */
8971
Index: gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c
8972
===================================================================
8973
--- a/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c (.../tags/gcc_4_8_2_release)
8974
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c (.../branches/gcc-4_8-branch)
8976
/* { dg-do compile { target lp64 } } */
8977
-/* { dg-options "-O0 -mavx -mabi=ms -mtune=generic -dp" } */
8978
+/* { dg-options "-O0 -mavx -mabi=ms -maccumulate-outgoing-args -dp" } */
8980
typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));
8982
Index: gcc/testsuite/gcc.target/i386/sse2-movapd-1.c
8983
===================================================================
8984
--- a/src/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c (.../tags/gcc_4_8_2_release)
8985
+++ b/src/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c (.../branches/gcc-4_8-branch)
8990
- double e[2] __attribute__ ((aligned (8))) = {2134.3343,1234.635654};
8991
+ double e[2] __attribute__ ((aligned (16))) = {2134.3343,1234.635654};
8995
Index: gcc/testsuite/gcc.target/i386/pr59021.c
8996
===================================================================
8997
--- a/src/gcc/testsuite/gcc.target/i386/pr59021.c (.../tags/gcc_4_8_2_release)
8998
+++ b/src/gcc/testsuite/gcc.target/i386/pr59021.c (.../branches/gcc-4_8-branch)
9000
+/* { dg-do compile } */
9001
+/* { dg-options "-O2 -mavx -mvzeroupper" } */
9003
+extern void abort (void);
9011
+typedef double v4df __attribute__ ((vector_size (32)));
9013
+extern int foo (v4df, int i1, int i2, int i3, int i4, int i5, struct S s);
9015
+void bar (v4df v, struct S s)
9017
+ int r = foo (v, 1, 2, 3, 4, 5, s);
9022
+/* { dg-final { scan-assembler-not "vzeroupper" } } */
9023
Index: gcc/testsuite/gcc.target/i386/pr59034-2.c
9024
===================================================================
9025
--- a/src/gcc/testsuite/gcc.target/i386/pr59034-2.c (.../tags/gcc_4_8_2_release)
9026
+++ b/src/gcc/testsuite/gcc.target/i386/pr59034-2.c (.../branches/gcc-4_8-branch)
9028
+/* { dg-do compile { target { ! { ia32 } } } } */
9029
+/* { dg-require-effective-target maybe_x32 } */
9030
+/* { dg-options "-O -mx32 -mtune=corei7 -maddress-mode=long" } */
9032
+extern int foo(int, ...);
9034
+ long double l = 1.2345E6;
9038
Index: gcc/testsuite/gcc.target/i386/pr59794-3.c
9039
===================================================================
9040
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-3.c (.../tags/gcc_4_8_2_release)
9041
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-3.c (.../branches/gcc-4_8-branch)
9043
+/* PR target/59794 */
9044
+/* { dg-prune-output "ABI for passing parameters" } */
9045
+/* { dg-options "-O2 -mno-avx" } */
9046
+/* { dg-skip-if "no AVX vector" { *-*-mingw* } } */
9048
+typedef int __v8si __attribute__ ((__vector_size__ (32)));
9052
+extern void bar (__v8si);
9056
+ bar (x); /* { dg-message "warning: AVX vector argument without AVX enabled changes the ABI" } */
9058
Index: gcc/testsuite/gcc.target/i386/pr59839.c
9059
===================================================================
9060
--- a/src/gcc/testsuite/gcc.target/i386/pr59839.c (.../tags/gcc_4_8_2_release)
9061
+++ b/src/gcc/testsuite/gcc.target/i386/pr59839.c (.../branches/gcc-4_8-branch)
9063
+/* PR target/59839 */
9064
+/* { dg-do compile } */
9065
+/* { dg-options "-O0 -mavx2" } */
9067
+#include <x86intrin.h>
9070
+test (const float *x)
9072
+ __m256i i = _mm256_set1_epi32 (1);
9073
+ __m256 d = _mm256_i32gather_ps (x, i, 1);
9075
Index: gcc/testsuite/gcc.target/i386/xop-frczX.c
9076
===================================================================
9077
--- a/src/gcc/testsuite/gcc.target/i386/xop-frczX.c (.../tags/gcc_4_8_2_release)
9078
+++ b/src/gcc/testsuite/gcc.target/i386/xop-frczX.c (.../branches/gcc-4_8-branch)
9080
+/* { dg-do run } */
9081
+/* { dg-require-effective-target xop } */
9082
+/* { dg-options "-O2 -mxop" } */
9084
+#include "xop-check.h"
9086
+#include <x86intrin.h>
9089
+check_mm_vmfrcz_sd (__m128d __A, __m128d __B)
9091
+ union128d a, b, c;
9096
+ c.x = _mm_frcz_sd (__A, __B);
9097
+ d[0] = b.a[0] - (int)b.a[0] ;
9099
+ if (check_union128d (c, d))
9104
+check_mm_vmfrcz_ss (__m128 __A, __m128 __B)
9111
+ c.x = _mm_frcz_ss (__A, __B);
9112
+ f[0] = b.a[0] - (int)b.a[0] ;
9116
+ if (check_union128 (c, f))
9127
+ for (i = 0; i < 4; i++)
9132
+ for (i = 0; i < 2; i++)
9135
+ d.a[i] = i + 7.987654321;
9137
+ check_mm_vmfrcz_ss (a.x, b.x);
9138
+ check_mm_vmfrcz_sd (c.x, d.x);
9140
Index: gcc/testsuite/gcc.target/i386/pr59794-7.c
9141
===================================================================
9142
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-7.c (.../tags/gcc_4_8_2_release)
9143
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-7.c (.../branches/gcc-4_8-branch)
9145
+/* PR target/59794 */
9146
+/* { dg-options "-O2 -mno-avx" } */
9147
+/* { dg-skip-if "no AVX vector" { *-*-mingw* } } */
9149
+typedef int __v8si __attribute__ ((__vector_size__ (32)));
9155
+{ /* { dg-warning "AVX vector return without AVX enabled changes the ABI" } */
9158
Index: gcc/testsuite/gcc.target/i386/pr59625.c
9159
===================================================================
9160
--- a/src/gcc/testsuite/gcc.target/i386/pr59625.c (.../tags/gcc_4_8_2_release)
9161
+++ b/src/gcc/testsuite/gcc.target/i386/pr59625.c (.../branches/gcc-4_8-branch)
9163
+/* PR target/59625 */
9164
+/* { dg-do compile } */
9165
+/* { dg-options "-O2 -mtune=atom" } */
9170
+ asm goto ("" : : : : lab);
9171
+ asm goto ("" : : : : lab);
9172
+ asm goto ("" : : : : lab);
9173
+ asm goto ("" : : : : lab);
9174
+ asm goto ("" : : : : lab);
9175
+ asm goto ("" : : : : lab);
9176
+ asm goto ("" : : : : lab);
9177
+ asm goto ("" : : : : lab);
9178
+ asm goto ("" : : : : lab);
9179
+ asm goto ("" : : : : lab);
9180
+ asm goto ("" : : : : lab);
9181
+ asm goto ("" : : : : lab);
9182
+ asm goto ("" : : : : lab);
9183
+ asm goto ("" : : : : lab);
9184
+ asm goto ("" : : : : lab);
9185
+ asm goto ("" : : : : lab);
9186
+ asm goto ("" : : : : lab);
9187
+ asm goto ("" : : : : lab);
9188
+ asm goto ("" : : : : lab);
9189
+ asm goto ("" : : : : lab);
9195
+/* Verify we don't consider asm goto as a jump for four jumps limit
9196
+ optimization. asm goto doesn't have to contain a jump at all,
9197
+ the branching to labels can happen through different means. */
9198
+/* { dg-final { scan-assembler-not "(p2align\[^\n\r\]*\[\n\r]*\[^\n\r\]*){8}p2align" } } */
9199
Index: gcc/testsuite/gcc.target/i386/sse2-movapd-2.c
9200
===================================================================
9201
--- a/src/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c (.../tags/gcc_4_8_2_release)
9202
+++ b/src/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c (.../branches/gcc-4_8-branch)
9207
- double e[2] __attribute__ ((aligned (8))) = {0.0};
9208
+ double e[2] __attribute__ ((aligned (16))) = {0.0};
9210
u.x = _mm_set_pd (2134.3343,1234.635654);
9212
Index: gcc/testsuite/gcc.target/i386/sse-5.c
9213
===================================================================
9214
--- a/src/gcc/testsuite/gcc.target/i386/sse-5.c (.../tags/gcc_4_8_2_release)
9215
+++ b/src/gcc/testsuite/gcc.target/i386/sse-5.c (.../branches/gcc-4_8-branch)
9217
/* { dg-do compile } */
9218
/* { dg-require-effective-target ia32 } */
9219
-/* { dg-options "-Winline -Wno-psabi -O2 -mno-sse" } */
9220
+/* { dg-prune-output "ABI for passing parameters" } */
9221
+/* { dg-options "-Winline -O2 -mno-sse" } */
9223
typedef double v2df __attribute__ ((vector_size (16)));
9225
Index: gcc/testsuite/gcc.target/i386/pr39162.c
9226
===================================================================
9227
--- a/src/gcc/testsuite/gcc.target/i386/pr39162.c (.../tags/gcc_4_8_2_release)
9228
+++ b/src/gcc/testsuite/gcc.target/i386/pr39162.c (.../branches/gcc-4_8-branch)
9230
/* { dg-do compile } */
9231
-/* { dg-options "-O2 -Wno-psabi -msse2 -mno-avx" } */
9232
+/* { dg-prune-output "ABI for passing parameters" } */
9233
+/* { dg-options "-O2 -msse2 -mno-avx" } */
9234
/* { dg-additional-options "-mabi=sysv" { target x86_64-*-mingw* } } */
9236
typedef long long __m256i __attribute__ ((__vector_size__ (32), __may_alias__));
9242
bar (__m256i x) /* { dg-warning "AVX" "" } */
9247
Index: gcc/testsuite/gcc.target/i386/pr58137.c
9248
===================================================================
9249
--- a/src/gcc/testsuite/gcc.target/i386/pr58137.c (.../tags/gcc_4_8_2_release)
9250
+++ b/src/gcc/testsuite/gcc.target/i386/pr58137.c (.../branches/gcc-4_8-branch)
9252
+/* { dg-do compile } */
9253
+/* { dg-options "-O3 -mavx2" } */
9255
+typedef unsigned int U32;
9262
+typedef struct sv SV;
9267
+typedef struct xrv XRV;
9269
+extern XRV * PL_xrv_root;
9274
+ register XRV* xrv;
9275
+ register XRV* xrvend;
9276
+ xrv = PL_xrv_root;
9277
+ xrvend = &xrv[200 / sizeof (XRV) - 1];
9278
+ while (xrv < xrvend)
9280
+ xrv->xrv_rv = (SV*)(xrv + 1);
9285
Index: gcc/testsuite/gcc.target/i386/pr59794-4.c
9286
===================================================================
9287
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-4.c (.../tags/gcc_4_8_2_release)
9288
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-4.c (.../branches/gcc-4_8-branch)
9290
+/* PR target/59794 */
9291
+/* { dg-do compile { target { ia32 } } } */
9292
+/* { dg-options "-O2 -mno-mmx" } */
9293
+/* { dg-skip-if "no MMX vector" { *-*-mingw* } } */
9295
+typedef int __v2si __attribute__ ((__vector_size__ (8)));
9301
+{ /* { dg-warning "MMX vector return without MMX enabled changes the ABI" } */
9304
Index: gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c
9305
===================================================================
9306
--- a/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c (.../tags/gcc_4_8_2_release)
9307
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c (.../branches/gcc-4_8-branch)
9309
/* { dg-do compile { target lp64 } } */
9310
-/* { dg-options "-O2 -mavx -mabi=ms -mtune=generic -dp" } */
9311
+/* { dg-options "-O2 -mavx -mabi=ms -maccumulate-outgoing-args -dp" } */
9313
typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));
9315
Index: gcc/testsuite/gcc.target/i386/pr30315.c
9316
===================================================================
9317
--- a/src/gcc/testsuite/gcc.target/i386/pr30315.c (.../tags/gcc_4_8_2_release)
9318
+++ b/src/gcc/testsuite/gcc.target/i386/pr30315.c (.../branches/gcc-4_8-branch)
9320
/* { dg-do compile } */
9321
/* { dg-options "-O2" } */
9322
-/* { dg-final { scan-assembler-times "cmp" 4 } } */
9323
+/* { dg-final { scan-assembler-not "cmp" } } */
9325
extern void abort (void);
9329
#define PLUSCCONLY(T, t) PLUSCCONLY1(T, t, a) PLUSCCONLY1(T, t, b)
9331
-#define MINUSCC(T, t) \
9332
-T minuscc##t (T a, T b) \
9334
- T difference = a - b; \
9335
- if (difference > a) \
9337
- return difference; \
9340
-#define DECCC(T, t) \
9341
-T deccc##t (T a, T b) \
9343
- T difference = a - b; \
9344
- if (difference > a) \
9346
- return difference; \
9349
-#define MINUSCCONLY(T, t) \
9350
-void minuscconly##t (T a, T b) \
9352
- T difference = a - b; \
9353
- if (difference > a) \
9357
#define TEST(T, t) \
9362
- MINUSCCONLY(T, t) \
9366
TEST (unsigned long, l)
9367
TEST (unsigned int, i)
9373
-#define MINUSCCZEXT \
9374
-unsigned long minuscczext (unsigned int a, unsigned int b) \
9376
- unsigned int difference = a - b; \
9377
- if (difference > a) \
9379
- return difference; \
9383
Index: gcc/testsuite/gcc.target/i386/pr43869.c
9384
===================================================================
9385
--- a/src/gcc/testsuite/gcc.target/i386/pr43869.c (.../tags/gcc_4_8_2_release)
9386
+++ b/src/gcc/testsuite/gcc.target/i386/pr43869.c (.../branches/gcc-4_8-branch)
9388
/* { dg-do compile { target lp64 } } */
9389
+/* { dg-options "-maccumulate-outgoing-args" } */
9391
int __attribute__((__noinline__))
9392
bugged(float f1, float f2, float f3, float f4,
9393
Index: gcc/testsuite/gcc.target/i386/pr43546.c
9394
===================================================================
9395
--- a/src/gcc/testsuite/gcc.target/i386/pr43546.c (.../tags/gcc_4_8_2_release)
9396
+++ b/src/gcc/testsuite/gcc.target/i386/pr43546.c (.../branches/gcc-4_8-branch)
9398
+/* PR target/43546 */
9399
+/* { dg-do compile } */
9400
+/* { dg-options "-O1" } */
9401
+/* { dg-additional-options "-mpreferred-stack-boundary=2 -msseregparm -msse" { target ia32 } } */
9403
+extern void bar (double);
9410
Index: gcc/testsuite/gcc.target/i386/pr43662.c
9411
===================================================================
9412
--- a/src/gcc/testsuite/gcc.target/i386/pr43662.c (.../tags/gcc_4_8_2_release)
9413
+++ b/src/gcc/testsuite/gcc.target/i386/pr43662.c (.../branches/gcc-4_8-branch)
9415
/* { dg-do compile { target lp64 } } */
9416
-/* { dg-options "-O2" } */
9417
+/* { dg-options "-O2 -maccumulate-outgoing-args" } */
9419
void __attribute__ ((ms_abi)) foo (void)
9421
Index: gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c
9422
===================================================================
9423
--- a/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c (.../tags/gcc_4_8_2_release)
9424
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c (.../branches/gcc-4_8-branch)
9429
- double e [4] __attribute__ ((aligned (8))) = {41124.234,2344.2354,8653.65635,856.43576};
9430
+ double e [4] __attribute__ ((aligned (32))) = {41124.234,2344.2354,8653.65635,856.43576};
9434
Index: gcc/testsuite/gcc.target/i386/nest-1.c
9435
===================================================================
9436
--- a/src/gcc/testsuite/gcc.target/i386/nest-1.c (.../tags/gcc_4_8_2_release)
9437
+++ b/src/gcc/testsuite/gcc.target/i386/nest-1.c (.../branches/gcc-4_8-branch)
9439
+/* { dg-do compile { target llp64 } } */
9440
+/* { dg-options "" } */
9444
+ void nested (void)
9446
+ char arr[(1U << 31) + 4U];
9453
Index: gcc/testsuite/gcc.target/i386/pr59794-1.c
9454
===================================================================
9455
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-1.c (.../tags/gcc_4_8_2_release)
9456
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-1.c (.../branches/gcc-4_8-branch)
9458
+/* PR target/59794 */
9459
+/* { dg-do compile { target { ia32 } } } */
9460
+/* { dg-options "-O2 -mno-mmx" } */
9461
+/* { dg-skip-if "no MMX vector" { *-*-mingw* } } */
9463
+typedef int __v2si __attribute__ ((__vector_size__ (8)));
9467
+extern void bar (__v2si);
9471
+ bar (x); /* { dg-message "warning: MMX vector argument without MMX enabled changes the ABI" } */
9473
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c
9474
===================================================================
9475
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c (.../tags/gcc_4_8_2_release)
9476
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c (.../branches/gcc-4_8-branch)
9478
/* Test for cross x86_64<->w64 abi standard calls.
9480
/* { dg-do compile } */
9481
-/* { dg-options "-mno-sse" } */
9482
+/* { dg-options "-mno-sse -maccumulate-outgoing-args" } */
9483
#include "callabi.h"
9486
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c
9487
===================================================================
9488
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c (.../tags/gcc_4_8_2_release)
9489
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c (.../branches/gcc-4_8-branch)
9492
/* Origin: Kai Tietz <kai.tietz@onevision.com> */
9494
-/* { dg-options "-std=gnu99" } */
9495
+/* { dg-options "-std=gnu99 -maccumulate-outgoing-args" } */
9496
#include "callabi.h"
9498
extern __SIZE_TYPE__ strlen (const char *);
9499
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c
9500
===================================================================
9501
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c (.../tags/gcc_4_8_2_release)
9502
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c (.../branches/gcc-4_8-branch)
9505
/* Origin: Kai Tietz <kai.tietz@onevision.com> */
9507
-/* { dg-options "-std=gnu99" } */
9508
+/* { dg-options "-std=gnu99 -maccumulate-outgoing-args" } */
9509
#include "callabi.h"
9511
extern void abort (void);
9512
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-3.c
9513
===================================================================
9514
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-3.c (.../tags/gcc_4_8_2_release)
9515
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-3.c (.../branches/gcc-4_8-branch)
9518
/* Origin: Kai Tietz <kai.tietz@onevision.com> */
9520
-/* { dg-options "-std=gnu99" } */
9521
+/* { dg-options "-std=gnu99 -maccumulate-outgoing-args" } */
9522
#include "callabi.h"
9524
extern void abort (void);
9525
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c
9526
===================================================================
9527
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c (.../tags/gcc_4_8_2_release)
9528
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c (.../branches/gcc-4_8-branch)
9530
/* Test for cross x86_64<->w64 abi va_list calls. */
9531
/* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
9532
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
9533
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
9534
/* { dg-additional-sources "vaarg-4b.c" } */
9536
extern __SIZE_TYPE__ __attribute__ ((sysv_abi)) strlen (const char *);
9537
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c
9538
===================================================================
9539
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c (.../tags/gcc_4_8_2_release)
9540
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c (.../branches/gcc-4_8-branch)
9542
/* Test for cross x86_64<->w64 abi va_list calls. */
9543
/* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
9544
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
9545
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
9546
/* { dg-additional-sources "vaarg-5b.c" } */
9548
extern void __attribute__ ((sysv_abi)) abort (void);
9549
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c
9550
===================================================================
9551
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c (.../tags/gcc_4_8_2_release)
9552
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c (.../branches/gcc-4_8-branch)
9554
/* Test for cross x86_64<->w64 abi va_list calls. */
9555
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
9556
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
9560
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c
9561
===================================================================
9562
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c (.../tags/gcc_4_8_2_release)
9563
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c (.../branches/gcc-4_8-branch)
9565
/* Test for cross x86_64<->w64 abi va_list calls. */
9566
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
9567
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
9571
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c
9572
===================================================================
9573
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c (.../tags/gcc_4_8_2_release)
9574
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c (.../branches/gcc-4_8-branch)
9576
/* { dg-do compile } */
9577
-/* { dg-options "-O2 -mabi=sysv" } */
9578
+/* { dg-options "-O2 -mabi=sysv -maccumulate-outgoing-args" } */
9580
__attribute__ ((ms_abi))
9582
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c
9583
===================================================================
9584
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c (.../tags/gcc_4_8_2_release)
9585
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c (.../branches/gcc-4_8-branch)
9587
/* { dg-do compile } */
9588
-/* { dg-options "-O2 -mabi=sysv" } */
9589
+/* { dg-options "-O2 -mabi=sysv -maccumulate-outgoing-args" } */
9591
extern int glb1, gbl2, gbl3;
9593
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c
9594
===================================================================
9595
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c (.../tags/gcc_4_8_2_release)
9596
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c (.../branches/gcc-4_8-branch)
9599
/* Origin: Kai Tietz <kai.tietz@onevision.com> */
9601
-/* { dg-options "-std=gnu99 -ffast-math" } */
9602
+/* { dg-options "-std=gnu99 -ffast-math -maccumulate-outgoing-args" } */
9603
#include "callabi.h"
9605
extern void abort (void);
9606
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c
9607
===================================================================
9608
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c (.../tags/gcc_4_8_2_release)
9609
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c (.../branches/gcc-4_8-branch)
9611
/* Test for cross x86_64<->w64 abi standard calls via variable. */
9612
/* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
9613
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
9614
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
9615
/* { dg-additional-sources "func-indirect-2b.c" } */
9617
extern void __attribute__ ((sysv_abi)) abort (void);
9618
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c
9619
===================================================================
9620
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c (.../tags/gcc_4_8_2_release)
9621
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c (.../branches/gcc-4_8-branch)
9624
/* Origin: Kai Tietz <kai.tietz@onevision.com> */
9626
-/* { dg-options "-std=gnu99 -ffast-math" } */
9627
+/* { dg-options "-std=gnu99 -ffast-math -maccumulate-outgoing-args" } */
9628
#include "callabi.h"
9630
extern void abort (void);
9631
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c
9632
===================================================================
9633
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c (.../tags/gcc_4_8_2_release)
9634
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c (.../branches/gcc-4_8-branch)
9636
/* Test for cross x86_64<->w64 abi standard calls. */
9637
/* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
9638
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
9639
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
9640
/* { dg-additional-sources "func-2b.c" } */
9642
extern void __attribute__ ((sysv_abi)) abort (void);
9643
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c
9644
===================================================================
9645
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c (.../tags/gcc_4_8_2_release)
9646
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c (.../branches/gcc-4_8-branch)
9648
/* Test for cross x86_64<->w64 abi standard calls via variable. */
9649
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
9650
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
9652
typedef int (*func)(void *, char *, char *, short, long long);
9654
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c
9655
===================================================================
9656
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c (.../tags/gcc_4_8_2_release)
9657
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c (.../branches/gcc-4_8-branch)
9659
/* Test for cross x86_64<->w64 abi standard calls. */
9660
-/* { dg-options "-mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
9661
+/* { dg-options "-mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
9663
long double func_cross (long double a, double b, float c, long d, int e,
9665
Index: gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c
9666
===================================================================
9667
--- a/src/gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c (.../tags/gcc_4_8_2_release)
9668
+++ b/src/gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c (.../branches/gcc-4_8-branch)
9670
-/* This checks the availability of the XL compiler intrinsics for
9671
- transactional execution with the expected prototypes. */
9673
-/* { dg-do compile } */
9674
-/* { dg-options "-O3 -march=zEC12 -mzarch" } */
9676
-#include <htmxlintrin.h>
9684
- struct __htm_tdb *tdb_struct;
9685
- void * const tdb = tdb_struct;
9687
- unsigned char code;
9689
- result = __TM_simple_begin ();
9690
- result = __TM_begin (tdb);
9691
- result = __TM_end ();
9693
- __TM_named_abort (42);
9694
- __TM_non_transactional_store (&g, 42);
9695
- result = __TM_nesting_depth (tdb);
9697
- result = __TM_is_user_abort (tdb);
9698
- result = __TM_is_named_user_abort (tdb, &code);
9699
- result = __TM_is_illegal (tdb);
9700
- result = __TM_is_footprint_exceeded (tdb);
9701
- result = __TM_is_nested_too_deep (tdb);
9702
- result = __TM_is_conflict (tdb);
9703
- result = __TM_is_failure_persistent (result);
9704
- result = __TM_failure_address (tdb);
9705
- result = __TM_failure_code (tdb);
9707
Index: gcc/testsuite/gcc.target/s390/htm-1.c
9708
===================================================================
9709
--- a/src/gcc/testsuite/gcc.target/s390/htm-1.c (.../tags/gcc_4_8_2_release)
9710
+++ b/src/gcc/testsuite/gcc.target/s390/htm-1.c (.../branches/gcc-4_8-branch)
9712
-/* This checks the availability of the low-level builtins introduced
9713
- for transactional execution. */
9715
-/* { dg-do compile } */
9716
-/* { dg-options "-O3 -march=zEC12 -mzarch" } */
9718
-#include <stdint.h>
9719
-#include <htmintrin.h>
9723
-struct __htm_tdb global_tdb;
9726
-foo (struct __htm_tdb* tdb, int reg, int *mem, uint64_t *mem64)
9732
- cc = __builtin_tbegin (0);
9733
- cc = __builtin_tbegin (tdb);
9734
- cc = __builtin_tbegin (&global_tdb);
9736
- cc = __builtin_tbegin_nofloat (0);
9737
- cc = __builtin_tbegin_nofloat (&global_tdb);
9739
- cc = __builtin_tbegin_retry (0, 42);
9740
- cc = __builtin_tbegin_retry (0, reg);
9741
- cc = __builtin_tbegin_retry (0, *mem);
9742
- cc = __builtin_tbegin_retry (0, global);
9743
- cc = __builtin_tbegin_retry (tdb, 42);
9744
- cc = __builtin_tbegin_retry (&global_tdb, 42);
9746
- cc = __builtin_tbegin_retry_nofloat (0, 42);
9747
- cc = __builtin_tbegin_retry_nofloat (0, reg);
9748
- cc = __builtin_tbegin_retry_nofloat (0, *mem);
9749
- cc = __builtin_tbegin_retry_nofloat (0, global);
9750
- cc = __builtin_tbegin_retry_nofloat (&global_tdb, 42);
9752
- __builtin_tbeginc ();
9754
- n = __builtin_tx_nesting_depth();
9756
- __builtin_non_tx_store(&g, 23);
9757
- __builtin_non_tx_store(mem64, 23);
9758
- __builtin_non_tx_store(&g, reg);
9759
- __builtin_non_tx_store(&g, *mem);
9760
- __builtin_non_tx_store(&g, global);
9762
- __builtin_tabort (42 + 255);
9763
- __builtin_tabort (reg);
9764
- /* { dg-final { scan-assembler-times "tabort\t255" 1 } } */
9765
- __builtin_tabort (reg + 255);
9766
- __builtin_tabort (*mem);
9767
- __builtin_tabort (global);
9768
- /* Here global + 255 gets reloaded into a reg. Better would be to
9769
- just reload global or *mem and get the +255 for free as address
9771
- __builtin_tabort (*mem + 255);
9772
- __builtin_tabort (global + 255);
9776
- __builtin_tx_assist (23);
9777
- __builtin_tx_assist (reg);
9778
- __builtin_tx_assist (*mem);
9779
- __builtin_tx_assist (global);
9782
-/* Make sure the tdb NULL argument ends up as immediate value in the
9784
-/* { dg-final { scan-assembler-times "tbegin\t0," 10 } } */
9785
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c
9786
===================================================================
9787
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c (.../tags/gcc_4_8_2_release)
9788
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c (.../branches/gcc-4_8-branch)
9790
+/* Functional tests for the function hotpatching feature. */
9792
+/* { dg-do run } */
9793
+/* { dg-options "-O3 -mzarch -mhotpatch" } */
9799
+ printf("hello, world!\n");
9802
+inline void hp2(void)
9804
+ printf("hello, world!\n");
9807
+__attribute__ ((always_inline))
9808
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
9810
+ printf("hello, world!\n");
9811
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
9817
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c
9818
===================================================================
9819
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c (.../tags/gcc_4_8_2_release)
9820
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c (.../branches/gcc-4_8-branch)
9822
+/* Functional tests for the function hotpatching feature. */
9824
+/* { dg-do run } */
9825
+/* { dg-options "-O3 -mzarch -mhotpatch=0" } */
9831
+ printf("hello, world!\n");
9834
+inline void hp2(void)
9836
+ printf("hello, world!\n");
9839
+__attribute__ ((always_inline))
9840
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
9842
+ printf("hello, world!\n");
9843
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
9849
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c
9850
===================================================================
9851
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c (.../tags/gcc_4_8_2_release)
9852
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c (.../branches/gcc-4_8-branch)
9854
+/* Functional tests for the function hotpatching feature. */
9856
+/* { dg-do run } */
9857
+/* { dg-options "-O3 -mzarch -mhotpatch=1" } */
9863
+ printf("hello, world!\n");
9866
+inline void hp2(void)
9868
+ printf("hello, world!\n");
9871
+__attribute__ ((always_inline))
9872
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
9874
+ printf("hello, world!\n");
9875
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
9881
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c
9882
===================================================================
9883
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c (.../tags/gcc_4_8_2_release)
9884
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c (.../branches/gcc-4_8-branch)
9886
+/* Functional tests for the function hotpatching feature. */
9888
+/* { dg-do compile } */
9889
+/* { dg-options "-O3 -mzarch -mhotpatch=-1" } */
9896
+/* { dg-excess-errors "argument to '-mhotpatch=' should be a non-negative integer" } */
9897
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c
9898
===================================================================
9899
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c (.../tags/gcc_4_8_2_release)
9900
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c (.../branches/gcc-4_8-branch)
9902
+/* Functional tests for the function hotpatching feature. */
9904
+/* { dg-do compile } */
9905
+/* { dg-options "-O3 -mzarch -mhotpatch=1000000" } */
9911
+ printf("hello, world!\n");
9914
+__attribute__ ((hotpatch(1000000)))
9917
+ printf("hello, world!\n");
9920
+__attribute__ ((hotpatch(1000001)))
9922
+{ /* { dg-error "requested 'hotpatch' attribute is not a non-negative integer constant or too large .max. 1000000." } */
9923
+ printf("hello, world!\n");
9930
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c
9931
===================================================================
9932
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c (.../tags/gcc_4_8_2_release)
9933
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c (.../branches/gcc-4_8-branch)
9935
+/* Functional tests for the function hotpatching feature. */
9937
+/* { dg-do compile } */
9938
+/* { dg-options "-O3 -mzarch -mhotpatch=1000001" } */
9945
+/* { dg-excess-errors "argument to '-mhotpatch=' is too large .max. 1000000." } */
9946
Index: gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c
9947
===================================================================
9948
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c (.../tags/gcc_4_8_2_release)
9949
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c (.../branches/gcc-4_8-branch)
9951
+/* This checks the availability of the low-level builtins introduced
9952
+ for transactional execution. */
9954
+/* { dg-do compile } */
9955
+/* { dg-require-effective-target htm } */
9956
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
9958
+#include <stdint.h>
9959
+#include <htmintrin.h>
9963
+struct __htm_tdb global_tdb;
9966
+foo (struct __htm_tdb* tdb, int reg, int *mem, uint64_t *mem64)
9972
+ __builtin_tbegin ((void *)0);
9973
+ __builtin_tbegin ((void *)-99999);
9974
+ __builtin_tbegin ((void *)99999);
9975
+ while (__builtin_tbegin ((void *)0) != 0)
9978
+ cc = __builtin_tbegin ((void *)0x12345678);
9979
+ cc = __builtin_tbegin (tdb);
9980
+ cc = __builtin_tbegin (&global_tdb);
9981
+ cc = __builtin_tbegin ((void *)(long long)(reg + 0x12345678));
9982
+ cc = __builtin_tbegin ((void *)(long long)(reg));
9984
+ __builtin_tbegin_nofloat ((void *)0);
9985
+ __builtin_tbegin_nofloat ((void *)-99999);
9986
+ __builtin_tbegin_nofloat ((void *)99999);
9987
+ cc = __builtin_tbegin_nofloat ((void *)0x12345678);
9988
+ cc = __builtin_tbegin_nofloat (tdb);
9989
+ cc = __builtin_tbegin_nofloat (&global_tdb);
9990
+ cc = __builtin_tbegin_nofloat ((void *)(long long)(reg + 0x12345678));
9991
+ cc = __builtin_tbegin_nofloat ((void *)(long long)(reg));
9993
+ __builtin_tbegin_retry ((void *)0, 0);
9994
+ cc = __builtin_tbegin_retry ((void *)0, 1);
9995
+ cc = __builtin_tbegin_retry ((void *)0, -1);
9996
+ cc = __builtin_tbegin_retry ((void *)0, 42);
9997
+ cc = __builtin_tbegin_retry ((void *)0, reg);
9998
+ cc = __builtin_tbegin_retry ((void *)0, *mem);
9999
+ cc = __builtin_tbegin_retry ((void *)0, global);
10000
+ cc = __builtin_tbegin_retry (tdb, 42);
10001
+ cc = __builtin_tbegin_retry (&global_tdb, 42);
10002
+ cc = __builtin_tbegin_retry ((void *)0x12345678, global);
10003
+ cc = __builtin_tbegin_retry (
10004
+ (void *)(long long) (reg + 0x12345678), global + 1);
10005
+ cc = __builtin_tbegin_retry (
10006
+ (void *)(long long)(reg), global - 1);
10008
+ __builtin_tbegin_retry_nofloat ((void *)0, 0);
10009
+ cc = __builtin_tbegin_retry_nofloat ((void *)0, 1);
10010
+ cc = __builtin_tbegin_retry_nofloat ((void *)0, -1);
10011
+ cc = __builtin_tbegin_retry_nofloat ((void *)0, 42);
10012
+ cc = __builtin_tbegin_retry_nofloat ((void *)0, reg);
10013
+ cc = __builtin_tbegin_retry_nofloat ((void *)0, *mem);
10014
+ cc = __builtin_tbegin_retry_nofloat ((void *)0, global);
10015
+ cc = __builtin_tbegin_retry_nofloat (tdb, 42);
10016
+ cc = __builtin_tbegin_retry_nofloat (&global_tdb, 42);
10017
+ cc = __builtin_tbegin_retry_nofloat ((void *)0x12345678, global);
10018
+ cc = __builtin_tbegin_retry_nofloat (
10019
+ (void *)(long long) (reg + 0x12345678), global + 1);
10020
+ cc = __builtin_tbegin_retry_nofloat (
10021
+ (void *)(long long)(reg), global - 1);
10023
+ __builtin_tbeginc ();
10025
+ __builtin_tx_nesting_depth ();
10026
+ n = __builtin_tx_nesting_depth ();
10028
+ __builtin_non_tx_store (mem64, 0);
10030
+ const uint64_t val_var = 0x1122334455667788;
10032
+ __builtin_non_tx_store (mem64, val_var);
10034
+ __builtin_non_tx_store (mem64, (uint64_t)reg);
10035
+ __builtin_non_tx_store (mem64, g);
10036
+ __builtin_non_tx_store ((uint64_t *)0, 0);
10037
+ __builtin_non_tx_store ((uint64_t *)0x12345678, 0);
10038
+ __builtin_non_tx_store (&g, 23);
10039
+ __builtin_non_tx_store (&g, reg);
10040
+ __builtin_non_tx_store (&g, *mem);
10041
+ __builtin_non_tx_store (&g, global);
10043
+ __builtin_tend();
10045
+ __builtin_tx_assist (0);
10046
+ __builtin_tx_assist (1);
10047
+ __builtin_tx_assist (reg);
10048
+ __builtin_tx_assist (*mem);
10049
+ __builtin_tx_assist (global);
10052
+/* The taborts must go into separate function since they are
10058
+ __builtin_tabort (256);
10064
+ __builtin_tabort (reg);
10070
+ /* { dg-final { scan-assembler-times "tabort\t255" 1 } } */
10071
+ __builtin_tabort (reg + 255);
10075
+tabort4 (int *mem)
10077
+ __builtin_tabort (*mem);
10083
+ __builtin_tabort (global);
10087
+tabort6 (int *mem)
10089
+ /* Here global + 255 gets reloaded into a reg. Better would be to
10090
+ just reload global or *mem and get the +255 for free as address
10092
+ __builtin_tabort (*mem + 255);
10098
+ __builtin_tabort (global + 255);
10104
+ __builtin_tabort (-1);
10108
+/* Make sure the tdb NULL argument ends up as immediate value in the
10110
+/* { dg-final { scan-assembler-times "tbegin\t0," 17 } } */
10111
+/* { dg-final { scan-assembler-times "tbegin\t" 41 } } */
10112
+/* Check number of occurences of certain instructions. */
10113
+/* { dg-final { scan-assembler-times "tbeginc\t" 1 } } */
10114
+/* { dg-final { scan-assembler-times "tabort\t" 8 } } */
10115
+/* { dg-final { scan-assembler "ppa\t" } } */
10116
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c
10117
===================================================================
10118
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c (.../tags/gcc_4_8_2_release)
10119
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c (.../branches/gcc-4_8-branch)
10121
+/* Functional tests for the function hotpatching feature. */
10123
+/* { dg-do run } */
10124
+/* { dg-options "-O3 -mzarch -mno-hotpatch" } */
10126
+#include <stdio.h>
10128
+__attribute__ ((hotpatch))
10131
+ printf("hello, world!\n");
10134
+__attribute__ ((hotpatch))
10135
+inline void hp2(void)
10137
+ printf("hello, world!\n");
10140
+__attribute__ ((hotpatch))
10141
+__attribute__ ((always_inline))
10142
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
10144
+ printf("hello, world!\n");
10145
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
10147
+__attribute__ ((hotpatch(0)))
10150
+ printf("hello, world!\n");
10153
+__attribute__ ((hotpatch(0)))
10154
+inline void hp5(void)
10156
+ printf("hello, world!\n");
10159
+__attribute__ ((hotpatch(0)))
10160
+__attribute__ ((always_inline))
10161
+void hp6(void) /* { dg-warning "always_inline function might not be inlinable" } */
10163
+ printf("hello, world!\n");
10164
+} /* { dg-warning "function 'hp6' with the 'always_inline' attribute is not hotpatchable" } */
10166
+__attribute__ ((hotpatch(1)))
10169
+ printf("hello, world!\n");
10172
+__attribute__ ((hotpatch(1)))
10173
+inline void hp8(void)
10175
+ printf("hello, world!\n");
10178
+__attribute__ ((hotpatch(1)))
10179
+__attribute__ ((always_inline))
10180
+void hp9(void) /* { dg-warning "always_inline function might not be inlinable" } */
10182
+ printf("hello, world!\n");
10183
+} /* { dg-warning "function 'hp9' with the 'always_inline' attribute is not hotpatchable" } */
10189
Index: gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c
10190
===================================================================
10191
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c (.../tags/gcc_4_8_2_release)
10192
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c (.../branches/gcc-4_8-branch)
10194
+/* { dg-do compile } */
10195
+/* { dg-require-effective-target htm } */
10196
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
10198
+void must_not_compile1 (void)
10200
+ __builtin_tabort (0); /* { dg-error "Invalid transaction abort code:" } */
10203
+void must_not_compile2 (void)
10205
+ __builtin_tabort (255); /* { dg-error "Invalid transaction abort code:" } */
10207
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c
10208
===================================================================
10209
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c (.../tags/gcc_4_8_2_release)
10210
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c (.../branches/gcc-4_8-branch)
10212
+/* Functional tests for the function hotpatching feature. */
10214
+/* { dg-do run } */
10215
+/* { dg-options "-O3 -mzarch -mhotpatch" } */
10217
+#include <stdio.h>
10221
+ int nested1(void) /* { dg-warning "hotpatching is not compatible with nested functions" } */
10224
+ __attribute__ ((hotpatch))
10225
+ int nested2(void) /* { dg-warning "hotpatching is not compatible with nested functions" } */
10228
+ return nested1() - nested2();
10235
Index: gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c
10236
===================================================================
10237
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c (.../tags/gcc_4_8_2_release)
10238
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c (.../branches/gcc-4_8-branch)
10240
+/* This checks the availability of the XL compiler intrinsics for
10241
+ transactional execution with the expected prototypes. */
10243
+/* { dg-do compile } */
10244
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
10246
+#include <htmxlintrin.h>
10254
+ struct __htm_tdb *tdb_struct;
10255
+ void * const tdb = tdb_struct;
10257
+ unsigned char code;
10259
+ result = __TM_simple_begin ();
10260
+ result = __TM_begin (tdb);
10261
+ result = __TM_end ();
10263
+ __TM_named_abort (42);
10264
+ __TM_non_transactional_store (&g, 42);
10265
+ result = __TM_nesting_depth (tdb);
10267
+ result = __TM_is_user_abort (tdb);
10268
+ result = __TM_is_named_user_abort (tdb, &code);
10269
+ result = __TM_is_illegal (tdb);
10270
+ result = __TM_is_footprint_exceeded (tdb);
10271
+ result = __TM_is_nested_too_deep (tdb);
10272
+ result = __TM_is_conflict (tdb);
10273
+ result = __TM_is_failure_persistent (result);
10274
+ result = __TM_failure_address (tdb);
10275
+ result = __TM_failure_code (tdb);
10277
Index: gcc/testsuite/gcc.target/s390/s390.exp
10278
===================================================================
10279
--- a/src/gcc/testsuite/gcc.target/s390/s390.exp (.../tags/gcc_4_8_2_release)
10280
+++ b/src/gcc/testsuite/gcc.target/s390/s390.exp (.../branches/gcc-4_8-branch)
10282
# Load support procs.
10283
load_lib gcc-dg.exp
10285
+# Return 1 if htm (etnd - extract nesting depth) instructions can be
10287
+proc check_effective_target_htm { } {
10288
+ if { ![check_runtime s390_check_htm [subst {
10291
+ unsigned int nd = 77;
10292
+ asm (".insn rre,0xb2ec0000,%0,0" : "=d" (nd));
10295
+ }]] } { return 0 } else { return 1 }
10298
# If a testcase doesn't have special options, use these.
10299
global DEFAULT_CFLAGS
10300
if ![info exists DEFAULT_CFLAGS] then {
10301
Index: gcc/testsuite/gcc.target/s390/hotpatch-1.c
10302
===================================================================
10303
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-1.c (.../tags/gcc_4_8_2_release)
10304
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-1.c (.../branches/gcc-4_8-branch)
10306
+/* Functional tests for the function hotpatching feature. */
10308
+/* { dg-do run } */
10309
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
10311
+#include <stdio.h>
10315
+ printf("hello, world!\n");
10323
+/* Check number of occurences of certain instructions. */
10324
+/* { dg-final { scan-assembler-times "nopr\t%r7" 12 } } */
10325
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
10326
Index: gcc/testsuite/gcc.target/s390/hotpatch-2.c
10327
===================================================================
10328
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-2.c (.../tags/gcc_4_8_2_release)
10329
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-2.c (.../branches/gcc-4_8-branch)
10331
+/* Functional tests for the function hotpatching feature. */
10333
+/* { dg-do run } */
10334
+/* { dg-options "-O3 -mzarch -mhotpatch=1 --save-temps" } */
10336
+#include <stdio.h>
10340
+ printf("hello, world!\n");
10348
+/* Check number of occurences of certain instructions. */
10349
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
10350
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
10351
Index: gcc/testsuite/gcc.target/s390/hotpatch-3.c
10352
===================================================================
10353
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-3.c (.../tags/gcc_4_8_2_release)
10354
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-3.c (.../branches/gcc-4_8-branch)
10356
+/* Functional tests for the function hotpatching feature. */
10358
+/* { dg-do run } */
10359
+/* { dg-options "-O3 -mzarch -mhotpatch=0 --save-temps" } */
10361
+#include <stdio.h>
10365
+ printf("hello, world!\n");
10373
+/* Check number of occurences of certain instructions. */
10374
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
10375
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
10376
Index: gcc/testsuite/gcc.target/s390/hotpatch-4.c
10377
===================================================================
10378
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-4.c (.../tags/gcc_4_8_2_release)
10379
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-4.c (.../branches/gcc-4_8-branch)
10381
+/* Functional tests for the function hotpatching feature. */
10383
+/* { dg-do run } */
10384
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
10386
+#include <stdio.h>
10388
+inline void hp1(void)
10390
+ printf("hello, world!\n");
10393
+__attribute__ ((always_inline))
10394
+void hp2(void) /* { dg-warning "always_inline function might not be inlinable" } */
10396
+ printf("hello, world!\n");
10397
+} /* { dg-warning "function 'hp2' with the 'always_inline' attribute is not hotpatchable" } */
10404
+/* Check number of occurences of certain instructions. */
10405
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
10406
+/* { dg-final { scan-assembler-not "nop\t0" } } */
10407
Index: gcc/testsuite/gcc.target/s390/hotpatch-5.c
10408
===================================================================
10409
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-5.c (.../tags/gcc_4_8_2_release)
10410
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-5.c (.../branches/gcc-4_8-branch)
10412
+/* Functional tests for the function hotpatching feature. */
10414
+/* { dg-do run } */
10415
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
10417
+#include <stdio.h>
10419
+__attribute__ ((hotpatch))
10422
+ printf("hello, world!\n");
10430
+/* Check number of occurences of certain instructions. */
10431
+/* { dg-final { scan-assembler-times "nopr\t%r7" 12 } } */
10432
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
10433
Index: gcc/testsuite/gcc.target/s390/hotpatch-6.c
10434
===================================================================
10435
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-6.c (.../tags/gcc_4_8_2_release)
10436
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-6.c (.../branches/gcc-4_8-branch)
10438
+/* Functional tests for the function hotpatching feature. */
10440
+/* { dg-do run } */
10441
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
10443
+#include <stdio.h>
10445
+__attribute__ ((hotpatch(1)))
10448
+ printf("hello, world!\n");
10456
+/* Check number of occurences of certain instructions. */
10457
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
10458
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
10459
Index: gcc/testsuite/gcc.target/s390/htm-builtins-1.c
10460
===================================================================
10461
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-1.c (.../tags/gcc_4_8_2_release)
10462
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-1.c (.../branches/gcc-4_8-branch)
10464
+/* Functional tests of the htm __builtin_... macros. */
10466
+/* { dg-do run } */
10467
+/* { dg-require-effective-target htm } */
10468
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
10470
+/* ---------------------------- included header files ---------------------- */
10472
+#include <stdio.h>
10473
+#include <string.h>
10474
+#include <stdint.h>
10475
+#include <htmintrin.h>
10477
+/* ---------------------------- local definitions -------------------------- */
10479
+#define DEFAULT_MAX_REPETITIONS 5
10480
+#define DEFAULT_REQUIRED_QUORUM ((DEFAULT_MAX_REPETITIONS) - 1)
10481
+#define NUM_WARMUP_RUNS 10
10483
+/* ---------------------------- local macros ------------------------------- */
10485
+#define TEST_DF_REP(name) \
10486
+ { #name, name, DEFAULT_MAX_REPETITIONS, DEFAULT_REQUIRED_QUORUM }
10487
+#define TEST_NO_REP(name) { #name, name, 1, 1 }
10489
+/* ---------------------------- local types -------------------------------- */
10491
+typedef int (*test_func_t)(void);
10495
+ const char *name;
10496
+ test_func_t test_func;
10497
+ int max_repetitions;
10498
+ int required_quorum;
10499
+} test_table_entry_t;
10501
+/* ---------------------------- local variables ---------------------------- */
10503
+__attribute__ ((aligned(256))) static struct __htm_tdb local_tdb256;
10504
+static struct __htm_tdb local_tdb;
10505
+static int do_dump_tdb = 0;
10507
+/* ---------------------------- exported variables (globals) --------------- */
10509
+__attribute__ ((aligned(256))) struct
10514
+} global = { 1.0, 2.5, 0.0 };
10516
+__attribute__ ((aligned(256))) struct
10518
+ volatile uint64_t c1;
10519
+ volatile uint64_t c2;
10520
+ volatile uint64_t c3;
10521
+} counters = { 0, 0, 0 };
10523
+/* ---------------------------- local helper functions --------------------- */
10525
+static void dump_tdb (struct __htm_tdb *tdb)
10527
+ unsigned char *p;
10531
+ if (do_dump_tdb == 0)
10535
+ p = (unsigned char *)tdb;
10536
+ for (i = 0; i < 16; i++)
10538
+ fprintf (stderr, "0x%02x ", i * 16);
10539
+ for (j = 0; j < 16; j++)
10541
+ fprintf (stderr, "%02x", (int)p[i * 16 + j]);
10544
+ fprintf (stderr, " ");
10548
+ fprintf (stderr, " ");
10551
+ fprintf (stderr, "\n");
10557
+/* ---------------------------- local test functions ----------------------- */
10559
+/* Check values of the constants defined in htmintrin.h. */
10560
+static int test_constants (void)
10562
+ if (_HTM_TBEGIN_STARTED != 0)
10564
+ return 100 * _HTM_TBEGIN_STARTED + 1;
10566
+ if (_HTM_TBEGIN_INDETERMINATE != 1)
10568
+ return 100 * _HTM_TBEGIN_INDETERMINATE + 2;
10570
+ if (_HTM_TBEGIN_TRANSIENT != 2)
10572
+ return 100 * _HTM_TBEGIN_TRANSIENT + 3;
10574
+ if (_HTM_TBEGIN_PERSISTENT != 3)
10576
+ return 100 * _HTM_TBEGIN_PERSISTENT + 4;
10582
+static int test_tbegin_ntstg_tend (void)
10588
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
10590
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
10592
+ rc = __builtin_tend ();
10595
+ return 100 * rc + 5;
10597
+ if (counters.c1 != 1)
10599
+ return 100 * counters.c1 + 2;
10601
+ if (counters.c2 != 2)
10603
+ return 100 * counters.c2 + 3;
10608
+ return 100 * rc + 4;
10614
+static int test_tbegin_ntstg_tabort (void)
10621
+ if (__builtin_tbegin ((void *)0) == 0)
10623
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
10626
+ __builtin_tabort (256);
10629
+ if (counters.c1 != 1)
10631
+ return 100 * counters.c1 + 2;
10633
+ if (counters.c2 != 0)
10635
+ return 100 * counters.c2 + 3;
10639
+ return 100 * f + 4;
10645
+static int test_tbegin_nofloat (void)
10651
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
10653
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
10655
+ rc = __builtin_tend ();
10658
+ return 100 * rc + 5;
10660
+ if (counters.c1 != 1)
10662
+ return 100 * counters.c1 + 2;
10664
+ if (counters.c2 != 2)
10666
+ return 100 * counters.c2 + 3;
10671
+ return 100 * rc + 4;
10677
+static int test_tbegin_retry (void)
10684
+ if ((rc = __builtin_tbegin_retry ((void *)0, 5)) == 0)
10688
+ do_abort = (counters.c1 == 0) ? 1 : 0;
10689
+ __builtin_non_tx_store (
10690
+ (uint64_t *)&counters.c1, counters.c1 + 1);
10691
+ if (do_abort == 1)
10693
+ __builtin_tabort (256);
10695
+ counters.c2 = counters.c2 + 10;
10696
+ __builtin_non_tx_store ((uint64_t *)&counters.c3, 3);
10697
+ rc = __builtin_tend ();
10700
+ return 100 * rc + 5;
10702
+ if (counters.c1 != 2)
10704
+ return 100 * counters.c1 + 2;
10706
+ if (counters.c2 != 10)
10708
+ return 100 * counters.c2 + 3;
10710
+ if (counters.c3 != 3)
10712
+ return 100 * counters.c3 + 6;
10717
+ return 100 * rc + 4;
10723
+static int test_tbegin_retry_nofloat (void)
10730
+ if ((rc = __builtin_tbegin_retry_nofloat ((void *)0, 5)) == 0)
10734
+ do_abort = (counters.c1 == 0) ? 1 : 0;
10735
+ __builtin_non_tx_store (
10736
+ (uint64_t *)&counters.c1, counters.c1 + 1);
10737
+ if (do_abort == 1)
10739
+ __builtin_tabort (256);
10741
+ counters.c2 = counters.c2 + 10;
10742
+ __builtin_non_tx_store ((uint64_t *)&counters.c3, 3);
10743
+ rc = __builtin_tend ();
10746
+ return 100 * rc + 5;
10748
+ if (counters.c1 != 2)
10750
+ return 100 * counters.c1 + 2;
10752
+ if (counters.c2 != 10)
10754
+ return 100 * counters.c2 + 3;
10756
+ if (counters.c3 != 3)
10758
+ return 100 * counters.c3 + 6;
10763
+ return 100 * rc + 4;
10769
+static int test_tbegin_aborts (void)
10775
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
10778
+ __builtin_tabort (256);
10781
+ else if (rc != 2)
10790
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
10793
+ __builtin_tabort (257);
10796
+ else if (rc != 3)
10798
+ return 100 * rc + 6;
10802
+ return 100 * f + 7;
10804
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
10806
+ global.float_3 = global.float_1 + global.float_2;
10807
+ rc = __builtin_tend ();
10810
+ return 100 * rc + 8;
10815
+ return 100 * rc + 9;
10817
+ if (global.float_3 != global.float_1 + global.float_2)
10819
+ return 100 * rc + 10;
10825
+static __attribute__((noinline)) void indirect_abort(int abort_code)
10827
+ __builtin_tabort (abort_code);
10832
+static int test_tbegin_indirect_aborts (void)
10838
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
10841
+ indirect_abort(256);
10844
+ else if (rc != 2)
10846
+ return 100 * rc + 3;
10850
+ return 100 * rc + 4;
10853
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
10856
+ indirect_abort(257);
10859
+ else if (rc != 3)
10861
+ return 100 * rc + 6;
10865
+ return 100 * f + 7;
10871
+static int test_tbegin_nofloat_aborts (void)
10875
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
10877
+ __builtin_tabort (256);
10880
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
10882
+ __builtin_tabort (257);
10885
+ else if (rc != 3)
10887
+ return 1000 * rc + 6;
10893
+static int test_tbegin_nofloat_indirect_aborts (void)
10897
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
10899
+ indirect_abort (256);
10902
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
10904
+ indirect_abort (257);
10907
+ else if (rc != 3)
10909
+ return 1000 * rc + 6;
10916
+int _test_tbegin_retry_aborts (int retries, uint64_t abort_code)
10921
+ if ((rc = __builtin_tbegin_retry ((void *)0, retries)) == 0)
10923
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, counters.c1 + 1);
10924
+ __builtin_tabort (abort_code);
10929
+ if ((abort_code & 1) == 0)
10933
+ return 100 * rc + 2003;
10935
+ else if (counters.c1 != (uint64_t)retries + 1)
10937
+ return 1000 * counters.c1 + 100 * retries + 4;
10944
+ return 100 * rc + 3005;
10946
+ else if (counters.c1 != 1)
10948
+ return 1000 * counters.c1 + 100 * retries + 6;
10956
+static int test_tbegin_retry_aborts (void)
10961
+ for (retries = 1; retries <= 3; retries++)
10963
+ rc = _test_tbegin_retry_aborts (retries, 256);
10966
+ return 10000 + rc;
10969
+ for (retries = 1; retries <= 3; retries++)
10971
+ rc = _test_tbegin_retry_aborts (retries, 257);
10974
+ return 20000 + rc;
10977
+ if ((rc = __builtin_tbegin_retry ((void *)0, 5)) == 0)
10979
+ global.float_3 = global.float_1 + global.float_2;
10980
+ rc = __builtin_tend ();
10983
+ return 30000 + 100 * rc + 6;
10988
+ return 30000 + 100 * rc + 7;
10994
+static int _test_tbegin_retry_nofloat_aborts (int retries, uint64_t abort_code)
10999
+ if ((rc = __builtin_tbegin_retry_nofloat ((void *)0, retries)) == 0)
11001
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, counters.c1 + 1);
11002
+ __builtin_tabort (abort_code);
11007
+ if ((abort_code & 1) == 0)
11011
+ return 100 * rc + 2003;
11013
+ else if (counters.c1 != (uint64_t)retries + 1)
11015
+ return 1000 * counters.c1 + 100 * retries + 4;
11022
+ return 100 * rc + 3005;
11024
+ else if (counters.c1 != 1)
11026
+ return 1000 * counters.c1 + 100 * retries + 6;
11034
+static int test_tbegin_retry_nofloat_aborts (void)
11039
+ for (retries = 1; retries <= 3; retries++)
11041
+ rc = _test_tbegin_retry_nofloat_aborts (retries, 256);
11044
+ return 10 * retries + rc;
11047
+ for (retries = 1; retries <= 3; retries++)
11049
+ rc = _test_tbegin_retry_nofloat_aborts (retries, 257);
11052
+ return 10000 + 10 * retries + rc;
11059
+static int test_tbegin_tdb (void)
11063
+ local_tdb.format = 0;
11064
+ if ((rc = __builtin_tbegin (&local_tdb)) == 0)
11066
+ rc = __builtin_tend ();
11069
+ return 100 * rc + 1;
11071
+ if (local_tdb.format != 0)
11073
+ dump_tdb (&local_tdb);
11074
+ return 100 * local_tdb.format + 2;
11079
+ return 100 * rc + 3;
11081
+ local_tdb.format = 0;
11082
+ if ((rc = __builtin_tbegin (&local_tdb)) == 0)
11084
+ __builtin_tabort (257);
11091
+ return 100 * rc + 5;
11093
+ if (local_tdb.format != 1)
11095
+ dump_tdb (&local_tdb);
11096
+ return 100 * local_tdb.format + 6;
11099
+ local_tdb256.format = 0;
11100
+ if ((rc = __builtin_tbegin (&local_tdb256)) == 0)
11102
+ rc = __builtin_tend ();
11105
+ return 1100 * rc + 1;
11107
+ if (local_tdb256.format != 0)
11109
+ dump_tdb (&local_tdb256);
11110
+ return 1100 * local_tdb256.format + 2;
11115
+ return 1100 * rc + 3;
11117
+ local_tdb256.format = 0;
11118
+ if ((rc = __builtin_tbegin (&local_tdb256)) == 0)
11120
+ __builtin_tabort (257);
11127
+ return 2100 * rc + 5;
11129
+ if (local_tdb256.format != 1)
11131
+ dump_tdb (&local_tdb256);
11132
+ return 2100 * local_tdb256.format + 6;
11139
+static int test_tbegin_nofloat_tdb (void)
11143
+ local_tdb.format = 0;
11144
+ if ((rc = __builtin_tbegin_nofloat (&local_tdb)) == 0)
11146
+ rc = __builtin_tend ();
11149
+ return 100 * rc + 1;
11151
+ if (local_tdb.format != 0)
11153
+ dump_tdb (&local_tdb);
11154
+ return 100 * local_tdb.format + 2;
11161
+ local_tdb.format = 0;
11162
+ if ((rc = __builtin_tbegin_nofloat (&local_tdb)) == 0)
11164
+ __builtin_tabort (257);
11171
+ return 100 * rc + 5;
11173
+ if (local_tdb.format != 1)
11175
+ dump_tdb (&local_tdb);
11176
+ return 100 * local_tdb.format + 6;
11179
+ local_tdb256.format = 0;
11180
+ if ((rc = __builtin_tbegin_nofloat (&local_tdb256)) == 0)
11182
+ rc = __builtin_tend ();
11185
+ return 1100 * rc + 1;
11187
+ if (local_tdb256.format != 0)
11189
+ dump_tdb (&local_tdb256);
11190
+ return 1100 * local_tdb256.format + 2;
11197
+ local_tdb256.format = 0;
11198
+ if ((rc = __builtin_tbegin_nofloat (&local_tdb256)) == 0)
11200
+ __builtin_tabort (257);
11207
+ return 2100 * rc + 5;
11209
+ if (local_tdb256.format != 1)
11211
+ dump_tdb (&local_tdb256);
11212
+ return 2100 * local_tdb256.format + 6;
11219
+static int test_tbegin_retry_tdb (void)
11223
+ local_tdb256.format = 0;
11224
+ if ((rc = __builtin_tbegin_retry (&local_tdb256, 2)) == 0)
11226
+ rc = __builtin_tend ();
11229
+ return 1100 * rc + 1;
11231
+ if (local_tdb256.format != 0)
11233
+ dump_tdb (&local_tdb256);
11234
+ return 1100 * local_tdb256.format + 2;
11241
+ local_tdb256.format = 0;
11242
+ if ((rc = __builtin_tbegin_retry (&local_tdb256, 2)) == 0)
11244
+ __builtin_tabort (257);
11251
+ return 2100 * rc + 5;
11253
+ if (local_tdb256.format != 1)
11255
+ dump_tdb (&local_tdb256);
11256
+ return 2100 * local_tdb256.format + 6;
11263
+static int test_tbegin_retry_nofloat_tdb (void)
11267
+ local_tdb.format = 0;
11268
+ if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb, 2)) == 0)
11270
+ rc = __builtin_tend ();
11273
+ return 100 * rc + 1;
11275
+ if (local_tdb.format != 0)
11277
+ dump_tdb (&local_tdb);
11278
+ return 100 * local_tdb.format + 2;
11283
+ return 100 * rc + 3;
11285
+ local_tdb.format = 0;
11286
+ if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb, 2)) == 0)
11288
+ __builtin_tabort (257);
11295
+ return 100 * rc + 5;
11297
+ if (local_tdb.format != 1)
11299
+ dump_tdb (&local_tdb);
11300
+ return 100 * local_tdb.format + 6;
11303
+ local_tdb256.format = 0;
11304
+ if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb256, 2)) == 0)
11306
+ rc = __builtin_tend ();
11309
+ return 1100 * rc + 1;
11311
+ if (local_tdb256.format != 0)
11313
+ dump_tdb (&local_tdb256);
11314
+ return 1100 * local_tdb256.format + 2;
11319
+ return 1100 * rc + 3;
11321
+ local_tdb256.format = 0;
11322
+ if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb256, 2)) == 0)
11324
+ __builtin_tabort (257);
11331
+ return 2100 * rc + 5;
11333
+ if (local_tdb256.format != 1)
11335
+ dump_tdb (&local_tdb256);
11336
+ return 2100 * local_tdb256.format + 6;
11343
+static int test_etnd (void)
11350
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
11352
+ counters.c1 = __builtin_tx_nesting_depth ();
11353
+ if (__builtin_tbegin ((void *)0) == 0)
11355
+ counters.c2 = __builtin_tx_nesting_depth ();
11356
+ if (__builtin_tbegin ((void *)0) == 0)
11358
+ counters.c3 = __builtin_tx_nesting_depth ();
11359
+ __builtin_tend ();
11361
+ __builtin_tend ();
11363
+ __builtin_tend ();
11367
+ return 100 * rc + 1;
11369
+ if (counters.c1 != 1)
11371
+ return 100 * counters.c1 + 2;
11373
+ if (counters.c2 != 2)
11375
+ return 100 * counters.c2 + 3;
11377
+ if (counters.c3 != 3)
11379
+ return 100 * counters.c3 + 4;
11385
+static int test_tbeginc (void)
11390
+ __builtin_tbeginc ();
11392
+ rc = __builtin_tend ();
11395
+ return 10000 * rc + 1;
11397
+ if (counters.c1 != 1)
11399
+ return 100000 * counters.c1 + 3;
11405
+/* ---------------------------- local testing framework functions ---------- */
11407
+static int run_one_test (const test_table_entry_t *test_entry)
11409
+ int do_print_passes;
11414
+ /* Warmup run to get all necessary data and instruction pages into the page
11420
+ for (run = 0; run < NUM_WARMUP_RUNS; run++)
11422
+ test_entry->test_func ();
11426
+ do_print_passes = (
11427
+ test_entry->required_quorum != 1 ||
11428
+ test_entry->max_repetitions != 1);
11429
+ printf ("RRR RUN %s\n", test_entry->name);
11430
+ if (do_print_passes == 1)
11433
+ " (requires %d successful out of %d runs)\n",
11434
+ test_entry->required_quorum,
11435
+ test_entry->max_repetitions);
11439
+ for (rc = 0, i = 0; i < test_entry->max_repetitions; i++)
11441
+ if (do_print_passes == 1)
11452
+ rc = test_entry->test_func ();
11455
+ if (do_print_passes == 1)
11457
+ printf (" success");
11460
+ if (succeeded >= test_entry->required_quorum)
11467
+ printf (" failed (rc = %d)", rc);
11470
+ if (do_print_passes == 1 || rc != 0)
11474
+ if (succeeded >= test_entry->required_quorum)
11476
+ printf ("+++ OK %s\n", test_entry->name);
11482
+ printf ("--- FAIL %s\n", test_entry->name);
11484
+ return (rc != 0) ? rc : -1;
11488
+static int run_all_tests (const test_table_entry_t *test_table)
11490
+ const test_table_entry_t *test;
11494
+ rc = 0, test = &test_table[0];
11495
+ test->test_func != NULL && rc == 0; test++)
11497
+ rc = run_one_test (test);
11503
+/* ---------------------------- interface functions ------------------------ */
11507
+ const test_table_entry_t test_table[] = {
11508
+ TEST_NO_REP (test_constants),
11509
+ TEST_DF_REP (test_tbegin_ntstg_tend),
11510
+ TEST_DF_REP (test_tbegin_ntstg_tabort),
11511
+ TEST_DF_REP (test_tbegin_nofloat),
11512
+ TEST_NO_REP (test_tbegin_retry),
11513
+ TEST_NO_REP (test_tbegin_retry_nofloat),
11514
+ TEST_DF_REP (test_tbegin_aborts),
11515
+ TEST_DF_REP (test_tbegin_indirect_aborts),
11516
+ TEST_DF_REP (test_tbegin_nofloat_aborts),
11517
+ TEST_DF_REP (test_tbegin_nofloat_indirect_aborts),
11518
+ TEST_NO_REP (test_tbegin_retry_aborts),
11519
+ TEST_NO_REP (test_tbegin_retry_nofloat_aborts),
11520
+ TEST_DF_REP (test_tbegin_tdb),
11521
+ TEST_DF_REP (test_tbegin_nofloat_tdb),
11522
+ TEST_NO_REP (test_tbegin_retry_tdb),
11523
+ TEST_NO_REP (test_tbegin_retry_nofloat_tdb),
11524
+ TEST_DF_REP (test_etnd),
11525
+ TEST_DF_REP (test_tbeginc),
11526
+ { (void *)0, 0, 0 }
11532
+ rc = run_all_tests (test_table);
11537
Index: gcc/testsuite/gcc.target/s390/hotpatch-7.c
11538
===================================================================
11539
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-7.c (.../tags/gcc_4_8_2_release)
11540
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-7.c (.../branches/gcc-4_8-branch)
11542
+/* Functional tests for the function hotpatching feature. */
11544
+/* { dg-do run } */
11545
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
11547
+#include <stdio.h>
11549
+__attribute__ ((hotpatch(0)))
11552
+ printf("hello, world!\n");
11560
+/* Check number of occurences of certain instructions. */
11561
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
11562
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
11563
Index: gcc/testsuite/gcc.target/s390/htm-builtins-2.c
11564
===================================================================
11565
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-2.c (.../tags/gcc_4_8_2_release)
11566
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-2.c (.../branches/gcc-4_8-branch)
11568
+/* Functional tests of the htm __TM_... macros. */
11570
+/* { dg-do run } */
11571
+/* { dg-require-effective-target htm } */
11572
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
11574
+/* ---------------------------- included header files ---------------------- */
11576
+#include <stdio.h>
11577
+#include <string.h>
11578
+#include <inttypes.h>
11579
+#include <htmxlintrin.h>
11581
+/* ---------------------------- local definitions -------------------------- */
11583
+#define DEFAULT_MAX_REPETITIONS 5
11584
+#define DEFAULT_REQUIRED_QUORUM ((DEFAULT_MAX_REPETITIONS) - 1)
11585
+#define DEFAULT_ABORT_ADDRESS (0x12345678u)
11587
+/* ---------------------------- local macros ------------------------------- */
11589
+#define TEST_DF_REP(name) \
11590
+ { #name, name, DEFAULT_MAX_REPETITIONS, DEFAULT_REQUIRED_QUORUM }
11591
+#define TEST_NO_REP(name) { #name, name, 1, 1 }
11593
+/* ---------------------------- local types -------------------------------- */
11595
+typedef int (*test_func_t)(void);
11599
+ const char *name;
11600
+ test_func_t test_func;
11601
+ int max_repetitions;
11602
+ int required_quorum;
11603
+} test_table_entry_t;
11607
+ ABORT_T_SYSTEM = 0,
11608
+ ABORT_T_USER = 1,
11613
+ ABORT_T_NONE = 0,
11615
+ ABORT_T_FOOTPRINT_EXCEEDED,
11616
+ ABORT_T_NESTED_TOO_DEEP,
11617
+ ABORT_T_CONFLICT,
11619
+ ABORT_T_INVALID_ABORT_CODE
11622
+/* ---------------------------- local variables ---------------------------- */
11624
+__attribute__ ((aligned(256))) static struct __htm_tdb local_tdb256;
11625
+static struct __htm_tdb local_tdb;
11627
+static abort_t const abort_classes[] =
11629
+ ABORT_T_INVALID_ABORT_CODE,
11637
+ ABORT_T_FOOTPRINT_EXCEEDED,
11639
+ ABORT_T_FOOTPRINT_EXCEEDED,
11640
+ ABORT_T_CONFLICT,
11641
+ ABORT_T_CONFLICT,
11645
+ ABORT_T_NESTED_TOO_DEEP,
11652
+static size_t num_abort_classes = sizeof(abort_classes) / sizeof(abort_t);
11654
+/* ---------------------------- exported variables (globals) --------------- */
11656
+int global_int = 0;
11657
+uint64_t global_u64 = 0;
11658
+float global_float_1 = 1.0;
11659
+float global_float_2 = 2.5;
11660
+float global_float_3 = 0.0;
11661
+__attribute__ ((aligned(256))) struct
11663
+ volatile uint64_t c1;
11664
+ volatile uint64_t c2;
11665
+ volatile uint64_t c3;
11666
+} counters = { 0, 0, 0 };
11668
+/* ---------------------------- local helper functions --------------------- */
11670
+static void dump_tdb(struct __htm_tdb *tdb)
11672
+ unsigned char *p;
11676
+ p = (unsigned char *)tdb;
11677
+ for (i = 0; i < 16; i++)
11679
+ fprintf(stderr, "0x%02x ", i * 16);
11680
+ for (j = 0; j < 16; j++)
11682
+ fprintf(stderr, "%02x", (int)p[i * 16 + j]);
11685
+ fprintf(stderr, " ");
11689
+ fprintf(stderr, " ");
11692
+ fprintf(stderr, "\n");
11698
+static void make_fake_tdb(struct __htm_tdb *tdb)
11700
+ memset(tdb, 0, sizeof(*tdb));
11702
+ tdb->nesting_depth = 1;
11703
+ tdb->atia = DEFAULT_ABORT_ADDRESS;
11704
+ tdb->abort_code = 11;
11709
+static int check_abort_code_in_tdb(struct __htm_tdb *tdb, uint64_t abort_code)
11714
+ if (abort_code != 0)
11718
+ addr = __TM_failure_address(&local_tdb);
11719
+ if (addr != DEFAULT_ABORT_ADDRESS)
11725
+ long long tdb_abort_code;
11727
+ tdb_abort_code = __TM_failure_code(tdb);
11728
+ if ((uint64_t)tdb_abort_code != abort_code)
11731
+ stderr, "tm_ac %" PRIu64 ", ac %" PRIu64
11732
+ ", tdb_ac %" PRIu64 "\n",
11733
+ (uint64_t)tdb_abort_code, abort_code,
11734
+ (uint64_t)tdb->abort_code);
11738
+ expect_rc = (abort_code >= 256) ? 1 : 0;
11739
+ rc = __TM_is_user_abort(tdb);
11740
+ if (rc != expect_rc)
11742
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
11746
+ unsigned char code;
11749
+ rc = __TM_is_named_user_abort(tdb, &code);
11750
+ if (rc != expect_rc)
11753
+ stderr, "rc %ld, expect_rc %ld\n", rc,
11757
+ if (expect_rc == 1 && code != abort_code - 256)
11762
+ if (abort_code > (uint64_t)num_abort_classes)
11764
+ abort_code = (uint64_t)num_abort_classes;
11766
+ expect_rc = (abort_classes[abort_code] == ABORT_T_ILLEGAL) ? 1 : 0;
11767
+ rc = __TM_is_illegal(tdb);
11768
+ if (rc != expect_rc)
11771
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
11775
+ (abort_classes[abort_code] == ABORT_T_FOOTPRINT_EXCEEDED) ?
11777
+ rc = __TM_is_footprint_exceeded(tdb);
11778
+ if (rc != expect_rc)
11781
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
11785
+ (abort_classes[abort_code] == ABORT_T_NESTED_TOO_DEEP) ? 1 : 0;
11786
+ rc = __TM_is_nested_too_deep(tdb);
11787
+ if (rc != expect_rc)
11790
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
11793
+ expect_rc = (abort_classes[abort_code] == ABORT_T_CONFLICT) ? 1 : 0;
11794
+ rc = __TM_is_conflict(tdb);
11795
+ if (rc != expect_rc)
11798
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
11805
+/* ---------------------------- local test functions ----------------------- */
11807
+/* Not a test; make sure that the involved global cachelines are reserved for
11809
+static int init_cache(void)
11811
+ make_fake_tdb(&local_tdb);
11812
+ make_fake_tdb(&local_tdb256);
11815
+ global_float_1 = 1.0;
11816
+ global_float_2 = 2.5;
11817
+ global_float_3 = 0.0;
11825
+static int test_abort_classification(void)
11829
+ make_fake_tdb(&local_tdb);
11830
+ for (i = 0; i <= 256; i++)
11834
+ local_tdb.abort_code = (uint64_t)i;
11835
+ rc = check_abort_code_in_tdb(&local_tdb, (uint64_t)i);
11838
+ return 100 * i + rc;
11845
+static int test_cc_classification(void)
11849
+ rc = __TM_is_failure_persistent(0);
11854
+ rc = __TM_is_failure_persistent(1);
11859
+ rc = __TM_is_failure_persistent(2);
11864
+ rc = __TM_is_failure_persistent(3);
11873
+static int test_tbegin_ntstg_tend(void)
11879
+ if ((rc = __TM_simple_begin()) == 0)
11881
+ __TM_non_transactional_store((uint64_t *)&counters.c1, 1);
11886
+ return 100 * rc + 5;
11888
+ if (counters.c1 != 1)
11890
+ return 100 * counters.c1 + 2;
11892
+ if (counters.c2 != 2)
11894
+ return 100 * counters.c2 + 3;
11899
+ return 100 * rc + 4;
11905
+static int test_tbegin_ntstg_tabort(void)
11907
+ register float f;
11912
+ if (__TM_simple_begin() == 0)
11914
+ __TM_non_transactional_store((uint64_t *)&counters.c1, 1);
11917
+ __TM_named_abort(0);
11920
+ if (counters.c1 != 1)
11922
+ return 100 * counters.c1 + 2;
11924
+ if (counters.c2 != 0)
11926
+ return 100 * counters.c2 + 3;
11930
+ return 100 * f + 4;
11936
+static int test_tbegin_aborts(void)
11942
+ if ((rc = __TM_simple_begin()) == 0)
11948
+ else if (rc != 2)
11957
+ if ((rc = __TM_simple_begin()) == 0)
11960
+ __TM_named_abort(3);
11963
+ else if (rc != 3)
11965
+ return 100 * rc + 6;
11969
+ return 100 * f + 7;
11971
+ if ((rc = __TM_simple_begin()) == 0)
11973
+ global_float_3 = global_float_1 + global_float_2;
11977
+ return 100 * rc + 8;
11982
+ return 100 * rc + 9;
11984
+ if (global_float_3 != global_float_1 + global_float_2)
11986
+ return 100 * rc + 10;
11992
+static int test_tbegin_tdb(void)
11996
+ local_tdb.format = 0;
11997
+ if ((rc = __TM_begin(&local_tdb)) == 0)
12002
+ return 100 * rc + 1;
12004
+ if (local_tdb.format != 0)
12006
+ dump_tdb(&local_tdb);
12007
+ return 100 * local_tdb.format + 2;
12012
+ return 100 * rc + 3;
12014
+ local_tdb.format = 0;
12015
+ if ((rc = __TM_begin(&local_tdb)) == 0)
12017
+ __TM_named_abort(1);
12024
+ return 100 * rc + 5;
12026
+ if (local_tdb.format != 1)
12028
+ dump_tdb(&local_tdb);
12029
+ return 100 * local_tdb.format + 6;
12032
+ local_tdb256.format = 0;
12033
+ if ((rc = __TM_begin(&local_tdb256)) == 0)
12038
+ return 1100 * rc + 1;
12040
+ if (local_tdb256.format != 0)
12042
+ dump_tdb(&local_tdb256);
12043
+ return 1100 * local_tdb256.format + 2;
12048
+ return 1100 * rc + 3;
12050
+#if 1 /*!!!does not work*/
12051
+ local_tdb256.format = 0;
12052
+ if ((rc = __TM_begin(&local_tdb256)) == 0)
12054
+ __TM_named_abort(1);
12061
+ return 2100 * rc + 5;
12063
+ if (local_tdb256.format != 1)
12065
+ dump_tdb(&local_tdb256);
12066
+ return 2100 * local_tdb256.format + 6;
12074
+static int test_etnd(void)
12081
+ make_fake_tdb(&local_tdb);
12082
+ local_tdb.nesting_depth = 0;
12083
+ nd = __TM_nesting_depth(&local_tdb);
12088
+ local_tdb.nesting_depth = 7;
12089
+ nd = __TM_nesting_depth(&local_tdb);
12094
+ local_tdb.format = 0;
12095
+ nd = __TM_nesting_depth(&local_tdb);
12105
+ if ((rc = __TM_simple_begin()) == 0)
12107
+ counters.c1 = __TM_nesting_depth(0);
12108
+ if (__TM_simple_begin() == 0)
12110
+ counters.c2 = __TM_nesting_depth(0);
12111
+ if (__TM_simple_begin() == 0)
12113
+ counters.c3 = __TM_nesting_depth(0);
12122
+ return 100 * rc + 1;
12124
+ if (counters.c1 != 1)
12126
+ return 100 * counters.c1 + 2;
12128
+ if (counters.c2 != 2)
12130
+ return 100 * counters.c2 + 3;
12132
+ if (counters.c3 != 3)
12134
+ return 100 * counters.c3 + 4;
12140
+/* ---------------------------- local testing framework functions ---------- */
12142
+static int run_one_test(const test_table_entry_t *test_entry)
12144
+ int do_print_passes;
12149
+ do_print_passes = (
12150
+ test_entry->required_quorum != 1 ||
12151
+ test_entry->max_repetitions != 1);
12152
+ printf("RRR RUN %s\n", test_entry->name);
12153
+ if (do_print_passes == 1)
12156
+ " (requires %d successful out of %d runs)\n",
12157
+ test_entry->required_quorum,
12158
+ test_entry->max_repetitions);
12162
+ for (rc = 0, i = 0; i < test_entry->max_repetitions; i++)
12164
+ if (do_print_passes == 1)
12175
+ rc = test_entry->test_func();
12178
+ if (do_print_passes == 1)
12180
+ printf(" success");
12183
+ if (succeeded >= test_entry->required_quorum)
12190
+ printf(" failed (rc = %d)", rc);
12193
+ if (do_print_passes == 1 || rc != 0)
12197
+ if (succeeded >= test_entry->required_quorum)
12199
+ printf("+++ OK %s\n", test_entry->name);
12205
+ printf("--- FAIL %s\n", test_entry->name);
12207
+ return (rc != 0) ? rc : -1;
12211
+static int run_all_tests(const test_table_entry_t *test_table)
12213
+ const test_table_entry_t *test;
12217
+ rc = 0, test = &test_table[0];
12218
+ test->test_func != NULL && rc == 0; test++)
12220
+ rc = run_one_test(test);
12226
+/* ---------------------------- interface functions ------------------------ */
12230
+ const test_table_entry_t test_table[] = {
12231
+ TEST_NO_REP(init_cache),
12232
+ TEST_NO_REP(test_abort_classification),
12233
+ TEST_NO_REP(test_cc_classification),
12234
+ TEST_DF_REP(test_tbegin_ntstg_tend),
12235
+ TEST_DF_REP(test_tbegin_ntstg_tabort),
12236
+ TEST_DF_REP(test_tbegin_aborts),
12237
+ TEST_DF_REP(test_tbegin_tdb),
12238
+ TEST_DF_REP(test_etnd),
12239
+ { (void *)0, 0, 0 }
12245
+ rc = run_all_tests(test_table);
12250
Index: gcc/testsuite/gcc.target/s390/hotpatch-8.c
12251
===================================================================
12252
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-8.c (.../tags/gcc_4_8_2_release)
12253
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-8.c (.../branches/gcc-4_8-branch)
12255
+/* Functional tests for the function hotpatching feature. */
12257
+/* { dg-do run } */
12258
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
12260
+#include <stdio.h>
12262
+__attribute__ ((hotpatch))
12263
+inline void hp1(void)
12265
+ printf("hello, world!\n");
12268
+__attribute__ ((hotpatch))
12269
+__attribute__ ((always_inline))
12270
+void hp2(void) /* { dg-warning "always_inline function might not be inlinable" } */
12272
+ printf("hello, world!\n");
12273
+} /* { dg-warning "function 'hp2' with the 'always_inline' attribute is not hotpatchable" } */
12280
+/* Check number of occurences of certain instructions. */
12281
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
12282
+/* { dg-final { scan-assembler-not "nop\t0" } } */
12283
Index: gcc/testsuite/gcc.target/s390/hotpatch-9.c
12284
===================================================================
12285
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-9.c (.../tags/gcc_4_8_2_release)
12286
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-9.c (.../branches/gcc-4_8-branch)
12288
+/* Functional tests for the function hotpatching feature. */
12290
+/* { dg-do run } */
12291
+/* { dg-options "-O3 -mzarch -mhotpatch=1 --save-temps" } */
12293
+#include <stdio.h>
12295
+__attribute__ ((hotpatch(2)))
12298
+ printf("hello, world!\n");
12306
+/* Check number of occurences of certain instructions. */
12307
+/* { dg-final { scan-assembler-times "nopr\t%r7" 2 } } */
12308
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
12309
Index: gcc/testsuite/gcc.target/s390/hotpatch-10.c
12310
===================================================================
12311
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-10.c (.../tags/gcc_4_8_2_release)
12312
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-10.c (.../branches/gcc-4_8-branch)
12314
+/* Functional tests for the function hotpatching feature. */
12316
+/* { dg-do run } */
12317
+/* { dg-options "-O3 -mzarch -mno-hotpatch --save-temps" } */
12319
+#include <stdio.h>
12321
+__attribute__ ((hotpatch(2)))
12324
+ printf("hello, world!\n");
12332
+/* Check number of occurences of certain instructions. */
12333
+/* { dg-final { scan-assembler-times "nopr\t%r7" 2 } } */
12334
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
12335
Index: gcc/testsuite/gcc.target/s390/hotpatch-11.c
12336
===================================================================
12337
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-11.c (.../tags/gcc_4_8_2_release)
12338
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-11.c (.../branches/gcc-4_8-branch)
12340
+/* Functional tests for the function hotpatching feature. */
12342
+/* { dg-do run } */
12343
+/* { dg-options "-O3 -mzarch -mhotpatch -mno-hotpatch --save-temps" } */
12345
+#include <stdio.h>
12349
+ printf("hello, world!\n");
12357
+/* Check number of occurences of certain instructions. */
12358
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
12359
+/* { dg-final { scan-assembler-not "nop\t0" } } */
12360
Index: gcc/testsuite/gcc.target/s390/hotpatch-12.c
12361
===================================================================
12362
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-12.c (.../tags/gcc_4_8_2_release)
12363
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-12.c (.../branches/gcc-4_8-branch)
12365
+/* Functional tests for the function hotpatching feature. */
12367
+/* { dg-do run } */
12368
+/* { dg-options "-O3 -mzarch -mno-hotpatch -mhotpatch=1 --save-temps" } */
12370
+#include <stdio.h>
12374
+ printf("hello, world!\n");
12382
+/* Check number of occurences of certain instructions. */
12383
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
12384
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
12385
Index: gcc/testsuite/gcc.target/mips/bswap-1.c
12386
===================================================================
12387
--- a/src/gcc/testsuite/gcc.target/mips/bswap-1.c (.../tags/gcc_4_8_2_release)
12388
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-1.c (.../branches/gcc-4_8-branch)
12390
+/* { dg-options "isa_rev>=2" } */
12391
+/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
12393
+NOMIPS16 unsigned short
12394
+foo (unsigned short x)
12396
+ return ((x << 8) & 0xff00) | ((x >> 8) & 0xff);
12399
+/* { dg-final { scan-assembler "\twsbh\t" } } */
12400
Index: gcc/testsuite/gcc.target/mips/bswap-2.c
12401
===================================================================
12402
--- a/src/gcc/testsuite/gcc.target/mips/bswap-2.c (.../tags/gcc_4_8_2_release)
12403
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-2.c (.../branches/gcc-4_8-branch)
12405
+/* { dg-options "isa_rev>=2" } */
12407
+NOMIPS16 unsigned short
12408
+foo (unsigned short x)
12410
+ return __builtin_bswap16 (x);
12413
+/* { dg-final { scan-assembler "\twsbh\t" } } */
12414
Index: gcc/testsuite/gcc.target/mips/pr59137.c
12415
===================================================================
12416
--- a/src/gcc/testsuite/gcc.target/mips/pr59137.c (.../tags/gcc_4_8_2_release)
12417
+++ b/src/gcc/testsuite/gcc.target/mips/pr59137.c (.../branches/gcc-4_8-branch)
12419
+/* { dg-do run } */
12420
+/* { dg-options "-mno-plt" } */
12422
+extern void abort (void);
12430
+struct lispstruct Cnil_body;
12431
+struct lispstruct Ct_body;
12434
+struct lispstruct * __attribute__ ((noinline))
12435
+fLlistp (struct lispstruct *x0)
12437
+ if (x0 == &Cnil_body
12438
+ || (((unsigned long) x0 >= 0x80000000) ? 0
12439
+ : (!x0->e ? (x0 != &Cnil_body) : x0->t)))
12449
+ if (fLlistp ((struct lispstruct *) 0xa0000001) != &Cnil_body)
12453
Index: gcc/testsuite/gcc.target/mips/bswap-3.c
12454
===================================================================
12455
--- a/src/gcc/testsuite/gcc.target/mips/bswap-3.c (.../tags/gcc_4_8_2_release)
12456
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-3.c (.../branches/gcc-4_8-branch)
12458
+/* { dg-options "isa_rev>=2" } */
12459
+/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
12461
+NOMIPS16 unsigned int
12462
+foo (unsigned int x)
12464
+ return (((x << 24) & 0xff000000)
12465
+ | ((x << 8) & 0xff0000)
12466
+ | ((x >> 8) & 0xff00)
12467
+ | ((x >> 24) & 0xff));
12470
+/* { dg-final { scan-assembler "\twsbh\t" } } */
12471
+/* { dg-final { scan-assembler "\tror\t" } } */
12472
Index: gcc/testsuite/gcc.target/mips/bswap-4.c
12473
===================================================================
12474
--- a/src/gcc/testsuite/gcc.target/mips/bswap-4.c (.../tags/gcc_4_8_2_release)
12475
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-4.c (.../branches/gcc-4_8-branch)
12477
+/* { dg-options "isa_rev>=2" } */
12479
+NOMIPS16 unsigned int
12480
+foo (unsigned int x)
12482
+ return __builtin_bswap32 (x);
12485
+/* { dg-final { scan-assembler "\twsbh\t" } } */
12486
+/* { dg-final { scan-assembler "\tror\t" } } */
12487
Index: gcc/testsuite/gcc.target/mips/bswap-5.c
12488
===================================================================
12489
--- a/src/gcc/testsuite/gcc.target/mips/bswap-5.c (.../tags/gcc_4_8_2_release)
12490
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-5.c (.../branches/gcc-4_8-branch)
12492
+/* { dg-options "isa_rev>=2 -mgp64" } */
12493
+/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
12495
+typedef unsigned long long uint64_t;
12500
+ return (((x << 56) & 0xff00000000000000ull)
12501
+ | ((x << 40) & 0xff000000000000ull)
12502
+ | ((x << 24) & 0xff0000000000ull)
12503
+ | ((x << 8) & 0xff00000000ull)
12504
+ | ((x >> 8) & 0xff000000)
12505
+ | ((x >> 24) & 0xff0000)
12506
+ | ((x >> 40) & 0xff00)
12507
+ | ((x >> 56) & 0xff));
12510
+/* { dg-final { scan-assembler "\tdsbh\t" } } */
12511
+/* { dg-final { scan-assembler "\tdshd\t" } } */
12512
Index: gcc/testsuite/gcc.target/mips/bswap-6.c
12513
===================================================================
12514
--- a/src/gcc/testsuite/gcc.target/mips/bswap-6.c (.../tags/gcc_4_8_2_release)
12515
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-6.c (.../branches/gcc-4_8-branch)
12517
+/* { dg-options "isa_rev>=2 -mgp64" } */
12519
+typedef unsigned long long uint64_t;
12524
+ return __builtin_bswap64 (x);
12527
+/* { dg-final { scan-assembler "\tdsbh\t" } } */
12528
+/* { dg-final { scan-assembler "\tdshd\t" } } */
12529
Index: gcc/testsuite/gcc.target/sh/pr51244-19.c
12530
===================================================================
12531
--- a/src/gcc/testsuite/gcc.target/sh/pr51244-19.c (.../tags/gcc_4_8_2_release)
12532
+++ b/src/gcc/testsuite/gcc.target/sh/pr51244-19.c (.../branches/gcc-4_8-branch)
12533
@@ -22,11 +22,16 @@
12534
unwanted sequences. Thus, if we see any movt insns, something is not
12535
working as expected. This test requires -O2 because the T bit stores
12536
in question will be eliminated in additional insn split passes after
12540
+ Notice: When this test case was initially added, the T bit optimization
12541
+ was buggy and this test case resulted in wrong code. The movt
12542
+ instructions actually have to be present in this case to get
12544
/* { dg-do compile { target "sh*-*-*" } } */
12545
/* { dg-options "-O2" } */
12546
/* { dg-skip-if "" { "sh*-*-*" } { "-m5*" } { "" } } */
12547
-/* { dg-final { scan-assembler-not "movt" } } */
12548
+/* { dg-final { scan-assembler "movt" } } */
12552
Index: gcc/testsuite/gcc.target/sh/pr54089-3.c
12553
===================================================================
12554
--- a/src/gcc/testsuite/gcc.target/sh/pr54089-3.c (.../tags/gcc_4_8_2_release)
12555
+++ b/src/gcc/testsuite/gcc.target/sh/pr54089-3.c (.../branches/gcc-4_8-branch)
12557
/* { dg-options "-O1" } */
12558
/* { dg-skip-if "" { "sh*-*-*" } { "*" } { "-m1*" "-m2" "-m2e*" } } */
12559
/* { dg-final { scan-assembler-not "and" } } */
12560
-/* { dg-final { scan-assembler-not "31" } } */
12561
+/* { dg-final { scan-assembler-not "#31" } } */
12564
test00 (unsigned int a, int* b, int c, int* d, unsigned int e)
12565
Index: gcc/testsuite/go.test/go-test.exp
12566
===================================================================
12567
--- a/src/gcc/testsuite/go.test/go-test.exp (.../tags/gcc_4_8_2_release)
12568
+++ b/src/gcc/testsuite/go.test/go-test.exp (.../branches/gcc-4_8-branch)
12569
@@ -333,17 +333,16 @@
12572
if { ( [file tail $test] == "select2.go" \
12573
- || [file tail $test] == "stack.go" ) \
12574
+ || [file tail $test] == "stack.go" \
12575
+ || [file tail $test] == "peano.go" ) \
12576
&& ! [check_effective_target_split_stack] } {
12577
- # chan/select2.go fails on targets without split stack,
12578
- # because they allocate a large stack segment that blows
12579
- # out the memory calculations.
12580
+ # These tests fails on targets without split stack.
12585
- if { [file tail $test] == "rotate.go" } {
12586
- # This test produces a temporary file that takes too long
12587
+ if [string match "*go.test/test/rotate\[0123\].go" $test] {
12588
+ # These tests produces a temporary file that takes too long
12589
# to compile--5 minutes on my laptop without optimization.
12590
# When compiling without optimization it tests nothing
12591
# useful, since the point of the test is to see whether
12592
Index: gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90
12593
===================================================================
12594
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90 (.../tags/gcc_4_8_2_release)
12595
+++ b/src/gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90 (.../branches/gcc-4_8-branch)
12597
+! { dg-do compile }
12599
+! PR fortran/58803
12601
+! Contributed by Vittorio Zecca
12603
+! Was before ICEing due to a double free
12606
+ procedure(real), pointer, nopass :: f1, f2
12609
Index: gcc/testsuite/gfortran.dg/gomp/pr59467.f90
12610
===================================================================
12611
--- a/src/gcc/testsuite/gfortran.dg/gomp/pr59467.f90 (.../tags/gcc_4_8_2_release)
12612
+++ b/src/gcc/testsuite/gfortran.dg/gomp/pr59467.f90 (.../branches/gcc-4_8-branch)
12614
+! PR libgomp/59467
12615
+! { dg-do compile }
12616
+! { dg-options "-fopenmp" }
12618
+ INTEGER :: a, b, t
12621
+ !$OMP PARALLEL REDUCTION(+:b)
12622
+ !$OMP SINGLE ! { dg-error "is not threadprivate or private in outer context" }
12623
+ !$OMP ATOMIC WRITE
12625
+ !$OMP END SINGLE COPYPRIVATE (a)
12627
+ !$OMP END PARALLEL
12630
+ !$OMP PARALLEL REDUCTION(+:b)
12632
+ !$OMP ATOMIC WRITE
12634
+ !$OMP END SINGLE COPYPRIVATE (b)
12635
+ !$OMP END PARALLEL
12638
Index: gcc/testsuite/gfortran.dg/allocate_class_3.f90
12639
===================================================================
12640
--- a/src/gcc/testsuite/gfortran.dg/allocate_class_3.f90 (.../tags/gcc_4_8_2_release)
12641
+++ b/src/gcc/testsuite/gfortran.dg/allocate_class_3.f90 (.../branches/gcc-4_8-branch)
12644
+! Tests the fix for PR59414, comment #3, in which the allocate
12645
+! expressions were not correctly being stripped to provide the
12646
+! vpointer as an lhs to the pointer assignment of the vptr from
12647
+! the SOURCE expression.
12649
+! Contributed by Antony Lewis <antony@cosmologist.info>
12651
+module ObjectLists
12658
+ type Object_array_pointer
12659
+ class(t), pointer :: p(:)
12664
+ subroutine AddArray1 (P, Pt)
12666
+ class(Object_array_pointer) :: Pt
12669
+ class is (Object_array_pointer)
12670
+ if (associated (Pt%P)) deallocate (Pt%P)
12671
+ allocate(Pt%P(1:SIZE(P)), source=P)
12675
+ subroutine AddArray2 (P, Pt)
12677
+ class(Object_array_pointer) :: Pt
12680
+ type is (Object_array_pointer)
12681
+ if (associated (Pt%P)) deallocate (Pt%P)
12682
+ allocate(Pt%P(1:SIZE(P)), source=P)
12686
+ subroutine AddArray3 (P, Pt)
12688
+ class(Object_array_pointer) :: Pt
12691
+ class is (Object_array_pointer)
12692
+ if (associated (Pt%P)) deallocate (Pt%P)
12693
+ allocate(Pt%P(1:4), source=P)
12697
+ subroutine AddArray4 (P, Pt)
12699
+ class(Object_array_pointer) :: Pt
12702
+ class is (Object_array_pointer)
12703
+ if (associated (Pt%P)) deallocate (Pt%P)
12704
+ allocate(Pt%P(1:SIZE(P)), source=P)
12710
+ type(Object_array_pointer), pointer :: Pt
12711
+ class(t), pointer :: P(:)
12713
+ allocate (P(2), source = [t(1),t(2)])
12714
+ allocate (Pt, source = Object_array_pointer(NULL()))
12715
+ call AddArray1 (P, Pt)
12716
+ select type (x => Pt%p)
12718
+ if (any (x%i .ne. [1,2])) call abort
12723
+ allocate (P(3), source = [t(3),t(4),t(5)])
12724
+ allocate (Pt, source = Object_array_pointer(NULL()))
12725
+ call AddArray2 (P, Pt)
12726
+ select type (x => Pt%p)
12728
+ if (any (x%i .ne. [3,4,5])) call abort
12733
+ allocate (Pt, source = Object_array_pointer(NULL()))
12734
+ call AddArray3 (t(6), Pt)
12735
+ select type (x => Pt%p)
12737
+ if (any (x%i .ne. [6,6,6,6])) call abort
12741
+ allocate (Pt, source = Object_array_pointer(NULL()))
12742
+ call AddArray4 ([t(7), t(8)], Pt)
12743
+ select type (x => Pt%p)
12745
+ if (any (x%i .ne. [7,8])) call abort
12750
Index: gcc/testsuite/gfortran.dg/reshape_6.f90
12751
===================================================================
12752
--- a/src/gcc/testsuite/gfortran.dg/reshape_6.f90 (.../tags/gcc_4_8_2_release)
12753
+++ b/src/gcc/testsuite/gfortran.dg/reshape_6.f90 (.../branches/gcc-4_8-branch)
12755
+! { dg-do compile }
12756
+! PR fortran/58989
12760
+ real(8), dimension(4,4) :: fluxes
12761
+ real(8), dimension(2,2,2,2) :: f
12762
+ integer, dimension(3) :: dmmy
12763
+ integer, parameter :: indx(4)=(/2,2,2,2/)
12769
+ f = reshape(fluxes,(/dmmy,2/)) ! Caused an ICE
12770
+ f = reshape(fluxes,(/2,2,2,2/)) ! Works as expected
12771
+ f = reshape(fluxes,indx) ! Works as expected
12774
Index: gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90
12775
===================================================================
12776
--- a/src/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90 (.../tags/gcc_4_8_2_release)
12777
+++ b/src/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90 (.../branches/gcc-4_8-branch)
12779
+! { dg-do compile }
12781
+! PR fortran/58007
12782
+! Unresolved fiixup while loading a module.
12784
+! This tests that the specification expression A%MAX_DEGREE in module BSR is
12785
+! correctly loaded and resolved in program MAIN.
12787
+! Original testcase from Daniel Shapiro <shapero@uw.edu>
12790
+ type :: sparse_matrix
12791
+ integer :: max_degree
12798
+ type, extends(sparse_matrix) :: bsr_matrix
12805
+ function get_neighbors (A)
12806
+ type(bsr_matrix), intent(in) :: A
12807
+ integer :: get_neighbors(A%max_degree)
12815
Index: gcc/testsuite/gfortran.dg/init_flag_12.f90
12816
===================================================================
12817
--- a/src/gcc/testsuite/gfortran.dg/init_flag_12.f90 (.../tags/gcc_4_8_2_release)
12818
+++ b/src/gcc/testsuite/gfortran.dg/init_flag_12.f90 (.../branches/gcc-4_8-branch)
12820
+! { dg-do compile }
12821
+! { dg-options "-fno-automatic -finit-local-zero" }
12823
+! PR 55907: [4.7/4.8/4.9 Regression] ICE with -fno-automatic -finit-local-zero
12825
+! Contributed by J.R. Garcia <garcia.espinosa.jr@gmail.com>
12827
+subroutine cchaine (i)
12830
+ character(len=i) :: chaine
12831
+ write(*,*) chaine
12833
Index: gcc/testsuite/gfortran.dg/derived_external_function_1.f90
12834
===================================================================
12835
--- a/src/gcc/testsuite/gfortran.dg/derived_external_function_1.f90 (.../tags/gcc_4_8_2_release)
12836
+++ b/src/gcc/testsuite/gfortran.dg/derived_external_function_1.f90 (.../branches/gcc-4_8-branch)
12840
+! PR fortran/58771
12842
+! Contributed by Vittorio Secca <zeccav@gmail.com>
12844
+! ICEd on the write statement with f() because the derived type backend
12845
+! declaration not built.
12853
+type(t) function f() result(ff)
12859
+ character (20) :: line1, line2
12861
+ write (line1, *) f()
12862
+ write (line2, *) 42_4
12863
+ if (line1 .ne. line2) call abort
12865
Index: gcc/testsuite/gfortran.dg/null_6.f90
12866
===================================================================
12867
--- a/src/gcc/testsuite/gfortran.dg/null_6.f90 (.../tags/gcc_4_8_2_release)
12868
+++ b/src/gcc/testsuite/gfortran.dg/null_6.f90 (.../branches/gcc-4_8-branch)
12871
subroutine test_PR34547_3 ()
12872
integer, allocatable :: i(:)
12874
+ print *, NULL(i) ! { dg-error "Invalid context for NULL" }
12875
end subroutine test_PR34547_3
12876
Index: gcc/testsuite/gfortran.dg/constructor_9.f90
12877
===================================================================
12878
--- a/src/gcc/testsuite/gfortran.dg/constructor_9.f90 (.../tags/gcc_4_8_2_release)
12879
+++ b/src/gcc/testsuite/gfortran.dg/constructor_9.f90 (.../branches/gcc-4_8-branch)
12881
+! { dg-do compile }
12882
+! { dg-options "-Wall" }
12884
+! PR 58471: [4.8/4.9 Regression] ICE on invalid with missing type constructor and -Wall
12886
+! Contributed by Andrew Benson <abensonca@gmail.com>
12893
+ module procedure mdedc ! { dg-error "is neither function nor subroutine" }
12897
+ type(cfmde), pointer :: cfd
12898
+ cfd=cfmde() ! { dg-error "Can't convert" }
12902
+! { dg-final { cleanup-modules "cf" } }
12903
Index: gcc/testsuite/gfortran.dg/round_3.f08
12904
===================================================================
12905
--- a/src/gcc/testsuite/gfortran.dg/round_3.f08 (.../tags/gcc_4_8_2_release)
12906
+++ b/src/gcc/testsuite/gfortran.dg/round_3.f08 (.../branches/gcc-4_8-branch)
12907
@@ -16,19 +16,44 @@
12908
call checkfmt("(RU,1P,G6.0E2)", 2.0, "2.E+00")
12909
call checkfmt("(RU,1P,G10.4E2)", 2.3456e5, "2.3456E+05")
12911
- call checkfmt("(RU,F2.0)", 0.09, "1.") ! 0.
12912
+ call checkfmt("(RC,G10.2)", 99.5, " 0.10E+03") ! pr59774
12913
+ call checkfmt("(RC,G10.2)", 995., " 0.10E+04") ! pr59774
12914
+ call checkfmt("(RC,G10.3)", 999.5, " 0.100E+04") ! pr59774
12915
+ call checkfmt("(RC,G10.3)", 9995., " 0.100E+05") ! pr59774
12916
+ call checkfmt("(RU,G10.2)", .099, " 0.10 ") ! pr59774
12917
+ call checkfmt("(RC,G10.1)", .095, " 0.1 ") ! pr59774
12918
+ call checkfmt("(RU,G10.3)", .0999, " 0.100 ") ! pr59774
12919
+ call checkfmt("(RC,G10.2)", .0995, " 0.10 ") ! pr59774
12921
+ call checkfmt("(RU,G9.3)", 891.1, " 892.") ! pr59836
12922
+ call checkfmt("(RD,G9.3)", -891.1, "-892.") ! pr59836
12924
+ call checkfmt("(RU,F6.4)", 0.00006, "0.0001")! 0.
12925
+ call checkfmt("(RU,F5.3)", 0.0007, "0.001") ! 0.
12926
+ call checkfmt("(RU,F4.2)", 0.008, "0.01") ! 0.
12927
+ call checkfmt("(RU,F3.1)", 0.09, "0.1") ! 0.
12929
+ call checkfmt("(RU,F2.0)", 0.09, "1.") ! 0.
12930
call checkfmt("(RD,F3.0)", -0.09, "-1.") ! -0.
12931
- call checkfmt("(RU,F2.0)", 2.0, "2.") ! 3.
12932
- call checkfmt("(RD,F3.0)", -2.0, "-2.") ! -3.
12933
- call checkfmt("(RU,F6.4)", 2.0, "2.0000") ! 2.0001
12934
- call checkfmt("(RD,F7.4)", -2.0, "-2.0000") ! -2.0001
12935
- call checkfmt("(RU,1P,E6.0E2)", 2.0, "2.E+00") ! 3.E+00
12936
+ call checkfmt("(RU,F2.0)", 0.9, "1.") ! pr59836
12937
+ call checkfmt("(RC,F2.0)", 0.4, "0.") ! pr59836
12938
+ call checkfmt("(RC,F2.0)", 0.5, "1.") ! pr59836
12939
+ call checkfmt("(RC,F2.0)", 0.6, "1.") ! pr59836
12940
+ call checkfmt("(RD,F3.0)", -0.9, "-1.") ! pr59836
12941
+ call checkfmt("(RC,F3.0)", -0.4, "-0.") ! pr59836
12942
+ call checkfmt("(RC,F3.0)", -0.5, "-1.") ! pr59836
12943
+ call checkfmt("(RC,F3.0)", -0.6, "-1.") ! pr59836
12944
+ call checkfmt("(RU,F2.0)", 2.0, "2.") ! 3.
12945
+ call checkfmt("(RD,F3.0)", -2.0, "-2.") ! -3.
12946
+ call checkfmt("(RU,F6.4)", 2.0, "2.0000") ! 2.0001
12947
+ call checkfmt("(RD,F7.4)", -2.0, "-2.0000") ! -2.0001
12948
+ call checkfmt("(RU,1P,E6.0E2)", 2.0, "2.E+00") ! 3.E+00
12949
call checkfmt("(RD,1P,E7.0E2)", -2.0, "-2.E+00") ! -3.E+00
12950
- call checkfmt("(RU,1P,E7.1E2)", 2.5, "2.5E+00") ! 2.6E+00
12951
+ call checkfmt("(RU,1P,E7.1E2)", 2.5, "2.5E+00") ! 2.6E+00
12952
call checkfmt("(RD,1P,E8.1E2)", -2.5, "-2.5E+00") ! -2.6E+00
12953
call checkfmt("(RU,1P,E10.4E2)", 2.5, "2.5000E+00") ! 2.5001E+00
12954
call checkfmt("(RD,1P,E11.4E2)", -2.5, "-2.5000E+00") ! -2.5001E+00
12955
- call checkfmt("(RU,1P,G6.0E2)", 2.0, "2.E+00") ! 3.E+00
12956
+ call checkfmt("(RU,1P,G6.0E2)", 2.0, "2.E+00") ! 3.E+00
12957
call checkfmt("(RD,1P,G7.0E2)", -2.0, "-2.E+00") ! -3.E+00
12958
call checkfmt("(RU,1P,G10.4E2)", 2.3456e5, "2.3456E+05") ! 2.3457E+05
12959
call checkfmt("(RD,1P,G11.4E2)", -2.3456e5, "-2.3456E+05") ! -2.3457E+05
12960
Index: gcc/testsuite/gfortran.dg/default_initialization_7.f90
12961
===================================================================
12962
--- a/src/gcc/testsuite/gfortran.dg/default_initialization_7.f90 (.../tags/gcc_4_8_2_release)
12963
+++ b/src/gcc/testsuite/gfortran.dg/default_initialization_7.f90 (.../branches/gcc-4_8-branch)
12965
+! { dg-do compile }
12967
+! PR fortran/57033
12968
+! ICE on a structure constructor of an extended derived type whose parent
12969
+! type last component has a default initializer
12971
+! Contributed by Tilo Schwarz <tilo@tilo-schwarz.de>
12977
+ logical :: f = .false.
12980
+type, extends(m) :: me
12987
Index: gcc/testsuite/gfortran.dg/proc_ptr_46.f90
12988
===================================================================
12989
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_46.f90 (.../tags/gcc_4_8_2_release)
12990
+++ b/src/gcc/testsuite/gfortran.dg/proc_ptr_46.f90 (.../branches/gcc-4_8-branch)
12992
+! { dg-do compile }
12994
+! PR fortran/49397
12996
+! Invalid per IR F08/0060 and F2008Corr2, C729
12999
+! Print *,f() ! << Valid when uncommented
13002
+ Procedure(Real),Pointer :: p
13003
+ 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" }
13006
Index: gcc/testsuite/gfortran.dg/pr52370.f90
13007
===================================================================
13008
--- a/src/gcc/testsuite/gfortran.dg/pr52370.f90 (.../tags/gcc_4_8_2_release)
13009
+++ b/src/gcc/testsuite/gfortran.dg/pr52370.f90 (.../branches/gcc-4_8-branch)
13011
+! PR fortran/52370
13012
+! { dg-do compile }
13013
+! { dg-options "-O1 -Wall" }
13017
+ subroutine foo(a,b)
13018
+ real, intent(out) :: a
13019
+ real, dimension(:), optional, intent(out) :: b
13021
+ if (present(b)) then
13024
+ end subroutine foo
13025
+end module pr52370
13031
+end program prg52370
13032
Index: gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90
13033
===================================================================
13034
--- a/src/gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90 (.../tags/gcc_4_8_2_release)
13035
+++ b/src/gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90 (.../branches/gcc-4_8-branch)
13037
+! { dg-do compile }
13038
+! { dg-options "-ffrontend-optimize" }
13040
+! PR fortran/60341
13041
+! An unguarded union access was wrongly enabling a frontend optimization on a
13042
+! string comparison, leading to an ICE.
13044
+! Original testcase from Steve Chapel <steve.chapel@a2pg.com>.
13045
+! Reduced by Steven G. Kargl <kargl@gcc.gnu.org>.
13048
+ subroutine modelg(ncm)
13050
+ integer, parameter :: pc = 30, pm = pc - 1
13052
+ character*4 catt(pm,2)
13053
+ integer ncm,iatt(pm,pc)
13055
+ if (catt(i,1)//catt(i,2).eq.'central') exit
13059
Index: gcc/testsuite/gfortran.dg/generic_28.f90
13060
===================================================================
13061
--- a/src/gcc/testsuite/gfortran.dg/generic_28.f90 (.../tags/gcc_4_8_2_release)
13062
+++ b/src/gcc/testsuite/gfortran.dg/generic_28.f90 (.../branches/gcc-4_8-branch)
13064
+! { dg-do compile }
13066
+! PR 58998: [4.8/4.9 Regression] Generic interface problem with gfortran
13068
+! Contributed by Paul van Delst
13071
+ procedure iargc_8
13076
+ integer(8) function iargc_8()
13078
+ iargc_8 = iargc()
13082
Index: gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90
13083
===================================================================
13084
--- a/src/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90 (.../tags/gcc_4_8_2_release)
13085
+++ b/src/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90 (.../branches/gcc-4_8-branch)
13087
+! { dg-do compile }
13089
+! PR fortran/58007
13090
+! Unresolved fixup while loading a module.
13092
+! This tests that the specification expression A%MAX_DEGREE in module BSR is
13093
+! correctly loaded and resolved in program MAIN.
13095
+! Original testcase from Daniel Shapiro <shapero@uw.edu>
13096
+! Reduced by Tobias Burnus <burnus@net-b.de> and Janus Weil <janus@gcc.gnu.org>
13099
+ type :: sparse_matrix
13100
+ integer :: max_degree
13103
+ subroutine init_interface (A)
13104
+ class(sparse_matrix), intent(in) :: A
13106
+ real function get_value_interface()
13116
+ type, extends(sparse_matrix) :: bsr_matrix
13118
+ procedure :: get_neighbors
13121
+ function get_neighbors (A)
13122
+ class(bsr_matrix), intent(in) :: A
13123
+ integer :: get_neighbors(A%max_degree)
13131
Index: gcc/testsuite/gfortran.dg/null_5.f90
13132
===================================================================
13133
--- a/src/gcc/testsuite/gfortran.dg/null_5.f90 (.../tags/gcc_4_8_2_release)
13134
+++ b/src/gcc/testsuite/gfortran.dg/null_5.f90 (.../branches/gcc-4_8-branch)
13136
end subroutine test_PR34547_1
13138
subroutine test_PR34547_2 ()
13139
- print *, null () ! { dg-error "in data transfer statement requires MOLD" }
13140
+ print *, null () ! { dg-error "Invalid context" }
13141
end subroutine test_PR34547_2
13143
subroutine test_PR34547_3 ()
13144
Index: gcc/testsuite/gfortran.dg/proc_ptr_43.f90
13145
===================================================================
13146
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_43.f90 (.../tags/gcc_4_8_2_release)
13147
+++ b/src/gcc/testsuite/gfortran.dg/proc_ptr_43.f90 (.../branches/gcc-4_8-branch)
13149
+! { dg-do compile }
13151
+! PR 58099: [4.8/4.9 Regression] [F03] over-zealous procedure-pointer error checking
13153
+! Contributed by Daniel Price <daniel.price@monash.edu>
13156
+ procedure(real), pointer :: wfunc
13162
+ pure real function w_cubic(q2)
13163
+ real, intent(in) :: q2
13168
Index: gcc/testsuite/gfortran.dg/typebound_generic_15.f90
13169
===================================================================
13170
--- a/src/gcc/testsuite/gfortran.dg/typebound_generic_15.f90 (.../tags/gcc_4_8_2_release)
13171
+++ b/src/gcc/testsuite/gfortran.dg/typebound_generic_15.f90 (.../branches/gcc-4_8-branch)
13173
+! { dg-do compile }
13175
+! PR 60231: [4.8/4.9 Regression] ICE on undefined generic
13177
+! Contributed by Antony Lewis <antony@cosmologist.info>
13183
+ procedure :: Add1 ! { dg-error "must be a module procedure" }
13184
+ procedure :: Add2 ! { dg-error "must be a module procedure" }
13185
+ generic :: Add => Add1, Add2 ! { dg-error "are ambiguous" }
13190
+! { dg-final { cleanup-modules "Objects" } }
13191
Index: gcc/testsuite/gfortran.dg/extends_15.f90
13192
===================================================================
13193
--- a/src/gcc/testsuite/gfortran.dg/extends_15.f90 (.../tags/gcc_4_8_2_release)
13194
+++ b/src/gcc/testsuite/gfortran.dg/extends_15.f90 (.../branches/gcc-4_8-branch)
13196
+! { dg-do compile }
13198
+! PR 58355: [4.7/4.8/4.9 Regression] [F03] ICE with TYPE, EXTENDS before parent TYPE defined
13200
+! Contributed by Andrew Benson <abensonca@gmail.com>
13205
+ type, extends(t1) :: t2 ! { dg-error "has not been previously defined" }
13211
+! { dg-final { cleanup-modules "ct" } }
13212
Index: gcc/testsuite/gfortran.dg/optional_class_1.f90
13213
===================================================================
13214
--- a/src/gcc/testsuite/gfortran.dg/optional_class_1.f90 (.../tags/gcc_4_8_2_release)
13215
+++ b/src/gcc/testsuite/gfortran.dg/optional_class_1.f90 (.../branches/gcc-4_8-branch)
13219
+! PR fortran/57445
13221
+! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
13223
+! Spurious assert was added at revision 192495
13231
+ subroutine opt(xa, xc, xaa, xca)
13232
+ type(t), allocatable, intent(out), optional :: xa
13233
+ class(t), allocatable, intent(out), optional :: xc
13234
+ type(t), allocatable, intent(out), optional :: xaa(:)
13235
+ class(t), allocatable, intent(out), optional :: xca(:)
13236
+ if (present (xca)) call foo_opt(xca=xca)
13237
+ end subroutine opt
13238
+ subroutine foo_opt(xa, xc, xaa, xca)
13239
+ type(t), allocatable, intent(out), optional :: xa
13240
+ class(t), allocatable, intent(out), optional :: xc
13241
+ type(t), allocatable, intent(out), optional :: xaa(:)
13242
+ class(t), allocatable, intent(out), optional :: xca(:)
13243
+ if (present (xca)) then
13244
+ if (allocated (xca)) deallocate (xca)
13245
+ allocate (xca(3), source = [t(9),t(99),t(999)])
13247
+ end subroutine foo_opt
13250
+ class(t), allocatable :: xca(:)
13251
+ allocate (xca(1), source = t(42))
13252
+ select type (xca)
13254
+ if (any (xca%i .ne. [42])) call abort
13256
+ call opt (xca = xca)
13257
+ select type (xca)
13259
+ if (any (xca%i .ne. [9,99,999])) call abort
13262
Index: gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90
13263
===================================================================
13264
--- a/src/gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90 (.../tags/gcc_4_8_2_release)
13265
+++ b/src/gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90 (.../branches/gcc-4_8-branch)
13269
+! PR 59654: [4.8/4.9 Regression] [OOP] Broken function table with complex OO use case
13271
+! Contributed by Thomas Clune <Thomas.L.Clune@nasa.gov>
13273
+module TestResult_mod
13277
+ integer :: numRun = 0
13280
+ procedure, nopass :: getNumRun
13285
+ subroutine run (this)
13286
+ class (TestResult) :: this
13287
+ this%numRun = this%numRun + 1
13290
+ subroutine getNumRun()
13296
+module BaseTestRunner_mod
13299
+ type :: BaseTestRunner
13301
+ procedure, nopass :: norun
13306
+ function norun () result(result)
13307
+ use TestResult_mod, only: TestResult
13308
+ type (TestResult) :: result
13314
+module TestRunner_mod
13315
+ use BaseTestRunner_mod, only: BaseTestRunner
13321
+ use TestRunner_mod, only: BaseTestRunner
13322
+ use TestResult_mod, only: TestResult
13325
+ type (TestResult) :: result
13327
+ call runtest (result)
13331
+ subroutine runtest (result)
13332
+ use TestResult_mod, only: TestResult
13333
+ class (TestResult) :: result
13334
+ call result%run()
13335
+ if (result%numRun /= 1) call abort()
13340
+! { dg-final { cleanup-modules "TestResult_mod BaseTestRunner_mod TestRunner_mod" } }
13341
Index: gcc/testsuite/gfortran.dg/proc_ptr_45.f90
13342
===================================================================
13343
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_45.f90 (.../tags/gcc_4_8_2_release)
13344
+++ b/src/gcc/testsuite/gfortran.dg/proc_ptr_45.f90 (.../branches/gcc-4_8-branch)
13346
+! { dg-do compile }
13348
+! PR fortran/49397
13350
+! Valid per IR F08/0060 and F2008Corr2, C729
13356
+ Procedure(Real),Pointer :: p
13370
Index: gcc/testsuite/gfortran.dg/pr59700.f90
13371
===================================================================
13372
--- a/src/gcc/testsuite/gfortran.dg/pr59700.f90 (.../tags/gcc_4_8_2_release)
13373
+++ b/src/gcc/testsuite/gfortran.dg/pr59700.f90 (.../branches/gcc-4_8-branch)
13376
+! PR59700 Test case by Steve Kargl
13381
+ character(len=80) msg
13382
+ integer, parameter :: fd = 10
13383
+ integer i1, i2, i3, i4
13384
+ real x1, x2, x3, x4
13388
+ open(unit=fd, status='scratch')
13389
+ write(fd, '(A)') '1 2 3.4 q'
13393
+ read(fd, *, err=10, iomsg=msg) i1, i2, i3, i4
13394
+10 if (msg /= 'Bad integer for item 3 in list input') call abort
13397
+ read(fd, *, err=20, iomsg=msg) x1, x2, x3, x4
13398
+20 if (msg /= 'Bad real number in item 4 of list input') call abort
13401
+ read(fd, *, err=30, iomsg=msg) i1, x2, x1, a
13402
+30 if (msg /= 'Bad logical value while reading item 4') call abort
13404
+ read(fd, *, err=31, iomsg=msg) i1, x2, a, x1
13405
+31 if (msg /= 'Bad repeat count in item 3 of list input') call abort
13407
+ open(unit=fd, status='scratch')
13408
+ write(fd, '(A)') '(1, 2) (3.4, q)'
13411
+ read(fd, *, err=40, iomsg=msg) c1, c2
13412
+40 if (msg /= 'Bad floating point number for item 2') call abort
13415
Index: gcc/testsuite/gfortran.dg/ichar_3.f90
13416
===================================================================
13417
--- a/src/gcc/testsuite/gfortran.dg/ichar_3.f90 (.../tags/gcc_4_8_2_release)
13418
+++ b/src/gcc/testsuite/gfortran.dg/ichar_3.f90 (.../branches/gcc-4_8-branch)
13420
+! { dg-do compile }
13422
+! PR fortran/59599
13423
+! The call to ichar was triggering an ICE.
13425
+! Original testcase from Fran Martinez Fadrique <fmartinez@gmv.com>
13427
+character(1) cpk(2)
13430
+res = ichar( cpk, kind=1 )
13431
+print *, ichar( cpk, kind=1 )
13433
Index: gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90
13434
===================================================================
13435
--- a/src/gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90 (.../tags/gcc_4_8_2_release)
13436
+++ b/src/gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90 (.../branches/gcc-4_8-branch)
13438
+! { dg-do compile }
13440
+! PR 59493: [OOP] ICE: Segfault on Class(*) pointer association
13442
+! Contributed by Hossein Talebi <talebi.hossein@gmail.com>
13449
+ class(ty_mytype1), allocatable, target:: cla1
13450
+ class(*), pointer :: ptr
13455
Index: gcc/testsuite/gfortran.dg/fmt_g_1.f90
13456
===================================================================
13457
--- a/src/gcc/testsuite/gfortran.dg/fmt_g_1.f90 (.../tags/gcc_4_8_2_release)
13458
+++ b/src/gcc/testsuite/gfortran.dg/fmt_g_1.f90 (.../branches/gcc-4_8-branch)
13461
+! PR59771 Cleanup handling of Gw.0 and Gw.0Ee format
13462
+! Test case prepared by Dominique d'Humieres <dominiq@lps.ens.fr>
13464
+ character(len=60) :: buffer, buffer1
13466
+ write (buffer ,'(6(1X,1PG9.0e2))') 0.0, 0.04, 0.06, 0.4, 0.6, 243.0
13467
+ write (buffer1,'(6(1X,1PE9.0e2))') 0.0, 0.04, 0.06, 0.4, 0.6, 243.0
13469
+ if (buffer /= buffer1) call abort
13471
Index: gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90
13472
===================================================================
13473
--- a/src/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90 (.../tags/gcc_4_8_2_release)
13474
+++ b/src/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90 (.../branches/gcc-4_8-branch)
13478
+! PR fortran/59906
13480
+! Contributed by H Anlauf <anlauf@gmx.de>
13482
+! Failed generate character scalar for scalarized loop for elemantal call.
13489
+ subroutine y(str)
13490
+ character(len=*), intent(in) :: str
13491
+ character(len=len_trim(str)) :: str_aux
13492
+ character(len=3) :: str3 = 'abc'
13496
+ ! Compiled but did not give correct result
13497
+ if (any (str_cmp((/'aaa','bbb'/), str) .neqv. [.FALSE.,.TRUE.])) call abort
13499
+ ! Did not compile
13500
+ if (any (str_cmp((/'bbb', 'aaa'/), str_aux) .neqv. [.TRUE.,.FALSE.])) call abort
13503
+ if (any (str_cmp((/'bbb', 'aaa'/), str3) .neqv. [.FALSE.,.FALSE.])) call abort
13504
+ if (any (str_cmp((/'bbb', 'aaa'/), 'aaa') .neqv. [.FALSE.,.TRUE.])) call abort
13508
+ elemental logical function str_cmp(str1, str2)
13509
+ character(len=*), intent(in) :: str1
13510
+ character(len=*), intent(in) :: str2
13511
+ str_cmp = (str1 == str2)
13512
+ end function str_cmp
13515
Index: gcc/testsuite/gcc.c-torture/execute/20140212-1.c
13516
===================================================================
13517
--- a/src/gcc/testsuite/gcc.c-torture/execute/20140212-1.c (.../tags/gcc_4_8_2_release)
13518
+++ b/src/gcc/testsuite/gcc.c-torture/execute/20140212-1.c (.../branches/gcc-4_8-branch)
13520
+/* PR rtl-optimization/60116 */
13521
+/* Reported by Zhendong Su <su@cs.ucdavis.edu> */
13523
+extern void abort (void);
13525
+int a, b, c, d = 1, e, f = 1, h, i, k;
13539
+ l = ~g + (long long) e && 1;
13557
Index: gcc/testsuite/gcc.c-torture/execute/pr58984.c
13558
===================================================================
13559
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr58984.c (.../tags/gcc_4_8_2_release)
13560
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr58984.c (.../branches/gcc-4_8-branch)
13562
+/* PR tree-optimization/58984 */
13564
+struct S { int f0 : 8; int : 6; int f1 : 5; };
13565
+struct T { char f0; int : 6; int f1 : 5; };
13567
+int a, *c = &a, e, n, b, m;
13572
+ const unsigned short *f[36];
13573
+ for (; e < 2; e++)
13575
+ const unsigned short **i = &f[0];
13589
+ const unsigned short *f[36];
13590
+ for (; e < 2; e++)
13592
+ const unsigned short **i = &f[0];
13606
+ struct S o = { 1, 1 };
13610
+ __builtin_abort ();
13612
+ struct T p = { 1, 1 };
13616
+ __builtin_abort ();
13619
Index: gcc/testsuite/gcc.c-torture/execute/pr60017.c
13620
===================================================================
13621
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr60017.c (.../tags/gcc_4_8_2_release)
13622
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr60017.c (.../branches/gcc-4_8-branch)
13624
+/* PR target/60017 */
13626
+extern void abort (void);
13641
+struct S1 x = { 1, {{2, 3}, {4, 5}}, {{6, 7}, {8, 9}} };
13643
+struct S1 func (void)
13650
+ struct S1 ret = func ();
13652
+ if (ret.m2[1].m1 != 9)
13657
Index: gcc/testsuite/gcc.c-torture/execute/20131127-1.c
13658
===================================================================
13659
--- a/src/gcc/testsuite/gcc.c-torture/execute/20131127-1.c (.../tags/gcc_4_8_2_release)
13660
+++ b/src/gcc/testsuite/gcc.c-torture/execute/20131127-1.c (.../branches/gcc-4_8-branch)
13662
+/* PR middle-end/59138 */
13663
+/* Testcase by John Regehr <regehr@cs.utah.edu> */
13665
+extern void abort (void);
13678
+struct S0 b = { 1 }, c, d, e;
13680
+struct S0 fn1() { return c; }
13696
Index: gcc/testsuite/gcc.c-torture/execute/pr59358.c
13697
===================================================================
13698
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59358.c (.../tags/gcc_4_8_2_release)
13699
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59358.c (.../branches/gcc-4_8-branch)
13701
+/* PR tree-optimization/59358 */
13703
+__attribute__((noinline, noclone)) int
13704
+foo (int *x, int y)
13707
+ if (y > z && y <= 16)
13717
+ for (i = 1; i < 17; i++)
13719
+ int j = foo (&i, 16);
13721
+ if (i >= 8 && i <= 15)
13722
+ k = 16 + (i - 8) * 2;
13723
+ else if (i >= 4 && i <= 7)
13724
+ k = 16 + (i - 4) * 4;
13730
+ __builtin_abort ();
13735
+ k = 8 + (i - 4) * 2;
13741
+ __builtin_abort ();
13745
Index: gcc/testsuite/gcc.c-torture/execute/pr60062.c
13746
===================================================================
13747
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr60062.c (.../tags/gcc_4_8_2_release)
13748
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr60062.c (.../branches/gcc-4_8-branch)
13750
+/* PR target/60062 */
13755
+foo (const char *p1, int p2)
13757
+ if (__builtin_strcmp (p1, "hello") != 0)
13758
+ __builtin_abort ();
13762
+bar (const char *p1)
13764
+ if (__builtin_strcmp (p1, "hello") != 0)
13765
+ __builtin_abort ();
13768
+__attribute__((optimize (0))) int
13771
+ foo ("hello", a);
13775
Index: gcc/testsuite/gcc.c-torture/execute/pr59014-2.c
13776
===================================================================
13777
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c (.../tags/gcc_4_8_2_release)
13778
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c (.../branches/gcc-4_8-branch)
13780
+/* PR tree-optimization/59014 */
13782
+__attribute__((noinline, noclone)) long long int
13783
+foo (long long int x, long long int y)
13785
+ if (((int) x | (int) y) != 0)
13793
+ if (sizeof (long long) == sizeof (int))
13795
+ int shift_half = sizeof (int) * __CHAR_BIT__ / 2;
13796
+ long long int x = (3LL << shift_half) << shift_half;
13797
+ long long int y = (5LL << shift_half) << shift_half;
13798
+ long long int z = foo (x, y);
13799
+ if (z != ((8LL << shift_half) << shift_half))
13800
+ __builtin_abort ();
13803
Index: gcc/testsuite/gcc.c-torture/execute/pr59101.c
13804
===================================================================
13805
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59101.c (.../tags/gcc_4_8_2_release)
13806
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59101.c (.../branches/gcc-4_8-branch)
13808
+/* PR target/59101 */
13810
+__attribute__((noinline, noclone)) int
13813
+ return (~a & 4102790424LL) > 0 | 6;
13819
+ if (foo (0) != 7)
13820
+ __builtin_abort ();
13823
Index: gcc/testsuite/gcc.c-torture/execute/pr58831.c
13824
===================================================================
13825
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr58831.c (.../tags/gcc_4_8_2_release)
13826
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr58831.c (.../branches/gcc-4_8-branch)
13828
+#include <assert.h>
13830
+int a, *b, c, d, f, **i, p, q, *r;
13833
+static int __attribute__((noinline, noclone))
13834
+fn1 (int *p1, int **p2)
13846
+static int ** __attribute__((noinline, noclone))
13849
+ for (f = 0; f != 42; f++)
13851
+ int *g[3] = {0, 0, 0};
13852
+ for (o = 0; o; o--)
13855
+ int **h[1] = { &g[2] };
13868
Index: gcc/testsuite/gcc.c-torture/execute/pr58726.c
13869
===================================================================
13870
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr58726.c (.../tags/gcc_4_8_2_release)
13871
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr58726.c (.../branches/gcc-4_8-branch)
13873
+/* PR rtl-optimization/58726 */
13876
+union { int f1; int f2 : 1; } b;
13881
+ return p < 0 ? p : a;
13887
+ if (sizeof (short) * __CHAR_BIT__ != 16
13888
+ || sizeof (int) * __CHAR_BIT__ != 32)
13891
+ unsigned short d;
13893
+ d = e == 0 ? b.f1 : 0;
13895
+ if (c != (short) 56374)
13896
+ __builtin_abort ();
13899
Index: gcc/testsuite/gcc.c-torture/execute/pr59014.c
13900
===================================================================
13901
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59014.c (.../tags/gcc_4_8_2_release)
13902
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59014.c (.../branches/gcc-4_8-branch)
13904
+/* PR tree-optimization/59014 */
13906
+int a = 2, b, c, d;
13912
+ if ((b > 0) | (a & 1))
13926
+ __builtin_abort ();
13929
Index: gcc/testsuite/gcc.c-torture/execute/pr60072.c
13930
===================================================================
13931
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr60072.c (.../tags/gcc_4_8_2_release)
13932
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr60072.c (.../branches/gcc-4_8-branch)
13934
+/* PR target/60072 */
13938
+__attribute__ ((optimize (1)))
13939
+static int *foo (int *p)
13950
Index: gcc/testsuite/gcc.c-torture/execute/pr59388.c
13951
===================================================================
13952
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59388.c (.../tags/gcc_4_8_2_release)
13953
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59388.c (.../branches/gcc-4_8-branch)
13955
+/* PR tree-optimization/59388 */
13958
+struct S { unsigned int f:1; } b;
13963
+ a = (0 < b.f) | b.f;
13966
Index: gcc/testsuite/gcc.c-torture/compile/pr58970-1.c
13967
===================================================================
13968
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr58970-1.c (.../tags/gcc_4_8_2_release)
13969
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr58970-1.c (.../branches/gcc-4_8-branch)
13971
+/* PR middle-end/58970 */
13973
+struct T { int b : 1; };
13974
+struct S { struct T t[1]; };
13977
+foo (int x, struct S *s)
13982
Index: gcc/testsuite/gcc.c-torture/compile/pr59803.c
13983
===================================================================
13984
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr59803.c (.../tags/gcc_4_8_2_release)
13985
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr59803.c (.../branches/gcc-4_8-branch)
13987
+/* PR target/59803 */
13989
+extern void baz (void) __attribute__ ((__noreturn__));
13990
+struct A { int g, h; };
13991
+extern struct A a;
13992
+struct B { unsigned char i, j, k, l, m; };
14010
+ if (x->i != e) baz ();
14011
+ if (x->k != c) baz ();
14012
+ if (x->j != a.h) baz ();
14014
Index: gcc/testsuite/gcc.c-torture/compile/pr58997.c
14015
===================================================================
14016
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr58997.c (.../tags/gcc_4_8_2_release)
14017
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr58997.c (.../branches/gcc-4_8-branch)
14019
+/* PR rtl-optimization/58997 */
14030
+ d = a ? c : 1 % a;
14038
Index: gcc/testsuite/gcc.c-torture/compile/pr58970-2.c
14039
===================================================================
14040
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr58970-2.c (.../tags/gcc_4_8_2_release)
14041
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr58970-2.c (.../branches/gcc-4_8-branch)
14043
+/* PR middle-end/58970 */
14045
+struct T { char a : 8; char b : 1; };
14046
+struct S { char x; struct T t[1]; };
14049
+foo (int x, struct S *s)
14054
Index: gcc/testsuite/gcc.c-torture/compile/pr59362.c
14055
===================================================================
14056
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr59362.c (.../tags/gcc_4_8_2_release)
14057
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr59362.c (.../branches/gcc-4_8-branch)
14059
+/* PR tree-optimization/59362 */
14062
+foo (char *r, int s)
14064
+ r = __builtin___stpcpy_chk (r, "abc", __builtin_object_size (r, 1));
14066
+ r = __builtin___stpcpy_chk (r, "d", __builtin_object_size (r, 1));
14076
+ b = __builtin_object_size (0, 0);
14077
+ a = __builtin___stpcpy_chk (0, "", b);
14078
+ b = __builtin_object_size (a, 0);
14080
Index: gcc/testsuite/gnat.dg/opt32.adb
14081
===================================================================
14082
--- a/src/gcc/testsuite/gnat.dg/opt32.adb (.../tags/gcc_4_8_2_release)
14083
+++ b/src/gcc/testsuite/gnat.dg/opt32.adb (.../branches/gcc-4_8-branch)
14085
+-- { dg-do compile }
14086
+-- { dg-options "-O2" }
14088
+with Ada.Containers; use Ada.Containers;
14089
+with Ada.Containers.Vectors;
14091
+function Opt32 return Natural is
14093
+ package My_Vectors
14094
+ is new Vectors (Index_Type => Natural, Element_Type => Integer);
14099
+ function Sign_Changes return Natural is
14100
+ Cur : Cursor := To_Cursor (V, 0);
14101
+ R : Natural := 0;
14102
+ Negative : Boolean;
14104
+ Negative := Element (Cur) < 0;
14107
+ Cur := Next (Cur);
14108
+ exit when R > 100;
14110
+ if (Element (Cur) < 0) /= Negative then
14111
+ Negative := not Negative;
14120
+ return Sign_Changes;
14122
Index: gcc/testsuite/gcc.dg/pr58668.c
14123
===================================================================
14124
--- a/src/gcc/testsuite/gcc.dg/pr58668.c (.../tags/gcc_4_8_2_release)
14125
+++ b/src/gcc/testsuite/gcc.dg/pr58668.c (.../branches/gcc-4_8-branch)
14127
+/* PR rtl-optimization/58668 */
14128
+/* { dg-do compile } */
14129
+/* { dg-options "-O2" } */
14130
+/* { dg-additional-options "-mthumb" { target { { arm*-*-* } && arm_thumb2_ok } } } */
14132
+void *fn1 (void *);
14133
+void *fn2 (void *, const char *);
14134
+void fn3 (void *);
14135
+void fn4 (void *, int);
14141
+ if (!(a = fn1 (x)))
14142
+ return (void *) 0;
14143
+ if (!(b = fn2 (a, "w")))
14146
+ return (void *) 0;
14152
Index: gcc/testsuite/gcc.dg/pr57518.c
14153
===================================================================
14154
--- a/src/gcc/testsuite/gcc.dg/pr57518.c (.../tags/gcc_4_8_2_release)
14155
+++ b/src/gcc/testsuite/gcc.dg/pr57518.c (.../branches/gcc-4_8-branch)
14157
-/* PR rtl-optimization/57130 */
14158
+/* PR rtl-optimization/57518 */
14160
/* { dg-do compile } */
14161
/* { dg-options "-O2 -fdump-rtl-ira" } */
14162
-/* { dg-final { scan-rtl-dump-not "REG_EQUIV.*mem.*\"ip\"" "ira" } } */
14163
+/* { dg-final { scan-rtl-dump-not "REG_EQUIV\[^\n\]*mem\[^\n\]*\"ip\".*subreg" "ira" } } */
14167
Index: gcc/testsuite/gcc.dg/builtin-object-size-14.c
14168
===================================================================
14169
--- a/src/gcc/testsuite/gcc.dg/builtin-object-size-14.c (.../tags/gcc_4_8_2_release)
14170
+++ b/src/gcc/testsuite/gcc.dg/builtin-object-size-14.c (.../branches/gcc-4_8-branch)
14172
+/* { dg-do run } */
14173
+/* { dg-options "-O2" } */
14175
+extern void abort (void);
14176
+extern char *strncpy(char *, const char *, __SIZE_TYPE__);
14183
+ char all[8+16+4];
14186
+void __attribute__((noinline,noclone))
14190
+ __builtin_strncpy(vi, u->vi, sizeof(u->vi));
14191
+ if (__builtin_object_size (u->all, 1) != -1)
14200
Index: gcc/testsuite/gcc.dg/gomp/pr58809.c
14201
===================================================================
14202
--- a/src/gcc/testsuite/gcc.dg/gomp/pr58809.c (.../tags/gcc_4_8_2_release)
14203
+++ b/src/gcc/testsuite/gcc.dg/gomp/pr58809.c (.../branches/gcc-4_8-branch)
14205
+/* PR middle-end/58809 */
14206
+/* { dg-do compile } */
14207
+/* { dg-options "-fopenmp -O" } */
14210
+#pragma omp threadprivate (i)
14215
+#pragma omp parallel copyin (i) reduction (&&:j)
14218
Index: gcc/testsuite/gcc.dg/20050922-1.c
14219
===================================================================
14220
--- a/src/gcc/testsuite/gcc.dg/20050922-1.c (.../tags/gcc_4_8_2_release)
14221
+++ b/src/gcc/testsuite/gcc.dg/20050922-1.c (.../branches/gcc-4_8-branch)
14223
/* { dg-do run } */
14224
/* { dg-options "-O1 -std=c99" } */
14226
-#include <stdlib.h>
14227
+extern void abort (void);
14229
#if __INT_MAX__ == 2147483647
14230
typedef unsigned int uint32_t;
14231
Index: gcc/testsuite/gcc.dg/pr46309.c
14232
===================================================================
14233
--- a/src/gcc/testsuite/gcc.dg/pr46309.c (.../tags/gcc_4_8_2_release)
14234
+++ b/src/gcc/testsuite/gcc.dg/pr46309.c (.../branches/gcc-4_8-branch)
14236
/* PR tree-optimization/46309 */
14237
-/* { dg-do compile } */
14238
+/* { dg-do compile { target { ! { cris*-*-* } } } } */
14239
/* { dg-options "-O2 -fdump-tree-reassoc-details" } */
14240
/* The transformation depends on BRANCH_COST being greater than 1
14241
(see the notes in the PR), so try to force that. */
14242
Index: gcc/testsuite/gcc.dg/atomic-store-6.c
14243
===================================================================
14244
--- a/src/gcc/testsuite/gcc.dg/atomic-store-6.c (.../tags/gcc_4_8_2_release)
14245
+++ b/src/gcc/testsuite/gcc.dg/atomic-store-6.c (.../branches/gcc-4_8-branch)
14247
+/* { dg-do run } */
14248
+/* { dg-require-effective-target sync_int_128_runtime } */
14249
+/* { dg-options "-mcx16" { target { i?86-*-* x86_64-*-* } } } */
14255
+ __atomic_store_16(&i, -1, 0);
14257
+ __builtin_abort();
14260
Index: gcc/testsuite/gcc.dg/guality/pr59776.c
14261
===================================================================
14262
--- a/src/gcc/testsuite/gcc.dg/guality/pr59776.c (.../tags/gcc_4_8_2_release)
14263
+++ b/src/gcc/testsuite/gcc.dg/guality/pr59776.c (.../branches/gcc-4_8-branch)
14265
+/* PR debug/59776 */
14266
+/* { dg-do run } */
14267
+/* { dg-options "-g" } */
14269
+#include "../nop.h"
14271
+struct S { float f, g; };
14273
+__attribute__((noinline, noclone)) void
14276
+ struct S s1, s2; /* { dg-final { gdb-test pr59776.c:17 "s1.f" "5.0" } } */
14277
+ s1 = *p; /* { dg-final { gdb-test pr59776.c:17 "s1.g" "6.0" } } */
14278
+ s2 = s1; /* { dg-final { gdb-test pr59776.c:17 "s2.f" "0.0" } } */
14279
+ *(int *) &s2.f = 0; /* { dg-final { gdb-test pr59776.c:17 "s2.g" "6.0" } } */
14280
+ asm volatile (NOP : : : "memory"); /* { dg-final { gdb-test pr59776.c:20 "s1.f" "5.0" } } */
14281
+ asm volatile (NOP : : : "memory"); /* { dg-final { gdb-test pr59776.c:20 "s1.g" "6.0" } } */
14282
+ s2 = s1; /* { dg-final { gdb-test pr59776.c:20 "s2.f" "5.0" } } */
14283
+ asm volatile (NOP : : : "memory"); /* { dg-final { gdb-test pr59776.c:20 "s2.g" "6.0" } } */
14284
+ asm volatile (NOP : : : "memory");
14290
+ struct S x = { 5.0f, 6.0f };
14294
Index: gcc/testsuite/gcc.dg/pr59827.c
14295
===================================================================
14296
--- a/src/gcc/testsuite/gcc.dg/pr59827.c (.../tags/gcc_4_8_2_release)
14297
+++ b/src/gcc/testsuite/gcc.dg/pr59827.c (.../branches/gcc-4_8-branch)
14299
+/* PR middle-end/59827 */
14300
+/* { dg-do compile } */
14303
+foo (int p[2][]) /* { dg-error "array type has incomplete element type" } */
14312
+ foo (p); /* { dg-error "type of formal parameter 1 is incomplete" } */
14314
Index: gcc/testsuite/gcc.dg/strlenopt-4gf.c
14315
===================================================================
14316
--- a/src/gcc/testsuite/gcc.dg/strlenopt-4gf.c (.../tags/gcc_4_8_2_release)
14317
+++ b/src/gcc/testsuite/gcc.dg/strlenopt-4gf.c (.../branches/gcc-4_8-branch)
14319
#include "strlenopt-4.c"
14321
/* { dg-final { scan-tree-dump-times "strlen \\(" 1 "strlen" } } */
14322
-/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 4 "strlen" } } */
14323
-/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 1 "strlen" } } */
14324
+/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 0 "strlen" } } */
14325
+/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 0 "strlen" } } */
14326
/* { dg-final { scan-tree-dump-times "__strcat_chk \\(" 0 "strlen" } } */
14327
/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
14328
-/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 5 "strlen" } } */
14329
-/* { dg-final { scan-tree-dump-times "memcpy \\(" 0 "strlen" } } */
14330
-/* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
14331
+/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 0 "strlen" } } */
14332
+/* { dg-final { scan-tree-dump-times "memcpy \\(" 4 "strlen" } } */
14333
+/* { dg-final { scan-tree-dump-times "strcpy \\(" 1 "strlen" } } */
14334
/* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
14335
-/* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
14336
+/* { dg-final { scan-tree-dump-times "stpcpy \\(" 5 "strlen" } } */
14337
/* { dg-final { cleanup-tree-dump "strlen" } } */
14338
Index: gcc/testsuite/gcc.dg/pr59351.c
14339
===================================================================
14340
--- a/src/gcc/testsuite/gcc.dg/pr59351.c (.../tags/gcc_4_8_2_release)
14341
+++ b/src/gcc/testsuite/gcc.dg/pr59351.c (.../branches/gcc-4_8-branch)
14343
+/* { dg-do compile } */
14344
+/* { dg-options "-std=c99 -Wpedantic" } */
14349
+ return sizeof ((int[]) {}); /* { dg-warning "ISO C forbids empty initializer braces" } */
14351
Index: gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c
14352
===================================================================
14353
--- a/src/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c (.../tags/gcc_4_8_2_release)
14354
+++ b/src/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c (.../branches/gcc-4_8-branch)
14356
/* { dg-do compile } */
14357
/* { dg-options "-O2 -Wall" } */
14358
/* { dg-options "-O2 -Wall -mabi=altivec" { target { { powerpc*-*-linux* } && ilp32 } } } */
14359
+/* { dg-options "-O2 -Wall -msse2" { target { i?86-*-* x86_64-*-* } } } */
14361
typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
14363
Index: gcc/testsuite/gcc.dg/builtin-object-size-8.c
14364
===================================================================
14365
--- a/src/gcc/testsuite/gcc.dg/builtin-object-size-8.c (.../tags/gcc_4_8_2_release)
14366
+++ b/src/gcc/testsuite/gcc.dg/builtin-object-size-8.c (.../branches/gcc-4_8-branch)
14368
-/* { dg-do run { xfail *-*-* } } */
14369
+/* { dg-do run } */
14370
/* { dg-options "-O2" } */
14372
typedef __SIZE_TYPE__ size_t;
14373
Index: gcc/testsuite/gcc.dg/20050922-2.c
14374
===================================================================
14375
--- a/src/gcc/testsuite/gcc.dg/20050922-2.c (.../tags/gcc_4_8_2_release)
14376
+++ b/src/gcc/testsuite/gcc.dg/20050922-2.c (.../branches/gcc-4_8-branch)
14378
/* { dg-do run } */
14379
/* { dg-options "-O1 -std=c99" } */
14381
-#include <stdlib.h>
14382
+extern void abort (void);
14383
+extern void exit (int);
14385
#if __INT_MAX__ == 2147483647
14386
typedef unsigned int uint32_t;
14387
Index: gcc/testsuite/gcc.dg/pr59860.c
14388
===================================================================
14389
--- a/src/gcc/testsuite/gcc.dg/pr59860.c (.../tags/gcc_4_8_2_release)
14390
+++ b/src/gcc/testsuite/gcc.dg/pr59860.c (.../branches/gcc-4_8-branch)
14392
+/* { dg-do compile } */
14393
+/* { dg-options "-O" } */
14395
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * __attribute__ ((__nothrow__ , __leaf__))
14396
+strcat (char *__restrict __dest, const char *__restrict __src)
14398
+ return __builtin___strcat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
14400
+static char raw_decode;
14401
+void foo (char **argv, char *outfilename)
14403
+ if (**argv == 'r')
14405
+ strcat (outfilename, raw_decode ? ".raw" : ".wav");
14407
Index: gcc/testsuite/gcc.dg/pr59011.c
14408
===================================================================
14409
--- a/src/gcc/testsuite/gcc.dg/pr59011.c (.../tags/gcc_4_8_2_release)
14410
+++ b/src/gcc/testsuite/gcc.dg/pr59011.c (.../branches/gcc-4_8-branch)
14412
+/* PR middle-end/59011 */
14413
+/* { dg-do compile } */
14414
+/* { dg-options "-std=gnu99" } */
14434
Index: gcc/testsuite/gcc.dg/pr58805.c
14435
===================================================================
14436
--- a/src/gcc/testsuite/gcc.dg/pr58805.c (.../tags/gcc_4_8_2_release)
14437
+++ b/src/gcc/testsuite/gcc.dg/pr58805.c (.../branches/gcc-4_8-branch)
14439
+/* { dg-do compile } */
14440
+/* { dg-options "-O2 -ftree-tail-merge -fdump-tree-pre" } */
14442
+/* Type that matches the 'p' constraint. */
14443
+#define TYPE void *
14446
+void bar (TYPE *r)
14449
+ __asm__ ("" : "=&p" (t), "=p" (*r));
14453
+foo (int n, TYPE *x, TYPE *y)
14461
+/* { dg-final { scan-tree-dump-times "__asm__" 2 "pre"} } */
14462
+/* { dg-final { cleanup-tree-dump "pre" } } */
14463
Index: gcc/testsuite/gcc.dg/strlenopt-14gf.c
14464
===================================================================
14465
--- a/src/gcc/testsuite/gcc.dg/strlenopt-14gf.c (.../tags/gcc_4_8_2_release)
14466
+++ b/src/gcc/testsuite/gcc.dg/strlenopt-14gf.c (.../branches/gcc-4_8-branch)
14467
@@ -11,14 +11,14 @@
14469
/* { dg-final { scan-tree-dump-times "strlen \\(" 4 "strlen" } } */
14470
/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 0 "strlen" } } */
14471
-/* { dg-final { scan-tree-dump-times "__mempcpy_chk \\(" 2 "strlen" } } */
14472
+/* { dg-final { scan-tree-dump-times "__mempcpy_chk \\(" 0 "strlen" } } */
14473
/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 0 "strlen" } } */
14474
/* { dg-final { scan-tree-dump-times "__strcat_chk \\(" 0 "strlen" } } */
14475
/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
14476
-/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 3 "strlen" } } */
14477
-/* { dg-final { scan-tree-dump-times "memcpy \\(" 0 "strlen" } } */
14478
-/* { dg-final { scan-tree-dump-times "mempcpy \\(" 0 "strlen" } } */
14479
+/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 0 "strlen" } } */
14480
+/* { dg-final { scan-tree-dump-times "memcpy \\(" 1 "strlen" } } */
14481
+/* { dg-final { scan-tree-dump-times "mempcpy \\(" 2 "strlen" } } */
14482
/* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
14483
/* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
14484
-/* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
14485
+/* { dg-final { scan-tree-dump-times "stpcpy \\(" 2 "strlen" } } */
14486
/* { dg-final { cleanup-tree-dump "strlen" } } */
14487
Index: gcc/testsuite/gcc.dg/torture/pr59047.c
14488
===================================================================
14489
--- a/src/gcc/testsuite/gcc.dg/torture/pr59047.c (.../tags/gcc_4_8_2_release)
14490
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59047.c (.../branches/gcc-4_8-branch)
14492
+/* { dg-do run } */
14494
+extern void abort (void);
14503
+int b, c, *d, e, f;
14508
+ for (; b < 1; ++b)
14510
+ for (e = 0; e < 1; e = 1)
14531
Index: gcc/testsuite/gcc.dg/torture/pr58956.c
14532
===================================================================
14533
--- a/src/gcc/testsuite/gcc.dg/torture/pr58956.c (.../tags/gcc_4_8_2_release)
14534
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58956.c (.../branches/gcc-4_8-branch)
14536
+/* { dg-do run } */
14538
+extern void abort (void);
14543
+} a = {1}, b, g, *c = &b, **f = &c;
14545
+int *d, **e = &d, h;
14552
+ __builtin_unreachable ();
14566
Index: gcc/testsuite/gcc.dg/torture/pr60183.c
14567
===================================================================
14568
--- a/src/gcc/testsuite/gcc.dg/torture/pr60183.c (.../tags/gcc_4_8_2_release)
14569
+++ b/src/gcc/testsuite/gcc.dg/torture/pr60183.c (.../branches/gcc-4_8-branch)
14571
+/* { dg-do run } */
14573
+/* Large so an out-of-bound read will crash. */
14574
+unsigned char c[0x30001] = { 1 };
14578
+foo (unsigned long *x, unsigned char *y)
14581
+ unsigned long w = x[0];
14582
+ for (i = 0; i < j; i++)
14592
+__attribute__ ((noinline, noclone)) void
14593
+bar (unsigned long *x)
14601
+ unsigned long a[2] = { 0, -1UL };
14602
+ asm volatile (""::"r" (c):"memory");
14606
+ __builtin_abort ();
14609
Index: gcc/testsuite/gcc.dg/torture/pr57517.c
14610
===================================================================
14611
--- a/src/gcc/testsuite/gcc.dg/torture/pr57517.c (.../tags/gcc_4_8_2_release)
14612
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57517.c (.../branches/gcc-4_8-branch)
14614
+/* { dg-do compile } */
14616
+int x[1024], y[1024], z[1024], w[1024];
14620
+ for (i = 1; i < 1024; ++i)
14627
+ z[i] = (a + b) + (c + d);
14630
Index: gcc/testsuite/gcc.dg/torture/pr59891.c
14631
===================================================================
14632
--- a/src/gcc/testsuite/gcc.dg/torture/pr59891.c (.../tags/gcc_4_8_2_release)
14633
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59891.c (.../branches/gcc-4_8-branch)
14642
+ return (0 ? a : 0) ? : 0 % 0; /* { dg-warning "division by zero" } */
14644
Index: gcc/testsuite/gcc.dg/torture/pr59164.c
14645
===================================================================
14646
--- a/src/gcc/testsuite/gcc.dg/torture/pr59164.c (.../tags/gcc_4_8_2_release)
14647
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59164.c (.../branches/gcc-4_8-branch)
14649
+/* { dg-do compile } */
14663
+ for (a=1; a <= 4; a++)
14665
+ f = fn1(0 < c[a][0]);
14670
Index: gcc/testsuite/gcc.dg/torture/pr58779.c
14671
===================================================================
14672
--- a/src/gcc/testsuite/gcc.dg/torture/pr58779.c (.../tags/gcc_4_8_2_release)
14673
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58779.c (.../branches/gcc-4_8-branch)
14675
+/* { dg-do run } */
14682
+ short d = (c <= 0) ^ e;
14683
+ if ((unsigned int) a - (a || d) <= (unsigned int) a)
14684
+ __builtin_abort ();
14687
Index: gcc/testsuite/gcc.dg/torture/pr59139.c
14688
===================================================================
14689
--- a/src/gcc/testsuite/gcc.dg/torture/pr59139.c (.../tags/gcc_4_8_2_release)
14690
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59139.c (.../branches/gcc-4_8-branch)
14692
+/* { dg-do compile } */
14694
+int a, b, c, d, e;
14695
+int fn1(p1, p2) { return p2 == 0 ? p1 : 1 % p2; }
14700
+ for (;; c = (unsigned short)c)
14705
+ e = fn1(2, c && 1);
14706
+ d = c == 0 ? e : c;
14712
Index: gcc/testsuite/gcc.dg/torture/pr58079.c
14713
===================================================================
14714
--- a/src/gcc/testsuite/gcc.dg/torture/pr58079.c (.../tags/gcc_4_8_2_release)
14715
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58079.c (.../branches/gcc-4_8-branch)
14717
+/* { dg-options "-mlong-calls" { target mips*-*-* } } */
14719
+typedef unsigned char u8;
14720
+typedef unsigned short u16;
14721
+typedef unsigned int __kernel_size_t;
14722
+typedef __kernel_size_t size_t;
14723
+struct list_head {
14724
+ struct list_head *next;
14727
+struct dmx_ts_feed {
14728
+ int is_filtering;
14730
+struct dmx_section_feed {
14736
+typedef int (*dmx_ts_cb) (
14737
+ const u8 * buffer1,
14738
+ size_t buffer1_length,
14739
+ const u8 * buffer2,
14740
+ size_t buffer2_length
14743
+struct dvb_demux_feed {
14745
+ struct dmx_ts_feed ts;
14746
+ struct dmx_section_feed sec;
14754
+ struct list_head list_head;
14757
+struct dvb_demux {
14758
+ int (*stop_feed)(struct dvb_demux_feed *feed);
14759
+ struct list_head feed_list;
14765
+__attribute__((always_inline))
14767
+payload(const u8 *tsp)
14769
+ if (tsp[3] & 0x20) {
14770
+ return 184 - 1 - tsp[4];
14777
+__attribute__((always_inline))
14779
+dvb_dmx_swfilter_payload(struct dvb_demux_feed *feed, const u8 *buf)
14781
+ int count = payload(buf);
14785
+ return feed->cb.ts(&buf[p], count, ((void *)0), 0);
14790
+__attribute__((always_inline))
14792
+dvb_dmx_swfilter_packet_type(struct dvb_demux_feed *feed, const u8 *buf)
14794
+ switch (feed->type) {
14796
+ if (feed->ts_type & 1) {
14797
+ dvb_dmx_swfilter_payload(feed, buf);
14799
+ if (dvb_dmx_swfilter_section_packet(feed, buf) < 0)
14800
+ feed->feed.sec.seclen = feed->feed.sec.secbufp = 0;
14806
+dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf)
14808
+ struct dvb_demux_feed *feed;
14809
+ int dvr_done = 0;
14811
+ 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) );})) {
14812
+ if (((((feed)->type == 0) && ((feed)->feed.ts.is_filtering) && (((feed)->ts_type & (1 | 8)) == 1))) && (dvr_done++))
14813
+ dvb_dmx_swfilter_packet_type(feed, buf);
14814
+ else if (feed->pid == 0x2000)
14815
+ feed->cb.ts(buf, 188, ((void *)0), 0);
14818
+void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, size_t count)
14820
+ while (count--) {
14821
+ dvb_dmx_swfilter_packet(demux, buf);
14824
Index: gcc/testsuite/gcc.dg/torture/pr58830.c
14825
===================================================================
14826
--- a/src/gcc/testsuite/gcc.dg/torture/pr58830.c (.../tags/gcc_4_8_2_release)
14827
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58830.c (.../branches/gcc-4_8-branch)
14829
+/* { dg-do run } */
14830
+/* { dg-additional-options "-ftree-pre -ftree-partial-pre" } */
14832
+extern void abort (void);
14834
+int b, c, d, f, g, h, i, j[6], *l = &b, *m, n, *o, r;
14846
+ h = c || (r = 0);
14848
+ for (f = 0; f < 2; f++)
14856
+ for (q = -8; q >= 5; q++)
14867
+ 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)
14871
Index: gcc/testsuite/gcc.dg/torture/pr59715.c
14872
===================================================================
14873
--- a/src/gcc/testsuite/gcc.dg/torture/pr59715.c (.../tags/gcc_4_8_2_release)
14874
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59715.c (.../branches/gcc-4_8-branch)
14876
+/* { dg-do run } */
14878
+extern void abort (void);
14889
+ c = a == 0 ? 1 : 1 % a;
14897
Index: gcc/testsuite/gcc.dg/torture/pr60115.c
14898
===================================================================
14899
--- a/src/gcc/testsuite/gcc.dg/torture/pr60115.c (.../tags/gcc_4_8_2_release)
14900
+++ b/src/gcc/testsuite/gcc.dg/torture/pr60115.c (.../branches/gcc-4_8-branch)
14902
+/* { dg-do run } */
14916
Index: gcc/testsuite/gcc.dg/torture/pr59903.c
14917
===================================================================
14918
--- a/src/gcc/testsuite/gcc.dg/torture/pr59903.c (.../tags/gcc_4_8_2_release)
14919
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59903.c (.../branches/gcc-4_8-branch)
14921
+/* { dg-do compile } */
14923
+int a, b, c, d, e, f, g, h, i[3], l, m, n, o, p, q, r;
14936
+ return p1 || ((p1 > 0) > (e << 1));
14940
+fn2 (struct S0 p1)
14943
+ struct S0 t = {0,0,0,0};
14949
+ for (m = 0; m < 4; m++)
14950
+ for (p1.f0 = 0; p1.f0 < 3; p1.f0++)
14954
+ o = b || 1 >> b ? 0 : a < 0;
14956
+ if ((g < fn1 ((1 ^ (q & 1)) | n)) ^ u)
14958
+ s = j.f3 > 0 ? j.f3 : j.f3 << 1;
14959
+ r = l = s && p1.f1 * c;
14971
+ struct S0 v = {0,0,0,0};
14977
Index: gcc/testsuite/gcc.dg/torture/pr58143-1.c
14978
===================================================================
14979
--- a/src/gcc/testsuite/gcc.dg/torture/pr58143-1.c (.../tags/gcc_4_8_2_release)
14980
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58143-1.c (.../branches/gcc-4_8-branch)
14982
+/* { dg-do run } */
14983
+/* { dg-additional-options "-fstrict-overflow" } */
14985
+extern void abort (void);
14987
+int a, b, c, d, e, f, g, h = 1, i;
14991
+ return p < 0 && a < - __INT_MAX__ - 1 - p ? 0 : 1;
14997
+ i = h ? 0 : 1 % h;
14998
+ for (j = 0; j < 1; j++)
14999
+ for (d = 0; d; d++)
15007
+ for (; b >= 0; b--)
15008
+ for (c = 1; c >= 0; c--)
15013
+ for (f = 0; f < 1; f++)
15033
Index: gcc/testsuite/gcc.dg/torture/pr58143-2.c
15034
===================================================================
15035
--- a/src/gcc/testsuite/gcc.dg/torture/pr58143-2.c (.../tags/gcc_4_8_2_release)
15036
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58143-2.c (.../branches/gcc-4_8-branch)
15038
+/* { dg-do run } */
15039
+/* { dg-additional-options "-fstrict-overflow" } */
15041
+int a, b, d, e, f, *g, h, i;
15044
+char foo (unsigned char p)
15051
+ for (h = 0; h < 3; h = foo (h))
15054
+ for (f = 0; f < 1; f++)
15056
+ i = a && 0 < -__INT_MAX__ - h ? 0 : 1;
15072
Index: gcc/testsuite/gcc.dg/torture/pr58941.c
15073
===================================================================
15074
--- a/src/gcc/testsuite/gcc.dg/torture/pr58941.c (.../tags/gcc_4_8_2_release)
15075
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58941.c (.../branches/gcc-4_8-branch)
15077
+/* { dg-do run } */
15079
+extern void abort (void);
15083
+ unsigned char data[1000];
15091
+int condition = 3;
15096
+ SData *pData = (SData*)(msg.data);
15097
+ unsigned int i = 0;
15098
+ for (i = 0; i < 1; i++)
15101
+ if(condition & 1)
15102
+ pData->d[i] |= 0x55;
15103
+ if(condition & 2)
15104
+ pData->d[i] |= 0xaa;
15106
+ if (pData->d[0] != 0xff)
15110
Index: gcc/testsuite/gcc.dg/torture/pr57488.c
15111
===================================================================
15112
--- a/src/gcc/testsuite/gcc.dg/torture/pr57488.c (.../tags/gcc_4_8_2_release)
15113
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57488.c (.../branches/gcc-4_8-branch)
15115
+/* { dg-do run } */
15117
+extern void abort (void);
15119
+int i, j, *pj = &j, **ppj = &pj;
15122
+short s, *ps = &s, k;
15124
+unsigned short u, *pu = &u, **ppu = &pu;
15128
+unsigned char v = 48;
15141
+void __attribute__((noinline))
15144
+ for (; i <= 3; i++)
15149
+ for (k = 1; k >= 0; k--)
15153
+ for (l = 1; l < 5; l++)
15156
+ for (m = 6; m; m--)
15173
Index: gcc/testsuite/gcc.dg/torture/pr58143-3.c
15174
===================================================================
15175
--- a/src/gcc/testsuite/gcc.dg/torture/pr58143-3.c (.../tags/gcc_4_8_2_release)
15176
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58143-3.c (.../branches/gcc-4_8-branch)
15178
+/* { dg-do run } */
15179
+/* { dg-additional-options "-fstrict-overflow" } */
15181
+int a, b, c, d, e;
15186
+ for (b = 4; b > -30; b--)
15190
+ e = a > __INT_MAX__ - b;
15196
Index: gcc/testsuite/gcc.dg/torture/pr59288.c
15197
===================================================================
15198
--- a/src/gcc/testsuite/gcc.dg/torture/pr59288.c (.../tags/gcc_4_8_2_release)
15199
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59288.c (.../branches/gcc-4_8-branch)
15201
+/* { dg-do compile } */
15206
+ long int i, j, k;
15207
+ for (i = 0, j = 0, k = 0; i < 512; i = (int) i + 1, j = (int) j + 1, k = (int) k + 3)
15208
+ d[i] = j ^ (i * 3) ^ (2 * k + 2);
15210
Index: gcc/testsuite/gcc.dg/torture/pr59330.c
15211
===================================================================
15212
--- a/src/gcc/testsuite/gcc.dg/torture/pr59330.c (.../tags/gcc_4_8_2_release)
15213
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59330.c (.../branches/gcc-4_8-branch)
15215
+/* { dg-do run } */
15217
+void free(void *ptr)
15232
Index: gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c
15233
===================================================================
15234
--- a/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c (.../tags/gcc_4_8_2_release)
15235
+++ b/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c (.../branches/gcc-4_8-branch)
15237
+/* { dg-do run } */
15238
+/* { dg-options "-O3" } */
15240
+int a, c, e[5][2];
15246
+ for (d = 0; d < 2; d++)
15247
+ if (a ? 0 : e[c + 3][d] & e[c + 4][d])
15251
Index: gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c
15252
===================================================================
15253
--- a/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c (.../tags/gcc_4_8_2_release)
15254
+++ b/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c (.../branches/gcc-4_8-branch)
15256
+/* { dg-do run } */
15257
+/* { dg-options "-O3 -fdump-tree-pcom-details" } */
15259
+int b, f, d[5][2];
15265
+ for (c = 0; c < 2; c++)
15266
+ if (d[b + 3][c] & d[b + 4][c])
15272
+/* { dg-final { scan-tree-dump "Executing predictive commoning" "pcom" } } */
15273
+/* { dg-final { cleanup-tree-dump "pcom" } } */
15274
Index: gcc/testsuite/gcc.dg/strlenopt-4.c
15275
===================================================================
15276
--- a/src/gcc/testsuite/gcc.dg/strlenopt-4.c (.../tags/gcc_4_8_2_release)
15277
+++ b/src/gcc/testsuite/gcc.dg/strlenopt-4.c (.../branches/gcc-4_8-branch)
15278
@@ -66,16 +66,10 @@
15282
-/* For targets providing a movstr pattern strcat is already decomposed
15283
- into strlen + strcpy by fold_builtin_strcat. */
15285
-/* { dg-final { scan-tree-dump-times "strlen \\(" 3 "strlen" { target { ! s390*-*-* } } } } */
15286
-/* { dg-final { scan-tree-dump-times "strlen \\(" 6 "strlen" { target s390*-*-* } } } */
15287
+/* { dg-final { scan-tree-dump-times "strlen \\(" 3 "strlen" } } */
15288
/* { dg-final { scan-tree-dump-times "memcpy \\(" 4 "strlen" } } */
15289
-/* { dg-final { scan-tree-dump-times "strcpy \\(" 3 "strlen" { target { ! s390*-*-* } } } } */
15290
-/* { dg-final { scan-tree-dump-times "strcpy \\(" 6 "strlen" { target s390*-*-* } } } */
15291
-/* { dg-final { scan-tree-dump-times "strcat \\(" 3 "strlen" { target { ! s390*-*-* } } } } */
15292
-/* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" { target s390*-*-* } } } */
15293
+/* { dg-final { scan-tree-dump-times "strcpy \\(" 3 "strlen" } } */
15294
+/* { dg-final { scan-tree-dump-times "strcat \\(" 3 "strlen" } } */
15295
/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
15296
/* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
15297
/* { dg-final { cleanup-tree-dump "strlen" } } */
15298
Index: gcc/testsuite/gcc.dg/pr56824.c
15299
===================================================================
15300
--- a/src/gcc/testsuite/gcc.dg/pr56824.c (.../tags/gcc_4_8_2_release)
15301
+++ b/src/gcc/testsuite/gcc.dg/pr56824.c (.../branches/gcc-4_8-branch)
15303
+/* PR preprocessor/56824 */
15304
+/* { dg-do compile } */
15305
+/* { dg-options "-Waggregate-return" } */
15307
+struct S { int i; };
15308
+struct S foo (void);
15310
+#pragma GCC diagnostic push
15311
+#pragma GCC diagnostic ignored "-Waggregate-return"
15320
+#pragma GCC diagnostic pop
15321
Index: gcc/testsuite/gcc.dg/ipa/pr55260.c
15322
===================================================================
15323
--- a/src/gcc/testsuite/gcc.dg/ipa/pr55260.c (.../tags/gcc_4_8_2_release)
15324
+++ b/src/gcc/testsuite/gcc.dg/ipa/pr55260.c (.../branches/gcc-4_8-branch)
15326
+/* { dg-do compile } */
15327
+/* { dg-options "-O2 -fno-inline -fipa-cp-clone" } */
15341
+list_heads *fn1(string, int *, unsigned);
15342
+void fn2(malv *p1, list_heads *p2, unsigned p3) {
15343
+ string a = p1->nantstr;
15344
+ fn1(a, p1->nant, p3);
15347
+void fn3(unsigned p1) { fn2(0, 0, p1); }
15349
+list_heads *fn1(string p1, int *p2, unsigned p3) {
15364
Index: gcc/testsuite/gcc.dg/ipa/pr59610.c
15365
===================================================================
15366
--- a/src/gcc/testsuite/gcc.dg/ipa/pr59610.c (.../tags/gcc_4_8_2_release)
15367
+++ b/src/gcc/testsuite/gcc.dg/ipa/pr59610.c (.../branches/gcc-4_8-branch)
15369
+/* { dg-do compile } */
15370
+/* { dg-options "-O2" } */
15372
+struct A { int a; };
15375
+__attribute__((optimize (0))) void
15376
+foo (void *p, struct A x)
15380
Index: gcc/testsuite/gcc.dg/strlenopt-1f.c
15381
===================================================================
15382
--- a/src/gcc/testsuite/gcc.dg/strlenopt-1f.c (.../tags/gcc_4_8_2_release)
15383
+++ b/src/gcc/testsuite/gcc.dg/strlenopt-1f.c (.../branches/gcc-4_8-branch)
15385
#include "strlenopt-1.c"
15387
/* { dg-final { scan-tree-dump-times "strlen \\(" 2 "strlen" } } */
15388
-/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 3 "strlen" } } */
15389
-/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 1 "strlen" } } */
15390
+/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 0 "strlen" } } */
15391
+/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 0 "strlen" } } */
15392
/* { dg-final { scan-tree-dump-times "__strcat_chk \\(" 0 "strlen" } } */
15393
/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
15394
/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 0 "strlen" } } */
15395
-/* { dg-final { scan-tree-dump-times "memcpy \\(" 0 "strlen" } } */
15396
-/* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
15397
+/* { dg-final { scan-tree-dump-times "memcpy \\(" 3 "strlen" } } */
15398
+/* { dg-final { scan-tree-dump-times "strcpy \\(" 1 "strlen" } } */
15399
/* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
15400
/* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
15401
/* { dg-final { cleanup-tree-dump "strlen" } } */
15402
Index: gcc/testsuite/gcc.dg/vect/pr60382.c
15403
===================================================================
15404
--- a/src/gcc/testsuite/gcc.dg/vect/pr60382.c (.../tags/gcc_4_8_2_release)
15405
+++ b/src/gcc/testsuite/gcc.dg/vect/pr60382.c (.../branches/gcc-4_8-branch)
15407
+#include "tree-vect.h"
15409
+int a, b, c, e, f;
15414
+ for (b = 0; b < 3; b++)
15417
+ for (c = 0; c < 4; c++)
15422
+ for (a = 0; a < 2; a++)
15438
+/* { dg-final { cleanup-tree-dump "vect" } } */
15439
Index: gcc/testsuite/gcc.dg/vect/pr60276.c
15440
===================================================================
15441
--- a/src/gcc/testsuite/gcc.dg/vect/pr60276.c (.../tags/gcc_4_8_2_release)
15442
+++ b/src/gcc/testsuite/gcc.dg/vect/pr60276.c (.../branches/gcc-4_8-branch)
15444
+/* { dg-do run } */
15446
+extern void abort (void);
15449
+foo (int *out, const int *lp, unsigned samples)
15452
+ for (x = 0, target = 0; x < (int)samples; x += 2, target++)
15454
+ out[x] = lp[target];
15455
+ out[x - 1] = out[x - 2] + out[x];
15460
+foo_novec (int *out, const int *lp, unsigned samples)
15463
+ for (x = 0, target = 0; x < (int)samples; x += 2, target++)
15465
+ out[x] = lp[target];
15466
+ out[x - 1] = out[x - 2] + out[x];
15467
+ __asm__ volatile ("" : : : "memory");
15473
+ const int lp[25] = {
15481
+ int out[49] = {0};
15482
+ int out2[49] = {0};
15485
+ foo (out + 2, lp + 1, 48);
15486
+ foo_novec (out2 + 2, lp + 1, 48);
15488
+ for (s = 0; s < 49; s++)
15489
+ if (out[s] != out2[s])
15495
+/* { dg-final { cleanup-tree-dump "vect" } } */
15496
Index: gcc/testsuite/gcc.dg/pr53060.c
15497
===================================================================
15498
--- a/src/gcc/testsuite/gcc.dg/pr53060.c (.../tags/gcc_4_8_2_release)
15499
+++ b/src/gcc/testsuite/gcc.dg/pr53060.c (.../branches/gcc-4_8-branch)
15502
/* Ignore a warning that is irrelevant to the purpose of this test. */
15503
/* { dg-prune-output ".*GCC vector returned by reference.*" } */
15504
+/* { dg-prune-output "changes the ABI" } */
15505
Index: gcc/testsuite/ChangeLog
15506
===================================================================
15507
--- a/src/gcc/testsuite/ChangeLog (.../tags/gcc_4_8_2_release)
15508
+++ b/src/gcc/testsuite/ChangeLog (.../branches/gcc-4_8-branch)
15510
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
15512
+ Backport from mainline
15513
+ 2014-02-19 Jakub Jelinek <jakub@redhat.com>
15516
+ * g++.dg/ext/builtin-bswap1.C: New test.
15517
+ * c-c++-common/pr37743.c: New test.
15519
+ PR preprocessor/58844
15520
+ * c-c++-common/cpp/pr58844-1.c: New test.
15521
+ * c-c++-common/cpp/pr58844-2.c: New test.
15523
+ 2014-02-13 Jakub Jelinek <jakub@redhat.com>
15526
+ * gcc.target/i386/pr43546.c: New test.
15528
+ 2014-02-12 Jakub Jelinek <jakub@redhat.com>
15531
+ * c-c++-common/pr60101.c: New test.
15533
+ 2014-02-11 Jakub Jelinek <jakub@redhat.com>
15536
+ * gfortran.dg/pr52370.f90: New test.
15539
+ * gcc.dg/guality/pr59776.c: New test.
15541
+ 2014-02-07 Jakub Jelinek <jakub@redhat.com>
15543
+ PR preprocessor/56824
15544
+ * gcc.dg/pr56824.c: New test.
15546
+ 2014-02-06 Jakub Jelinek <jakub@redhat.com>
15549
+ * gcc.c-torture/execute/pr60062.c: New test.
15550
+ * gcc.c-torture/execute/pr60072.c: New test.
15552
+ 2014-02-04 Jakub Jelinek <jakub@redhat.com>
15555
+ * c-c++-common/torture/pr60026.c: New test.
15557
+ 2014-02-05 Jakub Jelinek <jakub@redhat.com>
15559
+ PR middle-end/57499
15560
+ * g++.dg/torture/pr57499.C: New test.
15562
+ 2014-03-03 Jakub Jelinek <jakub@redhat.com>
15564
+ PR preprocessor/60400
15565
+ * c-c++-common/cpp/pr60400.c: New test.
15566
+ * c-c++-common/cpp/pr60400-1.h: New file.
15567
+ * c-c++-common/cpp/pr60400-2.h: New file.
15569
+2014-03-04 Richard Biener <rguenther@suse.de>
15571
+ PR tree-optimization/60382
15572
+ * gcc.dg/vect/pr60382.c: New testcase.
15574
+2014-03-02 Mikael Morin <mikael@gcc.gnu.org>
15577
+ * gfortran.dg/str_comp_optimize_1.f90: New test.
15579
+2014-02-25 Richard Biener <rguenther@suse.de>
15581
+ Backport from mainline
15582
+ 2014-02-21 Richard Biener <rguenther@suse.de>
15584
+ PR tree-optimization/60276
15585
+ * gcc.dg/vect/pr60276.c: New testcase.
15587
+2014-02-25 Richard Biener <rguenther@suse.de>
15589
+ Backport from mainline
15590
+ 2014-02-14 Richard Biener <rguenther@suse.de>
15592
+ PR tree-optimization/60183
15593
+ * gcc.dg/torture/pr60183.c: New testcase.
15595
+2014-02-24 Fabien Chêne <fabien@gcc.gnu.org>
15598
+ * g++.dg/template/using27.C: New.
15599
+ * g++.dg/template/using28.C: New.
15600
+ * g++.dg/template/using29.C: New.
15602
+2014-02-23 David Holsgrove <david.holsgrove@xilinx.com>
15604
+ * gcc/testsuite/gcc.target/microblaze/others/mem_reload.c: New test.
15606
+2014-02-22 Mikael Morin <mikael@gcc.gnu.org>
15609
+ * gfortran.dg/ichar_3.f90: New test.
15611
+2014-02-21 Steven G. Kargl <kargl@gcc.gnu.org>
15613
+ Backport from mainline
15615
+ * gfortran.dg/pr59700.f90: New test.
15617
+2014-02-21 Martin Jambor <mjambor@suse.cz>
15620
+ * gcc.dg/ipa/pr55260.c: New test.
15622
+2014-02-19 Tobias Burnus <burnus@net-b.de>
15625
+ * gfortran.dg/proc_ptr_45.f90: New.
15626
+ * gfortran.dg/proc_ptr_46.f90: New.
15628
+2014-02-19 Uros Bizjak <ubizjak@gmail.com>
15630
+ Backport from mainline
15631
+ 2014-02-19 Uros Bizjak <ubizjak@gmail.com>
15634
+ * gcc.target/i386/pr39162.c: Add dg-prune-output.
15635
+ (dg-options): Remove -Wno-psabi.
15636
+ * gcc.target/i386/pr59794-2.c: Ditto.
15637
+ * gcc.target/i386/sse-5.c: Ditto.
15639
+2014-02-19 Janus Weil <janus@gcc.gnu.org>
15641
+ Backports from mainline:
15642
+ 2014-02-17 Janus Weil <janus@gcc.gnu.org>
15645
+ * gfortran.dg/init_flag_12.f90: New.
15647
+ 2014-02-18 Janus Weil <janus@gcc.gnu.org>
15650
+ * gfortran.dg/typebound_generic_15.f90: New.
15652
+2014-02-18 Kai Tietz <ktietz@redhat.com>
15655
+ * gcc.target/i386/nest-1.c: New testcase.
15657
+2014-02-18 Eric Botcazou <ebotcazou@adacore.com>
15659
+ * gnat.dg/opt32.adb: New test.
15661
+2014-02-15 Jerry DeLisle <jvdelisle@gcc.gnu>
15662
+ Dominique d'Humieres <dominiq@lps.ens.fr>
15664
+ Backport from mainline
15665
+ PR libfortran/59771
15666
+ PR libfortran/59774
15667
+ PR libfortran/59836
15668
+ * gfortran.dg/fmt_g_1.f90: New test.
15669
+ * gfortran.dg/round_3.f08: New cases added.
15671
+2014-02-13 Dominik Vogt <vogt@linux.vnet.ibm.com>
15673
+ * gcc.target/s390/hotpatch-compile-8.c: New test.
15675
+2014-02-12 Eric Botcazou <ebotcazou@adacore.com>
15677
+ * gcc.c-torture/execute/20140212-1.c: New test.
15679
+2014-02-10 Richard Biener <rguenther@suse.de>
15681
+ Backport from mainline
15682
+ 2014-01-30 Richard Biener <rguenther@suse.de>
15684
+ PR tree-optimization/59903
15685
+ * gcc.dg/torture/pr59903.c: New testcase.
15687
+ 2014-02-10 Richard Biener <rguenther@suse.de>
15689
+ PR tree-optimization/60115
15690
+ * gcc.dg/torture/pr60115.c: New testcase.
15692
+2014-02-09 Janus Weil <janus@gcc.gnu.org>
15694
+ Backport from mainline
15695
+ 2013-10-21 Tobias Burnus <burnus@net-b.de>
15699
+ * gfortran.dg/proc_ptr_comp_38.f90: New.
15701
+2014-02-08 Mikael Morin <mikael@gcc.gnu.org>
15704
+ * gfortran.dg/default_initialization_7.f90: New test.
15706
+2014-02-07 Paul Thomas <pault@gcc.gnu.org>
15709
+ * gfortran.dg/elemental_subroutine_9.f90 : New test
15711
+2014-02-04 Uros Bizjak <ubizjak@gmail.com>
15713
+ Backport from mainline
15714
+ 2014-02-02 Uros Bizjak <ubizjak@gmail.com>
15717
+ * gcc.c-torture/execute/pr60017.c: New test.
15719
+2014-02-01 Paul Thomas <pault@gcc.gnu.org>
15722
+ * gfortran.dg/allocate_class_3.f90 : New test
15724
+2014-01-30 David Holsgrove <david.holsgrove@xilinx.com>
15726
+ Backport from mainline.
15727
+ * gcc.target/microblaze/isa/fcmp4.c: New.
15729
+2014-01-26 Mikael Morin <mikael@gcc.gnu.org>
15732
+ * gfortran.dg/unresolved_fixup_1.f90: New test.
15733
+ * gfortran.dg/unresolved_fixup_2.f90: New test.
15735
+2014-01-24 H.J. Lu <hongjiu.lu@intel.com>
15737
+ Backport from mainline.
15738
+ 2014-01-23 H.J. Lu <hongjiu.lu@intel.com>
15741
+ * gcc.target/i386/pr59929.c: New test.
15743
+2014-01-24 Paolo Carlini <paolo.carlini@oracle.com>
15746
+ * g++.dg/ext/timevar2.C: New.
15748
+2014-01-23 David Holsgrove <david.holsgrove@xilinx.com>
15750
+ Backport from mainline.
15751
+ * gcc.target/microblaze/others/builtin-trap.c: New test.
15753
+2014-01-23 Marek Polacek <polacek@redhat.com>
15755
+ Backport from mainline
15756
+ 2013-10-21 Marek Polacek <polacek@redhat.com>
15758
+ PR middle-end/58809
15759
+ * gcc.dg/gomp/pr58809.c: New test.
15761
+2014-01-23 Jakub Jelinek <jakub@redhat.com>
15763
+ PR middle-end/58809
15764
+ * c-c++-common/gomp/pr58809.c: New test.
15766
+2014-01-22 Marek Polacek <polacek@redhat.com>
15768
+ Backport from mainline
15769
+ 2014-01-22 Marek Polacek <polacek@redhat.com>
15772
+ * gcc.dg/torture/pr59891.c: New test.
15774
+2014-01-21 Jakub Jelinek <jakub@redhat.com>
15776
+ PR middle-end/59860
15777
+ * gcc.dg/strlenopt-4.c: Expect the same counts on s390*-* as on all
15780
+2014-01-20 Richard Biener <rguenther@suse.de>
15782
+ PR middle-end/59860
15783
+ * gcc.dg/pr59860.c: New testcase.
15785
+2014-01-20 Marek Polacek <polacek@redhat.com>
15787
+ Backported from mainline
15788
+ 2014-01-17 Marek Polacek <polacek@redhat.com>
15791
+ * g++.dg/diagnostic/pr59838.C: New test.
15793
+2014-01-19 Paul Thomas <pault@gcc.gnu.org>
15795
+ Backport from mainline
15796
+ 2013-12-01 Paul Thomas <pault@gcc.gnu.org>
15799
+ * gfortran.dg/null_5.f90 : Include new error.
15800
+ * gfortran.dg/null_6.f90 : Include new error.
15802
+2014-01-17 H.J. Lu <hongjiu.lu@intel.com>
15804
+ Backport from mainline
15805
+ 2014-01-15 H.J. Lu <hongjiu.lu@intel.com>
15808
+ * c-c++-common/convert-vec-1.c: Also prune ABI change for
15810
+ * g++.dg/cpp0x/constexpr-53094-2.C: Likewise.
15811
+ * g++.dg/ext/attribute-test-1.C: Likewise.
15812
+ * g++.dg/ext/attribute-test-2.C: Likewise.
15813
+ * g++.dg/ext/attribute-test-3.C: Likewise.
15814
+ * g++.dg/ext/attribute-test-4.C: Likewise.
15815
+ * g++.dg/torture/pr38565.C: Likewise.
15816
+ * gcc.dg/pr53060.c: Likewise.
15817
+ * c-c++-common/scal-to-vec2.c: Add -msse2 for x86.
15818
+ * c-c++-common/vector-compare-2.c: Likewise.
15819
+ * gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c: Likewise.
15820
+ * g++.dg/conversion/simd1.C: Add -msse2 for x86. Adjust
15821
+ dg-message line number.
15823
+2014-01-17 H.J. Lu <hongjiu.lu@intel.com>
15825
+ Backport from mainline
15826
+ 2014-01-14 H.J. Lu <hongjiu.lu@intel.com>
15829
+ * gcc.target/i386/pr39162.c (y): New __m256i variable.
15830
+ (bar): Change return type to void. Set y to x.
15831
+ * gcc.target/i386/pr59794-1.c: New testcase.
15832
+ * gcc.target/i386/pr59794-2.c: Likewise.
15833
+ * gcc.target/i386/pr59794-3.c: Likewise.
15834
+ * gcc.target/i386/pr59794-4.c: Likewise.
15835
+ * gcc.target/i386/pr59794-5.c: Likewise.
15836
+ * gcc.target/i386/pr59794-6.c: Likewise.
15837
+ * gcc.target/i386/pr59794-7.c: Likewise.
15839
+2014-01-17 Matthias Klose <doko@ubuntu.com>
15841
+ Backport from the trunk:
15842
+ 2014-01-09 Uros Bizjak <ubizjak@gmail.com>
15843
+ * go.test/go-test.exp (go-gc-tests): Don't run peano.go on systems
15844
+ which don't support -fsplit-stack. Skip rotate[0123].go tests.
15846
+2014-01-15 Kugan Vivekanandarajah <kuganv@linaro.org>
15848
+ Backport from mainline
15849
+ 2014-01-15 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
15850
+ Kugan Vivekanandarajah <kuganv@linaro.org>
15853
+ * g++.dg/pr59695.C: New testcase.
15855
+2014-01-17 Terry Guo <terry.guo@arm.com>
15857
+ * gcc.target/arm/pr59826.c: New test.
15859
+2014-01-16 Jakub Jelinek <jakub@redhat.com>
15862
+ * gcc.target/i386/pr59839.c: New test.
15865
+ * gcc.target/i386/pr9771-1.c (main): Rename to...
15866
+ (real_main): ... this. Add __asm name "main".
15867
+ (ASMNAME, ASMNAME2, STRING): Define.
15869
+2014-01-16 Marek Polacek <polacek@redhat.com>
15871
+ Backported from mainline
15872
+ 2014-01-16 Marek Polacek <polacek@redhat.com>
15874
+ PR middle-end/59827
15875
+ * gcc.dg/pr59827.c: New test.
15877
+2014-01-15 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
15880
+ * gcc.c-torture/compile/pr59803.c: New testcase.
15882
+2014-01-10 Yufeng Zhang <yufeng.zhang@arm.com>
15884
+ * gcc.target/arm/neon/vst1Q_laneu64-1.c: New test.
15886
+2014-01-10 Hans-Peter Nilsson <hp@axis.com>
15888
+ * gcc.dg/pr46309.c: Disable for cris*-*-*.
15890
+2014-01-10 Paolo Carlini <paolo.carlini@oracle.com>
15894
+ * g++.dg/cpp0x/variadic144.C: New.
15895
+ * g++.dg/cpp0x/variadic145.C: Likewise.
15897
+2014-01-10 Richard Biener <rguenther@suse.de>
15899
+ PR tree-optimization/59715
15900
+ * gcc.dg/torture/pr59715.c: New testcase.
15902
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
15904
+ * gcc.target/mips/bswap-1.c, gcc.target/mips/bswap-2.c,
15905
+ gcc.target/mips/bswap-3.c, gcc.target/mips/bswap-4.c,
15906
+ gcc.target/mips/bswap-5.c, gcc.target/mips/bswap-6.c: New tests.
15908
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
15910
+ PR rtl-optimization/59137
15911
+ * gcc.target/mips/pr59137.c: New test.
15913
+2014-01-09 Richard Biener <rguenther@suse.de>
15915
+ Backport from mainline
15916
+ 2013-11-18 Richard Biener <rguenther@suse.de>
15918
+ PR tree-optimization/59125
15919
+ PR tree-optimization/54570
15920
+ * gcc.dg/builtin-object-size-8.c: Un-xfail.
15921
+ * gcc.dg/builtin-object-size-14.c: New testcase.
15922
+ * gcc.dg/strlenopt-14gf.c: Adjust.
15923
+ * gcc.dg/strlenopt-1f.c: Likewise.
15924
+ * gcc.dg/strlenopt-4gf.c: Likewise.
15926
+ 2013-12-03 Jakub Jelinek <jakub@redhat.com>
15928
+ PR tree-optimization/59362
15929
+ * gcc.c-torture/compile/pr59362.c: New test.
15931
+2014-01-09 Richard Earnshaw <rearnsha@arm.com>
15933
+ PR rtl-optimization/54300
15934
+ * gcc.target/arm/pr54300.C: New test.
15936
+2014-01-08 Martin Jambor <mjambor@suse.cz>
15939
+ * gcc.dg/ipa/pr59610.c: New test.
15941
+2014-01-07 Jakub Jelinek <jakub@redhat.com>
15943
+ PR rtl-optimization/58668
15944
+ * gcc.dg/pr58668.c: New test.
15946
+ Backported from mainline
15947
+ 2013-12-16 Jakub Jelinek <jakub@redhat.com>
15949
+ PR middle-end/58956
15950
+ PR middle-end/59470
15951
+ * gcc.target/i386/pr59470.c: New test.
15953
+2014-01-04 Janus Weil <janus@gcc.gnu.org>
15955
+ Backport from mainline
15956
+ 2014-01-02 Janus Weil <janus@gcc.gnu.org>
15959
+ * gfortran.dg/dynamic_dispatch_12.f90: New.
15961
+2014-01-03 Joseph Myers <joseph@codesourcery.com>
15963
+ * gcc.target/powerpc/rs6000-ldouble-3.c: New test.
15965
+2014-01-03 Jakub Jelinek <jakub@redhat.com>
15968
+ * gcc.target/i386/pr59625.c: New test.
15970
+2014-01-01 Jakub Jelinek <jakub@redhat.com>
15972
+ PR rtl-optimization/59647
15973
+ * g++.dg/opt/pr59647.C: New test.
15975
+2013-12-31 Janus Weil <janus@gcc.gnu.org>
15977
+ Backport from mainline
15978
+ 2013-12-30 Janus Weil <janus@gcc.gnu.org>
15981
+ * gfortran.dg/generic_28.f90: New.
15983
+2013-12-20 Jakub Jelinek <jakub@redhat.com>
15986
+ * g++.dg/tree-prof/pr59255.C: New test.
15988
+2013-12-19 James Greenhalgh <james.greenhalgh@arm.com>
15990
+ Backport from Mainline
15991
+ 2013-05-01 James Greenhalgh <james.greenhalgh@arm.com>
15993
+ * gcc.target/aarch64/scalar_intrinsics.c (force_simd): New.
15994
+ (test_vceqd_s64): Force arguments to SIMD registers.
15995
+ (test_vceqzd_s64): Likewise.
15996
+ (test_vcged_s64): Likewise.
15997
+ (test_vcled_s64): Likewise.
15998
+ (test_vcgezd_s64): Likewise.
15999
+ (test_vcged_u64): Likewise.
16000
+ (test_vcgtd_s64): Likewise.
16001
+ (test_vcltd_s64): Likewise.
16002
+ (test_vcgtzd_s64): Likewise.
16003
+ (test_vcgtd_u64): Likewise.
16004
+ (test_vclezd_s64): Likewise.
16005
+ (test_vcltzd_s64): Likewise.
16006
+ (test_vtst_s64): Likewise.
16007
+ (test_vtst_u64): Likewise.
16009
+2013-12-19 Dominik Vogt <vogt@linux.vnet.ibm.com>
16010
+ Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
16012
+ Backport from mainline
16013
+ 2013-12-19 Dominik Vogt <vogt@linux.vnet.ibm.com>
16014
+ * gcc/testsuite/gcc.target/s390/hotpatch-1.c: New test
16015
+ * gcc/testsuite/gcc.target/s390/hotpatch-2.c: New test
16016
+ * gcc/testsuite/gcc.target/s390/hotpatch-3.c: New test
16017
+ * gcc/testsuite/gcc.target/s390/hotpatch-4.c: New test
16018
+ * gcc/testsuite/gcc.target/s390/hotpatch-5.c: New test
16019
+ * gcc/testsuite/gcc.target/s390/hotpatch-6.c: New test
16020
+ * gcc/testsuite/gcc.target/s390/hotpatch-7.c: New test
16021
+ * gcc/testsuite/gcc.target/s390/hotpatch-8.c: New test
16022
+ * gcc/testsuite/gcc.target/s390/hotpatch-9.c: New test
16023
+ * gcc/testsuite/gcc.target/s390/hotpatch-10.c: New test
16024
+ * gcc/testsuite/gcc.target/s390/hotpatch-11.c: New test
16025
+ * gcc/testsuite/gcc.target/s390/hotpatch-12.c: New test
16026
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c: New test
16027
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c: New test
16028
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c: New test
16029
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c: New test
16030
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c: New test
16031
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c: New test
16032
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c: New test
16034
+2013-12-18 Janus Weil <janus@gcc.gnu.org>
16036
+ Backport from mainline
16037
+ 2013-12-15 Janus Weil <janus@gcc.gnu.org>
16040
+ * gfortran.dg/unlimited_polymorphic_15.f90: New.
16042
+2013-12-15 Uros Bizjak <ubizjak@gmail.com>
16044
+ PR testsuite/58630
16045
+ * gcc.target/i386/pr43662.c (dg-options):
16046
+ Add -maccumulate-outgoing-args.
16047
+ * gcc.target/i386/pr43869.c (dg-options): Ditto.
16048
+ * gcc.target/i386/pr57003.c (dg-options): Ditto.
16049
+ * gcc.target/i386/avx-vzeroupper-16.c (dg-options):
16050
+ Remove -mtune=generic and add -maccumulate-outgoing-args instead.
16051
+ * gcc.target/i386/avx-vzeroupper-17.c (dg-options): Ditto.
16052
+ * gcc.target/i386/avx-vzeroupper-18.c (dg-options): Ditto.
16053
+ * gcc.target/x86_64/abi/callabi/func-1.c (dg-options):
16054
+ Add -maccumulate-outgoing-args.
16055
+ * gcc.target/x86_64/abi/callabi/func-2a.c (dg-options): Ditto.
16056
+ * gcc.target/x86_64/abi/callabi/func-2b.c (dg-options): Ditto.
16057
+ * gcc.target/x86_64/abi/callabi/func-indirect.c (dg-options): Ditto.
16058
+ * gcc.target/x86_64/abi/callabi/func-indirect-2a.c (dg-options): Ditto.
16059
+ * gcc.target/x86_64/abi/callabi/func-indirect-2b.c (dg-options): Ditto.
16060
+ * gcc.target/x86_64/abi/callabi/leaf-1.c (dg-options): Ditto.
16061
+ * gcc.target/x86_64/abi/callabi/leaf-2.c (dg-options): Ditto.
16062
+ * gcc.target/x86_64/abi/callabi/pr38891.c (dg-options): Ditto.
16063
+ * gcc.target/x86_64/abi/callabi/vaarg-1.c (dg-options): Ditto.
16064
+ * gcc.target/x86_64/abi/callabi/vaarg-2.c (dg-options): Ditto.
16065
+ * gcc.target/x86_64/abi/callabi/vaarg-3.c (dg-options): Ditto.
16066
+ * gcc.target/x86_64/abi/callabi/vaarg-4a.c (dg-options): Ditto.
16067
+ * gcc.target/x86_64/abi/callabi/vaarg-4b.c (dg-options): Ditto.
16068
+ * gcc.target/x86_64/abi/callabi/vaarg-5a.c (dg-options): Ditto.
16069
+ * gcc.target/x86_64/abi/callabi/vaarg-5b.c (dg-options): Ditto.
16071
+2013-12-12 Jakub Jelinek <jakub@redhat.com>
16073
+ PR middle-end/59470
16074
+ * g++.dg/opt/pr59470.C: New test.
16077
+ * gfortran.dg/gomp/pr59467.f90: New test.
16078
+ * c-c++-common/gomp/pr59467.c: New test.
16080
+2013-12-12 Uros Bizjak <ubizjak@gmail.com>
16082
+ Backport from mainline
16083
+ 2013-12-12 Ryan Mansfield <rmansfield@qnx.com>
16085
+ PR testsuite/59442
16086
+ * gcc.target/i386/sse2-movapd-1.c: Fix alignment attributes.
16087
+ * gcc.target/i386/sse2-movapd-2.c: Likewise.
16088
+ * gcc.target/i386/avx-vmovapd-256-1.c: Likewise.
16089
+ * gcc.target/i386/avx-vmovapd-256-2.c: Likewise.
16091
+2013-12-08 Uros Bizjak <ubizjak@gmail.com>
16093
+ Backport from mainline
16094
+ 2013-12-06 Uros Bizjak <ubizjak@gmail.com>
16097
+ * gcc.target/i386/pr59405.c: New test.
16099
+2013-12-06 Jakub Jelinek <jakub@redhat.com>
16101
+ PR tree-optimization/59388
16102
+ * gcc.c-torture/execute/pr59388.c: New test.
16104
+2013-12-06 Richard Biener <rguenther@suse.de>
16106
+ Backport from mainline
16107
+ 2013-11-28 Richard Biener <rguenther@suse.de>
16109
+ PR tree-optimization/59330
16110
+ * gcc.dg/torture/pr59330.c: New testcase.
16112
+2013-12-06 Richard Biener <rguenther@suse.de>
16114
+ Backport from mainline
16115
+ 2013-11-27 Richard Biener <rguenther@suse.de>
16117
+ PR tree-optimization/59288
16118
+ * gcc.dg/torture/pr59288.c: New testcase.
16120
+ 2013-11-19 Richard Biener <rguenther@suse.de>
16122
+ PR tree-optimization/59164
16123
+ * gcc.dg/torture/pr59164.c: New testcase.
16125
+ 2013-09-05 Richard Biener <rguenther@suse.de>
16127
+ PR tree-optimization/58137
16128
+ * gcc.target/i386/pr58137.c: New testcase.
16130
+2013-12-06 Oleg Endo <olegendo@gcc.gnu.org>
16134
+ * gcc.target/sh/pr51244-19.c: Adjust test case.
16136
+2013-12-05 Richard Biener <rguenther@suse.de>
16138
+ Backport from mainline
16139
+ 2013-11-19 Richard Biener <rguenther@suse.de>
16141
+ PR middle-end/58956
16142
+ * gcc.dg/torture/pr58956.c: New testcase.
16144
+2013-12-04 Jakub Jelinek <jakub@redhat.com>
16147
+ * g++.dg/cpp0x/constexpr-template6.C: New test.
16149
+ PR rtl-optimization/58726
16150
+ * gcc.c-torture/execute/pr58726.c: New test.
16153
+ * g++.dg/torture/pr59163.C: New test.
16155
+2013-12-03 Marek Polacek <polacek@redhat.com>
16157
+ Backport from mainline
16158
+ 2013-12-03 Marek Polacek <polacek@redhat.com>
16161
+ * gcc.dg/pr59351.c: New test.
16163
+2013-12-03 Jakub Jelinek <jakub@redhat.com>
16165
+ PR middle-end/59011
16166
+ * gcc.dg/pr59011.c: New test.
16169
+ * g++.dg/opt/pr58864.C: New test.
16171
+2013-12-02 Jakub Jelinek <jakub@redhat.com>
16173
+ PR tree-optimization/59358
16174
+ * gcc.c-torture/execute/pr59358.c: New test.
16176
+2013-12-02 Richard Biener <rguenther@suse.de>
16178
+ PR tree-optimization/59139
16179
+ * gcc.dg/torture/pr59139.c: New testcase.
16181
+2013-11-27 Tom de Vries <tom@codesourcery.com>
16182
+ Marc Glisse <marc.glisse@inria.fr>
16185
+ * c-c++-common/pr59032.c: New testcase.
16187
+2013-11-27 Tom de Vries <tom@codesourcery.com>
16188
+ Marc Glisse <marc.glisse@inria.fr>
16190
+ PR middle-end/59037
16191
+ * c-c++-common/pr59037.c: New testcase.
16193
+2013-11-30 Paul Thomas <pault@gcc.gnu.org>
16195
+ Backport from mainline
16196
+ 2013-11-04 Paul Thomas <pault@gcc.gnu.org>
16199
+ * gfortran.dg/optional_class_1.f90 : New test
16201
+2013-11-29 Jakub Jelinek <jakub@redhat.com>
16204
+ * c-c++-common/pr59280.c: New test.
16206
+2013-11-28 Jakub Jelinek <jakub@redhat.com>
16209
+ * g++.dg/gomp/pr59297.C: New test.
16211
+2013-11-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
16213
+ Backport from mainline
16214
+ 2013-11-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
16216
+ * gcc.target/arm/vrinta-ce.c: New testcase.
16218
+2013-11-28 Uros Bizjak <ubizjak@gmail.com>
16220
+ Backport from mainline
16221
+ 2013-11-23 Uros Bizjak <ubizjak@gmail.com>
16224
+ * config/i386/i386.c (bdesc_multi_arg) <IX86_BUILTIN_VFRCZSS>:
16225
+ Declare as MULTI_ARG_1_SF instruction.
16226
+ <IX86_BUILTIN_VFRCZSD>: Decleare as MULTI_ARG_1_DF instruction.
16227
+ * config/i386/sse.md (*xop_vmfrcz<mode>2): Rename
16228
+ from *xop_vmfrcz_<mode>.
16229
+ * config/i386/xopintrin.h (_mm_frcz_ss): Use __builtin_ia32_movss
16230
+ to merge scalar result with __A.
16231
+ (_mm_frcz_sd): Use __builtin_ia32_movsd to merge scalar
16234
+2013-11-28 Terry Guo <terry.guo@arm.com>
16236
+ Backport mainline r205391
16237
+ 2013-11-26 Terry Guo <terry.guo@arm.com>
16239
+ * gcc.target/arm/thumb1-pic-high-reg.c: New case.
16240
+ * gcc.target/arm/thumb1-pic-single-base.c: New case.
16242
+2013-11-27 Jakub Jelinek <jakub@redhat.com>
16244
+ Backported from mainline
16245
+ 2013-11-27 Jakub Jelinek <jakub@redhat.com>
16247
+ PR tree-optimization/59014
16248
+ * gcc.c-torture/execute/pr59014-2.c: New test.
16250
+ 2013-11-26 Jakub Jelinek <jakub@redhat.com>
16252
+ PR tree-optimization/59014
16253
+ * gcc.c-torture/execute/pr59014.c: New test.
16255
+2013-11-27 Eric Botcazou <ebotcazou@adacore.com>
16257
+ * gcc.c-torture/execute/20131127-1.c: New test.
16259
+2013-11-25 Vidya Praveen <vidyapraveen@arm.com>
16261
+ Backport from mainline
16262
+ 2013-10-21 Vidya Praveen <vidyapraveen@arm.com>
16264
+ * gcc.dg/20050922-1.c: Remove stdlib.h and declare abort().
16265
+ * gcc.dg/20050922-1.c: Remove stdlib.h and declare abort() and exit().
16267
+2013-11-20 Dominik Vogt <vogt@linux.vnet.ibm.com>
16269
+ Backport from mainline
16270
+ * gcc.target/s390/htm-1.c: Rename to ...
16271
+ * gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c: ... this
16273
+ * gcc.target/s390/htm-xl-intrin-1.c: Rename to ...
16274
+ * gcc.target/s390/htm-builtins-compile-3.c: ... this one.
16275
+ * gcc.target/s390/htm-builtins-compile-2.c: New testcase.
16276
+ * gcc.target/s390/htm-builtins-1.c: New testcase.
16277
+ * gcc.target/s390/htm-builtins-2.c: New testcase.
16278
+ * gcc.target/s390/s390.exp: Add check for htm machine.
16280
+2013-11-19 Richard Biener <rguenther@suse.de>
16282
+ PR tree-optimization/57517
16283
+ * gfortran.fortran-torture/compile/pr57517.f90: New testcase.
16284
+ * gcc.dg/torture/pr57517.c: Likewise.
16286
+2013-11-19 Richard Biener <rguenther@suse.de>
16288
+ Backport from mainline
16289
+ 2013-11-05 Richard Biener <rguenther@suse.de>
16291
+ PR middle-end/58941
16292
+ * gcc.dg/torture/pr58941.c: New testcase.
16294
+2013-11-18 Richard Biener <rguenther@suse.de>
16296
+ Backport from mainline
16297
+ 2013-10-21 Richard Biener <rguenther@suse.de>
16299
+ PR tree-optimization/58794
16300
+ * c-c++-common/torture/pr58794-1.c: New testcase.
16301
+ * c-c++-common/torture/pr58794-2.c: Likewise.
16303
+ 2013-10-21 Richard Biener <rguenther@suse.de>
16305
+ PR middle-end/58742
16306
+ * c-c++-common/fold-divmul-1.c: New testcase.
16308
+ 2013-11-06 Richard Biener <rguenther@suse.de>
16310
+ PR tree-optimization/58653
16311
+ * gcc.dg/tree-ssa/predcom-6.c: New testcase.
16312
+ * gcc.dg/tree-ssa/predcom-7.c: Likewise.
16314
+ PR tree-optimization/59047
16315
+ * gcc.dg/torture/pr59047.c: New testcase.
16317
+ 2013-10-15 Richard Biener <rguenther@suse.de>
16319
+ PR tree-optimization/58143
16320
+ * gcc.dg/torture/pr58143-1.c: New testcase.
16321
+ * gcc.dg/torture/pr58143-2.c: Likewise.
16322
+ * gcc.dg/torture/pr58143-3.c: Likewise.
16324
+2013-11-17 Janus Weil <janus@gcc.gnu.org>
16326
+ Backport from mainline
16327
+ 2013-11-07 Janus Weil <janus@gcc.gnu.org>
16330
+ * gfortran.dg/constructor_9.f90: New.
16332
+2013-11-16 Janus Weil <janus@gcc.gnu.org>
16334
+ Backport from mainline
16335
+ 2013-09-20 Janus Weil <janus@gcc.gnu.org>
16338
+ * gfortran.dg/proc_ptr_43.f90: New.
16340
+2013-11-16 Paul Thomas <pault@gcc.gnu.org>
16343
+ * gfortran.dg/derived_external_function_1.f90 : New test
16345
+2013-11-14 Uros Bizjak <ubizjak@gmail.com>
16347
+ Backport from mainline
16348
+ 2013-11-06 Uros Bizjak <ubizjak@gmail.com>
16351
+ * gcc.target/i386/pr59021.c: New test.
16353
+2013-11-14 Jakub Jelinek <jakub@redhat.com>
16356
+ * gcc.c-torture/execute/pr59101.c: New test.
16358
+2013-11-11 Jakub Jelinek <jakub@redhat.com>
16360
+ Backported from mainline
16361
+ 2013-11-06 Jakub Jelinek <jakub@redhat.com>
16363
+ PR middle-end/58970
16364
+ * gcc.c-torture/compile/pr58970-1.c: New test.
16365
+ * gcc.c-torture/compile/pr58970-2.c: New test.
16367
+ 2013-11-05 Jakub Jelinek <jakub@redhat.com>
16369
+ PR rtl-optimization/58997
16370
+ * gcc.c-torture/compile/pr58997.c: New test.
16372
+2013-11-10 Wei Mi <wmi@google.com>
16374
+ * gcc.dg/pr57518.c: Backport regex fix from r200720.
16376
+2013-11-07 H.J. Lu <hongjiu.lu@intel.com>
16378
+ Backport from mainline
16379
+ 2013-11-07 H.J. Lu <hongjiu.lu@intel.com>
16382
+ * gcc.target/i386/pr59034-1.c: New test.
16383
+ * gcc.target/i386/pr59034-2.c: Likewise.
16385
+2013-11-06 Wei Mi <wmi@google.com>
16387
+ PR regression/58985
16388
+ * gcc.dg/pr57518.c: Add subreg in regexp pattern.
16390
+2013-11-05 Steven G. Kargl <kargl@gcc.gnu.org>
16393
+ * gfortran.dg/reshape_6.f90: New test.
16395
+2013-11-05 Jakub Jelinek <jakub@redhat.com>
16397
+ PR tree-optimization/58984
16398
+ * gcc.c-torture/execute/pr58984.c: New test.
16400
+2013-11-04 Marek Polacek <polacek@redhat.com>
16402
+ Backport from mainline
16403
+ 2013-11-04 Marek Polacek <polacek@redhat.com>
16406
+ * g++.dg/diagnostic/pr58979.C: New test.
16408
+2013-11-03 H.J. Lu <hongjiu.lu@intel.com>
16410
+ Backport from mainline
16411
+ 2013-10-12 H.J. Lu <hongjiu.lu@intel.com>
16414
+ * gcc.target/i386/pr58690.c: New test
16416
+2013-11-02 Janus Weil <janus@gcc.gnu.org>
16418
+ Backport from mainline
16419
+ 2013-09-23 Janus Weil <janus@gcc.gnu.org>
16422
+ * gfortran.dg/extends_15.f90: New.
16424
+2013-10-29 Uros Bizjak <ubizjak@gmail.com>
16426
+ Backport from mainline
16427
+ 2013-08-08 Richard Sandiford <rdsandiford@googlemail.com>
16429
+ PR rtl-optimization/58079
16430
+ * gcc.dg/torture/pr58079.c: New test.
16432
+2013-10-28 Tom de Vries <tom@codesourcery.com>
16434
+ * gcc.target/arm/require-pic-register-loc.c: New test.
16436
+2013-10-26 Uros Bizjak <ubizjak@gmail.com>
16438
+ Backport from mainline
16439
+ 2013-10-22 Uros Bizjak <ubizjak@gmail.com>
16442
+ * gcc.target/i386/pr30315.c: Remove MINUSCC, DECCC, MINUSCCONLY
16443
+ and MINUSCCZEXT defines. Update scan-assembler dg directive.
16444
+ * gcc.dg/torture/pr58779.c: New test.
16446
+2013-10-25 Richard Henderson <rth@redhat.com>
16449
+ * gcc.dg/atomic-store-6.c: New.
16451
+2013-10-25 Tom de Vries <tom@codesourcery.com>
16454
+ * g++.dg/tm/noexcept-6.C: New test.
16456
+2013-10-25 Eric Botcazou <ebotcazou@adacore.com>
16458
+ * gcc.c-torture/execute/pr58831.c: New test.
16460
+2013-10-23 Tom de Vries <tom@codesourcery.com>
16462
+ PR tree-optimization/58805
16463
+ * gcc.dg/pr58805.c: New test.
16465
+2013-10-23 Richard Biener <rguenther@suse.de>
16467
+ * gcc.dg/torture/pr58830.c: New testcase.
16469
+ Backport from mainline
16470
+ 2013-06-24 Richard Biener <rguenther@suse.de>
16472
+ PR tree-optimization/57488
16473
+ * gcc.dg/torture/pr57488.c: New testcase.
16475
+2013-10-19 Oleg Endo <olegendo@gcc.gnu.org>
16477
+ * gcc.target/sh/pr54089-3.c: Fix test for load of constant 31.
16479
+2013-10-17 Paolo Carlini <paolo.carlini@oracle.com>
16482
+ * g++.dg/cpp0x/lambda/lambda-nsdmi5.C: New
16484
+2013-10-16 Paolo Carlini <paolo.carlini@oracle.com>
16487
+ * g++.dg/cpp0x/decltype57.C: New.
16488
+ * g++.dg/cpp0x/enum18.C: Revert r174385 changes.
16490
2013-10-16 Release Manager
16492
* GCC 4.8.2 released.
16493
@@ -39,9 +1019,9 @@
16494
Backport from mainline
16495
2013-06-27 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
16497
- * gcc.target/s390/htm-1.c: New file.
16498
- * gcc.target/s390/htm-nofloat-1.c: New file.
16499
- * gcc.target/s390/htm-xl-intrin-1.c: New file.
16500
+ * gcc.target/s390/htm-1.c: New file.
16501
+ * gcc.target/s390/htm-nofloat-1.c: New file.
16502
+ * gcc.target/s390/htm-xl-intrin-1.c: New file.
16504
2013-10-04 Tobias Burnus <burnus@net-b.de>
16506
@@ -307,8 +1287,8 @@
16507
Backport from mainline
16508
2013-08-12 Perez Read <netfirewall@gmail.com>
16511
- * gcc.target/i386/movabs-1.c: New test.
16513
+ * gcc.target/i386/movabs-1.c: New test.
16515
2013-08-11 Janus Weil <janus@gcc.gnu.org>
16517
@@ -494,7 +1474,7 @@
16518
2013-06-19 Wei Mi <wmi@google.com>
16520
PR rtl-optimization/57518
16521
- * testsuite/gcc.dg/pr57518.c: New test.
16522
+ * gcc.dg/pr57518.c: New test.
16524
2013-06-11 Tobias Burnus <burnus@net-b.de>
16526
@@ -623,8 +1603,8 @@
16528
2013-05-09 Martin Jambor <mjambor@suse.cz>
16530
- PR middle-end/56988
16531
- * gcc.dg/ipa/pr56988.c: New test.
16532
+ PR middle-end/56988
16533
+ * gcc.dg/ipa/pr56988.c: New test.
16535
2013-05-08 Marc Glisse <marc.glisse@inria.fr>
16537
@@ -701,7 +1681,7 @@
16538
2013-04-25 Marek Polacek <polacek@redhat.com>
16540
PR tree-optimization/57066
16541
- * gcc.dg/torture/builtin-logb-1.c: Adjust testcase.
16542
+ * gcc.dg/torture/builtin-logb-1.c: Adjust testcase.
16544
2013-05-02 Jakub Jelinek <jakub@redhat.com>
16546
@@ -727,8 +1707,8 @@
16547
Backport from mainline
16548
2013-04-24 Vladimir Makarov <vmakarov@redhat.com>
16550
- PR rtl-optimizations/57046
16551
- * gcc.target/i386/pr57046.c: New test.
16552
+ PR rtl-optimizations/57046
16553
+ * gcc.target/i386/pr57046.c: New test.
16555
2013-05-02 Vladimir Makarov <vmakarov@redhat.com>
16557
@@ -735,8 +1715,8 @@
16558
Backport from mainline
16559
2013-04-22 Vladimir Makarov <vmakarov@redhat.com>
16562
- * gcc.target/i386/pr57018.c: New test.
16564
+ * gcc.target/i386/pr57018.c: New test.
16566
2013-05-02 Vladimir Makarov <vmakarov@redhat.com>
16568
@@ -743,8 +1723,8 @@
16569
Backport from mainline
16570
2013-04-18 Jakub Jelinek <jakub@redhat.com>
16572
- PR rtl-optimization/56999
16573
- * g++.dg/opt/pr56999.C: New test.
16574
+ PR rtl-optimization/56999
16575
+ * g++.dg/opt/pr56999.C: New test.
16577
2013-05-02 Vladimir Makarov <vmakarov@redhat.com>
16579
@@ -751,8 +1731,8 @@
16580
Backport from mainline
16581
2013-04-19 Vladimir Makarov <vmakarov@redhat.com>
16583
- PR rtl-optimization/56847
16584
- * gcc.dg/pr56847.c: New test.
16585
+ PR rtl-optimization/56847
16586
+ * gcc.dg/pr56847.c: New test.
16588
2013-05-02 Ian Bolton <ian.bolton@arm.com>
16590
@@ -1102,7 +2082,7 @@
16591
2013-03-29 Tobias Burnus <burnus@net-b.de>
16594
- * testsuite/gfortran.dg/fmt_cache_3.f90: New.
16595
+ * gfortran.dg/fmt_cache_3.f90: New.
16597
2013-04-02 Richard Biener <rguenther@suse.de>
16599
@@ -1636,7 +2616,7 @@
16600
2013-02-20 Jan Hubicka <jh@suse.cz>
16602
PR tree-optimization/56265
16603
- * testsuite/g++.dg/ipa/devirt-11.C: New testcase.
16604
+ * g++.dg/ipa/devirt-11.C: New testcase.
16606
2013-02-20 Richard Biener <rguenther@suse.de>
16608
@@ -1823,11 +2803,9 @@
16610
Avoid instrumenting duplicated memory access in the same basic block
16611
* c-c++-common/asan/no-redundant-instrumentation-1.c: New test.
16612
- * testsuite/c-c++-common/asan/no-redundant-instrumentation-2.c:
16614
- * testsuite/c-c++-common/asan/no-redundant-instrumentation-3.c:
16616
- * testsuite/c-c++-common/asan/inc.c: Likewise.
16617
+ * c-c++-common/asan/no-redundant-instrumentation-2.c: Likewise.
16618
+ * c-c++-common/asan/no-redundant-instrumentation-3.c: Likewise.
16619
+ * c-c++-common/asan/inc.c: Likewise.
16621
2013-02-12 Vladimir Makarov <vmakarov@redhat.com>
16623
Index: gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90
16624
===================================================================
16625
--- a/src/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90 (.../tags/gcc_4_8_2_release)
16626
+++ b/src/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90 (.../branches/gcc-4_8-branch)
16628
+SUBROUTINE cal_helicity (uh, ph, phb, wavg, ims, ime, its, ite)
16629
+ INTEGER, INTENT( IN ) :: ims, ime, its, ite
16630
+ REAL, DIMENSION( ims:ime), INTENT( IN ) :: ph, phb, wavg
16631
+ REAL, DIMENSION( ims:ime), INTENT( INOUT ) :: uh
16635
+ zu = (ph(i ) + phb(i)) + (ph(i-1) + phb(i-1))
16636
+ IF (wavg(i) .GT. 0) THEN
16637
+ uh(i) = uh(i) + zu
16640
+END SUBROUTINE cal_helicity
16641
Index: gcc/testsuite/g++.dg/ext/attribute-test-2.C
16642
===================================================================
16643
--- a/src/gcc/testsuite/g++.dg/ext/attribute-test-2.C (.../tags/gcc_4_8_2_release)
16644
+++ b/src/gcc/testsuite/g++.dg/ext/attribute-test-2.C (.../branches/gcc-4_8-branch)
16647
/* Ignore a warning that is irrelevant to the purpose of this test. */
16648
/* { dg-prune-output ".*GCC vector returned by reference.*" } */
16649
+/* { dg-prune-output "changes the ABI" } */
16650
Index: gcc/testsuite/g++.dg/ext/attribute-test-3.C
16651
===================================================================
16652
--- a/src/gcc/testsuite/g++.dg/ext/attribute-test-3.C (.../tags/gcc_4_8_2_release)
16653
+++ b/src/gcc/testsuite/g++.dg/ext/attribute-test-3.C (.../branches/gcc-4_8-branch)
16656
/* Ignore a warning that is irrelevant to the purpose of this test. */
16657
/* { dg-prune-output ".*GCC vector returned by reference.*" } */
16658
+/* { dg-prune-output "changes the ABI" } */
16659
Index: gcc/testsuite/g++.dg/ext/traits1.C
16660
===================================================================
16661
--- a/src/gcc/testsuite/g++.dg/ext/traits1.C (.../tags/gcc_4_8_2_release)
16662
+++ b/src/gcc/testsuite/g++.dg/ext/traits1.C (.../branches/gcc-4_8-branch)
16666
+template<bool = __has_nothrow_assign(void)> struct A {};
16668
Index: gcc/testsuite/g++.dg/ext/attribute-test-4.C
16669
===================================================================
16670
--- a/src/gcc/testsuite/g++.dg/ext/attribute-test-4.C (.../tags/gcc_4_8_2_release)
16671
+++ b/src/gcc/testsuite/g++.dg/ext/attribute-test-4.C (.../branches/gcc-4_8-branch)
16674
/* Ignore a warning that is irrelevant to the purpose of this test. */
16675
/* { dg-prune-output ".*GCC vector returned by reference.*" } */
16676
+/* { dg-prune-output "changes the ABI" } */
16677
Index: gcc/testsuite/g++.dg/ext/stmtexpr15.C
16678
===================================================================
16679
--- a/src/gcc/testsuite/g++.dg/ext/stmtexpr15.C (.../tags/gcc_4_8_2_release)
16680
+++ b/src/gcc/testsuite/g++.dg/ext/stmtexpr15.C (.../branches/gcc-4_8-branch)
16683
+// { dg-options "" }
16687
+ int x[({ return; })]; // { dg-error "non-integral" }
16689
Index: gcc/testsuite/g++.dg/ext/vector25.C
16690
===================================================================
16691
--- a/src/gcc/testsuite/g++.dg/ext/vector25.C (.../tags/gcc_4_8_2_release)
16692
+++ b/src/gcc/testsuite/g++.dg/ext/vector25.C (.../branches/gcc-4_8-branch)
16694
+volatile int i __attribute__((vector_size(8)));
16700
Index: gcc/testsuite/g++.dg/ext/builtin-bswap1.C
16701
===================================================================
16702
--- a/src/gcc/testsuite/g++.dg/ext/builtin-bswap1.C (.../tags/gcc_4_8_2_release)
16703
+++ b/src/gcc/testsuite/g++.dg/ext/builtin-bswap1.C (.../branches/gcc-4_8-branch)
16706
+// { dg-do compile }
16708
+#if defined(__UINT32_TYPE__) && defined(__INT32_TYPE__)
16710
+void foo (__UINT32_TYPE__);
16711
+void foo (__INT32_TYPE__);
16714
+bar (__UINT32_TYPE__ x)
16716
+ foo (__builtin_bswap32 (x));
16727
Index: gcc/testsuite/g++.dg/ext/attrib48.C
16728
===================================================================
16729
--- a/src/gcc/testsuite/g++.dg/ext/attrib48.C (.../tags/gcc_4_8_2_release)
16730
+++ b/src/gcc/testsuite/g++.dg/ext/attrib48.C (.../branches/gcc-4_8-branch)
16734
+typedef unsigned L __attribute__ ((aligned));
16735
+typedef unsigned L __attribute__ ((aligned));
16738
Index: gcc/testsuite/g++.dg/ext/vector27.C
16739
===================================================================
16740
--- a/src/gcc/testsuite/g++.dg/ext/vector27.C (.../tags/gcc_4_8_2_release)
16741
+++ b/src/gcc/testsuite/g++.dg/ext/vector27.C (.../branches/gcc-4_8-branch)
16747
+ int v __attribute__((vector_size(8)));
16748
+ v = v || v; // { dg-bogus "" "" { xfail *-*-* } }
16750
Index: gcc/testsuite/g++.dg/ext/timevar2.C
16751
===================================================================
16752
--- a/src/gcc/testsuite/g++.dg/ext/timevar2.C (.../tags/gcc_4_8_2_release)
16753
+++ b/src/gcc/testsuite/g++.dg/ext/timevar2.C (.../branches/gcc-4_8-branch)
16756
+// { dg-options "-ftime-report" }
16757
+// { dg-prune-output "wall" }
16758
+// { dg-prune-output "times" }
16759
+// { dg-prune-output "TOTAL" }
16760
+// { dg-prune-output "checks" }
16762
+namespace detail {
16763
+namespace indirect_traits {}
16764
+using namespace indirect_traits;
16766
+using namespace detail;
16769
Index: gcc/testsuite/g++.dg/ext/attribute-test-1.C
16770
===================================================================
16771
--- a/src/gcc/testsuite/g++.dg/ext/attribute-test-1.C (.../tags/gcc_4_8_2_release)
16772
+++ b/src/gcc/testsuite/g++.dg/ext/attribute-test-1.C (.../branches/gcc-4_8-branch)
16775
/* Ignore a warning that is irrelevant to the purpose of this test. */
16776
/* { dg-prune-output ".*GCC vector returned by reference.*" } */
16777
+/* { dg-prune-output "changes the ABI" } */
16778
Index: gcc/testsuite/g++.dg/opt/pr59647.C
16779
===================================================================
16780
--- a/src/gcc/testsuite/g++.dg/opt/pr59647.C (.../tags/gcc_4_8_2_release)
16781
+++ b/src/gcc/testsuite/g++.dg/opt/pr59647.C (.../branches/gcc-4_8-branch)
16783
+// PR rtl-optimization/59647
16784
+// { dg-do compile }
16785
+// { dg-options "-O2 -fno-tree-vrp" }
16786
+// { dg-additional-options "-msse2 -mfpmath=sse" { target { { i?86-*-* x86_64-*-* } && ia32 } } }
16812
+ unsigned b = x->f5 ();
16813
+ f1 (b - 1 - f3 (x->f5 () - 1U));
16815
Index: gcc/testsuite/g++.dg/opt/pr59470.C
16816
===================================================================
16817
--- a/src/gcc/testsuite/g++.dg/opt/pr59470.C (.../tags/gcc_4_8_2_release)
16818
+++ b/src/gcc/testsuite/g++.dg/opt/pr59470.C (.../branches/gcc-4_8-branch)
16820
+// PR middle-end/59470
16822
+// { dg-options "-O2 -fstack-protector" }
16823
+// { dg-additional-options "-fPIC" { target fpic } }
16824
+// { dg-require-effective-target fstack_protector }
16829
+ A () throw () : a1 (0) {}
16834
+ unsigned int b1 () throw ();
16837
+__attribute__((noinline, noclone)) unsigned int
16840
+ asm volatile ("" : : : "memory");
16847
+ void c2 (const A *, unsigned int);
16850
+__attribute__((noinline, noclone)) void
16851
+C::c2 (const A *, unsigned int)
16853
+ asm volatile ("" : : : "memory");
16870
+ virtual int f1 (const char * s, int n);
16877
+ G & g3 (const char * ws, int len)
16879
+ if (__builtin_expect (!g2, true)
16880
+ && __builtin_expect (this->g1->f1 (ws, len) != len, false))
16886
+struct H : public A
16896
+ H () : h1 (0), h2 (0), h4 (0), h5 (0), h6 (0), h8 (false) {}
16897
+ void h9 (const D &) __attribute__((noinline, noclone));
16904
+ __builtin_memset (h7, 0, sizeof (h7));
16905
+ asm volatile ("" : : : "memory");
16913
+ const unsigned int i = b.b1 ();
16914
+ const A **j = x.d1->c1;
16928
+ return static_cast <const H *>(j[i]);
16931
+__attribute__((noinline, noclone)) int
16932
+bar (char *x, unsigned long v, const char *y, int z, bool w)
16934
+ asm volatile ("" : : "r" (x), "r" (v), "r" (y) : "memory");
16935
+ asm volatile ("" : : "r" (z), "r" (w) : "memory");
16939
+__attribute__((noinline, noclone)) void
16940
+baz (void *z, const char *g, unsigned int h, char s, E &e, char *n, char *c, int &l)
16942
+ asm volatile ("" : : "r" (z), "r" (g), "r" (h) : "memory");
16943
+ asm volatile ("" : : "r" (s), "r" (&e), "r" (n) : "memory");
16944
+ asm volatile ("" : : "r" (c), "r" (&l) : "memory");
16946
+ __builtin_abort ();
16948
+ asm ("" : "+r" (i));
16950
+ __builtin_exit (0);
16953
+__attribute__((noinline, noclone)) G
16954
+test (void *z, G s, E &x, char, long v)
16956
+ const D &d = x.e3;
16957
+ const H *h = foo (d);
16958
+ const char *q = h->h7;
16959
+ const int f = x.e2;
16960
+ const int i = 5 * sizeof (long);
16961
+ char *c = static_cast <char *>(__builtin_alloca (i));
16962
+ const int b = f & 74;
16963
+ const bool e = (b != 64 && b != 8);
16964
+ const unsigned long u = ((v > 0 || !e) ? (unsigned long) v : -(unsigned long) v);
16965
+ int l = bar (c + i, u, q, f, e);
16969
+ char *c2 = static_cast <char *>(__builtin_alloca ((l + 1) * 2));
16970
+ baz (z, h->h1, h->h2, h->h6, x, c2 + 2, c, l);
16973
+ if (__builtin_expect (e, true))
16976
+ else if ((f & 4096) && v)
16979
+ const bool m = f & 176;
16984
+ const int w = x.e1;
16987
+ char * c3 = static_cast <char *>(__builtin_alloca (w));
16990
+ return s.g3 (c, l);
17005
+ test (0, g, e, 0, 0);
17006
+ __builtin_abort ();
17008
Index: gcc/testsuite/g++.dg/opt/pr58864.C
17009
===================================================================
17010
--- a/src/gcc/testsuite/g++.dg/opt/pr58864.C (.../tags/gcc_4_8_2_release)
17011
+++ b/src/gcc/testsuite/g++.dg/opt/pr58864.C (.../branches/gcc-4_8-branch)
17013
+// PR target/58864
17014
+// { dg-do compile }
17015
+// { dg-options "-Os" }
17016
+// { dg-additional-options "-march=i686" { target { { i?86-*-* x86_64-*-* } && ia32 } } }
17018
+struct A { A (); ~A (); };
17019
+struct B { B (); };
17034
Index: gcc/testsuite/g++.dg/tree-prof/pr59255.C
17035
===================================================================
17036
--- a/src/gcc/testsuite/g++.dg/tree-prof/pr59255.C (.../tags/gcc_4_8_2_release)
17037
+++ b/src/gcc/testsuite/g++.dg/tree-prof/pr59255.C (.../branches/gcc-4_8-branch)
17040
+// { dg-options "-O2 -std=c++11" }
17044
+ __attribute__((noinline, noclone)) ~S () noexcept (true)
17049
+ void (*fn) (int);
17052
+__attribute__((noinline, noclone)) void
17062
+ for (int i = 0; i < 100; i++)
17068
Index: gcc/testsuite/g++.dg/gomp/for-20.C
17069
===================================================================
17070
--- a/src/gcc/testsuite/g++.dg/gomp/for-20.C (.../tags/gcc_4_8_2_release)
17071
+++ b/src/gcc/testsuite/g++.dg/gomp/for-20.C (.../branches/gcc-4_8-branch)
17074
+// { dg-do compile }
17075
+// { dg-options -fopenmp }
17077
+int foo() { return 0; }
17079
+template<typename T> void bar()
17081
+#pragma omp parallel for
17082
+ for (T i = foo(); i < 8; ++i) {}
17089
Index: gcc/testsuite/g++.dg/gomp/pr59297.C
17090
===================================================================
17091
--- a/src/gcc/testsuite/g++.dg/gomp/pr59297.C (.../tags/gcc_4_8_2_release)
17092
+++ b/src/gcc/testsuite/g++.dg/gomp/pr59297.C (.../branches/gcc-4_8-branch)
17095
+// { dg-do compile }
17096
+// { dg-options "-fopenmp" }
17098
+template <typename T>
17102
+ const T &operator[] (int) const;
17107
+ int &operator () (A <int>);
17111
+foo (B &x, int &z)
17114
+ #pragma omp atomic
17116
+ #pragma omp atomic
17119
Index: gcc/testsuite/g++.dg/diagnostic/pr59838.C
17120
===================================================================
17121
--- a/src/gcc/testsuite/g++.dg/diagnostic/pr59838.C (.../tags/gcc_4_8_2_release)
17122
+++ b/src/gcc/testsuite/g++.dg/diagnostic/pr59838.C (.../branches/gcc-4_8-branch)
17125
+// { dg-do compile }
17127
+enum E { a, b = (E) a }; // { dg-error "conversion to incomplete type" }
17128
Index: gcc/testsuite/g++.dg/diagnostic/pr58979.C
17129
===================================================================
17130
--- a/src/gcc/testsuite/g++.dg/diagnostic/pr58979.C (.../tags/gcc_4_8_2_release)
17131
+++ b/src/gcc/testsuite/g++.dg/diagnostic/pr58979.C (.../branches/gcc-4_8-branch)
17134
+// { dg-do compile }
17136
+int i = 0->*0; // { dg-error "invalid type argument of" }
17137
Index: gcc/testsuite/g++.dg/conversion/simd1.C
17138
===================================================================
17139
--- a/src/gcc/testsuite/g++.dg/conversion/simd1.C (.../tags/gcc_4_8_2_release)
17140
+++ b/src/gcc/testsuite/g++.dg/conversion/simd1.C (.../branches/gcc-4_8-branch)
17142
/* { dg-do compile } */
17143
+/* { dg-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
17145
/* Test overload resolution of vector types.
17146
From Janis Johnson and Paolo Bonzini, based on PR/16882 */
17150
vss = vld(i, vscp); /* { dg-error "no matching function for call" } */
17151
- // { dg-message "candidate" "candidate note" { target *-*-* } 19 }
17152
+ // { dg-message "candidate" "candidate note" { target *-*-* } 20 }
17153
vss = vld(i, vssp);
17154
vss = vld(i, cvssp);
17156
Index: gcc/testsuite/g++.dg/tls/thread_local8.C
17157
===================================================================
17158
--- a/src/gcc/testsuite/g++.dg/tls/thread_local8.C (.../tags/gcc_4_8_2_release)
17159
+++ b/src/gcc/testsuite/g++.dg/tls/thread_local8.C (.../branches/gcc-4_8-branch)
17162
+// { dg-options "-std=c++11" }
17163
+// { dg-require-alias "" }
17164
+// { dg-require-effective-target tls }
17165
+// { dg-final { scan-assembler "_ZTH12foo_instance" { target tls_native } } }
17172
+thread_local foo foo_instance;
17173
Index: gcc/testsuite/g++.dg/tls/thread_local-ice2.C
17174
===================================================================
17175
--- a/src/gcc/testsuite/g++.dg/tls/thread_local-ice2.C (.../tags/gcc_4_8_2_release)
17176
+++ b/src/gcc/testsuite/g++.dg/tls/thread_local-ice2.C (.../branches/gcc-4_8-branch)
17179
+// { dg-options "-std=c++11" }
17180
+// { dg-require-effective-target tls }
17185
+ i; // { dg-error "" }
17188
+thread_local A a(0);
17189
Index: gcc/testsuite/g++.dg/tm/pr60004.C
17190
===================================================================
17191
--- a/src/gcc/testsuite/g++.dg/tm/pr60004.C (.../tags/gcc_4_8_2_release)
17192
+++ b/src/gcc/testsuite/g++.dg/tm/pr60004.C (.../branches/gcc-4_8-branch)
17194
+// { dg-do compile }
17195
+// { dg-options "-fgnu-tm" }
17199
+ __transaction_atomic {
17204
Index: gcc/testsuite/g++.dg/tm/noexcept-6.C
17205
===================================================================
17206
--- a/src/gcc/testsuite/g++.dg/tm/noexcept-6.C (.../tags/gcc_4_8_2_release)
17207
+++ b/src/gcc/testsuite/g++.dg/tm/noexcept-6.C (.../branches/gcc-4_8-branch)
17209
+// { dg-do compile }
17210
+// { dg-options "-fno-exceptions -fgnu-tm -O -std=c++0x -fdump-tree-tmlower" }
17214
+ static constexpr bool v() { return true; }
17219
+template<typename T> int foo()
17221
+ return __transaction_atomic noexcept(T::v()) (global + 1);
17226
+ return foo<TrueFalse>();
17229
+/* { dg-final { scan-tree-dump-times "eh_must_not_throw" 0 "tmlower" } } */
17230
+/* { dg-final { scan-tree-dump-times "__transaction_atomic" 1 "tmlower" } } */
17231
+/* { dg-final { cleanup-tree-dump "tmlower" } } */
17232
Index: gcc/testsuite/g++.dg/pr59695.C
17233
===================================================================
17234
--- a/src/gcc/testsuite/g++.dg/pr59695.C (.../tags/gcc_4_8_2_release)
17235
+++ b/src/gcc/testsuite/g++.dg/pr59695.C (.../branches/gcc-4_8-branch)
17238
+/* PR target/59695 */
17239
+/* { dg-do run } */
17240
+/* { dg-options "-O0" } */
17242
+#define DEFINE_VIRTUALS_FNS(i) virtual void xxx##i () {} \
17243
+ virtual void foo1_##i () {}\
17244
+ virtual void foo2_##i () {}\
17245
+ virtual void foo3_##i () {}\
17246
+ virtual void foo4_##i () {}\
17247
+ virtual void foo5_##i () {}\
17248
+ virtual void foo6_##i () {}\
17249
+ virtual void foo7_##i () {}\
17250
+ virtual void foo8_##i () {}\
17251
+ virtual void foo9_##i () {}\
17252
+ virtual void foo10_##i () {}\
17253
+ virtual void foo11_##i () {}\
17254
+ virtual void foo12_##i () {}\
17255
+ virtual void foo13_##i () {}\
17256
+ virtual void foo14_##i () {}\
17257
+ virtual void foo15_##i () {}\
17258
+ virtual void foo16_##i () {}\
17259
+ virtual void foo17_##i () {}\
17260
+ virtual void foo18_##i () {}\
17261
+ virtual void foo19_##i () {}\
17262
+ virtual void foo20_##i () {}\
17263
+ virtual void foo21_##i () {}\
17264
+ virtual void foo22_##i () {}\
17266
+class base_class_2
17270
+ /* Define lots of virtual functions */
17271
+ DEFINE_VIRTUALS_FNS (1)
17272
+ DEFINE_VIRTUALS_FNS (2)
17273
+ DEFINE_VIRTUALS_FNS (3)
17274
+ DEFINE_VIRTUALS_FNS (4)
17275
+ DEFINE_VIRTUALS_FNS (5)
17276
+ DEFINE_VIRTUALS_FNS (6)
17277
+ DEFINE_VIRTUALS_FNS (7)
17278
+ DEFINE_VIRTUALS_FNS (8)
17279
+ DEFINE_VIRTUALS_FNS (9)
17280
+ DEFINE_VIRTUALS_FNS (10)
17281
+ DEFINE_VIRTUALS_FNS (11)
17282
+ DEFINE_VIRTUALS_FNS (12)
17283
+ DEFINE_VIRTUALS_FNS (13)
17284
+ DEFINE_VIRTUALS_FNS (14)
17285
+ DEFINE_VIRTUALS_FNS (15)
17286
+ DEFINE_VIRTUALS_FNS (16)
17287
+ DEFINE_VIRTUALS_FNS (17)
17288
+ DEFINE_VIRTUALS_FNS (18)
17289
+ DEFINE_VIRTUALS_FNS (19)
17290
+ DEFINE_VIRTUALS_FNS (20)
17293
+ virtual ~base_class_2 ();
17296
+base_class_2::base_class_2()
17300
+base_class_2::~base_class_2 ()
17304
+class base_class_1
17307
+ virtual ~base_class_1();
17311
+base_class_1::base_class_1()
17315
+base_class_1::~base_class_1()
17319
+class base_Impl_class :
17320
+ virtual public base_class_2, public base_class_1
17323
+ base_Impl_class ();
17324
+ virtual ~base_Impl_class ();
17327
+base_Impl_class::base_Impl_class ()
17331
+base_Impl_class::~base_Impl_class ()
17336
+class test_cls : public base_Impl_class
17340
+ virtual ~test_cls();
17343
+test_cls::test_cls()
17347
+test_cls::~test_cls()
17353
+ test_cls *test = new test_cls;
17354
+ base_class_2 *p1 = test;
17356
+ /* PR59695 destructor thunk offsets are not setup
17357
+ correctly resulting in crash. */
17362
Index: gcc/testsuite/g++.dg/cpp0x/initlist79.C
17363
===================================================================
17364
--- a/src/gcc/testsuite/g++.dg/cpp0x/initlist79.C (.../tags/gcc_4_8_2_release)
17365
+++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist79.C (.../branches/gcc-4_8-branch)
17368
+// { dg-require-effective-target c++11 }
17370
+#include <initializer_list>
17374
+std::initializer_list<volatile A> x = {{}};
17375
Index: gcc/testsuite/g++.dg/cpp0x/enum_base2.C
17376
===================================================================
17377
--- a/src/gcc/testsuite/g++.dg/cpp0x/enum_base2.C (.../tags/gcc_4_8_2_release)
17378
+++ b/src/gcc/testsuite/g++.dg/cpp0x/enum_base2.C (.../branches/gcc-4_8-branch)
17381
+// { dg-require-effective-target c++11 }
17383
+template<typename... T> struct A
17385
+ enum E : T {}; // { dg-error "parameter pack" }
17389
Index: gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C
17390
===================================================================
17391
--- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C (.../tags/gcc_4_8_2_release)
17392
+++ b/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C (.../branches/gcc-4_8-branch)
17395
+// { dg-do compile { target c++11 } }
17399
+ int i = [] { return decltype(i)(); }();
17401
Index: gcc/testsuite/g++.dg/cpp0x/variadic149.C
17402
===================================================================
17403
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic149.C (.../tags/gcc_4_8_2_release)
17404
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic149.C (.../branches/gcc-4_8-branch)
17407
+// { dg-options "-std=c++11 -g -fabi-version=2" }
17409
+template<int...> struct A {};
17411
+template<> struct A<0>
17413
+ typedef enum { e } B;
17417
Index: gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C
17418
===================================================================
17419
--- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C (.../tags/gcc_4_8_2_release)
17420
+++ b/src/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C (.../branches/gcc-4_8-branch)
17422
// { dg-options "-std=gnu++11" }
17423
// Ignore warning on some powerpc-ibm-aix configurations.
17424
// { dg-prune-output "non-standard ABI extension" }
17425
+// { dg-prune-output "changes the ABI" }
17427
typedef float __attribute__ ((vector_size (4 * sizeof (float)))) V4;
17428
constexpr V4 build (float x, float y, float z) { return (V4){ x, y, z, 0 };}
17429
Index: gcc/testsuite/g++.dg/cpp0x/defaulted48.C
17430
===================================================================
17431
--- a/src/gcc/testsuite/g++.dg/cpp0x/defaulted48.C (.../tags/gcc_4_8_2_release)
17432
+++ b/src/gcc/testsuite/g++.dg/cpp0x/defaulted48.C (.../branches/gcc-4_8-branch)
17435
+// { dg-require-effective-target c++11 }
17437
+template<int> struct A
17442
+template<typename> struct B : A<0>, A<1>
17447
+struct C : B<bool>
17451
Index: gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C
17452
===================================================================
17453
--- a/src/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C (.../tags/gcc_4_8_2_release)
17454
+++ b/src/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C (.../branches/gcc-4_8-branch)
17457
+// { dg-require-effective-target c++11 }
17460
+template <typename> using __allocator_base = B;
17461
+template <typename> class F : __allocator_base<int> {};
17463
+template <typename, typename = F<int> > class G : C {};
17464
+template <typename> class D;
17466
+ using Container = G<D<char>>;
17468
+ A(D<char> const &);
17469
+ Container m_elements;
17471
+template <template <class, class> class C, class A = F<D<int>>>
17472
+void doSomething(C<D<char>, A> &);
17473
+A::A(D<char> const &) : A() { doSomething(m_elements); }
17474
Index: gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C
17475
===================================================================
17476
--- a/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C (.../tags/gcc_4_8_2_release)
17477
+++ b/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C (.../branches/gcc-4_8-branch)
17480
+// { dg-require-effective-target c++11 }
17489
Index: gcc/testsuite/g++.dg/cpp0x/variadic144.C
17490
===================================================================
17491
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic144.C (.../tags/gcc_4_8_2_release)
17492
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic144.C (.../branches/gcc-4_8-branch)
17495
+// { dg-do compile { target c++11 } }
17497
+template<typename T> struct baz { };
17498
+template<typename T> T bar();
17500
+template<typename T, typename ... U>
17501
+baz<decltype(bar<T>()(bar<U> ...))> // { dg-error "cannot be used" }
17506
+ foo<int>(); // { dg-error "no matching" }
17509
Index: gcc/testsuite/g++.dg/cpp0x/enum18.C
17510
===================================================================
17511
--- a/src/gcc/testsuite/g++.dg/cpp0x/enum18.C (.../tags/gcc_4_8_2_release)
17512
+++ b/src/gcc/testsuite/g++.dg/cpp0x/enum18.C (.../branches/gcc-4_8-branch)
17517
- ev.e::~e_u(); // { dg-error "e_u. has not been declared" }
17518
+ ev.e::~e_u(); // { dg-error "" }
17520
Index: gcc/testsuite/g++.dg/cpp0x/noexcept22.C
17521
===================================================================
17522
--- a/src/gcc/testsuite/g++.dg/cpp0x/noexcept22.C (.../tags/gcc_4_8_2_release)
17523
+++ b/src/gcc/testsuite/g++.dg/cpp0x/noexcept22.C (.../branches/gcc-4_8-branch)
17526
+// { dg-require-effective-target c++11 }
17528
+constexpr bool foo () { return noexcept (true); }
17529
+template <typename T>
17532
+ void bar (V &) noexcept (foo ()) {}
17534
+template <typename T>
17535
+struct W : public V <int>
17537
+ void bar (W &x) { V <int>::bar (x); }
17546
Index: gcc/testsuite/g++.dg/cpp0x/initlist76.C
17547
===================================================================
17548
--- a/src/gcc/testsuite/g++.dg/cpp0x/initlist76.C (.../tags/gcc_4_8_2_release)
17549
+++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist76.C (.../branches/gcc-4_8-branch)
17552
+// { dg-require-effective-target c++11 }
17555
+int&& j{{ i }}; // { dg-error "too many braces" }
17556
Index: gcc/testsuite/g++.dg/cpp0x/access02.C
17557
===================================================================
17558
--- a/src/gcc/testsuite/g++.dg/cpp0x/access02.C (.../tags/gcc_4_8_2_release)
17559
+++ b/src/gcc/testsuite/g++.dg/cpp0x/access02.C (.../branches/gcc-4_8-branch)
17562
+// { dg-require-effective-target c++11 }
17568
+struct foo_argument
17570
+ template<class Ret, class C, class Arg>
17571
+ static Arg test(Ret (C::*)(Arg));
17573
+ typedef decltype(test(&T::template foo<>)) type;
17576
+template<class T, class>
17577
+struct dependent { typedef T type; };
17582
+ template<class Ignore = void>
17583
+ auto foo(int i) -> decltype(declval<
17584
+ typename dependent<T&, Ignore>::type
17585
+ >().foo_impl(i));
17588
+struct derived : base<derived>
17590
+ friend struct base<derived>;
17592
+ int foo_impl(int i);
17597
+ foo_argument<derived>::type var = 0;
17600
Index: gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C
17601
===================================================================
17602
--- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C (.../tags/gcc_4_8_2_release)
17603
+++ b/src/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C (.../branches/gcc-4_8-branch)
17606
+// { dg-do compile }
17607
+// { dg-options "-std=c++11" }
17609
+template <typename>
17612
+ constexpr A (int) {}
17613
+ virtual void foo ()
17615
+ constexpr A<void> a (0);
17625
Index: gcc/testsuite/g++.dg/cpp0x/initlist78.C
17626
===================================================================
17627
--- a/src/gcc/testsuite/g++.dg/cpp0x/initlist78.C (.../tags/gcc_4_8_2_release)
17628
+++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist78.C (.../branches/gcc-4_8-branch)
17631
+// { dg-require-effective-target c++11 }
17641
+vector v({}); // { dg-error "" }
17642
Index: gcc/testsuite/g++.dg/cpp0x/variadic148.C
17643
===================================================================
17644
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic148.C (.../tags/gcc_4_8_2_release)
17645
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic148.C (.../branches/gcc-4_8-branch)
17648
+// { dg-require-effective-target c++11 }
17650
+template<typename T> struct X {};
17651
+template<template<typename...> class D, typename ...U> int test(D<U...>*);
17652
+int n = test<X, int>(0); // { dg-error "no match" }
17653
Index: gcc/testsuite/g++.dg/cpp0x/nsdmi9.C
17654
===================================================================
17655
--- a/src/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C (.../tags/gcc_4_8_2_release)
17656
+++ b/src/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C (.../branches/gcc-4_8-branch)
17659
+// { dg-require-effective-target c++11 }
17671
Index: gcc/testsuite/g++.dg/cpp0x/deleted3.C
17672
===================================================================
17673
--- a/src/gcc/testsuite/g++.dg/cpp0x/deleted3.C (.../tags/gcc_4_8_2_release)
17674
+++ b/src/gcc/testsuite/g++.dg/cpp0x/deleted3.C (.../branches/gcc-4_8-branch)
17677
+// { dg-require-effective-target c++11 }
17681
+ template<typename T> A(T) = delete;
17684
+template<> A::A<int>(int) {}
17687
Index: gcc/testsuite/g++.dg/cpp0x/variadic150.C
17688
===================================================================
17689
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic150.C (.../tags/gcc_4_8_2_release)
17690
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic150.C (.../branches/gcc-4_8-branch)
17693
+// { dg-require-effective-target c++11 }
17695
+template<typename..., int> void foo();
17699
+ foo<0>; // { dg-error "" }
17701
Index: gcc/testsuite/g++.dg/cpp0x/static_assert9.C
17702
===================================================================
17703
--- a/src/gcc/testsuite/g++.dg/cpp0x/static_assert9.C (.../tags/gcc_4_8_2_release)
17704
+++ b/src/gcc/testsuite/g++.dg/cpp0x/static_assert9.C (.../branches/gcc-4_8-branch)
17707
+// { dg-require-effective-target c++11 }
17710
+static_assert(f, "");
17712
+static_assert(A::~A, ""); // { dg-error "non-static member function" }
17713
Index: gcc/testsuite/g++.dg/cpp0x/variadic145.C
17714
===================================================================
17715
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic145.C (.../tags/gcc_4_8_2_release)
17716
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic145.C (.../branches/gcc-4_8-branch)
17719
+// { dg-do compile { target c++11 } }
17721
+template <typename> void declval();
17722
+template <typename> void forward();
17723
+template <typename> class D;
17724
+template <typename _Functor, typename... _Bound_args>
17725
+class D <_Functor(_Bound_args...)> {
17726
+ template <typename... _Args, decltype(declval<_Functor>)>
17727
+ void operator()(...) {
17728
+ 0(forward<_Args>...);
17731
Index: gcc/testsuite/g++.dg/cpp0x/decltype57.C
17732
===================================================================
17733
--- a/src/gcc/testsuite/g++.dg/cpp0x/decltype57.C (.../tags/gcc_4_8_2_release)
17734
+++ b/src/gcc/testsuite/g++.dg/cpp0x/decltype57.C (.../branches/gcc-4_8-branch)
17737
+// { dg-do compile { target c++11 } }
17742
+ decltype(i.I::~I())* p;
17744
Index: gcc/testsuite/g++.dg/cpp0x/variadic147.C
17745
===================================================================
17746
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic147.C (.../tags/gcc_4_8_2_release)
17747
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic147.C (.../branches/gcc-4_8-branch)
17750
+// { dg-require-effective-target c++11 }
17752
+template<char, char...> struct A;
17754
+template<typename> struct B;
17756
+template<char... C> struct B<A<C...>> {};
17759
Index: gcc/testsuite/g++.dg/eh/uncaught1.C
17760
===================================================================
17761
--- a/src/gcc/testsuite/g++.dg/eh/uncaught1.C (.../tags/gcc_4_8_2_release)
17762
+++ b/src/gcc/testsuite/g++.dg/eh/uncaught1.C (.../branches/gcc-4_8-branch)
17765
static Check const data[] = {
17766
{ 0, 0, false }, // construct [0]
17767
- { 1, 0, true }, // [1] = [0]
17768
+ { 1, 0, false }, // [1] = [0]
17769
{ 0, 0, true }, // destruct [0]
17770
{ 2, 1, true }, // [2] = [1]
17771
{ 2, 2, true }, // destruct [2]
17772
Index: gcc/testsuite/g++.dg/eh/uncaught4.C
17773
===================================================================
17774
--- a/src/gcc/testsuite/g++.dg/eh/uncaught4.C (.../tags/gcc_4_8_2_release)
17775
+++ b/src/gcc/testsuite/g++.dg/eh/uncaught4.C (.../branches/gcc-4_8-branch)
17780
+#include <exception>
17782
+#define assert(E) if (!(E)) __builtin_abort();
17787
+ assert( !std::uncaught_exception() );
17790
+ } catch (int i) {
17791
+ assert( !std::uncaught_exception() );
17801
+ } catch (int i) {
17802
+ assert( !std::uncaught_exception() );
17804
+ assert( !std::uncaught_exception() );
17806
Index: gcc/testsuite/g++.dg/inherit/virtual11.C
17807
===================================================================
17808
--- a/src/gcc/testsuite/g++.dg/inherit/virtual11.C (.../tags/gcc_4_8_2_release)
17809
+++ b/src/gcc/testsuite/g++.dg/inherit/virtual11.C (.../branches/gcc-4_8-branch)
17812
+// { dg-do compile }
17813
+// { dg-options "-fdump-tree-gimple " }
17816
+ virtual int add (int a, int b) {return a+ b;}
17819
+class D : public B {
17822
+int foo (int a, int b) {
17824
+ return d.add(a, b);
17826
+// { dg-final { scan-tree-dump-not "OBJ_TYPE_REF" "gimple" } }
17827
+// { dg-final { cleanup-tree-dump "gimple" } }
17828
Index: gcc/testsuite/g++.dg/torture/pr38565.C
17829
===================================================================
17830
--- a/src/gcc/testsuite/g++.dg/torture/pr38565.C (.../tags/gcc_4_8_2_release)
17831
+++ b/src/gcc/testsuite/g++.dg/torture/pr38565.C (.../branches/gcc-4_8-branch)
17833
// { dg-do compile }
17834
// Ignore warning on some powerpc-linux configurations.
17835
// { dg-prune-output "non-standard ABI extension" }
17836
+// { dg-prune-output "changes the ABI" }
17837
#define vector __attribute__((vector_size(16) ))
17838
vector unsigned int f(int a)
17840
Index: gcc/testsuite/g++.dg/torture/pr57499.C
17841
===================================================================
17842
--- a/src/gcc/testsuite/g++.dg/torture/pr57499.C (.../tags/gcc_4_8_2_release)
17843
+++ b/src/gcc/testsuite/g++.dg/torture/pr57499.C (.../branches/gcc-4_8-branch)
17845
+// PR middle-end/57499
17846
+// { dg-do compile }
17850
+ ~S () __attribute__ ((noreturn)) {} // { dg-warning "function does return" }
17859
Index: gcc/testsuite/g++.dg/torture/pr59163.C
17860
===================================================================
17861
--- a/src/gcc/testsuite/g++.dg/torture/pr59163.C (.../tags/gcc_4_8_2_release)
17862
+++ b/src/gcc/testsuite/g++.dg/torture/pr59163.C (.../branches/gcc-4_8-branch)
17864
+// PR target/59163
17867
+struct A { float a[4]; };
17868
+struct B { int b; A a; };
17870
+__attribute__((noinline, noclone)) void
17873
+ if (a.a[0] != 36.0f || a.a[1] != 42.0f || a.a[2] != 48.0f || a.a[3] != 54.0f)
17874
+ __builtin_abort ();
17877
+__attribute__((noinline, noclone)) void
17882
+ for (i = 0; i < 4; i++)
17891
+ B b = { 5, { 6, 7, 8, 9 } };
17894
Index: gcc/testsuite/g++.dg/template/ref7.C
17895
===================================================================
17896
--- a/src/gcc/testsuite/g++.dg/template/ref7.C (.../tags/gcc_4_8_2_release)
17897
+++ b/src/gcc/testsuite/g++.dg/template/ref7.C (.../branches/gcc-4_8-branch)
17901
+typedef const char *const& ProtocolIdType;
17903
+template <ProtocolIdType protocolId>
17905
+ typedef int ProtocolVersion;
17907
+ ProtocolVersion GetProtocolVersion();
17910
+template <ProtocolIdType protocolId>
17911
+typename C<protocolId>::ProtocolVersion C<protocolId>::D::GetProtocolVersion()
17915
Index: gcc/testsuite/g++.dg/template/using28.C
17916
===================================================================
17917
--- a/src/gcc/testsuite/g++.dg/template/using28.C (.../tags/gcc_4_8_2_release)
17918
+++ b/src/gcc/testsuite/g++.dg/template/using28.C (.../branches/gcc-4_8-branch)
17924
+ static const int block_size = 1;
17927
+template <typename T> struct A {
17931
+template <typename T> struct B : public A<T> {
17932
+ using typename A<T>::type;
17933
+ static const int block_size = type::block_size;
17936
+template class B<int>;
17937
Index: gcc/testsuite/g++.dg/template/shadow1.C
17938
===================================================================
17939
--- a/src/gcc/testsuite/g++.dg/template/shadow1.C (.../tags/gcc_4_8_2_release)
17940
+++ b/src/gcc/testsuite/g++.dg/template/shadow1.C (.../branches/gcc-4_8-branch)
17944
+template<template<int I> class A> // { dg-message "shadows" }
17945
+class A {}; // { dg-error "declaration" }
17946
Index: gcc/testsuite/g++.dg/template/partial14.C
17947
===================================================================
17948
--- a/src/gcc/testsuite/g++.dg/template/partial14.C (.../tags/gcc_4_8_2_release)
17949
+++ b/src/gcc/testsuite/g++.dg/template/partial14.C (.../branches/gcc-4_8-branch)
17953
+template <class T>
17956
+ template <T a, T b>
17957
+ struct Implementation {};
17959
+ typedef typename Implementation<0, 0>::Typedef Type;
17962
+template <class T>
17964
+struct C<T>::Implementation<0, b> { typedef void Typedef; };
17966
+template class C<unsigned>;
17967
Index: gcc/testsuite/g++.dg/template/using27.C
17968
===================================================================
17969
--- a/src/gcc/testsuite/g++.dg/template/using27.C (.../tags/gcc_4_8_2_release)
17970
+++ b/src/gcc/testsuite/g++.dg/template/using27.C (.../branches/gcc-4_8-branch)
17976
+ typedef int nested_type;
17979
+template <class T>
17985
+template <class T>
17988
+ using typename A<T>::type;
17989
+ typename type::nested_type x;
17992
+template <class T>
17995
+ using typename B<T>::type;
17996
+ typename type::nested_type y;
18001
+ using C<int>::type;
18002
+ type::nested_type z;
18005
Index: gcc/testsuite/g++.dg/template/using29.C
18006
===================================================================
18007
--- a/src/gcc/testsuite/g++.dg/template/using29.C (.../tags/gcc_4_8_2_release)
18008
+++ b/src/gcc/testsuite/g++.dg/template/using29.C (.../branches/gcc-4_8-branch)
18013
+struct print_arg { };
18015
+struct const_holder {
18016
+ static const int CONSTANT = 42;
18019
+template <typename T>
18024
+template <class T>
18025
+struct test_case : public identity<T> {
18026
+ using typename identity<T>::type;
18027
+ print_arg<type::CONSTANT> printer;
18030
+template struct test_case<const_holder>;
18031
Index: gcc/testsuite/g++.dg/template/partial15.C
18032
===================================================================
18033
--- a/src/gcc/testsuite/g++.dg/template/partial15.C (.../tags/gcc_4_8_2_release)
18034
+++ b/src/gcc/testsuite/g++.dg/template/partial15.C (.../branches/gcc-4_8-branch)
18039
+template<typename D> struct complex { };
18041
+template<typename Tp>
18043
+pow(const complex<Tp>& x, const complex<Tp>& y) { return complex<Tp>(); }
18045
+template<typename T, typename U>
18046
+struct promote_2 { typedef T type; };
18048
+template<typename Tp, typename Up>
18049
+complex<typename promote_2<Tp, Up>::type>
18050
+pow(const complex<Tp>& x, const complex<Up>& y);
18052
+complex<double> (*powcc)(const complex<double>&, const complex<double>&) = pow;
18055
Index: gcc/testsuite/c-c++-common/cpp/pr60400-1.h
18056
===================================================================
18057
--- a/src/gcc/testsuite/c-c++-common/cpp/pr60400-1.h (.../tags/gcc_4_8_2_release)
18058
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr60400-1.h (.../branches/gcc-4_8-branch)
18060
+??=ifndef PR60400_1_H
18061
+??=define PR60400_1_H
18063
Index: gcc/testsuite/c-c++-common/cpp/pr60400-2.h
18064
===================================================================
18065
--- a/src/gcc/testsuite/c-c++-common/cpp/pr60400-2.h (.../tags/gcc_4_8_2_release)
18066
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr60400-2.h (.../branches/gcc-4_8-branch)
18068
+??=ifndef PR60400_2_H
18069
+??=define PR60400_2_H
18070
+??=include "pr60400-1.h"
18072
Index: gcc/testsuite/c-c++-common/cpp/pr60400.c
18073
===================================================================
18074
--- a/src/gcc/testsuite/c-c++-common/cpp/pr60400.c (.../tags/gcc_4_8_2_release)
18075
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr60400.c (.../branches/gcc-4_8-branch)
18077
+/* PR preprocessor/60400 */
18078
+/* { dg-do compile } */
18079
+/* { dg-options "-trigraphs -Wtrigraphs" } */
18081
+??=include "pr60400-1.h"
18082
+??=include "pr60400-2.h"
18084
+/* { dg-warning "trigraph" "" { target *-*-* } 1 } */
18085
+/* { dg-warning "trigraph" "" { target *-*-* } 2 } */
18086
+/* { dg-warning "trigraph" "" { target *-*-* } 3 } */
18087
+/* { dg-warning "trigraph" "" { target *-*-* } 4 } */
18088
+/* { dg-warning "trigraph" "" { target *-*-* } 5 } */
18089
+/* { dg-warning "trigraph" "" { target *-*-* } 6 } */
18090
Index: gcc/testsuite/c-c++-common/cpp/pr58844-1.c
18091
===================================================================
18092
--- a/src/gcc/testsuite/c-c++-common/cpp/pr58844-1.c (.../tags/gcc_4_8_2_release)
18093
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr58844-1.c (.../branches/gcc-4_8-branch)
18095
+/* PR preprocessor/58844 */
18096
+/* { dg-do compile } */
18097
+/* { dg-options "-ftrack-macro-expansion=0" } */
18099
+#define A x######x
18101
+#define A x######x /* { dg-message "previous definition" } */
18102
+#define A x##x /* { dg-warning "redefined" } */
18103
Index: gcc/testsuite/c-c++-common/cpp/pr58844-2.c
18104
===================================================================
18105
--- a/src/gcc/testsuite/c-c++-common/cpp/pr58844-2.c (.../tags/gcc_4_8_2_release)
18106
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr58844-2.c (.../branches/gcc-4_8-branch)
18108
+/* PR preprocessor/58844 */
18109
+/* { dg-do compile } */
18110
+/* { dg-options "-ftrack-macro-expansion=2" } */
18112
+#define A x######x
18114
+#define A x######x /* { dg-message "previous definition" } */
18115
+#define A x##x /* { dg-warning "redefined" } */
18116
Index: gcc/testsuite/c-c++-common/convert-vec-1.c
18117
===================================================================
18118
--- a/src/gcc/testsuite/c-c++-common/convert-vec-1.c (.../tags/gcc_4_8_2_release)
18119
+++ b/src/gcc/testsuite/c-c++-common/convert-vec-1.c (.../branches/gcc-4_8-branch)
18121
/* { dg-do compile } */
18122
+/* { dg-prune-output "changes the ABI" } */
18123
typedef float v2sf __attribute__ ((vector_size (8)));
18124
v2sf sub (void) { return (v2sf) 0.0; } /* { dg-error "can't convert" } */
18125
Index: gcc/testsuite/c-c++-common/pr60101.c
18126
===================================================================
18127
--- a/src/gcc/testsuite/c-c++-common/pr60101.c (.../tags/gcc_4_8_2_release)
18128
+++ b/src/gcc/testsuite/c-c++-common/pr60101.c (.../branches/gcc-4_8-branch)
18131
+/* { dg-do compile } */
18132
+/* { dg-options "-O2 -Wall" } */
18134
+extern int *a, b, *c, *d;
18137
+foo (double _Complex *x, double _Complex *y, double _Complex *z, unsigned int l, int w)
18139
+ unsigned int e = (unsigned int) a[3];
18140
+ double _Complex (*v)[l][4][e][l][4] = (double _Complex (*)[l][4][e][l][4]) z;
18141
+ double _Complex (*f)[l][b][l] = (double _Complex (*)[l][b][l]) y;
18142
+ unsigned int g = c[0] * c[1] * c[2];
18143
+ unsigned int h = d[0] + c[0] * (d[1] + c[1] * d[2]);
18146
+ for (i = 0; i < e; i++)
18148
+ int j = e * d[3] + i;
18150
+ unsigned int n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11;
18151
+ float _Complex s = 0.;
18152
+ unsigned int t = 0;
18154
+ for (n0 = 0; n0 < l; n0++)
18155
+ for (n1 = 0; n1 < l; n1++)
18156
+ for (n2 = 0; n2 < l; n2++)
18157
+ for (n3 = 0; n3 < l; n3++)
18158
+ for (n4 = 0; n4 < l; n4++)
18159
+ for (n5 = 0; n5 < l; n5++)
18160
+ for (n6 = 0; n6 < l; n6++)
18161
+ for (n7 = 0; n7 < l; n7++)
18162
+ for (n8 = 0; n8 < l; n8++)
18163
+ for (n9 = 0; n9 < l; n9++)
18164
+ for (n10 = 0; n10 < l; n10++)
18165
+ for (n11 = 0; n11 < l; n11++)
18169
+ += f[n0][n4][j][n8] * f[n1][n5][j][n9] * ~(f[n2][n6][w][n10]) * ~(f[n3][n7][w][n11])
18170
+ * (+0.25 * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n10][0][i][n4][1]
18171
+ * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n6][1][i][n0][0]
18172
+ + 0.25 * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n10][0][i][n4][1]
18173
+ * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
18174
+ - 0.5 * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n10][0][i][n4][1]
18175
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
18176
+ + 0.25 * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n3][0][i][n4][1]
18177
+ * v[0][n7][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n11][1][i][n0][0]
18178
+ - 0.5 * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n3][0][i][n4][1]
18179
+ * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
18180
+ + 0.25 * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n3][0][i][n4][1]
18181
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
18182
+ + 0.25 * v[0][n3][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n10][0][i][n4][1]
18183
+ * v[0][n6][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0]
18184
+ - 0.5 * v[0][n3][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n10][0][i][n4][1]
18185
+ * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
18186
+ + 0.25 * v[0][n3][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n10][0][i][n4][1]
18187
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
18188
+ + 0.25 * v[0][n3][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n2][0][i][n4][1]
18189
+ * v[0][n6][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0]
18190
+ + 0.25 * v[0][n3][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n2][0][i][n4][1]
18191
+ * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
18192
+ - 0.5 * v[0][n3][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n2][0][i][n4][1]
18193
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
18194
+ + 0.25 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
18195
+ * v[0][n6][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0]
18196
+ - 0.5 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
18197
+ * v[0][n6][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0]
18198
+ - 0.5 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
18199
+ * v[0][n7][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n11][1][i][n0][0]
18200
+ + 0.25 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
18201
+ * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n6][1][i][n0][0]
18202
+ + 1. * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
18203
+ * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
18204
+ - 0.5 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
18205
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
18206
+ - 0.5 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
18207
+ * v[0][n6][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0]
18208
+ + 0.25 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
18209
+ * v[0][n6][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0]
18210
+ + 0.25 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
18211
+ * v[0][n7][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n11][1][i][n0][0]
18212
+ - 0.5 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
18213
+ * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n6][1][i][n0][0]
18214
+ - 0.5 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
18215
+ * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
18216
+ + 1. * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
18217
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
18218
+ + 0.5 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
18219
+ * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0] * v[0][n10][0][i][n8][0]
18220
+ - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
18221
+ * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0] * v[0][n10][0][i][n8][0]
18222
+ - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
18223
+ * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n0][0] * v[0][n10][0][i][n1][0]
18224
+ + 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
18225
+ * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n10][0][i][n0][0]
18226
+ + 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
18227
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n0][0] * v[0][n10][0][i][n1][0]
18228
+ - 0.5 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
18229
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n10][0][i][n0][0]
18230
+ - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1]
18231
+ * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0] * v[0][n3][0][i][n8][0]
18232
+ - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1]
18233
+ * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n0][0] * v[0][n3][0][i][n1][0]);
18236
+ int u = (j - w + b) % b;
18237
+ int q = (j >= w ? +1 : -1);
18242
Index: gcc/testsuite/c-c++-common/pr59037.c
18243
===================================================================
18244
--- a/src/gcc/testsuite/c-c++-common/pr59037.c (.../tags/gcc_4_8_2_release)
18245
+++ b/src/gcc/testsuite/c-c++-common/pr59037.c (.../branches/gcc-4_8-branch)
18247
+/* { dg-do compile } */
18248
+/* { dg-options "-O3" } */
18250
+typedef int v4si __attribute__ ((vector_size (16)));
18253
+main (int argc, char** argv)
18255
+ v4si x = {0,1,2,3};
18256
+ x = (v4si) {(x)[3], (x)[2], (x)[1], (x)[0]};
18259
Index: gcc/testsuite/c-c++-common/pr59280.c
18260
===================================================================
18261
--- a/src/gcc/testsuite/c-c++-common/pr59280.c (.../tags/gcc_4_8_2_release)
18262
+++ b/src/gcc/testsuite/c-c++-common/pr59280.c (.../branches/gcc-4_8-branch)
18265
+/* { dg-do compile } */
18267
+void bar (char *) __attribute__((constructor(foo))); /* { dg-error "constructor priorities must be integers|was not declared|constructor priorities are not supported" } */
18268
Index: gcc/testsuite/c-c++-common/pr37743.c
18269
===================================================================
18270
--- a/src/gcc/testsuite/c-c++-common/pr37743.c (.../tags/gcc_4_8_2_release)
18271
+++ b/src/gcc/testsuite/c-c++-common/pr37743.c (.../branches/gcc-4_8-branch)
18274
+/* This needs to be run only on targets where __UINT32_TYPE__ is defined
18275
+ to unsigned int. */
18276
+/* { dg-do compile { target *-*-linux-gnu* } } */
18277
+/* { dg-options "-Wformat" } */
18279
+int foo (const char *, ...) __attribute__ ((format (printf, 1, 2)));
18282
+bar (unsigned int x)
18284
+ foo ("%x", __builtin_bswap32 (x));
18286
Index: gcc/testsuite/c-c++-common/fold-divmul-1.c
18287
===================================================================
18288
--- a/src/gcc/testsuite/c-c++-common/fold-divmul-1.c (.../tags/gcc_4_8_2_release)
18289
+++ b/src/gcc/testsuite/c-c++-common/fold-divmul-1.c (.../branches/gcc-4_8-branch)
18291
+/* { dg-do compile } */
18292
+/* { dg-options "-fdump-tree-original" } */
18295
+fx (int *b, int *e)
18297
+ return b + (e - b);
18300
+/* { dg-final { scan-tree-dump-not "/\\\[ex\\\]" "original" } } */
18301
+/* { dg-final { cleanup-tree-dump "original" } } */
18302
Index: gcc/testsuite/c-c++-common/torture/pr58794-1.c
18303
===================================================================
18304
--- a/src/gcc/testsuite/c-c++-common/torture/pr58794-1.c (.../tags/gcc_4_8_2_release)
18305
+++ b/src/gcc/testsuite/c-c++-common/torture/pr58794-1.c (.../branches/gcc-4_8-branch)
18307
+/* { dg-do compile } */
18325
+static int *c[1][2] = {{0, (int *)&a.g.f2}};
18331
+ for (d = 0; d < 1; d++)
18332
+ for (b.g.f1.f = 0; b.g.f1.f < 1; b.g.f1.f++)
18333
+ *c[b.g.f1.f][d + 1] = 0;
18336
Index: gcc/testsuite/c-c++-common/torture/pr58794-2.c
18337
===================================================================
18338
--- a/src/gcc/testsuite/c-c++-common/torture/pr58794-2.c (.../tags/gcc_4_8_2_release)
18339
+++ b/src/gcc/testsuite/c-c++-common/torture/pr58794-2.c (.../branches/gcc-4_8-branch)
18341
+/* { dg-do compile } */
18350
+static int *c[1][2] = {{0, (int *)&a.f}};
18351
+static unsigned int d;
18356
+ for (; d < 1; d++)
18357
+ for (; b < 1; b++)
18358
+ *c[b][d + 1] = 0;
18362
Index: gcc/testsuite/c-c++-common/torture/pr60026.c
18363
===================================================================
18364
--- a/src/gcc/testsuite/c-c++-common/torture/pr60026.c (.../tags/gcc_4_8_2_release)
18365
+++ b/src/gcc/testsuite/c-c++-common/torture/pr60026.c (.../branches/gcc-4_8-branch)
18367
+/* PR ipa/60026 */
18368
+/* { dg-do compile } */
18370
+struct S { int f; } a;
18372
+__attribute__((optimize (0)))
18373
+struct S foo (int x, struct S y)
18384
+ struct S c = {0};
18395
Index: gcc/testsuite/c-c++-common/vector-compare-2.c
18396
===================================================================
18397
--- a/src/gcc/testsuite/c-c++-common/vector-compare-2.c (.../tags/gcc_4_8_2_release)
18398
+++ b/src/gcc/testsuite/c-c++-common/vector-compare-2.c (.../branches/gcc-4_8-branch)
18400
/* { dg-do compile } */
18401
/* { dg-options "-fno-common" { target hppa*-*-hpux* } } */
18402
/* { dg-options "-mabi=altivec" { target { { powerpc*-*-linux* } && ilp32 } } } */
18403
+/* { dg-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
18404
/* Ignore warning on some powerpc-ibm-aix configurations. */
18405
/* { dg-prune-output "non-standard ABI extension" } */
18407
Index: gcc/testsuite/c-c++-common/gomp/pr58809.c
18408
===================================================================
18409
--- a/src/gcc/testsuite/c-c++-common/gomp/pr58809.c (.../tags/gcc_4_8_2_release)
18410
+++ b/src/gcc/testsuite/c-c++-common/gomp/pr58809.c (.../branches/gcc-4_8-branch)
18412
+/* PR middle-end/58809 */
18413
+/* { dg-do compile } */
18414
+/* { dg-options "-fopenmp" } */
18417
+_Complex double d;
18422
+ #pragma omp parallel reduction (&:j) /* { dg-error "has invalid type for" } */
18424
+ #pragma omp parallel reduction (|:j) /* { dg-error "has invalid type for" } */
18426
+ #pragma omp parallel reduction (^:j) /* { dg-error "has invalid type for" } */
18428
+ #pragma omp parallel reduction (min:j) /* { dg-error "has invalid type for" } */
18430
+ #pragma omp parallel reduction (max:j) /* { dg-error "has invalid type for" } */
18432
+ #pragma omp parallel reduction (&:d) /* { dg-error "has invalid type for" } */
18434
+ #pragma omp parallel reduction (|:d) /* { dg-error "has invalid type for" } */
18436
+ #pragma omp parallel reduction (^:d) /* { dg-error "has invalid type for" } */
18438
+ #pragma omp parallel reduction (min:d) /* { dg-error "has invalid type for" } */
18440
+ #pragma omp parallel reduction (max:d) /* { dg-error "has invalid type for" } */
18443
Index: gcc/testsuite/c-c++-common/gomp/pr59467.c
18444
===================================================================
18445
--- a/src/gcc/testsuite/c-c++-common/gomp/pr59467.c (.../tags/gcc_4_8_2_release)
18446
+++ b/src/gcc/testsuite/c-c++-common/gomp/pr59467.c (.../branches/gcc-4_8-branch)
18448
+/* PR libgomp/59467 */
18455
+ int x = 0, y = 0;
18456
+ #pragma omp parallel
18459
+ #pragma omp single copyprivate (x) /* { dg-error "is not threadprivate or private in outer context" } */
18461
+ #pragma omp atomic write
18464
+ #pragma omp atomic read
18466
+ #pragma omp atomic
18469
+ #pragma omp parallel
18472
+ #pragma omp single copyprivate (v) /* { dg-error "is not threadprivate or private in outer context" } */
18474
+ #pragma omp atomic write
18477
+ #pragma omp atomic read
18479
+ #pragma omp atomic
18482
+ #pragma omp parallel private (x)
18485
+ #pragma omp single copyprivate (x)
18487
+ #pragma omp atomic write
18490
+ #pragma omp atomic read
18492
+ #pragma omp atomic
18496
+ #pragma omp parallel reduction (+:x)
18498
+ #pragma omp single copyprivate (x)
18500
+ #pragma omp atomic write
18503
+ #pragma omp atomic
18506
+ #pragma omp single copyprivate (x)
18510
+ #pragma omp single copyprivate (v) /* { dg-error "is not threadprivate or private in outer context" } */
18512
+ #pragma omp atomic write
18516
Index: gcc/testsuite/c-c++-common/scal-to-vec2.c
18517
===================================================================
18518
--- a/src/gcc/testsuite/c-c++-common/scal-to-vec2.c (.../tags/gcc_4_8_2_release)
18519
+++ b/src/gcc/testsuite/c-c++-common/scal-to-vec2.c (.../branches/gcc-4_8-branch)
18521
/* { dg-do compile } */
18522
/* { dg-options "-fno-common" { target hppa*-*-hpux* } } */
18523
/* { dg-options "-mabi=altivec" { target { { powerpc*-*-linux* } && ilp32 } } } */
18524
+/* { dg-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
18525
/* Ignore warning on some powerpc-ibm-aix configurations. */
18526
/* { dg-prune-output "non-standard ABI extension" } */
18528
Index: gcc/testsuite/c-c++-common/pr59032.c
18529
===================================================================
18530
--- a/src/gcc/testsuite/c-c++-common/pr59032.c (.../tags/gcc_4_8_2_release)
18531
+++ b/src/gcc/testsuite/c-c++-common/pr59032.c (.../branches/gcc-4_8-branch)
18533
+/* { dg-do compile } */
18534
+/* { dg-options "-O2" } */
18539
+ float v __attribute__((vector_size(8)));
18546
+ float v __attribute__((vector_size(8)));
18553
+ float v __attribute__((vector_size(8)));
18560
+ float v __attribute__((vector_size(8)));
18563
Index: gcc/cp/typeck.c
18564
===================================================================
18565
--- a/src/gcc/cp/typeck.c (.../tags/gcc_4_8_2_release)
18566
+++ b/src/gcc/cp/typeck.c (.../branches/gcc-4_8-branch)
18567
@@ -4103,6 +4103,11 @@
18568
case TRUTH_ORIF_EXPR:
18569
case TRUTH_AND_EXPR:
18570
case TRUTH_OR_EXPR:
18571
+ if (TREE_CODE (type0) == VECTOR_TYPE || TREE_CODE (type1) == VECTOR_TYPE)
18573
+ sorry ("logical operation on vector type");
18574
+ return error_mark_node;
18576
result_type = boolean_type_node;
18579
@@ -5010,7 +5015,10 @@
18580
cp_truthvalue_conversion (tree expr)
18582
tree type = TREE_TYPE (expr);
18583
- if (TYPE_PTRDATAMEM_P (type))
18584
+ if (TYPE_PTRDATAMEM_P (type)
18585
+ /* Avoid ICE on invalid use of non-static member function. */
18586
+ || (TREE_CODE (expr) == FUNCTION_DECL
18587
+ && DECL_NONSTATIC_MEMBER_FUNCTION_P (expr)))
18588
return build_binary_op (EXPR_LOCATION (expr),
18589
NE_EXPR, expr, nullptr_node, 1);
18590
else if (TYPE_PTR_P (type) || TYPE_PTRMEMFUNC_P (type))
18591
@@ -5588,7 +5596,9 @@
18592
inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
18595
- inc = integer_one_node;
18596
+ inc = (TREE_CODE (argtype) == VECTOR_TYPE
18597
+ ? build_one_cst (argtype)
18598
+ : integer_one_node);
18600
inc = cp_convert (argtype, inc, complain);
18602
@@ -7194,8 +7204,7 @@
18603
side effect associated with any single compound assignment
18604
operator. -- end note ] */
18605
lhs = stabilize_reference (lhs);
18606
- if (TREE_SIDE_EFFECTS (rhs))
18607
- rhs = mark_rvalue_use (rhs);
18608
+ rhs = rvalue (rhs);
18609
rhs = stabilize_expr (rhs, &init);
18610
newrhs = cp_build_binary_op (input_location,
18611
modifycode, lhs, rhs,
18612
@@ -7611,7 +7620,7 @@
18613
/* Handle null pointer to member function conversions. */
18614
if (null_ptr_cst_p (pfn))
18616
- pfn = build_c_cast (input_location, type, pfn);
18617
+ pfn = cp_build_c_cast (type, pfn, complain);
18618
return build_ptrmemfunc1 (to_type,
18621
Index: gcc/cp/decl.c
18622
===================================================================
18623
--- a/src/gcc/cp/decl.c (.../tags/gcc_4_8_2_release)
18624
+++ b/src/gcc/cp/decl.c (.../branches/gcc-4_8-branch)
18625
@@ -1867,9 +1867,9 @@
18626
/* Merge the data types specified in the two decls. */
18627
newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
18629
- /* If merge_types produces a non-typedef type, just use the old type. */
18630
- if (TREE_CODE (newdecl) == TYPE_DECL
18631
- && newtype == DECL_ORIGINAL_TYPE (newdecl))
18632
+ /* For typedefs use the old type, as the new type's DECL_NAME points
18633
+ at newdecl, which will be ggc_freed. */
18634
+ if (TREE_CODE (newdecl) == TYPE_DECL)
18637
if (TREE_CODE (newdecl) == VAR_DECL)
18638
@@ -8193,7 +8193,9 @@
18639
abi_1_itype = error_mark_node;
18642
- size = maybe_constant_value (size);
18643
+ if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
18644
+ size = maybe_constant_value (size);
18646
if (!TREE_CONSTANT (size))
18649
@@ -11891,7 +11893,10 @@
18652
&& (DECL_CLASS_TEMPLATE_P (decl)
18653
- || DECL_TEMPLATE_TEMPLATE_PARM_P (decl)))
18654
+ /* If scope is ts_current we're defining a class, so ignore a
18655
+ template template parameter. */
18656
+ || (scope != ts_current
18657
+ && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
18658
decl = DECL_TEMPLATE_RESULT (decl);
18660
if (decl && TREE_CODE (decl) == TYPE_DECL)
18661
Index: gcc/cp/except.c
18662
===================================================================
18663
--- a/src/gcc/cp/except.c (.../tags/gcc_4_8_2_release)
18664
+++ b/src/gcc/cp/except.c (.../branches/gcc-4_8-branch)
18665
@@ -380,6 +380,9 @@
18667
tree type = body ? TREE_TYPE (body) : void_type_node;
18669
+ if (!flag_exceptions)
18672
if (cond && !value_dependent_expression_p (cond))
18674
cond = cxx_constant_value (cond);
18675
Index: gcc/cp/ChangeLog
18676
===================================================================
18677
--- a/src/gcc/cp/ChangeLog (.../tags/gcc_4_8_2_release)
18678
+++ b/src/gcc/cp/ChangeLog (.../branches/gcc-4_8-branch)
18680
+2014-02-28 Jason Merrill <jason@redhat.com>
18683
+ * typeck.c (cp_build_binary_op): Sorry on vector&&vector.
18685
+2014-02-26 Jason Merrill <jason@redhat.com>
18688
+ * pt.c (unify): Ignore alias templates when deducing a template
18689
+ template parameter.
18691
+2014-02-24 Jason Merrill <jason@redhat.com>
18694
+ * pt.c (tsubst_omp_for_iterator): Don't let substitution of the
18695
+ DECL_EXPR initialize a non-class iterator.
18697
+2014-02-24 Fabien Chêne <fabien@gcc.gnu.org>
18699
+ * parser.c (cp_parser_nonclass_name): Call strip_using_decl and
18700
+ move the code handling dependent USING_DECLs...
18701
+ * name-lookup.c (strip_using_decl): ...Here.
18703
+2014-02-21 Jason Merrill <jason@redhat.com>
18706
+ * semantics.c (expand_or_defer_fn_1): Check DECL_DEFAULTED_FN.
18709
+ * parser.c (cp_parser_enum_specifier): Call
18710
+ check_for_bare_parameter_packs.
18713
+ * pt.c (register_specialization): Copy DECL_DELETED_FN to clones.
18716
+ * pt.c (coerce_template_parms): Bail if argument packing fails.
18719
+ * mangle.c (mangle_decl): Don't make an alias for a TYPE_DECL.
18721
+2014-02-20 Jason Merrill <jason@redhat.com>
18726
+ * pt.c (template_parm_to_arg): Call convert_from_reference.
18727
+ (tsubst_template_arg): Don't strip reference refs.
18729
+2014-02-20 Kai Tietz <ktietz@redhat.com>
18732
+ * parser.c (cp_parser_functional_cast): Treat NULL_TREE
18733
+ valued type argument as error_mark_node.
18736
+ * semantics.c (finish_fname): Handle error_mark_node.
18738
+2014-02-19 Jason Merrill <jason@redhat.com>
18741
+ * pt.c (maybe_instantiate_noexcept): Don't instantiate exception
18742
+ spec from template context.
18744
+2014-01-31 Jason Merrill <jason@redhat.com>
18747
+ * decl2.c (handle_tls_init): Handle null init fn.
18750
+ * decl2.c (get_tls_init_fn): Copy DECL_EXTERNAL from the variable.
18753
+ * call.c (convert_like_real) [ck_aggr]: Set TARGET_EXPR_LIST_INIT_P.
18754
+ [ck_list]: Check for error_mark_node.
18757
+ * pt.c (fn_type_unification): Don't do DEDUCE_EXACT check
18758
+ during partial ordering.
18760
+2014-01-30 Jason Merrill <jason@redhat.com>
18763
+ * pt.c (instantiate_template_1): Save/restore local_specializations.
18765
+2014-01-29 Jason Merrill <jason@redhat.com>
18768
+ * pt.c (expand_template_argument_pack): Correct
18769
+ non_default_args_count calculation.
18772
+ * pt.c (unify_pack_expansion): Call expand_template_argument_pack.
18774
+2014-01-28 Jason Merrill <jason@redhat.com>
18777
+ * decl.c (lookup_and_check_tag): Ignore template parameters if
18778
+ scope == ts_current.
18779
+ * pt.c (check_template_shadow): Don't complain about the injected
18782
+2014-01-27 Jason Merrill <jason@redhat.com>
18785
+ * decl.c (duplicate_decls): Always use oldtype for TYPE_DECL.
18788
+ * pt.c (tsubst_copy_and_build) [TRAIT_EXPR]: Use tsubst for
18792
+ * pt.c (template_parm_to_arg): Call convert_from_reference.
18793
+ (tsubst_template_arg): Don't strip reference refs.
18796
+ * call.c (build_aggr_conv): Reject value-initialization of reference.
18799
+ * call.c (convert_like_real): Give helpful error about excess braces
18800
+ for reference binding, too.
18803
+ * typeck.c (cp_build_modify_expr): Make the RHS an rvalue before
18807
+ * typeck.c (cp_truthvalue_conversion): Use explicit comparison for
18811
+ * decl.c (compute_array_index_type): Don't call
18812
+ maybe_constant_value for a non-integral expression.
18815
+ * mangle.c (write_guarded_var_name): Handle null DECL_NAME.
18817
+2014-01-24 Paolo Carlini <paolo.carlini@oracle.com>
18820
+ * name-lookup.c (push_using_directive): Use timevar_cond_start.
18822
+2014-01-23 Jakub Jelinek <jakub@redhat.com>
18824
+ PR middle-end/58809
18825
+ * semantics.c (finish_omp_clauses): Reject MIN_EXPR, MAX_EXPR,
18826
+ BIT_AND_EXPR, BIT_IOR_EXPR and BIT_XOR_EXPR on COMPLEX_TYPEs.
18828
+2014-01-20 Marek Polacek <polacek@redhat.com>
18830
+ Backported from mainline
18831
+ 2014-01-17 Marek Polacek <polacek@redhat.com>
18834
+ * cvt.c (ocp_convert): Don't segfault on non-existing
18835
+ ENUM_UNDERLYING_TYPE.
18837
+2014-01-10 Paolo Carlini <paolo.carlini@oracle.com>
18841
+ * pt.c (type_dependent_expression_p): Handle EXPR_PACK_EXPANSION.
18843
+2013-12-12 Jason Merrill <jason@redhat.com>
18846
+ * pt.c (resolve_overloaded_unification): Discard access checks.
18848
+2013-12-05 Jason Merrill <jason@redhat.com>
18852
+ * pt.c (most_specialized_class): Use the partially instantiated
18853
+ template for deduction. Drop the TMPL parameter.
18855
+2013-12-04 Jakub Jelinek <jakub@redhat.com>
18858
+ * pt.c (tsubst_copy_and_build): Handle POINTER_PLUS_EXPR.
18860
+2013-11-27 Tom de Vries <tom@codesourcery.com>
18861
+ Marc Glisse <marc.glisse@inria.fr>
18864
+ * typeck.c (cp_build_unary_op): Allow vector increment and decrement.
18866
+2013-11-27 Tom de Vries <tom@codesourcery.com>
18867
+ Marc Glisse <marc.glisse@inria.fr>
18869
+ PR middle-end/59037
18870
+ * semantics.c (cxx_fold_indirect_ref): Don't create out-of-bounds
18873
+2013-11-28 Jakub Jelinek <jakub@redhat.com>
18876
+ * semantics.c (finish_omp_atomic): Call finish_expr_stmt
18877
+ rather than add_stmt.
18879
+2013-11-23 Easwaran Raman <eraman@google.com>
18882
+ * call.c (build_new_method_call_1): Comnpare function context
18883
+ with BASELINK_BINFO type rather than instance type before
18884
+ marking the call with LOOKUP_NONVIRTUAL.
18886
+2013-10-31 Jason Merrill <jason@redhat.com>
18889
+ * parser.c (cp_parser_late_parse_one_default_arg): Set
18890
+ TARGET_EXPR_DIRECT_INIT_P.
18892
+2013-11-11 Paolo Carlini <paolo.carlini@oracle.com>
18894
+ * cvt.c (cp_convert_to_pointer): Call build_ptrmemfunc before
18895
+ maybe_warn_zero_as_null_pointer_constant to avoid duplicate
18896
+ -Wzero-as-null-pointer-constant diagnostics.
18898
+ * typeck.c (build_ptrmemfunc): Use cp_build_c_cast.
18900
+2013-10-25 Tom de Vries <tom@codesourcery.com>
18903
+ * except.c (build_must_not_throw_expr): Handle
18906
+2013-10-17 Paolo Carlini <paolo.carlini@oracle.com>
18909
+ * semantics.c (lambda_expr_this_capture): Handle NSDMIs in the
18910
+ cp_unevaluated_operand case.
18912
+2013-10-16 Paolo Carlini <paolo.carlini@oracle.com>
18915
+ * parser.c (cp_parser_pseudo_destructor_name): Revert r174385 changes.
18917
+2013-10-16 Jason Merrill <jason@redhat.com>
18920
+ * decl2.c (dump_tu): Split out from...
18921
+ (cp_write_global_declarations): ...here. Call it in PCH mode.
18923
2013-10-16 Release Manager
18925
* GCC 4.8.2 released.
18927
===================================================================
18928
--- a/src/gcc/cp/pt.c (.../tags/gcc_4_8_2_release)
18929
+++ b/src/gcc/cp/pt.c (.../branches/gcc-4_8-branch)
18930
@@ -170,7 +170,7 @@
18931
static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
18932
static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
18933
static void regenerate_decl_from_template (tree, tree);
18934
-static tree most_specialized_class (tree, tree, tsubst_flags_t);
18935
+static tree most_specialized_class (tree, tsubst_flags_t);
18936
static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
18937
static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree);
18938
static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
18939
@@ -1419,6 +1419,8 @@
18940
= DECL_DECLARED_INLINE_P (fn);
18941
DECL_SOURCE_LOCATION (clone)
18942
= DECL_SOURCE_LOCATION (fn);
18943
+ DECL_DELETED_FN (clone)
18944
+ = DECL_DELETED_FN (fn);
18946
check_specialization_namespace (tmpl);
18948
@@ -3436,7 +3438,7 @@
18949
for (i = 0; i < num_packed; ++i, ++out_arg)
18950
TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
18951
if (non_default_args_count > 0)
18952
- non_default_args_count += num_packed;
18953
+ non_default_args_count += num_packed - 1;
18957
@@ -3491,6 +3493,11 @@
18958
|| TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
18961
+ /* Don't complain about the injected class name, as we've already
18962
+ complained about the class itself. */
18963
+ if (DECL_SELF_REFERENCE_P (decl))
18966
error ("declaration of %q+#D", decl);
18967
error (" shadows template parm %q+#D", olddecl);
18969
@@ -4261,7 +4268,7 @@
18970
if (COMPLETE_TYPE_P (inst_type)
18971
&& CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
18973
- tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
18974
+ tree spec = most_specialized_class (inst_type, tf_none);
18975
if (spec && TREE_TYPE (spec) == type)
18976
permerror (input_location,
18977
"partial specialization of %qT after instantiation "
18978
@@ -6672,6 +6679,8 @@
18979
/* Store this argument. */
18980
if (arg == error_mark_node)
18984
TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
18986
/* We are done with all of the arguments. */
18987
@@ -8572,7 +8581,7 @@
18989
/* Determine what specialization of the original template to
18991
- t = most_specialized_class (type, templ, tf_warning_or_error);
18992
+ t = most_specialized_class (type, tf_warning_or_error);
18993
if (t == error_mark_node)
18995
TYPE_BEING_DEFINED (type) = 1;
18996
@@ -12694,27 +12703,43 @@
18997
tsubst_expr ((NODE), args, complain, in_decl, \
18998
integral_constant_expression_p)
18999
tree decl, init, cond, incr;
19002
init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
19003
gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
19004
decl = TREE_OPERAND (init, 0);
19005
init = TREE_OPERAND (init, 1);
19006
- /* Do this before substituting into decl to handle 'auto'. */
19007
- init_decl = (init && TREE_CODE (init) == DECL_EXPR);
19008
- init = RECUR (init);
19009
- decl = RECUR (decl);
19011
+ tree decl_expr = NULL_TREE;
19012
+ if (init && TREE_CODE (init) == DECL_EXPR)
19014
- gcc_assert (!processing_template_decl);
19015
- init = DECL_INITIAL (decl);
19016
- DECL_INITIAL (decl) = NULL_TREE;
19017
+ /* We need to jump through some hoops to handle declarations in the
19018
+ for-init-statement, since we might need to handle auto deduction,
19019
+ but we need to keep control of initialization. */
19020
+ decl_expr = init;
19021
+ init = DECL_INITIAL (DECL_EXPR_DECL (init));
19022
+ decl = tsubst_decl (decl, args, complain);
19025
+ decl = RECUR (decl);
19026
+ init = RECUR (init);
19028
+ tree auto_node = type_uses_auto (TREE_TYPE (decl));
19029
+ if (auto_node && init)
19031
+ = do_auto_deduction (TREE_TYPE (decl), init, auto_node);
19033
gcc_assert (!type_dependent_expression_p (decl));
19035
if (!CLASS_TYPE_P (TREE_TYPE (decl)))
19039
+ /* Declare the variable, but don't let that initialize it. */
19040
+ tree init_sav = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
19041
+ DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL_TREE;
19042
+ RECUR (decl_expr);
19043
+ DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init_sav;
19046
cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
19047
incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
19048
if (TREE_CODE (incr) == MODIFY_EXPR)
19049
@@ -12731,8 +12756,14 @@
19053
- if (init && !init_decl)
19056
+ /* Declare and initialize the variable. */
19057
+ RECUR (decl_expr);
19058
+ init = NULL_TREE;
19063
for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
19065
@@ -13710,6 +13741,10 @@
19069
+ case POINTER_PLUS_EXPR:
19070
+ return fold_build_pointer_plus (RECUR (TREE_OPERAND (t, 0)),
19071
+ RECUR (TREE_OPERAND (t, 1)));
19074
RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
19075
/*address_p=*/false));
19076
@@ -14471,12 +14506,12 @@
19080
- tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
19081
- complain, in_decl);
19082
+ tree type1 = tsubst (TRAIT_EXPR_TYPE1 (t), args,
19083
+ complain, in_decl);
19085
tree type2 = TRAIT_EXPR_TYPE2 (t);
19087
- type2 = tsubst_copy (type2, args, complain, in_decl);
19088
+ type2 = tsubst (type2, args, complain, in_decl);
19090
RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
19092
@@ -14778,6 +14813,8 @@
19093
/* Instantiation of the function happens in the context of the function
19094
template, not the context of the overload resolution we're doing. */
19095
push_to_top_level ();
19096
+ struct pointer_map_t *saved_local_specializations = local_specializations;
19097
+ local_specializations = NULL;
19098
/* If there are dependent arguments, e.g. because we're doing partial
19099
ordering, make sure processing_template_decl stays set. */
19100
if (uses_template_parms (targ_ptr))
19101
@@ -14793,6 +14830,7 @@
19102
targ_ptr, complain, gen_tmpl);
19103
if (DECL_CLASS_SCOPE_P (gen_tmpl))
19104
pop_nested_class ();
19105
+ local_specializations = saved_local_specializations;
19106
pop_from_top_level ();
19108
if (fndecl == error_mark_node)
19109
@@ -15192,8 +15230,11 @@
19111
/* If we're looking for an exact match, check that what we got
19112
is indeed an exact match. It might not be if some template
19113
- parameters are used in non-deduced contexts. */
19114
- if (strict == DEDUCE_EXACT)
19115
+ parameters are used in non-deduced contexts. But don't check
19116
+ for an exact match if we have dependent template arguments;
19117
+ in that case we're doing partial ordering, and we already know
19118
+ that we have two candidates that will provide the actual type. */
19119
+ if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
19121
tree substed = TREE_TYPE (decl);
19123
@@ -15749,7 +15790,7 @@
19124
if (subargs != error_mark_node
19125
&& !any_dependent_template_arguments_p (subargs))
19127
- elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
19128
+ elem = TREE_TYPE (instantiate_template (fn, subargs, tf_none));
19129
if (try_one_overload (tparms, targs, tempargs, parm,
19130
elem, strict, sub_strict, addr_p, explain_p)
19131
&& (!goodfn || !same_type_p (goodfn, elem)))
19132
@@ -16207,6 +16248,9 @@
19133
tree pattern = PACK_EXPANSION_PATTERN (parm);
19134
tree pack, packs = NULL_TREE;
19135
int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
19137
+ packed_args = expand_template_argument_pack (packed_args);
19139
int len = TREE_VEC_LENGTH (packed_args);
19141
/* Determine the parameter packs we will be deducing from the
19142
@@ -16574,9 +16618,11 @@
19143
if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
19144
&& !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
19145
return unify_template_deduction_failure (explain_p, parm, arg);
19148
tree parmvec = TYPE_TI_ARGS (parm);
19149
+ /* An alias template name is never deduced. */
19150
+ if (TYPE_ALIAS_P (arg))
19151
+ arg = strip_typedefs (arg);
19152
tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
19153
tree full_argvec = add_to_template_args (targs, argvec);
19155
@@ -17553,7 +17599,7 @@
19159
-/* Determine which of two partial specializations of MAIN_TMPL is more
19160
+/* Determine which of two partial specializations of TMPL is more
19163
PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
19164
@@ -17569,7 +17615,7 @@
19165
two templates is more specialized. */
19168
-more_specialized_class (tree main_tmpl, tree pat1, tree pat2)
19169
+more_specialized_class (tree tmpl, tree pat1, tree pat2)
19173
@@ -17584,7 +17630,7 @@
19174
types in the arguments, and we need our dependency check functions
19175
to behave correctly. */
19176
++processing_template_decl;
19177
- targs = get_class_bindings (main_tmpl, TREE_VALUE (pat1),
19178
+ targs = get_class_bindings (tmpl, TREE_VALUE (pat1),
19179
CLASSTYPE_TI_ARGS (tmpl1),
19180
CLASSTYPE_TI_ARGS (tmpl2));
19182
@@ -17593,7 +17639,7 @@
19183
any_deductions = true;
19186
- targs = get_class_bindings (main_tmpl, TREE_VALUE (pat2),
19187
+ targs = get_class_bindings (tmpl, TREE_VALUE (pat2),
19188
CLASSTYPE_TI_ARGS (tmpl2),
19189
CLASSTYPE_TI_ARGS (tmpl1));
19191
@@ -17673,7 +17719,7 @@
19194
/* Return the innermost template arguments that, when applied to a partial
19195
- specialization of MAIN_TMPL whose innermost template parameters are
19196
+ specialization of TMPL whose innermost template parameters are
19197
TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
19200
@@ -17688,7 +17734,7 @@
19201
is bound to `double'. */
19204
-get_class_bindings (tree main_tmpl, tree tparms, tree spec_args, tree args)
19205
+get_class_bindings (tree tmpl, tree tparms, tree spec_args, tree args)
19207
int i, ntparms = TREE_VEC_LENGTH (tparms);
19209
@@ -17728,8 +17774,8 @@
19210
`T' is `A' but unify () does not check whether `typename T::X'
19212
spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
19213
- spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (main_tmpl),
19214
- spec_args, main_tmpl,
19215
+ spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
19217
tf_none, false, false);
19218
if (spec_args == error_mark_node
19219
/* We only need to check the innermost arguments; the other
19220
@@ -17877,8 +17923,8 @@
19223
/* Return the most specialized of the class template partial
19224
- specializations of TMPL which can produce TYPE, a specialization of
19225
- TMPL. The value returned is actually a TREE_LIST; the TREE_TYPE is
19226
+ specializations which can produce TYPE, a specialization of some class
19227
+ template. The value returned is actually a TREE_LIST; the TREE_TYPE is
19228
a _TYPE node corresponding to the partial specialization, while the
19229
TREE_PURPOSE is the set of template arguments that must be
19230
substituted into the TREE_TYPE in order to generate TYPE.
19231
@@ -17885,11 +17931,11 @@
19233
If the choice of partial specialization is ambiguous, a diagnostic
19234
is issued, and the error_mark_node is returned. If there are no
19235
- partial specializations of TMPL matching TYPE, then NULL_TREE is
19237
+ partial specializations matching TYPE, then NULL_TREE is
19238
+ returned, indicating that the primary template should be used. */
19241
-most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
19242
+most_specialized_class (tree type, tsubst_flags_t complain)
19244
tree list = NULL_TREE;
19246
@@ -17896,11 +17942,11 @@
19251
tree outer_args = NULL_TREE;
19253
- tmpl = most_general_template (tmpl);
19254
- args = CLASSTYPE_TI_ARGS (type);
19255
+ tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
19256
+ tree main_tmpl = most_general_template (tmpl);
19257
+ tree args = CLASSTYPE_TI_ARGS (type);
19259
/* For determining which partial specialization to use, only the
19260
innermost args are interesting. */
19261
@@ -17910,7 +17956,7 @@
19262
args = INNERMOST_TEMPLATE_ARGS (args);
19265
- for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
19266
+ for (t = DECL_TEMPLATE_SPECIALIZATIONS (main_tmpl); t; t = TREE_CHAIN (t))
19268
tree partial_spec_args;
19270
@@ -17944,8 +17990,7 @@
19272
partial_spec_args =
19273
coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
19274
- add_to_template_args (outer_args,
19275
- partial_spec_args),
19276
+ partial_spec_args,
19278
/*require_all_args=*/true,
19279
/*use_default_args=*/true);
19280
@@ -18553,6 +18598,10 @@
19282
tree fntype, spec, noex, clone;
19284
+ /* Don't instantiate a noexcept-specification from template context. */
19285
+ if (processing_template_decl)
19288
if (DECL_CLONED_FUNCTION_P (fn))
19289
fn = DECL_CLONED_FUNCTION (fn);
19290
fntype = TREE_TYPE (fn);
19291
@@ -19955,6 +20004,10 @@
19292
if (TREE_CODE (expression) == SCOPE_REF)
19295
+ /* Always dependent, on the number of arguments if nothing else. */
19296
+ if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
19299
if (BASELINK_P (expression))
19300
expression = BASELINK_FUNCTIONS (expression);
19302
Index: gcc/cp/semantics.c
19303
===================================================================
19304
--- a/src/gcc/cp/semantics.c (.../tags/gcc_4_8_2_release)
19305
+++ b/src/gcc/cp/semantics.c (.../branches/gcc-4_8-branch)
19306
@@ -2501,7 +2501,8 @@
19309
decl = fname_decl (input_location, C_RID_CODE (id), id);
19310
- if (processing_template_decl && current_function_decl)
19311
+ if (processing_template_decl && current_function_decl
19312
+ && decl != error_mark_node)
19313
decl = DECL_NAME (decl);
19316
@@ -3853,7 +3854,7 @@
19317
linkage of all functions, and as that causes writes to
19318
the data mapped in from the PCH file, it's advantageous
19319
to mark the functions at this point. */
19320
- if (!DECL_IMPLICIT_INSTANTIATION (fn))
19321
+ if (!DECL_IMPLICIT_INSTANTIATION (fn) || DECL_DEFAULTED_FN (fn))
19323
/* This function must have external linkage, as
19324
otherwise DECL_INTERFACE_KNOWN would have been
19325
@@ -4291,7 +4292,8 @@
19326
error ("%qE has invalid type for %<reduction%>", t);
19329
- else if (FLOAT_TYPE_P (TREE_TYPE (t)))
19330
+ else if (FLOAT_TYPE_P (TREE_TYPE (t))
19331
+ || TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
19333
enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
19335
@@ -4299,10 +4301,26 @@
19342
+ if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
19343
+ r_code = ERROR_MARK;
19345
+ case BIT_AND_EXPR:
19346
+ case BIT_XOR_EXPR:
19347
+ case BIT_IOR_EXPR:
19349
+ r_code = ERROR_MARK;
19351
+ case TRUTH_ANDIF_EXPR:
19352
+ case TRUTH_ORIF_EXPR:
19353
+ if (FLOAT_TYPE_P (TREE_TYPE (t)))
19354
+ r_code = ERROR_MARK;
19357
+ if (r_code == ERROR_MARK)
19359
error ("%qE has invalid type for %<reduction(%s)%>",
19360
t, operator_name_info[r_code].name);
19362
@@ -5059,7 +5077,7 @@
19364
stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node, stmt);
19367
+ finish_expr_stmt (stmt);
19371
@@ -7543,7 +7561,7 @@
19372
unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
19373
tree index = bitsize_int (indexi);
19375
- if (offset/part_widthi <= TYPE_VECTOR_SUBPARTS (op00type))
19376
+ if (offset / part_widthi < TYPE_VECTOR_SUBPARTS (op00type))
19377
return fold_build3_loc (loc,
19378
BIT_FIELD_REF, type, op00,
19379
part_width, index);
19380
@@ -9481,7 +9499,14 @@
19381
/* In unevaluated context this isn't an odr-use, so just return the
19383
if (cp_unevaluated_operand)
19384
- return lookup_name (this_identifier);
19386
+ /* In an NSDMI the fake 'this' pointer that we're using for
19387
+ parsing is in scope_chain. */
19388
+ if (LAMBDA_EXPR_EXTRA_SCOPE (lambda)
19389
+ && TREE_CODE (LAMBDA_EXPR_EXTRA_SCOPE (lambda)) == FIELD_DECL)
19390
+ return scope_chain->x_current_class_ptr;
19391
+ return lookup_name (this_identifier);
19394
/* Try to default capture 'this' if we can. */
19396
Index: gcc/cp/decl2.c
19397
===================================================================
19398
--- a/src/gcc/cp/decl2.c (.../tags/gcc_4_8_2_release)
19399
+++ b/src/gcc/cp/decl2.c (.../branches/gcc-4_8-branch)
19400
@@ -2884,7 +2884,7 @@
19401
TREE_PUBLIC (fn) = TREE_PUBLIC (var);
19402
DECL_ARTIFICIAL (fn) = true;
19403
DECL_COMDAT (fn) = DECL_COMDAT (var);
19404
- DECL_EXTERNAL (fn) = true;
19405
+ DECL_EXTERNAL (fn) = DECL_EXTERNAL (var);
19406
if (DECL_ONE_ONLY (var))
19407
make_decl_one_only (fn, cxx_comdat_group (fn));
19408
if (TREE_PUBLIC (var))
19409
@@ -3946,6 +3946,8 @@
19410
if (TREE_PUBLIC (var))
19412
tree single_init_fn = get_tls_init_fn (var);
19413
+ if (single_init_fn == NULL_TREE)
19416
= cgraph_same_body_alias (cgraph_get_create_node (fn),
19417
single_init_fn, fn);
19418
@@ -3960,6 +3962,22 @@
19419
expand_or_defer_fn (finish_function (0));
19422
+/* The entire file is now complete. If requested, dump everything
19429
+ FILE *stream = dump_begin (TDI_tu, &flags);
19433
+ dump_node (global_namespace, flags & ~TDF_SLIM, stream);
19434
+ dump_end (TDI_tu, stream);
19438
/* This routine is called at the end of compilation.
19439
Its job is to create all the code needed to initialize and
19440
destroy the global aggregates. We do the destruction
19441
@@ -3990,6 +4008,7 @@
19444
c_common_write_pch ();
19449
@@ -4359,17 +4378,8 @@
19451
/* The entire file is now complete. If requested, dump everything
19455
- FILE *stream = dump_begin (TDI_tu, &flags);
19460
- dump_node (global_namespace, flags & ~TDF_SLIM, stream);
19461
- dump_end (TDI_tu, stream);
19465
if (flag_detailed_statistics)
19467
dump_tree_statistics ();
19468
Index: gcc/cp/parser.c
19469
===================================================================
19470
--- a/src/gcc/cp/parser.c (.../tags/gcc_4_8_2_release)
19471
+++ b/src/gcc/cp/parser.c (.../branches/gcc-4_8-branch)
19472
@@ -6421,10 +6421,6 @@
19473
/* Look for the `~'. */
19474
cp_parser_require (parser, CPP_COMPL, RT_COMPL);
19476
- /* Once we see the ~, this has to be a pseudo-destructor. */
19477
- if (!processing_template_decl && !cp_parser_error_occurred (parser))
19478
- cp_parser_commit_to_tentative_parse (parser);
19480
/* Look for the type-name again. We are not responsible for
19481
checking that it matches the first type-name. */
19482
*type = cp_parser_nonclass_name (parser);
19483
@@ -14168,25 +14164,7 @@
19484
/* Look up the type-name. */
19485
type_decl = cp_parser_lookup_name_simple (parser, identifier, token->location);
19487
- if (TREE_CODE (type_decl) == USING_DECL)
19489
- if (!DECL_DEPENDENT_P (type_decl))
19490
- type_decl = strip_using_decl (type_decl);
19491
- else if (USING_DECL_TYPENAME_P (type_decl))
19493
- /* We have found a type introduced by a using
19494
- declaration at class scope that refers to a dependent
19497
- using typename :: [opt] nested-name-specifier unqualified-id ;
19499
- type_decl = make_typename_type (TREE_TYPE (type_decl),
19500
- DECL_NAME (type_decl),
19501
- typename_type, tf_error);
19502
- if (type_decl != error_mark_node)
19503
- type_decl = TYPE_NAME (type_decl);
19506
+ type_decl = strip_using_decl (type_decl);
19508
if (TREE_CODE (type_decl) != TYPE_DECL
19509
&& (objc_is_id (identifier) || objc_is_class_name (identifier)))
19510
@@ -14742,7 +14720,8 @@
19512
underlying_type = grokdeclarator (NULL, &type_specifiers, TYPENAME,
19513
/*initialized=*/0, NULL);
19514
- if (underlying_type == error_mark_node)
19515
+ if (underlying_type == error_mark_node
19516
+ || check_for_bare_parameter_packs (underlying_type))
19517
underlying_type = NULL_TREE;
19520
@@ -22209,6 +22188,9 @@
19525
+ type = error_mark_node;
19527
if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
19529
maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
19530
@@ -22576,6 +22558,9 @@
19531
&& CONSTRUCTOR_IS_DIRECT_INIT (parsed_arg))
19532
flags = LOOKUP_NORMAL;
19533
parsed_arg = digest_init_flags (TREE_TYPE (decl), parsed_arg, flags);
19534
+ if (TREE_CODE (parsed_arg) == TARGET_EXPR)
19535
+ /* This represents the whole initialization. */
19536
+ TARGET_EXPR_DIRECT_INIT_P (parsed_arg) = true;
19540
Index: gcc/cp/call.c
19541
===================================================================
19542
--- a/src/gcc/cp/call.c (.../tags/gcc_4_8_2_release)
19543
+++ b/src/gcc/cp/call.c (.../branches/gcc-4_8-branch)
19544
@@ -892,6 +892,9 @@
19546
if (i < CONSTRUCTOR_NELTS (ctor))
19547
val = CONSTRUCTOR_ELT (ctor, i)->value;
19548
+ else if (TREE_CODE (ftype) == REFERENCE_TYPE)
19549
+ /* Value-initialization of reference is ill-formed. */
19553
if (empty_ctor == NULL_TREE)
19554
@@ -5806,9 +5809,11 @@
19555
&& convs->kind != ck_ambig
19556
&& (convs->kind != ck_ref_bind
19557
|| convs->user_conv_p)
19558
- && convs->kind != ck_rvalue
19559
+ && (convs->kind != ck_rvalue
19560
+ || SCALAR_TYPE_P (totype))
19561
&& convs->kind != ck_base)
19563
+ bool complained = false;
19564
conversion *t = convs;
19566
/* Give a helpful error if this is bad because of excess braces. */
19567
@@ -5816,7 +5821,14 @@
19568
&& SCALAR_TYPE_P (totype)
19569
&& CONSTRUCTOR_NELTS (expr) > 0
19570
&& BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
19571
- permerror (loc, "too many braces around initializer for %qT", totype);
19573
+ complained = true;
19574
+ permerror (loc, "too many braces around initializer "
19575
+ "for %qT", totype);
19576
+ while (BRACE_ENCLOSED_INITIALIZER_P (expr)
19577
+ && CONSTRUCTOR_NELTS (expr) == 1)
19578
+ expr = CONSTRUCTOR_ELT (expr, 0)->value;
19581
for (; t ; t = next_conversion (t))
19583
@@ -5853,8 +5865,9 @@
19587
- permerror (loc, "invalid conversion from %qT to %qT",
19588
- TREE_TYPE (expr), totype);
19590
+ permerror (loc, "invalid conversion from %qT to %qT",
19591
+ TREE_TYPE (expr), totype);
19593
permerror (DECL_SOURCE_LOCATION (fn),
19594
" initializing argument %P of %qD", argnum, fn);
19595
@@ -5999,6 +6012,8 @@
19596
to avoid the error about taking the address of a temporary. */
19597
array = cp_build_addr_expr (array, complain);
19598
array = cp_convert (build_pointer_type (elttype), array, complain);
19599
+ if (array == error_mark_node)
19600
+ return error_mark_node;
19602
/* Build up the initializer_list object. */
19603
totype = complete_type (totype);
19604
@@ -6023,8 +6038,11 @@
19605
return fold_if_not_in_template (expr);
19607
expr = reshape_init (totype, expr, complain);
19608
- return get_target_expr_sfinae (digest_init (totype, expr, complain),
19609
+ expr = get_target_expr_sfinae (digest_init (totype, expr, complain),
19611
+ if (expr != error_mark_node)
19612
+ TARGET_EXPR_LIST_INIT_P (expr) = true;
19617
@@ -7414,7 +7432,7 @@
19618
struct z_candidate *candidates = 0, *cand;
19619
tree explicit_targs = NULL_TREE;
19620
tree basetype = NULL_TREE;
19621
- tree access_binfo;
19622
+ tree access_binfo, binfo;
19624
tree first_mem_arg = NULL_TREE;
19626
@@ -7454,6 +7472,7 @@
19627
if (!conversion_path)
19628
conversion_path = BASELINK_BINFO (fns);
19629
access_binfo = BASELINK_ACCESS_BINFO (fns);
19630
+ binfo = BASELINK_BINFO (fns);
19631
optype = BASELINK_OPTYPE (fns);
19632
fns = BASELINK_FUNCTIONS (fns);
19633
if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
19634
@@ -7697,13 +7716,13 @@
19636
/* Optimize away vtable lookup if we know that this
19637
function can't be overridden. We need to check if
19638
- the context and the instance type are the same,
19639
+ the context and the type where we found fn are the same,
19640
actually FN might be defined in a different class
19641
type because of a using-declaration. In this case, we
19642
do not want to perform a non-virtual call. */
19643
if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
19644
&& same_type_ignoring_top_level_qualifiers_p
19645
- (DECL_CONTEXT (fn), TREE_TYPE (instance))
19646
+ (DECL_CONTEXT (fn), BINFO_TYPE (binfo))
19647
&& resolves_to_fixed_type_p (instance, 0))
19648
flags |= LOOKUP_NONVIRTUAL;
19649
if (explicit_targs)
19650
Index: gcc/cp/cvt.c
19651
===================================================================
19652
--- a/src/gcc/cp/cvt.c (.../tags/gcc_4_8_2_release)
19653
+++ b/src/gcc/cp/cvt.c (.../branches/gcc-4_8-branch)
19654
@@ -203,13 +203,13 @@
19656
if (null_ptr_cst_p (expr))
19658
- if (complain & tf_warning)
19659
- maybe_warn_zero_as_null_pointer_constant (expr, loc);
19661
if (TYPE_PTRMEMFUNC_P (type))
19662
return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 0,
19663
/*c_cast_p=*/false, complain);
19665
+ if (complain & tf_warning)
19666
+ maybe_warn_zero_as_null_pointer_constant (expr, loc);
19668
/* A NULL pointer-to-data-member is represented by -1, not by
19670
tree val = (TYPE_PTRDATAMEM_P (type)
19671
@@ -743,6 +743,7 @@
19673
if ((complain & tf_warning)
19674
&& TREE_CODE (e) == INTEGER_CST
19675
+ && ENUM_UNDERLYING_TYPE (type)
19676
&& !int_fits_type_p (e, ENUM_UNDERLYING_TYPE (type)))
19677
warning_at (loc, OPT_Wconversion,
19678
"the result of the conversion is unspecified because "
19679
Index: gcc/cp/mangle.c
19680
===================================================================
19681
--- a/src/gcc/cp/mangle.c (.../tags/gcc_4_8_2_release)
19682
+++ b/src/gcc/cp/mangle.c (.../branches/gcc-4_8-branch)
19683
@@ -3478,6 +3478,7 @@
19685
if (G.need_abi_warning
19686
/* Don't do this for a fake symbol we aren't going to emit anyway. */
19687
+ && TREE_CODE (decl) != TYPE_DECL
19688
&& !DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
19689
&& !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
19691
@@ -3773,7 +3774,8 @@
19693
write_guarded_var_name (const tree variable)
19695
- if (strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
19696
+ if (DECL_NAME (variable)
19697
+ && strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
19698
/* The name of a guard variable for a reference temporary should refer
19699
to the reference, not the temporary. */
19700
write_string (IDENTIFIER_POINTER (DECL_NAME (variable)) + 4);
19701
Index: gcc/cp/cp-tree.h
19702
===================================================================
19703
--- a/src/gcc/cp/cp-tree.h (.../tags/gcc_4_8_2_release)
19704
+++ b/src/gcc/cp/cp-tree.h (.../branches/gcc-4_8-branch)
19705
@@ -344,7 +344,8 @@
19706
/* Returns true iff NODE is a BASELINK. */
19707
#define BASELINK_P(NODE) \
19708
(TREE_CODE (NODE) == BASELINK)
19709
-/* The BINFO indicating the base from which the BASELINK_FUNCTIONS came. */
19710
+/* The BINFO indicating the base in which lookup found the
19711
+ BASELINK_FUNCTIONS. */
19712
#define BASELINK_BINFO(NODE) \
19713
(((struct tree_baselink*) BASELINK_CHECK (NODE))->binfo)
19714
/* The functions referred to by the BASELINK; either a FUNCTION_DECL,
19715
Index: gcc/cp/name-lookup.c
19716
===================================================================
19717
--- a/src/gcc/cp/name-lookup.c (.../tags/gcc_4_8_2_release)
19718
+++ b/src/gcc/cp/name-lookup.c (.../branches/gcc-4_8-branch)
19719
@@ -394,7 +394,8 @@
19723
-/* Strip non dependent using declarations. */
19724
+/* Strip non dependent using declarations. If DECL is dependent,
19725
+ surreptitiously create a typename_type and return it. */
19728
strip_using_decl (tree decl)
19729
@@ -404,6 +405,23 @@
19731
while (TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
19732
decl = USING_DECL_DECLS (decl);
19734
+ if (TREE_CODE (decl) == USING_DECL && DECL_DEPENDENT_P (decl)
19735
+ && USING_DECL_TYPENAME_P (decl))
19737
+ /* We have found a type introduced by a using
19738
+ declaration at class scope that refers to a dependent
19741
+ using typename :: [opt] nested-name-specifier unqualified-id ;
19743
+ decl = make_typename_type (TREE_TYPE (decl),
19744
+ DECL_NAME (decl),
19745
+ typename_type, tf_error);
19746
+ if (decl != error_mark_node)
19747
+ decl = TYPE_NAME (decl);
19753
@@ -5605,9 +5623,9 @@
19754
push_using_directive (tree used)
19757
- timevar_start (TV_NAME_LOOKUP);
19758
+ bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
19759
ret = push_using_directive_1 (used);
19760
- timevar_stop (TV_NAME_LOOKUP);
19761
+ timevar_cond_stop (TV_NAME_LOOKUP, subtime);
19765
Index: gcc/mode-switching.c
19766
===================================================================
19767
--- a/src/gcc/mode-switching.c (.../tags/gcc_4_8_2_release)
19768
+++ b/src/gcc/mode-switching.c (.../branches/gcc-4_8-branch)
19769
@@ -568,12 +568,15 @@
19771
info[bb->index].computing = last_mode;
19772
/* Check for blocks without ANY mode requirements.
19773
- N.B. because of MODE_AFTER, last_mode might still be different
19775
+ N.B. because of MODE_AFTER, last_mode might still
19776
+ be different from no_mode, in which case we need to
19777
+ mark the block as nontransparent. */
19778
if (!any_set_required)
19780
ptr = new_seginfo (no_mode, BB_END (bb), bb->index, live_now);
19781
add_seginfo (info + bb->index, ptr);
19782
+ if (last_mode != no_mode)
19783
+ bitmap_clear_bit (transp[bb->index], j);
19786
#if defined (MODE_ENTRY) && defined (MODE_EXIT)
19787
Index: gcc/ipa-pure-const.c
19788
===================================================================
19789
--- a/src/gcc/ipa-pure-const.c (.../tags/gcc_4_8_2_release)
19790
+++ b/src/gcc/ipa-pure-const.c (.../branches/gcc-4_8-branch)
19791
@@ -588,7 +588,7 @@
19792
/* Wrapper around check_decl for loads in local more. */
19795
-check_load (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
19796
+check_load (gimple, tree op, tree, void *data)
19799
check_decl ((funct_state)data, op, false, false);
19800
@@ -600,7 +600,7 @@
19801
/* Wrapper around check_decl for stores in local more. */
19804
-check_store (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
19805
+check_store (gimple, tree op, tree, void *data)
19808
check_decl ((funct_state)data, op, true, false);
19809
@@ -612,7 +612,7 @@
19810
/* Wrapper around check_decl for loads in ipa mode. */
19813
-check_ipa_load (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
19814
+check_ipa_load (gimple, tree op, tree, void *data)
19817
check_decl ((funct_state)data, op, false, true);
19818
@@ -624,7 +624,7 @@
19819
/* Wrapper around check_decl for stores in ipa mode. */
19822
-check_ipa_store (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
19823
+check_ipa_store (gimple, tree op, tree, void *data)
19826
check_decl ((funct_state)data, op, true, true);
19828
===================================================================
19829
--- a/src/gcc/cse.c (.../tags/gcc_4_8_2_release)
19830
+++ b/src/gcc/cse.c (.../branches/gcc-4_8-branch)
19831
@@ -6082,6 +6082,18 @@
19835
+ case UNSIGNED_FLOAT:
19837
+ rtx new_rtx = cse_process_notes (XEXP (x, 0), object, changed);
19838
+ /* We don't substitute negative VOIDmode constants into these rtx,
19839
+ since they would impede folding. */
19840
+ if (GET_MODE (new_rtx) != VOIDmode
19841
+ || (CONST_INT_P (new_rtx) && INTVAL (new_rtx) >= 0)
19842
+ || (CONST_DOUBLE_P (new_rtx) && CONST_DOUBLE_HIGH (new_rtx) >= 0))
19843
+ validate_change (object, &XEXP (x, 0), new_rtx, 0);
19848
i = REG_QTY (REGNO (x));
19850
Index: gcc/sel-sched.c
19851
===================================================================
19852
--- a/src/gcc/sel-sched.c (.../tags/gcc_4_8_2_release)
19853
+++ b/src/gcc/sel-sched.c (.../branches/gcc-4_8-branch)
19854
@@ -1253,7 +1253,7 @@
19856
if (!HARD_FRAME_POINTER_IS_FRAME_POINTER)
19857
add_to_hard_reg_set (®_rename_p->unavailable_hard_regs,
19858
- Pmode, HARD_FRAME_POINTER_IS_FRAME_POINTER);
19859
+ Pmode, HARD_FRAME_POINTER_REGNUM);
19863
Index: gcc/gimple-low.c
19864
===================================================================
19865
--- a/src/gcc/gimple-low.c (.../tags/gcc_4_8_2_release)
19866
+++ b/src/gcc/gimple-low.c (.../branches/gcc-4_8-branch)
19867
@@ -238,6 +238,7 @@
19869
arg = gimple_call_arg (stmt, i);
19870
if (p == error_mark_node
19871
+ || DECL_ARG_TYPE (p) == error_mark_node
19872
|| arg == error_mark_node
19873
|| (!types_compatible_p (DECL_ARG_TYPE (p), TREE_TYPE (arg))
19874
&& !fold_convertible_p (DECL_ARG_TYPE (p), arg)))
19875
Index: gcc/tree-ssa-sink.c
19876
===================================================================
19877
--- a/src/gcc/tree-ssa-sink.c (.../tags/gcc_4_8_2_release)
19878
+++ b/src/gcc/tree-ssa-sink.c (.../branches/gcc-4_8-branch)
19879
@@ -559,7 +559,7 @@
19880
execute_sink_code (void)
19882
loop_optimizer_init (LOOPS_NORMAL);
19884
+ split_critical_edges ();
19885
connect_infinite_loops_to_exit ();
19886
memset (&sink_stats, 0, sizeof (sink_stats));
19887
calculate_dominance_info (CDI_DOMINATORS);
19888
Index: gcc/config.in
19889
===================================================================
19890
--- a/src/gcc/config.in (.../tags/gcc_4_8_2_release)
19891
+++ b/src/gcc/config.in (.../branches/gcc-4_8-branch)
19892
@@ -363,6 +363,12 @@
19896
+/* Define if your assembler supports the 'ud2' mnemonic. */
19897
+#ifndef USED_FOR_TARGET
19898
+#undef HAVE_AS_IX86_UD2
19902
/* Define if your assembler supports the lituse_jsrdirect relocation. */
19903
#ifndef USED_FOR_TARGET
19904
#undef HAVE_AS_JSRDIRECT_RELOCS
19905
@@ -375,6 +381,12 @@
19909
+/* Define if your assembler supports LEON instructions. */
19910
+#ifndef USED_FOR_TARGET
19911
+#undef HAVE_AS_LEON
19915
/* Define if the assembler won't complain about a line such as # 0 "" 2. */
19916
#ifndef USED_FOR_TARGET
19917
#undef HAVE_AS_LINE_ZERO
19919
===================================================================
19920
--- a/src/gcc/ifcvt.c (.../tags/gcc_4_8_2_release)
19921
+++ b/src/gcc/ifcvt.c (.../branches/gcc-4_8-branch)
19922
@@ -115,7 +115,11 @@
19926
- if (CALL_P (insn) || NONJUMP_INSN_P (insn))
19927
+ if ((CALL_P (insn) || NONJUMP_INSN_P (insn))
19928
+ /* Don't count USE/CLOBBER insns, flow_find_cross_jump etc.
19929
+ don't count them either and we need consistency. */
19930
+ && GET_CODE (PATTERN (insn)) != USE
19931
+ && GET_CODE (PATTERN (insn)) != CLOBBER)
19934
if (insn == BB_END (bb))
19935
@@ -505,7 +509,10 @@
19936
n_insns -= 2 * n_matching;
19939
- if (then_start && else_start)
19942
+ && then_n_insns > n_matching
19943
+ && else_n_insns > n_matching)
19945
int longest_match = MIN (then_n_insns - n_matching,
19946
else_n_insns - n_matching);
19948
===================================================================
19949
--- a/src/gcc/expr.c (.../tags/gcc_4_8_2_release)
19950
+++ b/src/gcc/expr.c (.../branches/gcc-4_8-branch)
19951
@@ -1994,12 +1994,14 @@
19952
HOST_WIDE_INT bytepos = INTVAL (XEXP (XVECEXP (src, 0, i), 1));
19953
enum machine_mode mode = GET_MODE (tmps[i]);
19954
unsigned int bytelen = GET_MODE_SIZE (mode);
19955
- unsigned int adj_bytelen = bytelen;
19956
+ unsigned int adj_bytelen;
19959
/* Handle trailing fragments that run over the size of the struct. */
19960
if (ssize >= 0 && bytepos + (HOST_WIDE_INT) bytelen > ssize)
19961
adj_bytelen = ssize - bytepos;
19963
+ adj_bytelen = bytelen;
19965
if (GET_CODE (dst) == CONCAT)
19967
@@ -2040,6 +2042,7 @@
19971
+ /* Handle trailing fragments that run over the size of the struct. */
19972
if (ssize >= 0 && bytepos + (HOST_WIDE_INT) bytelen > ssize)
19974
/* store_bit_field always takes its value from the lsb.
19975
@@ -2057,16 +2060,22 @@
19976
tmps[i] = expand_shift (RSHIFT_EXPR, mode, tmps[i],
19977
shift, tmps[i], 0);
19979
- bytelen = adj_bytelen;
19981
+ /* Make sure not to write past the end of the struct. */
19982
+ store_bit_field (dest,
19983
+ adj_bytelen * BITS_PER_UNIT, bytepos * BITS_PER_UNIT,
19984
+ bytepos * BITS_PER_UNIT, ssize * BITS_PER_UNIT - 1,
19985
+ VOIDmode, tmps[i]);
19988
/* Optimize the access just a bit. */
19990
- && (! SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (dest))
19991
- || MEM_ALIGN (dest) >= GET_MODE_ALIGNMENT (mode))
19992
- && bytepos * BITS_PER_UNIT % GET_MODE_ALIGNMENT (mode) == 0
19993
- && bytelen == GET_MODE_SIZE (mode))
19994
+ else if (MEM_P (dest)
19995
+ && (!SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (dest))
19996
+ || MEM_ALIGN (dest) >= GET_MODE_ALIGNMENT (mode))
19997
+ && bytepos * BITS_PER_UNIT % GET_MODE_ALIGNMENT (mode) == 0
19998
+ && bytelen == GET_MODE_SIZE (mode))
19999
emit_move_insn (adjust_address (dest, mode, bytepos), tmps[i]);
20002
store_bit_field (dest, bytelen * BITS_PER_UNIT, bytepos * BITS_PER_UNIT,
20003
0, 0, mode, tmps[i]);
20004
@@ -3602,12 +3611,21 @@
20005
into a new pseudo. This constant may be used in different modes,
20006
and if not, combine will put things back together for us. */
20007
trunc_y = force_reg (srcmode, trunc_y);
20008
- emit_unop_insn (ic, x, trunc_y, UNKNOWN);
20010
+ /* If x is a hard register, perform the extension into a pseudo,
20011
+ so that e.g. stack realignment code is aware of it. */
20013
+ if (REG_P (x) && HARD_REGISTER_P (x))
20014
+ target = gen_reg_rtx (dstmode);
20016
+ emit_unop_insn (ic, target, trunc_y, UNKNOWN);
20017
last_insn = get_last_insn ();
20020
+ if (REG_P (target))
20021
set_unique_reg_note (last_insn, REG_EQUAL, y);
20024
+ return emit_move_insn (x, target);
20028
@@ -4551,19 +4569,19 @@
20029
- tree_low_cst (DECL_FIELD_BIT_OFFSET (repr), 1));
20031
/* If the adjustment is larger than bitpos, we would have a negative bit
20032
- position for the lower bound and this may wreak havoc later. This can
20033
- occur only if we have a non-null offset, so adjust offset and bitpos
20034
- to make the lower bound non-negative. */
20035
+ position for the lower bound and this may wreak havoc later. Adjust
20036
+ offset and bitpos to make the lower bound non-negative in that case. */
20037
if (bitoffset > *bitpos)
20039
HOST_WIDE_INT adjust = bitoffset - *bitpos;
20041
gcc_assert ((adjust % BITS_PER_UNIT) == 0);
20042
- gcc_assert (*offset != NULL_TREE);
20046
- = size_binop (MINUS_EXPR, *offset, size_int (adjust / BITS_PER_UNIT));
20047
+ if (*offset == NULL_TREE)
20048
+ *offset = size_int (-adjust / BITS_PER_UNIT);
20051
+ = size_binop (MINUS_EXPR, *offset, size_int (adjust / BITS_PER_UNIT));
20055
@@ -4668,8 +4686,7 @@
20056
expand_insn (icode, 2, ops);
20059
- store_bit_field (mem, GET_MODE_BITSIZE (mode),
20060
- 0, 0, 0, mode, reg);
20061
+ store_bit_field (mem, GET_MODE_BITSIZE (mode), 0, 0, 0, mode, reg);
20065
@@ -4698,6 +4715,15 @@
20066
tem = get_inner_reference (to, &bitsize, &bitpos, &offset, &mode1,
20067
&unsignedp, &volatilep, true);
20069
+ /* Make sure bitpos is not negative, it can wreak havoc later. */
20072
+ gcc_assert (offset == NULL_TREE);
20073
+ offset = size_int (bitpos >> (BITS_PER_UNIT == 8
20074
+ ? 3 : exact_log2 (BITS_PER_UNIT)));
20075
+ bitpos &= BITS_PER_UNIT - 1;
20078
if (TREE_CODE (to) == COMPONENT_REF
20079
&& DECL_BIT_FIELD_TYPE (TREE_OPERAND (to, 1)))
20080
get_bit_range (&bitregion_start, &bitregion_end, to, &bitpos, &offset);
20081
Index: gcc/go/go-gcc.cc
20082
===================================================================
20083
--- a/src/gcc/go/go-gcc.cc (.../tags/gcc_4_8_2_release)
20084
+++ b/src/gcc/go/go-gcc.cc (.../branches/gcc-4_8-branch)
20085
@@ -232,6 +232,9 @@
20087
convert_expression(Btype* type, Bexpression* expr, Location);
20090
+ function_code_expression(Bfunction*, Location);
20095
@@ -334,6 +337,17 @@
20097
label_address(Blabel*, Location);
20103
+ { return this->make_function(error_mark_node); }
20106
+ function(Btype* fntype, const std::string& name, const std::string& asm_name,
20107
+ bool is_visible, bool is_declaration, bool is_inlinable,
20108
+ bool disable_split_stack, bool in_unique_section, Location);
20111
// Make a Bexpression from a tree.
20113
@@ -350,6 +364,10 @@
20115
{ return new Btype(t); }
20118
+ make_function(tree t)
20119
+ { return new Bfunction(t); }
20122
fill_in_struct(Btype*, const std::vector<Btyped_identifier>&);
20124
@@ -966,6 +984,19 @@
20125
return tree_to_expr(ret);
20128
+// Get the address of a function.
20131
+Gcc_backend::function_code_expression(Bfunction* bfunc, Location location)
20133
+ tree func = bfunc->get_tree();
20134
+ if (func == error_mark_node)
20135
+ return this->error_expression();
20137
+ tree ret = build_fold_addr_expr_loc(location.gcc_location(), func);
20138
+ return this->make_expression(ret);
20141
// An expression as a statement.
20144
@@ -1724,6 +1755,56 @@
20145
return this->make_expression(ret);
20148
+// Declare or define a new function.
20151
+Gcc_backend::function(Btype* fntype, const std::string& name,
20152
+ const std::string& asm_name, bool is_visible,
20153
+ bool is_declaration, bool is_inlinable,
20154
+ bool disable_split_stack, bool in_unique_section,
20155
+ Location location)
20157
+ tree functype = fntype->get_tree();
20158
+ if (functype != error_mark_node)
20160
+ gcc_assert(FUNCTION_POINTER_TYPE_P(functype));
20161
+ functype = TREE_TYPE(functype);
20163
+ tree id = get_identifier_from_string(name);
20164
+ if (functype == error_mark_node || id == error_mark_node)
20165
+ return this->error_function();
20167
+ tree decl = build_decl(location.gcc_location(), FUNCTION_DECL, id, functype);
20168
+ if (!asm_name.empty())
20169
+ SET_DECL_ASSEMBLER_NAME(decl, get_identifier_from_string(asm_name));
20171
+ TREE_PUBLIC(decl) = 1;
20172
+ if (is_declaration)
20173
+ DECL_EXTERNAL(decl) = 1;
20176
+ tree restype = TREE_TYPE(functype);
20178
+ build_decl(location.gcc_location(), RESULT_DECL, NULL_TREE, restype);
20179
+ DECL_ARTIFICIAL(resdecl) = 1;
20180
+ DECL_IGNORED_P(resdecl) = 1;
20181
+ DECL_CONTEXT(resdecl) = decl;
20182
+ DECL_RESULT(decl) = resdecl;
20184
+ if (!is_inlinable)
20185
+ DECL_UNINLINABLE(decl) = 1;
20186
+ if (disable_split_stack)
20188
+ tree attr = get_identifier("__no_split_stack__");
20189
+ DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
20191
+ if (in_unique_section)
20192
+ resolve_unique_section(decl, 0, 1);
20194
+ go_preserve_from_gc(decl);
20195
+ return new Bfunction(decl);
20198
// The single backend.
20200
static Gcc_backend gcc_backend;
20201
@@ -1799,3 +1880,9 @@
20203
return bv->get_tree();
20207
+function_to_tree(Bfunction* bf)
20209
+ return bf->get_tree();
20211
Index: gcc/go/ChangeLog
20212
===================================================================
20213
--- a/src/gcc/go/ChangeLog (.../tags/gcc_4_8_2_release)
20214
+++ b/src/gcc/go/ChangeLog (.../branches/gcc-4_8-branch)
20216
+2013-12-11 Ian Lance Taylor <iant@google.com>
20218
+ * go-lang.c (go_langhook_post_options): Disable sibling calls by
20221
+2013-10-16 Ian Lance Taylor <iant@google.com>
20223
+ Bring in from mainline:
20225
+ 2013-10-11 Chris Manghane <cmang@google.com>
20226
+ * go-gcc.cc (Gcc_backend::function_code_expression): New
20229
+ 2013-10-10 Chris Manghane <cmang@google.com>
20230
+ * go-gcc.cc (Backend::error_function): New function.
20231
+ (Backend::function): New function.
20232
+ (Backend::make_function): New function.
20233
+ (function_to_tree): New function.
20235
2013-10-16 Release Manager
20237
* GCC 4.8.2 released.
20238
Index: gcc/go/go-lang.c
20239
===================================================================
20240
--- a/src/gcc/go/go-lang.c (.../tags/gcc_4_8_2_release)
20241
+++ b/src/gcc/go/go-lang.c (.../branches/gcc-4_8-branch)
20242
@@ -269,6 +269,10 @@
20243
if (flag_excess_precision_cmdline == EXCESS_PRECISION_DEFAULT)
20244
flag_excess_precision_cmdline = EXCESS_PRECISION_STANDARD;
20246
+ /* Tail call optimizations can confuse uses of runtime.Callers. */
20247
+ if (!global_options_set.x_flag_optimize_sibling_calls)
20248
+ global_options.x_flag_optimize_sibling_calls = 0;
20250
/* Returning false means that the backend should be used. */
20253
Index: gcc/go/gofrontend/gogo.cc
20254
===================================================================
20255
--- a/src/gcc/go/gofrontend/gogo.cc (.../tags/gcc_4_8_2_release)
20256
+++ b/src/gcc/go/gofrontend/gogo.cc (.../branches/gcc-4_8-branch)
20257
@@ -2822,7 +2822,10 @@
20258
if (orig_fntype->is_varargs())
20259
new_fntype->set_is_varargs();
20261
- std::string name = orig_no->name() + "$recover";
20262
+ std::string name = orig_no->name();
20263
+ if (orig_fntype->is_method())
20264
+ name += "$" + orig_fntype->receiver()->type()->mangled_name(gogo);
20265
+ name += "$recover";
20266
Named_object *new_no = gogo->start_function(name, new_fntype, false,
20268
Function *new_func = new_no->func_value();
20269
@@ -2916,7 +2919,25 @@
20270
&& !orig_rec_no->var_value()->is_receiver());
20271
orig_rec_no->var_value()->set_is_receiver();
20273
- const std::string& new_receiver_name(orig_fntype->receiver()->name());
20274
+ std::string new_receiver_name(orig_fntype->receiver()->name());
20275
+ if (new_receiver_name.empty())
20277
+ // Find the receiver. It was named "r.NNN" in
20278
+ // Gogo::start_function.
20279
+ for (Bindings::const_definitions_iterator p =
20280
+ new_bindings->begin_definitions();
20281
+ p != new_bindings->end_definitions();
20284
+ const std::string& pname((*p)->name());
20285
+ if (pname[0] == 'r' && pname[1] == '.')
20287
+ new_receiver_name = pname;
20291
+ go_assert(!new_receiver_name.empty());
20293
Named_object* new_rec_no = new_bindings->lookup_local(new_receiver_name);
20294
if (new_rec_no == NULL)
20295
go_assert(saw_errors());
20296
@@ -3320,7 +3341,8 @@
20297
closure_var_(NULL), block_(block), location_(location), labels_(),
20298
local_type_count_(0), descriptor_(NULL), fndecl_(NULL), defer_stack_(NULL),
20299
is_sink_(false), results_are_named_(false), nointerface_(false),
20300
- calls_recover_(false), is_recover_thunk_(false), has_recover_thunk_(false),
20301
+ is_unnamed_type_stub_method_(false), calls_recover_(false),
20302
+ is_recover_thunk_(false), has_recover_thunk_(false),
20303
in_unique_section_(false)
20306
@@ -3819,6 +3841,81 @@
20307
*presults = results;
20310
+// Get the backend representation.
20313
+Function::get_or_make_decl(Gogo* gogo, Named_object* no)
20315
+ if (this->fndecl_ == NULL)
20317
+ std::string asm_name;
20318
+ bool is_visible = false;
20319
+ if (no->package() != NULL)
20321
+ else if (this->enclosing_ != NULL || Gogo::is_thunk(no))
20323
+ else if (Gogo::unpack_hidden_name(no->name()) == "init"
20324
+ && !this->type_->is_method())
20326
+ else if (Gogo::unpack_hidden_name(no->name()) == "main"
20327
+ && gogo->is_main_package())
20328
+ is_visible = true;
20329
+ // Methods have to be public even if they are hidden because
20330
+ // they can be pulled into type descriptors when using
20331
+ // anonymous fields.
20332
+ else if (!Gogo::is_hidden_name(no->name())
20333
+ || this->type_->is_method())
20335
+ if (!this->is_unnamed_type_stub_method_)
20336
+ is_visible = true;
20337
+ std::string pkgpath = gogo->pkgpath_symbol();
20338
+ if (this->type_->is_method()
20339
+ && Gogo::is_hidden_name(no->name())
20340
+ && Gogo::hidden_name_pkgpath(no->name()) != gogo->pkgpath())
20342
+ // This is a method we created for an unexported
20343
+ // method of an imported embedded type. We need to
20344
+ // use the pkgpath of the imported package to avoid
20345
+ // a possible name collision. See bug478 for a test
20347
+ pkgpath = Gogo::hidden_name_pkgpath(no->name());
20348
+ pkgpath = Gogo::pkgpath_for_symbol(pkgpath);
20351
+ asm_name = pkgpath;
20352
+ asm_name.append(1, '.');
20353
+ asm_name.append(Gogo::unpack_hidden_name(no->name()));
20354
+ if (this->type_->is_method())
20356
+ asm_name.append(1, '.');
20357
+ Type* rtype = this->type_->receiver()->type();
20358
+ asm_name.append(rtype->mangled_name(gogo));
20362
+ // If a function calls the predeclared recover function, we
20363
+ // can't inline it, because recover behaves differently in a
20364
+ // function passed directly to defer. If this is a recover
20365
+ // thunk that we built to test whether a function can be
20366
+ // recovered, we can't inline it, because that will mess up
20367
+ // our return address comparison.
20368
+ bool is_inlinable = !(this->calls_recover_ || this->is_recover_thunk_);
20370
+ // If this is a thunk created to call a function which calls
20371
+ // the predeclared recover function, we need to disable
20372
+ // stack splitting for the thunk.
20373
+ bool disable_split_stack = this->is_recover_thunk_;
20375
+ Btype* functype = this->type_->get_backend_fntype(gogo);
20377
+ gogo->backend()->function(functype, no->get_id(gogo), asm_name,
20378
+ is_visible, false, is_inlinable,
20379
+ disable_split_stack,
20380
+ this->in_unique_section_, this->location());
20382
+ return this->fndecl_;
20387
Block::Block(Block* enclosing, Location location)
20388
@@ -5110,6 +5207,75 @@
20393
+// Return the external identifier for this object.
20396
+Named_object::get_id(Gogo* gogo)
20398
+ go_assert(!this->is_variable() && !this->is_result_variable());
20399
+ std::string decl_name;
20400
+ if (this->is_function_declaration()
20401
+ && !this->func_declaration_value()->asm_name().empty())
20402
+ decl_name = this->func_declaration_value()->asm_name();
20403
+ else if (this->is_type()
20404
+ && Linemap::is_predeclared_location(this->type_value()->location()))
20406
+ // We don't need the package name for builtin types.
20407
+ decl_name = Gogo::unpack_hidden_name(this->name_);
20411
+ std::string package_name;
20412
+ if (this->package_ == NULL)
20413
+ package_name = gogo->package_name();
20415
+ package_name = this->package_->package_name();
20417
+ // Note that this will be misleading if this is an unexported
20418
+ // method generated for an embedded imported type. In that case
20419
+ // the unexported method should have the package name of the
20420
+ // package from which it is imported, but we are going to give
20421
+ // it our package name. Fixing this would require knowing the
20422
+ // package name, but we only know the package path. It might be
20423
+ // better to use package paths here anyhow. This doesn't affect
20424
+ // the assembler code, because we always set that name in
20425
+ // Function::get_or_make_decl anyhow. FIXME.
20427
+ decl_name = package_name + '.' + Gogo::unpack_hidden_name(this->name_);
20429
+ Function_type* fntype;
20430
+ if (this->is_function())
20431
+ fntype = this->func_value()->type();
20432
+ else if (this->is_function_declaration())
20433
+ fntype = this->func_declaration_value()->type();
20436
+ if (fntype != NULL && fntype->is_method())
20438
+ decl_name.push_back('.');
20439
+ decl_name.append(fntype->receiver()->type()->mangled_name(gogo));
20442
+ if (this->is_type())
20444
+ unsigned int index;
20445
+ const Named_object* in_function = this->type_value()->in_function(&index);
20446
+ if (in_function != NULL)
20448
+ decl_name += '$' + Gogo::unpack_hidden_name(in_function->name());
20452
+ snprintf(buf, sizeof buf, "%u", index);
20453
+ decl_name += '$';
20454
+ decl_name += buf;
20458
+ return decl_name;
20463
Bindings::Bindings(Bindings* enclosing)
20464
Index: gcc/go/gofrontend/runtime.def
20465
===================================================================
20466
--- a/src/gcc/go/gofrontend/runtime.def (.../tags/gcc_4_8_2_release)
20467
+++ b/src/gcc/go/gofrontend/runtime.def (.../branches/gcc-4_8-branch)
20469
P1(STRING), R1(SLICE))
20472
+// Complex division.
20473
+DEF_GO_RUNTIME(COMPLEX64_DIV, "__go_complex64_div",
20474
+ P2(COMPLEX64, COMPLEX64), R1(COMPLEX64))
20475
+DEF_GO_RUNTIME(COMPLEX128_DIV, "__go_complex128_div",
20476
+ P2(COMPLEX128, COMPLEX128), R1(COMPLEX128))
20479
DEF_GO_RUNTIME(MAKESLICE1, "__go_make_slice1", P2(TYPE, UINTPTR), R1(SLICE))
20480
DEF_GO_RUNTIME(MAKESLICE2, "__go_make_slice2", P3(TYPE, UINTPTR, UINTPTR),
20481
Index: gcc/go/gofrontend/gogo.h
20482
===================================================================
20483
--- a/src/gcc/go/gofrontend/gogo.h (.../tags/gcc_4_8_2_release)
20484
+++ b/src/gcc/go/gofrontend/gogo.h (.../branches/gcc-4_8-branch)
20491
// This file declares the basic classes used to hold the internal
20492
// representation of Go which is built by the parser.
20493
@@ -952,6 +953,15 @@
20494
this->nointerface_ = true;
20497
+ // Record that this function is a stub method created for an unnamed
20500
+ set_is_unnamed_type_stub_method()
20502
+ go_assert(this->is_method());
20503
+ this->is_unnamed_type_stub_method_ = true;
20506
// Add a new field to the closure variable.
20508
add_closure_field(Named_object* var, Location loc)
20509
@@ -1089,17 +1099,13 @@
20510
this->descriptor_ = descriptor;
20513
- // Return the function's decl given an identifier.
20515
- get_or_make_decl(Gogo*, Named_object*, tree id);
20516
+ // Return the backend representation.
20518
+ get_or_make_decl(Gogo*, Named_object*);
20520
// Return the function's decl after it has been built.
20524
- go_assert(this->fndecl_ != NULL);
20525
- return this->fndecl_;
20527
+ get_decl() const;
20529
// Set the function decl to hold a tree of the function code.
20531
@@ -1170,7 +1176,7 @@
20532
// The function descriptor, if any.
20533
Expression* descriptor_;
20534
// The function decl.
20536
+ Bfunction* fndecl_;
20537
// The defer stack variable. A pointer to this variable is used to
20538
// distinguish the defer stack for one function from another. This
20539
// is NULL unless we actually need a defer stack.
20540
@@ -1181,6 +1187,9 @@
20541
bool results_are_named_ : 1;
20542
// True if this method should not be included in the type descriptor.
20543
bool nointerface_ : 1;
20544
+ // True if this function is a stub method created for an unnamed
20546
+ bool is_unnamed_type_stub_method_ : 1;
20547
// True if this function calls the predeclared recover function.
20548
bool calls_recover_ : 1;
20549
// True if this a thunk built for a function which calls recover.
20550
@@ -1265,9 +1274,9 @@
20551
has_descriptor() const
20552
{ return this->descriptor_ != NULL; }
20554
- // Return a decl for the function given an identifier.
20556
- get_or_make_decl(Gogo*, Named_object*, tree id);
20557
+ // Return a backend representation.
20559
+ get_or_make_decl(Gogo*, Named_object*);
20561
// If there is a descriptor, build it into the backend
20563
@@ -1290,7 +1299,7 @@
20564
// The function descriptor, if any.
20565
Expression* descriptor_;
20566
// The function decl if needed.
20568
+ Bfunction* fndecl_;
20572
@@ -2181,8 +2190,8 @@
20574
get_backend_variable(Gogo*, Named_object* function);
20576
- // Return a tree for the external identifier for this object.
20578
+ // Return the external identifier for this object.
20582
// Return a tree representing this object.
20583
Index: gcc/go/gofrontend/types.h
20584
===================================================================
20585
--- a/src/gcc/go/gofrontend/types.h (.../tags/gcc_4_8_2_release)
20586
+++ b/src/gcc/go/gofrontend/types.h (.../branches/gcc-4_8-branch)
20587
@@ -1138,6 +1138,13 @@
20588
Function_type* equal_fntype, Named_object** hash_fn,
20589
Named_object** equal_fn);
20592
+ write_named_hash(Gogo*, Named_type*, Function_type* hash_fntype,
20593
+ Function_type* equal_fntype);
20596
+ write_named_equal(Gogo*, Named_type*);
20598
// Build a composite literal for the uncommon type information.
20600
uncommon_type_constructor(Gogo*, Type* uncommon_type,
20601
@@ -1717,7 +1724,8 @@
20602
Typed_identifier_list* results, Location location)
20603
: Type(TYPE_FUNCTION),
20604
receiver_(receiver), parameters_(parameters), results_(results),
20605
- location_(location), is_varargs_(false), is_builtin_(false)
20606
+ location_(location), is_varargs_(false), is_builtin_(false),
20610
// Get the receiver.
20611
@@ -1789,6 +1797,12 @@
20613
copy_with_receiver(Type*) const;
20615
+ // Return a copy of this type with the receiver treated as the first
20616
+ // parameter. If WANT_POINTER_RECEIVER is true, the receiver is
20617
+ // forced to be a pointer.
20619
+ copy_with_receiver_as_param(bool want_pointer_receiver) const;
20621
// Return a copy of this type ignoring any receiver and using dummy
20622
// names for all parameters. This is used for thunks for method
20624
@@ -1798,6 +1812,11 @@
20626
make_function_type_descriptor_type();
20628
+ // Return the backend representation of this function type. This is used
20629
+ // as the real type of a backend function declaration or defintion.
20631
+ get_backend_fntype(Gogo*);
20635
do_traverse(Traverse*);
20636
@@ -1851,6 +1870,9 @@
20637
// Whether this is a special builtin function which can not simply
20638
// be called. This is used for len, cap, etc.
20640
+ // The backend representation of this type for backend function
20641
+ // declarations and definitions.
20645
// The type of a pointer.
20646
@@ -1915,7 +1937,7 @@
20649
explicit Struct_field(const Typed_identifier& typed_identifier)
20650
- : typed_identifier_(typed_identifier), tag_(NULL)
20651
+ : typed_identifier_(typed_identifier), tag_(NULL), is_imported_(false)
20655
@@ -1926,6 +1948,10 @@
20657
is_field_name(const std::string& name) const;
20659
+ // Return whether this struct field is an unexported field named NAME.
20661
+ is_unexported_field_name(Gogo*, const std::string& name) const;
20663
// Return whether this struct field is an embedded built-in type.
20665
is_embedded_builtin(Gogo*) const;
20666
@@ -1963,6 +1989,11 @@
20667
set_tag(const std::string& tag)
20668
{ this->tag_ = new std::string(tag); }
20670
+ // Record that this field is defined in an imported struct.
20672
+ set_is_imported()
20673
+ { this->is_imported_ = true; }
20675
// Set the type. This is only used in error cases.
20677
set_type(Type* type)
20678
@@ -1973,6 +2004,8 @@
20679
Typed_identifier typed_identifier_;
20680
// The field tag. This is NULL if the field has no tag.
20682
+ // Whether this field is defined in an imported struct.
20683
+ bool is_imported_;
20686
// A list of struct fields.
20687
Index: gcc/go/gofrontend/parse.cc
20688
===================================================================
20689
--- a/src/gcc/go/gofrontend/parse.cc (.../tags/gcc_4_8_2_release)
20690
+++ b/src/gcc/go/gofrontend/parse.cc (.../branches/gcc-4_8-branch)
20691
@@ -744,6 +744,8 @@
20694
Parse::Names names;
20695
+ if (receiver != NULL)
20696
+ names[receiver->name()] = receiver;
20697
if (params != NULL)
20698
this->check_signature_names(params, &names);
20699
if (results != NULL)
20700
Index: gcc/go/gofrontend/import.h
20701
===================================================================
20702
--- a/src/gcc/go/gofrontend/import.h (.../tags/gcc_4_8_2_release)
20703
+++ b/src/gcc/go/gofrontend/import.h (.../branches/gcc-4_8-branch)
20704
@@ -149,6 +149,11 @@
20706
{ return this->location_; }
20708
+ // Return the package we are importing.
20711
+ { return this->package_; }
20713
// Return the next character.
20716
Index: gcc/go/gofrontend/runtime.cc
20717
===================================================================
20718
--- a/src/gcc/go/gofrontend/runtime.cc (.../tags/gcc_4_8_2_release)
20719
+++ b/src/gcc/go/gofrontend/runtime.cc (.../branches/gcc-4_8-branch)
20722
// Go type float64, C type double.
20724
+ // Go type complex64, C type __complex float.
20726
// Go type complex128, C type __complex double.
20728
// Go type string, C type struct __go_string.
20729
@@ -126,6 +128,10 @@
20730
t = Type::lookup_float_type("float64");
20733
+ case RFT_COMPLEX64:
20734
+ t = Type::lookup_complex_type("complex64");
20737
case RFT_COMPLEX128:
20738
t = Type::lookup_complex_type("complex128");
20740
@@ -216,6 +222,7 @@
20744
+ case RFT_COMPLEX64:
20745
case RFT_COMPLEX128:
20748
Index: gcc/go/gofrontend/expressions.h
20749
===================================================================
20750
--- a/src/gcc/go/gofrontend/expressions.h (.../tags/gcc_4_8_2_release)
20751
+++ b/src/gcc/go/gofrontend/expressions.h (.../branches/gcc-4_8-branch)
20752
@@ -1514,8 +1514,8 @@
20754
{ return this->closure_; }
20756
- // Return a tree for the code for a function.
20758
+ // Return a backend expression for the code of a function.
20759
+ static Bexpression*
20760
get_code_pointer(Gogo*, Named_object* function, Location loc);
20763
Index: gcc/go/gofrontend/gogo-tree.cc
20764
===================================================================
20765
--- a/src/gcc/go/gofrontend/gogo-tree.cc (.../tags/gcc_4_8_2_release)
20766
+++ b/src/gcc/go/gofrontend/gogo-tree.cc (.../branches/gcc-4_8-branch)
20767
@@ -985,74 +985,6 @@
20771
-// Get a tree for the identifier for a named object.
20774
-Named_object::get_id(Gogo* gogo)
20776
- go_assert(!this->is_variable() && !this->is_result_variable());
20777
- std::string decl_name;
20778
- if (this->is_function_declaration()
20779
- && !this->func_declaration_value()->asm_name().empty())
20780
- decl_name = this->func_declaration_value()->asm_name();
20781
- else if (this->is_type()
20782
- && Linemap::is_predeclared_location(this->type_value()->location()))
20784
- // We don't need the package name for builtin types.
20785
- decl_name = Gogo::unpack_hidden_name(this->name_);
20789
- std::string package_name;
20790
- if (this->package_ == NULL)
20791
- package_name = gogo->package_name();
20793
- package_name = this->package_->package_name();
20795
- // Note that this will be misleading if this is an unexported
20796
- // method generated for an embedded imported type. In that case
20797
- // the unexported method should have the package name of the
20798
- // package from which it is imported, but we are going to give
20799
- // it our package name. Fixing this would require knowing the
20800
- // package name, but we only know the package path. It might be
20801
- // better to use package paths here anyhow. This doesn't affect
20802
- // the assembler code, because we always set that name in
20803
- // Function::get_or_make_decl anyhow. FIXME.
20805
- decl_name = package_name + '.' + Gogo::unpack_hidden_name(this->name_);
20807
- Function_type* fntype;
20808
- if (this->is_function())
20809
- fntype = this->func_value()->type();
20810
- else if (this->is_function_declaration())
20811
- fntype = this->func_declaration_value()->type();
20814
- if (fntype != NULL && fntype->is_method())
20816
- decl_name.push_back('.');
20817
- decl_name.append(fntype->receiver()->type()->mangled_name(gogo));
20820
- if (this->is_type())
20822
- unsigned int index;
20823
- const Named_object* in_function = this->type_value()->in_function(&index);
20824
- if (in_function != NULL)
20826
- decl_name += '$' + Gogo::unpack_hidden_name(in_function->name());
20830
- snprintf(buf, sizeof buf, "%u", index);
20831
- decl_name += '$';
20832
- decl_name += buf;
20836
- return get_identifier_from_string(decl_name);
20839
// Get a tree for a named object.
20842
@@ -1067,11 +999,6 @@
20843
return error_mark_node;
20847
- if (this->classification_ == NAMED_OBJECT_TYPE)
20848
- name = NULL_TREE;
20850
- name = this->get_id(gogo);
20852
switch (this->classification_)
20854
@@ -1099,6 +1026,7 @@
20855
decl = error_mark_node;
20856
else if (INTEGRAL_TYPE_P(TREE_TYPE(expr_tree)))
20858
+ tree name = get_identifier_from_string(this->get_id(gogo));
20859
decl = build_decl(named_constant->location().gcc_location(),
20860
CONST_DECL, name, TREE_TYPE(expr_tree));
20861
DECL_INITIAL(decl) = expr_tree;
20862
@@ -1161,7 +1089,7 @@
20863
case NAMED_OBJECT_FUNC:
20865
Function* func = this->u_.func_value;
20866
- decl = func->get_or_make_decl(gogo, this, name);
20867
+ decl = function_to_tree(func->get_or_make_decl(gogo, this));
20868
if (decl != error_mark_node)
20870
if (func->block() != NULL)
20871
@@ -1286,124 +1214,13 @@
20875
-// Get a tree for a function decl.
20876
+// Get the backend representation.
20879
-Function::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
20881
+Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no)
20883
- if (this->fndecl_ == NULL_TREE)
20884
+ if (this->fndecl_ == NULL)
20886
- tree functype = type_to_tree(this->type_->get_backend(gogo));
20888
- if (functype != error_mark_node)
20890
- // The type of a function comes back as a pointer to a
20891
- // struct whose first field is the function, but we want the
20892
- // real function type for a function declaration.
20893
- go_assert(POINTER_TYPE_P(functype)
20894
- && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE);
20895
- functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype)));
20896
- go_assert(FUNCTION_POINTER_TYPE_P(functype));
20897
- functype = TREE_TYPE(functype);
20900
- if (functype == error_mark_node)
20901
- this->fndecl_ = error_mark_node;
20904
- tree decl = build_decl(this->location().gcc_location(), FUNCTION_DECL,
20907
- this->fndecl_ = decl;
20909
- if (no->package() != NULL)
20911
- else if (this->enclosing_ != NULL || Gogo::is_thunk(no))
20913
- else if (Gogo::unpack_hidden_name(no->name()) == "init"
20914
- && !this->type_->is_method())
20916
- else if (Gogo::unpack_hidden_name(no->name()) == "main"
20917
- && gogo->is_main_package())
20918
- TREE_PUBLIC(decl) = 1;
20919
- // Methods have to be public even if they are hidden because
20920
- // they can be pulled into type descriptors when using
20921
- // anonymous fields.
20922
- else if (!Gogo::is_hidden_name(no->name())
20923
- || this->type_->is_method())
20925
- TREE_PUBLIC(decl) = 1;
20926
- std::string pkgpath = gogo->pkgpath_symbol();
20927
- if (this->type_->is_method()
20928
- && Gogo::is_hidden_name(no->name())
20929
- && Gogo::hidden_name_pkgpath(no->name()) != gogo->pkgpath())
20931
- // This is a method we created for an unexported
20932
- // method of an imported embedded type. We need to
20933
- // use the pkgpath of the imported package to avoid
20934
- // a possible name collision. See bug478 for a test
20936
- pkgpath = Gogo::hidden_name_pkgpath(no->name());
20937
- pkgpath = Gogo::pkgpath_for_symbol(pkgpath);
20940
- std::string asm_name = pkgpath;
20941
- asm_name.append(1, '.');
20942
- asm_name.append(Gogo::unpack_hidden_name(no->name()));
20943
- if (this->type_->is_method())
20945
- asm_name.append(1, '.');
20946
- Type* rtype = this->type_->receiver()->type();
20947
- asm_name.append(rtype->mangled_name(gogo));
20949
- SET_DECL_ASSEMBLER_NAME(decl,
20950
- get_identifier_from_string(asm_name));
20953
- // Why do we have to do this in the frontend?
20954
- tree restype = TREE_TYPE(functype);
20956
- build_decl(this->location().gcc_location(), RESULT_DECL, NULL_TREE,
20958
- DECL_ARTIFICIAL(resdecl) = 1;
20959
- DECL_IGNORED_P(resdecl) = 1;
20960
- DECL_CONTEXT(resdecl) = decl;
20961
- DECL_RESULT(decl) = resdecl;
20963
- // If a function calls the predeclared recover function, we
20964
- // can't inline it, because recover behaves differently in a
20965
- // function passed directly to defer. If this is a recover
20966
- // thunk that we built to test whether a function can be
20967
- // recovered, we can't inline it, because that will mess up
20968
- // our return address comparison.
20969
- if (this->calls_recover_ || this->is_recover_thunk_)
20970
- DECL_UNINLINABLE(decl) = 1;
20972
- // If this is a thunk created to call a function which calls
20973
- // the predeclared recover function, we need to disable
20974
- // stack splitting for the thunk.
20975
- if (this->is_recover_thunk_)
20977
- tree attr = get_identifier("__no_split_stack__");
20978
- DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
20981
- if (this->in_unique_section_)
20982
- resolve_unique_section (decl, 0, 1);
20984
- go_preserve_from_gc(decl);
20987
- return this->fndecl_;
20990
-// Get a tree for a function declaration.
20993
-Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
20995
- if (this->fndecl_ == NULL_TREE)
20997
// Let Go code use an asm declaration to pick up a builtin
20999
if (!this->asm_name_.empty())
21000
@@ -1412,58 +1229,46 @@
21001
builtin_functions.find(this->asm_name_);
21002
if (p != builtin_functions.end())
21004
- this->fndecl_ = p->second;
21005
+ this->fndecl_ = tree_to_function(p->second);
21006
return this->fndecl_;
21010
- tree functype = type_to_tree(this->fntype_->get_backend(gogo));
21011
+ std::string asm_name;
21012
+ if (this->asm_name_.empty())
21014
+ asm_name = (no->package() == NULL
21015
+ ? gogo->pkgpath_symbol()
21016
+ : no->package()->pkgpath_symbol());
21017
+ asm_name.append(1, '.');
21018
+ asm_name.append(Gogo::unpack_hidden_name(no->name()));
21019
+ if (this->fntype_->is_method())
21021
+ asm_name.append(1, '.');
21022
+ Type* rtype = this->fntype_->receiver()->type();
21023
+ asm_name.append(rtype->mangled_name(gogo));
21027
- if (functype != error_mark_node)
21029
- // The type of a function comes back as a pointer to a
21030
- // struct whose first field is the function, but we want the
21031
- // real function type for a function declaration.
21032
- go_assert(POINTER_TYPE_P(functype)
21033
- && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE);
21034
- functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype)));
21035
- go_assert(FUNCTION_POINTER_TYPE_P(functype));
21036
- functype = TREE_TYPE(functype);
21038
+ Btype* functype = this->fntype_->get_backend_fntype(gogo);
21040
+ gogo->backend()->function(functype, no->get_id(gogo), asm_name,
21041
+ true, true, true, false, false,
21042
+ this->location());
21046
- if (functype == error_mark_node)
21047
- decl = error_mark_node;
21050
- decl = build_decl(this->location().gcc_location(), FUNCTION_DECL, id,
21052
- TREE_PUBLIC(decl) = 1;
21053
- DECL_EXTERNAL(decl) = 1;
21055
- if (this->asm_name_.empty())
21057
- std::string asm_name = (no->package() == NULL
21058
- ? gogo->pkgpath_symbol()
21059
- : no->package()->pkgpath_symbol());
21060
- asm_name.append(1, '.');
21061
- asm_name.append(Gogo::unpack_hidden_name(no->name()));
21062
- if (this->fntype_->is_method())
21064
- asm_name.append(1, '.');
21065
- Type* rtype = this->fntype_->receiver()->type();
21066
- asm_name.append(rtype->mangled_name(gogo));
21068
- SET_DECL_ASSEMBLER_NAME(decl,
21069
- get_identifier_from_string(asm_name));
21072
- this->fndecl_ = decl;
21073
- go_preserve_from_gc(decl);
21075
return this->fndecl_;
21078
+// Return the function's decl after it has been built.
21081
+Function::get_decl() const
21083
+ go_assert(this->fndecl_ != NULL);
21084
+ return function_to_tree(this->fndecl_);
21087
// We always pass the receiver to a method as a pointer. If the
21088
// receiver is actually declared as a non-pointer type, then we copy
21089
// the value into a local variable, so that it has the right type. In
21090
@@ -1558,7 +1363,7 @@
21092
Function::build_tree(Gogo* gogo, Named_object* named_function)
21094
- tree fndecl = this->fndecl_;
21095
+ tree fndecl = this->get_decl();
21096
go_assert(fndecl != NULL_TREE);
21098
tree params = NULL_TREE;
21099
@@ -1796,7 +1601,7 @@
21102
set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node,
21103
- DECL_RESULT(this->fndecl_), retval);
21104
+ DECL_RESULT(this->get_decl()), retval);
21105
tree ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR,
21106
void_type_node, set);
21107
append_to_statement_list(ret_stmt, &stmt_list);
21108
@@ -1851,7 +1656,7 @@
21109
retval = this->return_value(gogo, named_function, end_loc,
21111
set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node,
21112
- DECL_RESULT(this->fndecl_), retval);
21113
+ DECL_RESULT(this->get_decl()), retval);
21114
ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR,
21115
void_type_node, set);
21117
@@ -1869,7 +1674,7 @@
21121
-// Return the value to assign to DECL_RESULT(this->fndecl_). This may
21122
+// Return the value to assign to DECL_RESULT(this->get_decl()). This may
21123
// also add statements to STMT_LIST, which need to be executed before
21124
// the assignment. This is used for a return statement with no
21125
// explicit values.
21126
@@ -1902,7 +1707,7 @@
21130
- tree rettype = TREE_TYPE(DECL_RESULT(this->fndecl_));
21131
+ tree rettype = TREE_TYPE(DECL_RESULT(this->get_decl()));
21132
retval = create_tmp_var(rettype, "RESULT");
21133
tree field = TYPE_FIELDS(rettype);
21135
@@ -2323,18 +2128,14 @@
21136
go_assert(m != NULL);
21138
Named_object* no = m->named_object();
21140
- tree fnid = no->get_id(this);
21144
if (no->is_function())
21145
- fndecl = no->func_value()->get_or_make_decl(this, no, fnid);
21146
+ bf = no->func_value()->get_or_make_decl(this, no);
21147
else if (no->is_function_declaration())
21148
- fndecl = no->func_declaration_value()->get_or_make_decl(this, no,
21150
+ bf = no->func_declaration_value()->get_or_make_decl(this, no);
21153
- fndecl = build_fold_addr_expr(fndecl);
21154
+ tree fndecl = build_fold_addr_expr(function_to_tree(bf));
21156
elt = pointers->quick_push(empty);
21157
elt->index = size_int(i);
21158
@@ -2353,10 +2154,11 @@
21159
TREE_CONSTANT(decl) = 1;
21160
DECL_INITIAL(decl) = constructor;
21162
- // If the interface type has hidden methods, then this is the only
21163
- // definition of the table. Otherwise it is a comdat table which
21164
- // may be defined in multiple packages.
21165
- if (has_hidden_methods)
21166
+ // If the interface type has hidden methods, and the table is for a
21167
+ // named type, then this is the only definition of the table.
21168
+ // Otherwise it is a comdat table which may be defined in multiple
21170
+ if (has_hidden_methods && type->named_type() != NULL)
21171
TREE_PUBLIC(decl) = 1;
21174
Index: gcc/go/gofrontend/lex.cc
21175
===================================================================
21176
--- a/src/gcc/go/gofrontend/lex.cc (.../tags/gcc_4_8_2_release)
21177
+++ b/src/gcc/go/gofrontend/lex.cc (.../branches/gcc-4_8-branch)
21178
@@ -873,7 +873,28 @@
21179
&& (cc < 'a' || cc > 'z')
21181
&& (cc < '0' || cc > '9'))
21184
+ // Check for an invalid character here, as we get better
21185
+ // error behaviour if we swallow them as part of the
21186
+ // identifier we are building.
21187
+ if ((cc >= ' ' && cc < 0x7f)
21193
+ this->lineoff_ = p - this->linebuf_;
21194
+ error_at(this->location(),
21195
+ "invalid character 0x%x in identifier",
21197
+ if (!has_non_ascii_char)
21199
+ buf.assign(pstart, p - pstart);
21200
+ has_non_ascii_char = true;
21202
+ if (!Lex::is_invalid_identifier(buf))
21203
+ buf.append("$INVALID$");
21208
Index: gcc/go/gofrontend/backend.h
21209
===================================================================
21210
--- a/src/gcc/go/gofrontend/backend.h (.../tags/gcc_4_8_2_release)
21211
+++ b/src/gcc/go/gofrontend/backend.h (.../branches/gcc-4_8-branch)
21213
// The backend representation of a statement.
21216
-// The backend representation of a function definition.
21217
+// The backend representation of a function definition or declaration.
21220
// The backend representation of a block.
21221
@@ -266,6 +266,11 @@
21222
virtual Bexpression*
21223
convert_expression(Btype* type, Bexpression* expr, Location) = 0;
21225
+ // Create an expression for the address of a function. This is used to
21226
+ // get the address of the code for a function.
21227
+ virtual Bexpression*
21228
+ function_code_expression(Bfunction*, Location) = 0;
21232
// Create an error statement. This is used for cases which should
21233
@@ -498,6 +503,32 @@
21235
virtual Bexpression*
21236
label_address(Blabel*, Location) = 0;
21240
+ // Create an error function. This is used for cases which should
21241
+ // not occur in a correct program, in order to keep the compilation
21242
+ // going without crashing.
21243
+ virtual Bfunction*
21244
+ error_function() = 0;
21246
+ // Declare or define a function of FNTYPE.
21247
+ // NAME is the Go name of the function. ASM_NAME, if not the empty string, is
21248
+ // the name that should be used in the symbol table; this will be non-empty if
21249
+ // a magic extern comment is used.
21250
+ // IS_VISIBLE is true if this function should be visible outside of the
21251
+ // current compilation unit. IS_DECLARATION is true if this is a function
21252
+ // declaration rather than a definition; the function definition will be in
21253
+ // another compilation unit.
21254
+ // IS_INLINABLE is true if the function can be inlined.
21255
+ // DISABLE_SPLIT_STACK is true if this function may not split the stack; this
21256
+ // is used for the implementation of recover.
21257
+ // IN_UNIQUE_SECTION is true if this function should be put into a unique
21258
+ // location if possible; this is used for field tracking.
21259
+ virtual Bfunction*
21260
+ function(Btype* fntype, const std::string& name, const std::string& asm_name,
21261
+ bool is_visible, bool is_declaration, bool is_inlinable,
21262
+ bool disable_split_stack, bool in_unique_section, Location) = 0;
21265
// The backend interface has to define this function.
21266
@@ -517,5 +548,6 @@
21267
extern tree stat_to_tree(Bstatement*);
21268
extern tree block_to_tree(Bblock*);
21269
extern tree var_to_tree(Bvariable*);
21270
+extern tree function_to_tree(Bfunction*);
21272
#endif // !defined(GO_BACKEND_H)
21273
Index: gcc/go/gofrontend/types.cc
21274
===================================================================
21275
--- a/src/gcc/go/gofrontend/types.cc (.../tags/gcc_4_8_2_release)
21276
+++ b/src/gcc/go/gofrontend/types.cc (.../branches/gcc-4_8-branch)
21277
@@ -1834,7 +1834,9 @@
21279
gogo->start_block(bloc);
21281
- if (this->struct_type() != NULL)
21282
+ if (name != NULL && name->real_type()->named_type() != NULL)
21283
+ this->write_named_hash(gogo, name, hash_fntype, equal_fntype);
21284
+ else if (this->struct_type() != NULL)
21285
this->struct_type()->write_hash_function(gogo, name, hash_fntype,
21287
else if (this->array_type() != NULL)
21288
@@ -1852,7 +1854,9 @@
21290
gogo->start_block(bloc);
21292
- if (this->struct_type() != NULL)
21293
+ if (name != NULL && name->real_type()->named_type() != NULL)
21294
+ this->write_named_equal(gogo, name);
21295
+ else if (this->struct_type() != NULL)
21296
this->struct_type()->write_equal_function(gogo, name);
21297
else if (this->array_type() != NULL)
21298
this->array_type()->write_equal_function(gogo, name);
21299
@@ -1865,6 +1869,100 @@
21300
gogo->finish_function(bloc);
21303
+// Write a hash function that simply calls the hash function for a
21304
+// named type. This is used when one named type is defined as
21305
+// another. This ensures that this case works when the other named
21306
+// type is defined in another package and relies on calling hash
21307
+// functions defined only in that package.
21310
+Type::write_named_hash(Gogo* gogo, Named_type* name,
21311
+ Function_type* hash_fntype, Function_type* equal_fntype)
21313
+ Location bloc = Linemap::predeclared_location();
21315
+ Named_type* base_type = name->real_type()->named_type();
21316
+ go_assert(base_type != NULL);
21318
+ // The pointer to the type we are going to hash. This is an
21319
+ // unsafe.Pointer.
21320
+ Named_object* key_arg = gogo->lookup("key", NULL);
21321
+ go_assert(key_arg != NULL);
21323
+ // The size of the type we are going to hash.
21324
+ Named_object* keysz_arg = gogo->lookup("key_size", NULL);
21325
+ go_assert(keysz_arg != NULL);
21327
+ Named_object* hash_fn;
21328
+ Named_object* equal_fn;
21329
+ name->real_type()->type_functions(gogo, base_type, hash_fntype, equal_fntype,
21330
+ &hash_fn, &equal_fn);
21332
+ // Call the hash function for the base type.
21333
+ Expression* key_ref = Expression::make_var_reference(key_arg, bloc);
21334
+ Expression* keysz_ref = Expression::make_var_reference(keysz_arg, bloc);
21335
+ Expression_list* args = new Expression_list();
21336
+ args->push_back(key_ref);
21337
+ args->push_back(keysz_ref);
21338
+ Expression* func = Expression::make_func_reference(hash_fn, NULL, bloc);
21339
+ Expression* call = Expression::make_call(func, args, false, bloc);
21341
+ // Return the hash of the base type.
21342
+ Expression_list* vals = new Expression_list();
21343
+ vals->push_back(call);
21344
+ Statement* s = Statement::make_return_statement(vals, bloc);
21345
+ gogo->add_statement(s);
21348
+// Write an equality function that simply calls the equality function
21349
+// for a named type. This is used when one named type is defined as
21350
+// another. This ensures that this case works when the other named
21351
+// type is defined in another package and relies on calling equality
21352
+// functions defined only in that package.
21355
+Type::write_named_equal(Gogo* gogo, Named_type* name)
21357
+ Location bloc = Linemap::predeclared_location();
21359
+ // The pointers to the types we are going to compare. These have
21360
+ // type unsafe.Pointer.
21361
+ Named_object* key1_arg = gogo->lookup("key1", NULL);
21362
+ Named_object* key2_arg = gogo->lookup("key2", NULL);
21363
+ go_assert(key1_arg != NULL && key2_arg != NULL);
21365
+ Named_type* base_type = name->real_type()->named_type();
21366
+ go_assert(base_type != NULL);
21368
+ // Build temporaries with the base type.
21369
+ Type* pt = Type::make_pointer_type(base_type);
21371
+ Expression* ref = Expression::make_var_reference(key1_arg, bloc);
21372
+ ref = Expression::make_cast(pt, ref, bloc);
21373
+ Temporary_statement* p1 = Statement::make_temporary(pt, ref, bloc);
21374
+ gogo->add_statement(p1);
21376
+ ref = Expression::make_var_reference(key2_arg, bloc);
21377
+ ref = Expression::make_cast(pt, ref, bloc);
21378
+ Temporary_statement* p2 = Statement::make_temporary(pt, ref, bloc);
21379
+ gogo->add_statement(p2);
21381
+ // Compare the values for equality.
21382
+ Expression* t1 = Expression::make_temporary_reference(p1, bloc);
21383
+ t1 = Expression::make_unary(OPERATOR_MULT, t1, bloc);
21385
+ Expression* t2 = Expression::make_temporary_reference(p2, bloc);
21386
+ t2 = Expression::make_unary(OPERATOR_MULT, t2, bloc);
21388
+ Expression* cond = Expression::make_binary(OPERATOR_EQEQ, t1, t2, bloc);
21390
+ // Return the equality comparison.
21391
+ Expression_list* vals = new Expression_list();
21392
+ vals->push_back(cond);
21393
+ Statement* s = Statement::make_return_statement(vals, bloc);
21394
+ gogo->add_statement(s);
21397
// Return a composite literal for the type descriptor for a plain type
21398
// of kind RUNTIME_TYPE_KIND named NAME.
21400
@@ -2164,26 +2262,9 @@
21403
go_assert(p->is_field_name("typ"));
21404
- if (!only_value_methods && m->is_value_method())
21406
- // This is a value method on a pointer type. Change the type of
21407
- // the method to use a pointer receiver. The implementation
21408
- // always uses a pointer receiver anyhow.
21409
- Type* rtype = mtype->receiver()->type();
21410
- Type* prtype = Type::make_pointer_type(rtype);
21411
- Typed_identifier* receiver =
21412
- new Typed_identifier(mtype->receiver()->name(), prtype,
21413
- mtype->receiver()->location());
21414
- mtype = Type::make_function_type(receiver,
21415
- (mtype->parameters() == NULL
21417
- : mtype->parameters()->copy()),
21418
- (mtype->results() == NULL
21420
- : mtype->results()->copy()),
21421
- mtype->location());
21423
- vals->push_back(Expression::make_type_descriptor(mtype, bloc));
21424
+ bool want_pointer_receiver = !only_value_methods && m->is_value_method();
21425
+ nonmethod_type = mtype->copy_with_receiver_as_param(want_pointer_receiver);
21426
+ vals->push_back(Expression::make_type_descriptor(nonmethod_type, bloc));
21429
go_assert(p->is_field_name("tfn"));
21430
@@ -3383,6 +3464,68 @@
21431
// Get the backend representation for a function type.
21434
+Function_type::get_backend_fntype(Gogo* gogo)
21436
+ if (this->fnbtype_ == NULL)
21438
+ Backend::Btyped_identifier breceiver;
21439
+ if (this->receiver_ != NULL)
21441
+ breceiver.name = Gogo::unpack_hidden_name(this->receiver_->name());
21443
+ // We always pass the address of the receiver parameter, in
21444
+ // order to make interface calls work with unknown types.
21445
+ Type* rtype = this->receiver_->type();
21446
+ if (rtype->points_to() == NULL)
21447
+ rtype = Type::make_pointer_type(rtype);
21448
+ breceiver.btype = rtype->get_backend(gogo);
21449
+ breceiver.location = this->receiver_->location();
21452
+ std::vector<Backend::Btyped_identifier> bparameters;
21453
+ if (this->parameters_ != NULL)
21455
+ bparameters.resize(this->parameters_->size());
21457
+ for (Typed_identifier_list::const_iterator p =
21458
+ this->parameters_->begin(); p != this->parameters_->end();
21461
+ bparameters[i].name = Gogo::unpack_hidden_name(p->name());
21462
+ bparameters[i].btype = p->type()->get_backend(gogo);
21463
+ bparameters[i].location = p->location();
21465
+ go_assert(i == bparameters.size());
21468
+ std::vector<Backend::Btyped_identifier> bresults;
21469
+ if (this->results_ != NULL)
21471
+ bresults.resize(this->results_->size());
21473
+ for (Typed_identifier_list::const_iterator p =
21474
+ this->results_->begin(); p != this->results_->end();
21477
+ bresults[i].name = Gogo::unpack_hidden_name(p->name());
21478
+ bresults[i].btype = p->type()->get_backend(gogo);
21479
+ bresults[i].location = p->location();
21481
+ go_assert(i == bresults.size());
21484
+ this->fnbtype_ = gogo->backend()->function_type(breceiver, bparameters,
21486
+ this->location());
21490
+ return this->fnbtype_;
21493
+// Get the backend representation for a Go function type.
21496
Function_type::do_get_backend(Gogo* gogo)
21498
// When we do anything with a function value other than call it, it
21499
@@ -3395,57 +3538,9 @@
21500
gogo->backend()->placeholder_struct_type("__go_descriptor", loc);
21501
Btype* ptr_struct_type = gogo->backend()->pointer_type(struct_type);
21503
- Backend::Btyped_identifier breceiver;
21504
- if (this->receiver_ != NULL)
21506
- breceiver.name = Gogo::unpack_hidden_name(this->receiver_->name());
21508
- // We always pass the address of the receiver parameter, in
21509
- // order to make interface calls work with unknown types.
21510
- Type* rtype = this->receiver_->type();
21511
- if (rtype->points_to() == NULL)
21512
- rtype = Type::make_pointer_type(rtype);
21513
- breceiver.btype = rtype->get_backend(gogo);
21514
- breceiver.location = this->receiver_->location();
21517
- std::vector<Backend::Btyped_identifier> bparameters;
21518
- if (this->parameters_ != NULL)
21520
- bparameters.resize(this->parameters_->size());
21522
- for (Typed_identifier_list::const_iterator p = this->parameters_->begin();
21523
- p != this->parameters_->end();
21526
- bparameters[i].name = Gogo::unpack_hidden_name(p->name());
21527
- bparameters[i].btype = p->type()->get_backend(gogo);
21528
- bparameters[i].location = p->location();
21530
- go_assert(i == bparameters.size());
21533
- std::vector<Backend::Btyped_identifier> bresults;
21534
- if (this->results_ != NULL)
21536
- bresults.resize(this->results_->size());
21538
- for (Typed_identifier_list::const_iterator p = this->results_->begin();
21539
- p != this->results_->end();
21542
- bresults[i].name = Gogo::unpack_hidden_name(p->name());
21543
- bresults[i].btype = p->type()->get_backend(gogo);
21544
- bresults[i].location = p->location();
21546
- go_assert(i == bresults.size());
21549
- Btype* fntype = gogo->backend()->function_type(breceiver, bparameters,
21551
std::vector<Backend::Btyped_identifier> fields(1);
21552
fields[0].name = "code";
21553
- fields[0].btype = fntype;
21554
+ fields[0].btype = this->get_backend_fntype(gogo);
21555
fields[0].location = loc;
21556
if (!gogo->backend()->set_placeholder_struct_type(struct_type, fields))
21557
return gogo->backend()->error_type();
21558
@@ -3821,6 +3916,32 @@
21562
+// Make a copy of a function type with the receiver as the first
21566
+Function_type::copy_with_receiver_as_param(bool want_pointer_receiver) const
21568
+ go_assert(this->is_method());
21569
+ Typed_identifier_list* new_params = new Typed_identifier_list();
21570
+ Type* rtype = this->receiver_->type();
21571
+ if (want_pointer_receiver)
21572
+ rtype = Type::make_pointer_type(rtype);
21573
+ Typed_identifier receiver(this->receiver_->name(), rtype,
21574
+ this->receiver_->location());
21575
+ new_params->push_back(receiver);
21576
+ const Typed_identifier_list* orig_params = this->parameters_;
21577
+ if (orig_params != NULL && !orig_params->empty())
21579
+ for (Typed_identifier_list::const_iterator p = orig_params->begin();
21580
+ p != orig_params->end();
21582
+ new_params->push_back(*p);
21584
+ return Type::make_function_type(NULL, new_params, this->results_,
21585
+ this->location_);
21588
// Make a copy of a function type ignoring any receiver and adding a
21589
// closure parameter.
21591
@@ -4195,7 +4316,8 @@
21593
// This is a horrible hack caused by the fact that we don't pack
21594
// the names of builtin types. FIXME.
21596
+ if (!this->is_imported_
21598
&& nt->is_builtin()
21599
&& nt->name() == Gogo::unpack_hidden_name(name))
21601
@@ -4204,6 +4326,36 @@
21605
+// Return whether this field is an unexported field named NAME.
21608
+Struct_field::is_unexported_field_name(Gogo* gogo,
21609
+ const std::string& name) const
21611
+ const std::string& field_name(this->field_name());
21612
+ if (Gogo::is_hidden_name(field_name)
21613
+ && name == Gogo::unpack_hidden_name(field_name)
21614
+ && gogo->pack_hidden_name(name, false) != field_name)
21617
+ // Check for the name of a builtin type. This is like the test in
21618
+ // is_field_name, only there we return false if this->is_imported_,
21619
+ // and here we return true.
21620
+ if (this->is_imported_ && this->is_anonymous())
21622
+ Type* t = this->typed_identifier_.type();
21623
+ if (t->points_to() != NULL)
21624
+ t = t->points_to();
21625
+ Named_type* nt = t->named_type();
21627
+ && nt->is_builtin()
21628
+ && nt->name() == Gogo::unpack_hidden_name(name))
21635
// Return whether this field is an embedded built-in type.
21638
@@ -4264,13 +4416,8 @@
21641
Type* t = p->type();
21642
- if (t->is_undefined())
21643
+ if (p->is_anonymous())
21645
- error_at(p->location(), "struct field type is incomplete");
21646
- p->set_type(Type::make_error_type());
21648
- else if (p->is_anonymous())
21650
if (t->named_type() != NULL && t->points_to() != NULL)
21652
error_at(p->location(), "embedded type may not be a pointer");
21653
@@ -4641,13 +4788,8 @@
21654
for (Struct_field_list::const_iterator pf = fields->begin();
21655
pf != fields->end();
21658
- const std::string& field_name(pf->field_name());
21659
- if (Gogo::is_hidden_name(field_name)
21660
- && name == Gogo::unpack_hidden_name(field_name)
21661
- && gogo->pack_hidden_name(name, false) != field_name)
21664
+ if (pf->is_unexported_field_name(gogo, name))
21669
@@ -5250,6 +5392,7 @@
21670
Type* ftype = imp->read_type();
21672
Struct_field sf(Typed_identifier(name, ftype, imp->location()));
21673
+ sf.set_is_imported();
21675
if (imp->peek_char() == ' ')
21677
@@ -9022,6 +9165,8 @@
21678
fntype->is_varargs(), location);
21679
gogo->finish_function(fntype->location());
21681
+ if (type->named_type() == NULL && stub->is_function())
21682
+ stub->func_value()->set_is_unnamed_type_stub_method();
21683
if (m->nointerface() && stub->is_function())
21684
stub->func_value()->set_nointerface();
21686
@@ -9289,7 +9434,9 @@
21689
bool is_unexported;
21690
- if (!Gogo::is_hidden_name(name))
21691
+ // The test for 'a' and 'z' is to handle builtin names,
21692
+ // which are not hidden.
21693
+ if (!Gogo::is_hidden_name(name) && (name[0] < 'a' || name[0] > 'z'))
21694
is_unexported = false;
21697
Index: gcc/go/gofrontend/expressions.cc
21698
===================================================================
21699
--- a/src/gcc/go/gofrontend/expressions.cc (.../tags/gcc_4_8_2_release)
21700
+++ b/src/gcc/go/gofrontend/expressions.cc (.../branches/gcc-4_8-branch)
21701
@@ -1219,7 +1219,7 @@
21703
// Get the tree for the code of a function expression.
21707
Func_expression::get_code_pointer(Gogo* gogo, Named_object* no, Location loc)
21709
Function_type* fntype;
21710
@@ -1237,25 +1237,18 @@
21712
"invalid use of special builtin function %qs; must be called",
21713
no->message_name().c_str());
21714
- return error_mark_node;
21715
+ return gogo->backend()->error_expression();
21718
- tree id = no->get_id(gogo);
21719
- if (id == error_mark_node)
21720
- return error_mark_node;
21723
+ Bfunction* fndecl;
21724
if (no->is_function())
21725
- fndecl = no->func_value()->get_or_make_decl(gogo, no, id);
21726
+ fndecl = no->func_value()->get_or_make_decl(gogo, no);
21727
else if (no->is_function_declaration())
21728
- fndecl = no->func_declaration_value()->get_or_make_decl(gogo, no, id);
21729
+ fndecl = no->func_declaration_value()->get_or_make_decl(gogo, no);
21733
- if (fndecl == error_mark_node)
21734
- return error_mark_node;
21736
- return build_fold_addr_expr_loc(loc.gcc_location(), fndecl);
21737
+ return gogo->backend()->function_code_expression(fndecl, loc);
21740
// Get the tree for a function expression. This is used when we take
21741
@@ -1492,8 +1485,10 @@
21743
Func_code_reference_expression::do_get_tree(Translate_context* context)
21745
- return Func_expression::get_code_pointer(context->gogo(), this->function_,
21746
- this->location());
21747
+ Bexpression* ret =
21748
+ Func_expression::get_code_pointer(context->gogo(), this->function_,
21749
+ this->location());
21750
+ return expr_to_tree(ret);
21753
// Make a reference to the code of a function.
21754
@@ -3055,8 +3050,7 @@
21755
do_lower(Gogo*, Named_object*, Statement_inserter*, int);
21758
- do_is_constant() const
21759
- { return this->expr_->is_constant(); }
21760
+ do_is_constant() const;
21763
do_numeric_constant_value(Numeric_constant*) const;
21764
@@ -3198,6 +3192,27 @@
21768
+// Return whether a type conversion is a constant.
21771
+Type_conversion_expression::do_is_constant() const
21773
+ if (!this->expr_->is_constant())
21776
+ // A conversion to a type that may not be used as a constant is not
21777
+ // a constant. For example, []byte(nil).
21778
+ Type* type = this->type_;
21779
+ if (type->integer_type() == NULL
21780
+ && type->float_type() == NULL
21781
+ && type->complex_type() == NULL
21782
+ && !type->is_boolean_type()
21783
+ && !type->is_string_type())
21789
// Return the constant numeric value if there is one.
21792
@@ -5586,6 +5601,15 @@
21793
subcontext.type = NULL;
21796
+ if (this->op_ == OPERATOR_ANDAND || this->op_ == OPERATOR_OROR)
21798
+ // For a logical operation, the context does not determine the
21799
+ // types of the operands. The operands must be some boolean
21800
+ // type but if the context has a boolean type they do not
21801
+ // inherit it. See http://golang.org/issue/3924.
21802
+ subcontext.type = NULL;
21805
// Set the context for the left hand operand.
21808
@@ -5967,6 +5991,43 @@
21812
+ // For complex division Go wants slightly different results than the
21813
+ // GCC library provides, so we have our own runtime routine.
21814
+ if (this->op_ == OPERATOR_DIV && this->left_->type()->complex_type() != NULL)
21816
+ const char *name;
21819
+ static tree complex64_div_decl;
21820
+ static tree complex128_div_decl;
21821
+ switch (this->left_->type()->complex_type()->bits())
21824
+ name = "__go_complex64_div";
21825
+ pdecl = &complex64_div_decl;
21826
+ ctype = Type::lookup_complex_type("complex64");
21829
+ name = "__go_complex128_div";
21830
+ pdecl = &complex128_div_decl;
21831
+ ctype = Type::lookup_complex_type("complex128");
21834
+ go_unreachable();
21836
+ Btype* cbtype = ctype->get_backend(gogo);
21837
+ tree ctype_tree = type_to_tree(cbtype);
21838
+ return Gogo::call_builtin(pdecl,
21839
+ this->location(),
21844
+ fold_convert_loc(gccloc, ctype_tree, left),
21846
+ fold_convert_loc(gccloc, ctype_tree, right));
21849
tree compute_type = excess_precision_type(type);
21850
if (compute_type != NULL_TREE)
21852
@@ -7191,6 +7252,15 @@
21853
if (this->code_ == BUILTIN_OFFSETOF)
21855
Expression* arg = this->one_arg();
21857
+ if (arg->bound_method_expression() != NULL
21858
+ || arg->interface_field_reference_expression() != NULL)
21860
+ this->report_error(_("invalid use of method value as argument "
21865
Field_reference_expression* farg = arg->field_reference_expression();
21866
while (farg != NULL)
21868
@@ -7200,7 +7270,8 @@
21869
// it must not be reached through pointer indirections.
21870
if (farg->expr()->deref() != farg->expr())
21872
- this->report_error(_("argument of Offsetof implies indirection of an embedded field"));
21873
+ this->report_error(_("argument of Offsetof implies "
21874
+ "indirection of an embedded field"));
21877
// Go up until we reach the original base.
21878
@@ -7476,7 +7547,7 @@
21879
switch (nc.to_unsigned_long(&v))
21881
case Numeric_constant::NC_UL_VALID:
21884
case Numeric_constant::NC_UL_NOTINT:
21885
error_at(e->location(), "non-integer %s argument to make",
21886
is_length ? "len" : "cap");
21887
@@ -7488,8 +7559,23 @@
21888
case Numeric_constant::NC_UL_BIG:
21889
// We don't want to give a compile-time error for a 64-bit
21890
// value on a 32-bit target.
21896
+ if (!nc.to_int(&val))
21897
+ go_unreachable();
21898
+ int bits = mpz_sizeinbase(val, 2);
21900
+ Type* int_type = Type::lookup_integer_type("int");
21901
+ if (bits >= int_type->integer_type()->bits())
21903
+ error_at(e->location(), "%s argument too large for make",
21904
+ is_length ? "len" : "cap");
21911
if (e->type()->integer_type() != NULL)
21912
@@ -7595,6 +7681,8 @@
21914
Builtin_call_expression::do_is_constant() const
21916
+ if (this->is_error_expression())
21918
switch (this->code_)
21921
@@ -9744,15 +9832,9 @@
21924
tree fntype_tree = type_to_tree(fntype->get_backend(gogo));
21925
- if (fntype_tree == error_mark_node)
21926
+ tree fnfield_type = type_to_tree(fntype->get_backend_fntype(gogo));
21927
+ if (fntype_tree == error_mark_node || fnfield_type == error_mark_node)
21928
return error_mark_node;
21929
- go_assert(POINTER_TYPE_P(fntype_tree));
21930
- if (TREE_TYPE(fntype_tree) == error_mark_node)
21931
- return error_mark_node;
21932
- go_assert(TREE_CODE(TREE_TYPE(fntype_tree)) == RECORD_TYPE);
21933
- tree fnfield_type = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(fntype_tree)));
21934
- if (fnfield_type == error_mark_node)
21935
- return error_mark_node;
21936
go_assert(FUNCTION_POINTER_TYPE_P(fnfield_type));
21937
tree rettype = TREE_TYPE(TREE_TYPE(fnfield_type));
21938
if (rettype == error_mark_node)
21939
@@ -9763,7 +9845,7 @@
21942
Named_object* no = func->named_object();
21943
- fn = Func_expression::get_code_pointer(gogo, no, location);
21944
+ fn = expr_to_tree(Func_expression::get_code_pointer(gogo, no, location));
21946
closure_tree = NULL_TREE;
21948
@@ -10817,11 +10899,20 @@
21950
String_index_expression::do_check_types(Gogo*)
21952
- if (this->start_->type()->integer_type() == NULL)
21953
+ Numeric_constant nc;
21955
+ if (this->start_->type()->integer_type() == NULL
21956
+ && !this->start_->type()->is_error()
21957
+ && (!this->start_->numeric_constant_value(&nc)
21958
+ || nc.to_unsigned_long(&v) == Numeric_constant::NC_UL_NOTINT))
21959
this->report_error(_("index must be integer"));
21960
if (this->end_ != NULL
21961
&& this->end_->type()->integer_type() == NULL
21962
- && !this->end_->is_nil_expression())
21963
+ && !this->end_->type()->is_error()
21964
+ && !this->end_->is_nil_expression()
21965
+ && !this->end_->is_error_expression()
21966
+ && (!this->end_->numeric_constant_value(&nc)
21967
+ || nc.to_unsigned_long(&v) == Numeric_constant::NC_UL_NOTINT))
21968
this->report_error(_("slice end must be integer"));
21972
===================================================================
21973
--- a/src/gcc/recog.c (.../tags/gcc_4_8_2_release)
21974
+++ b/src/gcc/recog.c (.../branches/gcc-4_8-branch)
21975
@@ -3061,6 +3061,9 @@
21979
+/* Regno offset to be used in the register search. */
21980
+static int search_ofs;
21982
/* Try to find a hard register of mode MODE, matching the register class in
21983
CLASS_STR, which is available at the beginning of insn CURRENT_INSN and
21984
remains available until the end of LAST_INSN. LAST_INSN may be NULL_RTX,
21985
@@ -3076,7 +3079,6 @@
21986
peep2_find_free_register (int from, int to, const char *class_str,
21987
enum machine_mode mode, HARD_REG_SET *reg_set)
21989
- static int search_ofs;
21993
@@ -3541,6 +3543,7 @@
21994
/* Initialize the regsets we're going to use. */
21995
for (i = 0; i < MAX_INSNS_PER_PEEP2 + 1; ++i)
21996
peep2_insn_data[i].live_before = BITMAP_ALLOC (®_obstack);
21998
live = BITMAP_ALLOC (®_obstack);
22000
FOR_EACH_BB_REVERSE (bb)
22001
Index: gcc/ada/indepsw-darwin.adb
22002
===================================================================
22003
--- a/src/gcc/ada/indepsw-darwin.adb (.../tags/gcc_4_8_2_release)
22004
+++ b/src/gcc/ada/indepsw-darwin.adb (.../branches/gcc-4_8-branch)
22006
+------------------------------------------------------------------------------
22008
+-- GNAT COMPILER COMPONENTS --
22010
+-- I N D E P S W --
22013
+-- (Darwin version) --
22015
+-- Copyright (C) 2013, Free Software Foundation, Inc. --
22017
+-- GNAT is free software; you can redistribute it and/or modify it under --
22018
+-- terms of the GNU General Public License as published by the Free Soft- --
22019
+-- ware Foundation; either version 3, or (at your option) any later ver- --
22020
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
22021
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
22022
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
22024
+-- As a special exception under Section 7 of GPL version 3, you are granted --
22025
+-- additional permissions described in the GCC Runtime Library Exception, --
22026
+-- version 3.1, as published by the Free Software Foundation. --
22028
+-- You should have received a copy of the GNU General Public License and --
22029
+-- a copy of the GCC Runtime Library Exception along with this program; --
22030
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
22031
+-- <http://www.gnu.org/licenses/>. --
22033
+-- GNAT was originally developed by the GNAT team at New York University. --
22034
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
22036
+------------------------------------------------------------------------------
22038
+-- This is the Darwin version
22040
+package body Indepsw is
22042
+ Map_Switch : aliased constant String := "-Wl,-map,";
22048
+ procedure Convert
22049
+ (Switch : Switch_Kind;
22050
+ Argument : String;
22051
+ To : out String_List_Access)
22056
+ To := new Argument_List'(1 => new String'(Map_Switch & Argument));
22060
+ ------------------
22061
+ -- Is_Supported --
22062
+ ------------------
22064
+ function Is_Supported (Switch : Switch_Kind) return Boolean is
22070
+ end Is_Supported;
22073
Index: gcc/ada/ChangeLog
22074
===================================================================
22075
--- a/src/gcc/ada/ChangeLog (.../tags/gcc_4_8_2_release)
22076
+++ b/src/gcc/ada/ChangeLog (.../branches/gcc-4_8-branch)
22078
+2014-01-12 Eric Botcazou <ebotcazou@adacore.com>
22081
+ * gcc-interface/cuintp.c (build_cst_from_int): Use 32-bit integer type
22082
+ as intermediate type.
22083
+ (UI_To_gnu): Likewise.
22085
+2013-12-12 Eric Botcazou <ebotcazou@adacore.com>
22086
+ Iain Sandoe <iain@codesourcery.com>
22089
+ * gcc-interface/Make-lang.in (ada/doctools/xgnatugn): Use gnatmake.
22090
+ * gcc-interface/Makefile.in (GCC_LINK): Add LDFLAGS.
22091
+ (../../gnatmake): Remove LDFLAGS.
22092
+ (../../gnatlink): Likewise.
22094
+2013-12-04 Eric Botcazou <ebotcazou@adacore.com>
22097
+ * indepsw-darwin.adb: New file.
22099
+2013-10-19 Eric Botcazou <ebotcazou@adacore.com>
22101
+ * gcc-interface/utils.c (scale_by_factor_of): New function.
22102
+ (rest_of_record_type_compilation): Use scale_by_factor_of in order to
22103
+ scale the original offset for both rounding cases; in the second case,
22104
+ take into accout the addend to compute the alignment. Tidy up.
22106
+2013-10-19 Eric Botcazou <ebotcazou@adacore.com>
22108
+ * gcc-interface/utils.c (gnat_set_type_context): New function.
22109
+ (gnat_pushdecl): Use it to set the context of the type.
22111
2013-10-16 Release Manager
22113
* GCC 4.8.2 released.
22114
Index: gcc/ada/gcc-interface/utils.c
22115
===================================================================
22116
--- a/src/gcc/ada/gcc-interface/utils.c (.../tags/gcc_4_8_2_release)
22117
+++ b/src/gcc/ada/gcc-interface/utils.c (.../branches/gcc-4_8-branch)
22118
@@ -232,6 +232,7 @@
22119
static tree split_plus (tree, tree *);
22120
static tree float_type_for_precision (int, enum machine_mode);
22121
static tree convert_to_fat_pointer (tree, tree);
22122
+static unsigned int scale_by_factor_of (tree, unsigned int);
22123
static bool potential_alignment_gap (tree, tree, tree);
22124
static void process_attributes (tree, struct attrib *);
22126
@@ -532,6 +533,22 @@
22127
free_binding_level = level;
22130
+/* Set the context of TYPE and its parallel types (if any) to CONTEXT. */
22133
+gnat_set_type_context (tree type, tree context)
22135
+ tree decl = TYPE_STUB_DECL (type);
22137
+ TYPE_CONTEXT (type) = context;
22139
+ while (decl && DECL_PARALLEL_TYPE (decl))
22141
+ TYPE_CONTEXT (DECL_PARALLEL_TYPE (decl)) = context;
22142
+ decl = TYPE_STUB_DECL (DECL_PARALLEL_TYPE (decl));
22146
/* Record DECL as belonging to the current lexical scope and use GNAT_NODE
22147
for location information and flag propagation. */
22149
@@ -613,7 +630,7 @@
22150
if (TREE_CODE (t) == POINTER_TYPE)
22151
TYPE_NEXT_PTR_TO (t) = tt;
22152
TYPE_NAME (tt) = DECL_NAME (decl);
22153
- TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
22154
+ gnat_set_type_context (tt, DECL_CONTEXT (decl));
22155
TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (t);
22156
DECL_ORIGINAL_TYPE (decl) = tt;
22158
@@ -623,7 +640,7 @@
22159
/* We need a variant for the placeholder machinery to work. */
22160
tree tt = build_variant_type_copy (t);
22161
TYPE_NAME (tt) = decl;
22162
- TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
22163
+ gnat_set_type_context (tt, DECL_CONTEXT (decl));
22164
TREE_USED (tt) = TREE_USED (t);
22165
TREE_TYPE (decl) = tt;
22166
if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
22167
@@ -645,7 +662,7 @@
22168
if (!(TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL))
22170
TYPE_NAME (t) = decl;
22171
- TYPE_CONTEXT (t) = DECL_CONTEXT (decl);
22172
+ gnat_set_type_context (t, DECL_CONTEXT (decl));
22176
@@ -1692,93 +1709,74 @@
22177
TYPE_SIZE_UNIT (new_record_type)
22178
= size_int (TYPE_ALIGN (record_type) / BITS_PER_UNIT);
22180
- /* Now scan all the fields, replacing each field with a new
22181
- field corresponding to the new encoding. */
22182
+ /* Now scan all the fields, replacing each field with a new field
22183
+ corresponding to the new encoding. */
22184
for (old_field = TYPE_FIELDS (record_type); old_field;
22185
old_field = DECL_CHAIN (old_field))
22187
tree field_type = TREE_TYPE (old_field);
22188
tree field_name = DECL_NAME (old_field);
22190
tree curpos = bit_position (old_field);
22191
+ tree pos, new_field;
22193
unsigned int align = 0;
22196
+ /* We're going to do some pattern matching below so remove as many
22197
+ conversions as possible. */
22198
+ curpos = remove_conversions (curpos, true);
22200
/* See how the position was modified from the last position.
22202
- There are two basic cases we support: a value was added
22203
- to the last position or the last position was rounded to
22204
- a boundary and they something was added. Check for the
22205
- first case first. If not, see if there is any evidence
22206
- of rounding. If so, round the last position and try
22208
+ There are two basic cases we support: a value was added
22209
+ to the last position or the last position was rounded to
22210
+ a boundary and they something was added. Check for the
22211
+ first case first. If not, see if there is any evidence
22212
+ of rounding. If so, round the last position and retry.
22214
- If this is a union, the position can be taken as zero. */
22216
- /* Some computations depend on the shape of the position expression,
22217
- so strip conversions to make sure it's exposed. */
22218
- curpos = remove_conversions (curpos, true);
22220
+ If this is a union, the position can be taken as zero. */
22221
if (TREE_CODE (new_record_type) == UNION_TYPE)
22222
- pos = bitsize_zero_node, align = 0;
22223
+ pos = bitsize_zero_node;
22225
pos = compute_related_constant (curpos, last_pos);
22227
- if (!pos && TREE_CODE (curpos) == MULT_EXPR
22229
+ && TREE_CODE (curpos) == MULT_EXPR
22230
&& host_integerp (TREE_OPERAND (curpos, 1), 1))
22232
tree offset = TREE_OPERAND (curpos, 0);
22233
align = tree_low_cst (TREE_OPERAND (curpos, 1), 1);
22235
- /* An offset which is a bitwise AND with a mask increases the
22236
- alignment according to the number of trailing zeros. */
22237
- offset = remove_conversions (offset, true);
22238
- if (TREE_CODE (offset) == BIT_AND_EXPR
22239
- && TREE_CODE (TREE_OPERAND (offset, 1)) == INTEGER_CST)
22241
- unsigned HOST_WIDE_INT mask
22242
- = TREE_INT_CST_LOW (TREE_OPERAND (offset, 1));
22245
- for (i = 0; i < HOST_BITS_PER_WIDE_INT; i++)
22254
- pos = compute_related_constant (curpos,
22255
- round_up (last_pos, align));
22256
+ align = scale_by_factor_of (offset, align);
22257
+ last_pos = round_up (last_pos, align);
22258
+ pos = compute_related_constant (curpos, last_pos);
22260
- else if (!pos && TREE_CODE (curpos) == PLUS_EXPR
22261
- && TREE_CODE (TREE_OPERAND (curpos, 1)) == INTEGER_CST
22263
+ && TREE_CODE (curpos) == PLUS_EXPR
22264
+ && host_integerp (TREE_OPERAND (curpos, 1), 1)
22265
&& TREE_CODE (TREE_OPERAND (curpos, 0)) == MULT_EXPR
22266
- && host_integerp (TREE_OPERAND
22267
- (TREE_OPERAND (curpos, 0), 1),
22270
+ (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1))
22272
+ tree offset = TREE_OPERAND (TREE_OPERAND (curpos, 0), 0);
22273
+ unsigned HOST_WIDE_INT addend
22274
+ = tree_low_cst (TREE_OPERAND (curpos, 1), 1);
22277
- (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1);
22278
- pos = compute_related_constant (curpos,
22279
- round_up (last_pos, align));
22280
+ = tree_low_cst (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1);
22281
+ align = scale_by_factor_of (offset, align);
22282
+ align = MIN (align, addend & -addend);
22283
+ last_pos = round_up (last_pos, align);
22284
+ pos = compute_related_constant (curpos, last_pos);
22286
- else if (potential_alignment_gap (prev_old_field, old_field,
22288
+ else if (potential_alignment_gap (prev_old_field, old_field, pos))
22290
align = TYPE_ALIGN (field_type);
22291
- pos = compute_related_constant (curpos,
22292
- round_up (last_pos, align));
22293
+ last_pos = round_up (last_pos, align);
22294
+ pos = compute_related_constant (curpos, last_pos);
22297
/* If we can't compute a position, set it to zero.
22299
- ??? We really should abort here, but it's too much work
22300
- to get this correct for all cases. */
22302
+ ??? We really should abort here, but it's too much work
22303
+ to get this correct for all cases. */
22305
pos = bitsize_zero_node;
22307
@@ -2553,6 +2551,32 @@
22311
+/* Return VALUE scaled by the biggest power-of-2 factor of EXPR. */
22313
+static unsigned int
22314
+scale_by_factor_of (tree expr, unsigned int value)
22316
+ expr = remove_conversions (expr, true);
22318
+ /* An expression which is a bitwise AND with a mask has a power-of-2 factor
22319
+ corresponding to the number of trailing zeros of the mask. */
22320
+ if (TREE_CODE (expr) == BIT_AND_EXPR
22321
+ && TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST)
22323
+ unsigned HOST_WIDE_INT mask = TREE_INT_CST_LOW (TREE_OPERAND (expr, 1));
22324
+ unsigned int i = 0;
22326
+ while ((mask & 1) == 0 && i < HOST_BITS_PER_WIDE_INT)
22337
/* Given two consecutive field decls PREV_FIELD and CURR_FIELD, return true
22338
unless we can prove these 2 fields are laid out in such a way that no gap
22339
exist between the end of PREV_FIELD and the beginning of CURR_FIELD. OFFSET
22340
Index: gcc/ada/gcc-interface/Makefile.in
22341
===================================================================
22342
--- a/src/gcc/ada/gcc-interface/Makefile.in (.../tags/gcc_4_8_2_release)
22343
+++ b/src/gcc/ada/gcc-interface/Makefile.in (.../branches/gcc-4_8-branch)
22344
@@ -2397,7 +2397,7 @@
22345
"GNATLINK=$(GNATLINK)" \
22346
"GNATBIND=$(GNATBIND)"
22348
-GCC_LINK=$(CC) $(GCC_LINK_FLAGS) $(ADA_INCLUDES)
22349
+GCC_LINK=$(CC) $(GCC_LINK_FLAGS) $(ADA_INCLUDES) $(LDFLAGS)
22351
# Build directory for the tools. Let's copy the target-dependent
22352
# sources using the same mechanism as for gnatlib. The other sources are
22353
@@ -2519,12 +2519,10 @@
22355
# Likewise for the tools
22356
../../gnatmake$(exeext): $(P) b_gnatm.o link.o targext.o $(GNATMAKE_OBJS)
22357
- $(GCC_LINK) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) \
22359
+ +$(GCC_LINK) $(ALL_CFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) $(TOOLS_LIBS)
22361
../../gnatlink$(exeext): $(P) b_gnatl.o link.o targext.o $(GNATLINK_OBJS)
22362
- $(GCC_LINK) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) \
22364
+ +$(GCC_LINK) $(ALL_CFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) $(TOOLS_LIBS)
22366
../stamp-gnatlib-$(RTSDIR):
22367
@if [ ! -f stamp-gnatlib-$(RTSDIR) ] ; \
22368
Index: gcc/ada/gcc-interface/cuintp.c
22369
===================================================================
22370
--- a/src/gcc/ada/gcc-interface/cuintp.c (.../tags/gcc_4_8_2_release)
22371
+++ b/src/gcc/ada/gcc-interface/cuintp.c (.../branches/gcc-4_8-branch)
22374
* C Implementation File *
22376
- * Copyright (C) 1992-2012, Free Software Foundation, Inc. *
22377
+ * Copyright (C) 1992-2014, Free Software Foundation, Inc. *
22379
* GNAT is free software; you can redistribute it and/or modify it under *
22380
* terms of the GNU General Public License as published by the Free Soft- *
22383
build_cst_from_int (tree type, HOST_WIDE_INT low)
22385
- if (TREE_CODE (type) == REAL_TYPE)
22386
- return convert (type, build_int_cst (NULL_TREE, low));
22387
+ if (SCALAR_FLOAT_TYPE_P (type))
22388
+ return convert (type, build_int_cst (gnat_type_for_size (32, 0), low));
22390
return build_int_cst_type (type, low);
22392
@@ -99,20 +99,13 @@
22393
gcc_assert (Length > 0);
22395
/* The computations we perform below always require a type at least as
22396
- large as an integer not to overflow. REAL types are always fine, but
22397
+ large as an integer not to overflow. FP types are always fine, but
22398
INTEGER or ENUMERAL types we are handed may be too short. We use a
22399
base integer type node for the computations in this case and will
22400
- convert the final result back to the incoming type later on.
22401
- The base integer precision must be superior than 16. */
22402
+ convert the final result back to the incoming type later on. */
22403
+ if (!SCALAR_FLOAT_TYPE_P (comp_type) && TYPE_PRECISION (comp_type) < 32)
22404
+ comp_type = gnat_type_for_size (32, 0);
22406
- if (TREE_CODE (comp_type) != REAL_TYPE
22407
- && TYPE_PRECISION (comp_type)
22408
- < TYPE_PRECISION (long_integer_type_node))
22410
- comp_type = long_integer_type_node;
22411
- gcc_assert (TYPE_PRECISION (comp_type) > 16);
22414
gnu_base = build_cst_from_int (comp_type, Base);
22416
gnu_ret = build_cst_from_int (comp_type, First);
22417
Index: gcc/ada/gcc-interface/Make-lang.in
22418
===================================================================
22419
--- a/src/gcc/ada/gcc-interface/Make-lang.in (.../tags/gcc_4_8_2_release)
22420
+++ b/src/gcc/ada/gcc-interface/Make-lang.in (.../branches/gcc-4_8-branch)
22421
@@ -625,7 +625,7 @@
22422
ada/doctools/xgnatugn$(build_exeext): ada/xgnatugn.adb
22423
-$(MKDIR) ada/doctools
22424
$(CP) $^ ada/doctools
22425
- cd ada/doctools && $(GNATMAKE) -q xgnatugn
22426
+ cd ada/doctools && gnatmake -q xgnatugn
22428
# Note that doc/gnat_ugn.texi and doc/projects.texi do not depend on
22429
# xgnatugn being built so we can distribute a pregenerated doc/gnat_ugn.info
22430
Index: gcc/tree-eh.c
22431
===================================================================
22432
--- a/src/gcc/tree-eh.c (.../tags/gcc_4_8_2_release)
22433
+++ b/src/gcc/tree-eh.c (.../branches/gcc-4_8-branch)
22434
@@ -1357,9 +1357,6 @@
22435
x = gimple_seq_last_stmt (finally);
22436
finally_loc = x ? gimple_location (x) : tf_loc;
22438
- /* Lower the finally block itself. */
22439
- lower_eh_constructs_1 (state, &finally);
22441
/* Prepare for switch statement generation. */
22442
nlabels = tf->dest_array.length ();
22443
return_index = nlabels;
22444
@@ -1445,6 +1442,7 @@
22445
x = gimple_build_label (finally_label);
22446
gimple_seq_add_stmt (&tf->top_p_seq, x);
22448
+ lower_eh_constructs_1 (state, &finally);
22449
gimple_seq_add_seq (&tf->top_p_seq, finally);
22451
/* Redirect each incoming goto edge. */
22452
@@ -2502,12 +2500,6 @@
22456
- case TARGET_MEM_REF:
22457
- if (TREE_CODE (TMR_BASE (expr)) == ADDR_EXPR
22458
- && !TMR_INDEX (expr) && !TMR_INDEX2 (expr))
22460
- return !TREE_THIS_NOTRAP (expr);
22462
case COMPONENT_REF:
22463
case REALPART_EXPR:
22464
case IMAGPART_EXPR:
22465
@@ -2534,10 +2526,36 @@
22467
return !in_array_bounds_p (expr);
22469
+ case TARGET_MEM_REF:
22471
+ if (TREE_CODE (TREE_OPERAND (expr, 0)) == ADDR_EXPR
22472
+ && tree_could_trap_p (TREE_OPERAND (TREE_OPERAND (expr, 0), 0)))
22474
+ if (TREE_THIS_NOTRAP (expr))
22476
+ /* We cannot prove that the access is in-bounds when we have
22477
+ variable-index TARGET_MEM_REFs. */
22478
+ if (code == TARGET_MEM_REF
22479
+ && (TMR_INDEX (expr) || TMR_INDEX2 (expr)))
22481
if (TREE_CODE (TREE_OPERAND (expr, 0)) == ADDR_EXPR)
22485
+ tree base = TREE_OPERAND (TREE_OPERAND (expr, 0), 0);
22486
+ double_int off = mem_ref_offset (expr);
22487
+ if (off.is_negative ())
22489
+ if (TREE_CODE (base) == STRING_CST)
22490
+ return double_int::from_uhwi (TREE_STRING_LENGTH (base)).ule (off);
22491
+ else if (DECL_SIZE_UNIT (base) == NULL_TREE
22492
+ || TREE_CODE (DECL_SIZE_UNIT (base)) != INTEGER_CST
22493
+ || tree_to_double_int (DECL_SIZE_UNIT (base)).ule (off))
22495
+ /* Now we are sure the first byte of the access is inside
22502
return !TREE_THIS_NOTRAP (expr);
22504
@@ -4166,8 +4184,11 @@
22505
/* If the block is totally empty, look for more unsplitting cases. */
22506
if (gsi_end_p (gsi))
22508
- /* For the degenerate case of an infinite loop bail out. */
22509
- if (infinite_empty_loop_p (e_out))
22510
+ /* For the degenerate case of an infinite loop bail out.
22511
+ If bb has no successors and is totally empty, which can happen e.g.
22512
+ because of incorrect noreturn attribute, bail out too. */
22513
+ if (e_out == NULL
22514
+ || infinite_empty_loop_p (e_out))
22517
return ret | cleanup_empty_eh_unsplit (bb, e_out, lp);
22518
@@ -4304,11 +4325,12 @@
22519
remove_unreachable_handlers ();
22521
/* Watch out for the region tree vanishing due to all unreachable. */
22522
- if (cfun->eh->region_tree && optimize)
22523
+ if (cfun->eh->region_tree)
22525
bool changed = false;
22527
- changed |= unsplit_all_eh ();
22529
+ changed |= unsplit_all_eh ();
22530
changed |= cleanup_all_empty_eh ();
22533
Index: gcc/fortran/interface.c
22534
===================================================================
22535
--- a/src/gcc/fortran/interface.c (.../tags/gcc_4_8_2_release)
22536
+++ b/src/gcc/fortran/interface.c (.../branches/gcc-4_8-branch)
22537
@@ -1245,7 +1245,8 @@
22541
- if (r1->ts.u.cl->length)
22542
+ if (s1->ts.u.cl && s1->ts.u.cl->length
22543
+ && s2->ts.u.cl && s2->ts.u.cl->length)
22545
int compval = gfc_dep_compare_expr (r1->ts.u.cl->length,
22546
r2->ts.u.cl->length);
22547
@@ -1367,8 +1368,8 @@
22548
if (s1->attr.function && s2->attr.function)
22550
/* If both are functions, check result characteristics. */
22551
- if (check_result_characteristics (s1, s2, errmsg, err_len)
22553
+ if (check_result_characteristics (s1, s2, errmsg, err_len) == FAILURE
22554
+ || check_result_characteristics (s2, s1, errmsg, err_len) == FAILURE)
22558
Index: gcc/fortran/trans-expr.c
22559
===================================================================
22560
--- a/src/gcc/fortran/trans-expr.c (.../tags/gcc_4_8_2_release)
22561
+++ b/src/gcc/fortran/trans-expr.c (.../branches/gcc-4_8-branch)
22562
@@ -670,7 +670,6 @@
22563
gfc_add_modify (&parmse->post, vptr,
22564
fold_convert (TREE_TYPE (vptr), ctree));
22566
- gcc_assert (!optional || (optional && !copyback));
22570
@@ -6343,7 +6342,13 @@
22571
/* Returns a reference to the scalar evaluated outside the loop
22573
gfc_conv_expr (se, expr);
22574
- se->expr = gfc_build_addr_expr (NULL_TREE, se->expr);
22576
+ if (expr->ts.type == BT_CHARACTER
22577
+ && expr->expr_type != EXPR_FUNCTION)
22578
+ gfc_conv_string_parameter (se);
22580
+ se->expr = gfc_build_addr_expr (NULL_TREE, se->expr);
22585
Index: gcc/fortran/trans-array.c
22586
===================================================================
22587
--- a/src/gcc/fortran/trans-array.c (.../tags/gcc_4_8_2_release)
22588
+++ b/src/gcc/fortran/trans-array.c (.../branches/gcc-4_8-branch)
22590
/* Array translation routines
22591
- Copyright (C) 2002-2013 Free Software Foundation, Inc.
22592
+ Copyright (C) 2002-2014 Free Software Foundation, Inc.
22593
Contributed by Paul Brook <paul@nowt.org>
22594
and Steven Bosscher <s.bosscher@student.tudelft.nl>
22596
@@ -2487,6 +2487,11 @@
22597
a reference to the value. */
22598
gfc_conv_expr (&se, expr);
22601
+ /* Ensure that a pointer to the string is stored. */
22602
+ if (expr->ts.type == BT_CHARACTER)
22603
+ gfc_conv_string_parameter (&se);
22605
gfc_add_block_to_block (&outer_loop->pre, &se.pre);
22606
gfc_add_block_to_block (&outer_loop->post, &se.post);
22607
if (gfc_is_class_scalar_expr (expr))
22608
@@ -7940,6 +7945,7 @@
22616
@@ -8015,9 +8021,9 @@
22617
jump_label2 = gfc_build_label_decl (NULL_TREE);
22619
/* Allocate if data is NULL. */
22620
- cond = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
22621
+ cond_null = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
22622
array1, build_int_cst (TREE_TYPE (array1), 0));
22623
- tmp = build3_v (COND_EXPR, cond,
22624
+ tmp = build3_v (COND_EXPR, cond_null,
22625
build1_v (GOTO_EXPR, jump_label1),
22626
build_empty_stmt (input_location));
22627
gfc_add_expr_to_block (&fblock, tmp);
22628
@@ -8069,13 +8075,25 @@
22629
tmp = build1_v (LABEL_EXPR, jump_label1);
22630
gfc_add_expr_to_block (&fblock, tmp);
22632
- size1 = gfc_conv_descriptor_size (desc, expr1->rank);
22633
+ /* If the lhs has not been allocated, its bounds will not have been
22634
+ initialized and so its size is set to zero. */
22635
+ size1 = gfc_create_var (gfc_array_index_type, NULL);
22636
+ gfc_init_block (&alloc_block);
22637
+ gfc_add_modify (&alloc_block, size1, gfc_index_zero_node);
22638
+ gfc_init_block (&realloc_block);
22639
+ gfc_add_modify (&realloc_block, size1,
22640
+ gfc_conv_descriptor_size (desc, expr1->rank));
22641
+ tmp = build3_v (COND_EXPR, cond_null,
22642
+ gfc_finish_block (&alloc_block),
22643
+ gfc_finish_block (&realloc_block));
22644
+ gfc_add_expr_to_block (&fblock, tmp);
22646
- /* Get the rhs size. Fix both sizes. */
22647
+ /* Get the rhs size and fix it. */
22649
desc2 = rss->info->data.array.descriptor;
22653
size2 = gfc_index_one_node;
22654
for (n = 0; n < expr2->rank; n++)
22656
@@ -8089,8 +8107,6 @@
22657
gfc_array_index_type,
22661
- size1 = gfc_evaluate_now (size1, &fblock);
22662
size2 = gfc_evaluate_now (size2, &fblock);
22664
cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
22665
Index: gcc/fortran/class.c
22666
===================================================================
22667
--- a/src/gcc/fortran/class.c (.../tags/gcc_4_8_2_release)
22668
+++ b/src/gcc/fortran/class.c (.../branches/gcc-4_8-branch)
22669
@@ -2486,7 +2486,7 @@
22672
/* Sometimes the typespec is passed from a single call. */
22673
- if (ts->type == BT_DERIVED)
22674
+ if (ts->type == BT_DERIVED || ts->type == BT_CLASS)
22675
return gfc_find_derived_vtab (ts->u.derived);
22677
/* Find the top-level namespace. */
22678
Index: gcc/fortran/decl.c
22679
===================================================================
22680
--- a/src/gcc/fortran/decl.c (.../tags/gcc_4_8_2_release)
22681
+++ b/src/gcc/fortran/decl.c (.../branches/gcc-4_8-branch)
22682
@@ -5069,7 +5069,14 @@
22683
if (gfc_add_proc (&c->attr, name, NULL) == FAILURE)
22684
return MATCH_ERROR;
22691
+ c->tb = XCNEW (gfc_typebound_proc);
22692
+ c->tb->where = gfc_current_locus;
22696
/* Set interface. */
22697
if (proc_if != NULL)
22698
@@ -7384,6 +7391,7 @@
22701
/* Check a derived type that is being extended. */
22704
check_extended_derived_type (char *name)
22706
@@ -7395,14 +7403,15 @@
22710
+ extended = gfc_find_dt_in_generic (extended);
22715
- gfc_error ("No such symbol in TYPE definition at %C");
22716
+ gfc_error ("Symbol '%s' at %C has not been previously defined", name);
22720
- extended = gfc_find_dt_in_generic (extended);
22722
if (extended->attr.flavor != FL_DERIVED)
22724
gfc_error ("'%s' in EXTENDS expression at %C is not a "
22725
Index: gcc/fortran/dump-parse-tree.c
22726
===================================================================
22727
--- a/src/gcc/fortran/dump-parse-tree.c (.../tags/gcc_4_8_2_release)
22728
+++ b/src/gcc/fortran/dump-parse-tree.c (.../branches/gcc-4_8-branch)
22729
@@ -110,7 +110,8 @@
22733
- show_expr (ts->u.cl->length);
22735
+ show_expr (ts->u.cl->length);
22736
fprintf(dumpfile, " %d", ts->kind);
22739
Index: gcc/fortran/ChangeLog
22740
===================================================================
22741
--- a/src/gcc/fortran/ChangeLog (.../tags/gcc_4_8_2_release)
22742
+++ b/src/gcc/fortran/ChangeLog (.../branches/gcc-4_8-branch)
22744
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
22746
+ Backport from mainline
22747
+ 2014-02-11 Jakub Jelinek <jakub@redhat.com>
22750
+ * trans-decl.c (gfc_build_dummy_array_decl): Set TREE_NO_WARNING
22751
+ on decl if sym->attr.optional.
22753
+2014-03-02 Mikael Morin <mikael@gcc.gnu.org>
22756
+ * frontend-passes.c (optimize_comparison): Guard two union accesses
22757
+ with the corresponding tag checks.
22759
+2014-02-22 Mikael Morin <mikael@gcc.gnu.org>
22762
+ * trans-intrinsic.c (gfc_conv_intrinsic_ichar): Calculate the
22763
+ number of arguments.
22765
+2014-02-19 Tobias Burnus <burnus@net-b.de>
22768
+ * expr.c (gfc_check_pointer_assign): Add check for
22770
+ * trans-decl.c (gfc_get_symbol_decl): Correctly generate
22771
+ external decl in a corner case.
22773
+2014-02-19 Janus Weil <janus@gcc.gnu.org>
22775
+ Backports from mainline:
22776
+ 2014-02-17 Janus Weil <janus@gcc.gnu.org>
22779
+ * resolve.c (build_default_init_expr): Don't initialize character
22780
+ variable if -fno-automatic is given.
22782
+ 2014-02-18 Janus Weil <janus@gcc.gnu.org>
22785
+ * resolve.c (check_generic_tbp_ambiguity): Check for presence of dummy
22786
+ arguments to prevent ICE.
22788
+2014-02-09 Janus Weil <janus@gcc.gnu.org>
22790
+ Backport from mainline
22791
+ 2013-10-21 Tobias Burnus <burnus@net-b.de>
22795
+ * decl.c (match_ppc_decl): Prevent later double free.
22797
+2014-02-08 Mikael Morin <mikael@gcc.gnu.org>
22800
+ * primary.c (gfc_convert_to_structure_constructor): Avoid null pointer
22803
+2014-02-07 Paul Thomas <pault@gcc.gnu.org>
22806
+ * trans-stmt.c (gfc_add_loop_ss_code): In the case of character
22807
+ SS_REFERENCE, use gfc_conv_string_parameter to ensure that a
22808
+ pointer to the string is stored.
22809
+ * trans-expr.c (gfc_conv_expr_reference): Likewise, use
22810
+ gfc_conv_string_parameter to ensure that a pointer to is passed
22811
+ to the elemental function.
22813
+2014-02-01 Paul Thomas <pault@gcc.gnu.org>
22816
+ * trans-stmt.c (gfc_trans_allocate): Before the pointer
22817
+ assignment to transfer the source _vptr to a class allocate
22818
+ expression, the final class reference should be exposed. The
22819
+ tail that includes the _data and array references is stored.
22820
+ This reduced expression is transferred to 'lhs' and the _vptr
22821
+ added. Then the tail is restored to the allocate expression.
22823
+2014-01-26 Mikael Morin <mikael@gcc.gnu.org>
22827
+ (fp2, find_pointer2): Remove.
22828
+ (mio_component_ref): Don't forcedfully set the containing derived type
22829
+ symbol for loading. Remove unused argument.
22830
+ (mio_ref): Update caller
22831
+ (skip_list): New argument nest_level. Initialize level with the new
22833
+ (read_module): Add forced pointer components association for derived
22836
+2014-01-19 Paul Thomas <pault@gcc.gnu.org>
22838
+ Backport from mainline
22839
+ 2013-12-01 Paul Thomas <pault@gcc.gnu.org>
22842
+ * trans-array.c (gfc_alloc_allocatable_for_assignment): Do not
22843
+ use the array bounds of an unallocated array but set its size
22846
+2014-01-19 Paul Thomas <pault@gcc.gnu.org>
22848
+ Backport from mainline
22849
+ 2013-12-01 Paul Thomas <pault@gcc.gnu.org>
22852
+ * resolve.c (resolve_transfer): EXPR_NULL is always in an
22853
+ invalid context in a transfer statement.
22855
+2014-01-11 Janus Weil <janus@gcc.gnu.org>
22857
+ Backport from mainline
22858
+ 2013-12-29 Janus Weil <janus@gcc.gnu.org>
22862
+ * dump-parse-tree.c (show_typespec): Check for charlen.
22863
+ * invoke.texi: Fix documentation of -fdump-fortran-optimized and
22864
+ -fdump-parse-tree.
22866
+2014-01-04 Janus Weil <janus@gcc.gnu.org>
22868
+ Backport from mainline
22869
+ 2014-01-02 Janus Weil <janus@gcc.gnu.org>
22872
+ * resolve.c (resolve_typebound_procedures): No need to create the vtab
22875
+2013-12-31 Janus Weil <janus@gcc.gnu.org>
22877
+ Backport from mainline
22878
+ 2013-12-30 Janus Weil <janus@gcc.gnu.org>
22881
+ * resolve.c (resolve_symbol): Check that symbol is not only flavorless
22882
+ but also untyped.
22884
+2013-12-18 Janus Weil <janus@gcc.gnu.org>
22886
+ Backport from mainline
22887
+ 2013-12-15 Janus Weil <janus@gcc.gnu.org>
22890
+ * class.c (gfc_find_intrinsic_vtab): Handle BT_CLASS.
22892
+2013-11-30 Paul Thomas <pault@gcc.gnu.org>
22894
+ Backport from mainline
22895
+ 2013-11-04 Paul Thomas <pault@gcc.gnu.org>
22898
+ * trans-expr.c (gfc_conv_class_to_class): Remove spurious
22901
+2013-11-17 Janus Weil <janus@gcc.gnu.org>
22903
+ Backport from mainline
22904
+ 2013-11-07 Janus Weil <janus@gcc.gnu.org>
22907
+ * primary.c (gfc_expr_attr): Check for result symbol.
22909
+2013-11-16 Janus Weil <janus@gcc.gnu.org>
22911
+ Backport from mainline
22912
+ 2013-09-20 Janus Weil <janus@gcc.gnu.org>
22915
+ * expr.c (gfc_check_pointer_assign): Remove second call to
22916
+ 'gfc_compare_interfaces' with swapped arguments.
22917
+ * interface.c (gfc_compare_interfaces): Symmetrize the call to
22918
+ 'check_result_characteristics' by calling it with swapped arguments.
22920
+2013-11-16 Paul Thomas <pault@gcc.gnu.org>
22923
+ * trans-io.c (transfer_expr): If the backend_decl for a derived
22924
+ type is missing, build it with gfc_typenode_for_spec.
22926
+2013-11-05 Steven G. Kargl <kargl@gcc.gnu.org>
22929
+ * check.c (gfc_check_reshape): ensure that shape is a constant
22932
+2013-11-02 Janus Weil <janus@gcc.gnu.org>
22934
+ Backport from mainline
22935
+ 2013-09-23 Janus Weil <janus@gcc.gnu.org>
22938
+ * decl.c (check_extended_derived_type): Prevent segfault, modify error
22941
2013-10-16 Release Manager
22943
* GCC 4.8.2 released.
22944
Index: gcc/fortran/trans-stmt.c
22945
===================================================================
22946
--- a/src/gcc/fortran/trans-stmt.c (.../tags/gcc_4_8_2_release)
22947
+++ b/src/gcc/fortran/trans-stmt.c (.../branches/gcc-4_8-branch)
22948
@@ -5104,10 +5104,49 @@
22950
gfc_expr *lhs, *rhs;
22952
+ gfc_ref *ref, *class_ref, *tail;
22954
+ /* Find the last class reference. */
22955
+ class_ref = NULL;
22956
+ for (ref = e->ref; ref; ref = ref->next)
22958
+ if (ref->type == REF_COMPONENT
22959
+ && ref->u.c.component->ts.type == BT_CLASS)
22962
+ if (ref->next == NULL)
22966
+ /* Remove and store all subsequent references after the
22967
+ CLASS reference. */
22970
+ tail = class_ref->next;
22971
+ class_ref->next = NULL;
22979
lhs = gfc_expr_to_initialize (e);
22980
gfc_add_vptr_component (lhs);
22982
+ /* Remove the _vptr component and restore the original tail
22986
+ gfc_free_ref_list (class_ref->next);
22987
+ class_ref->next = tail;
22991
+ gfc_free_ref_list (e->ref);
22995
if (class_expr != NULL_TREE)
22997
/* Polymorphic SOURCE: VPTR must be determined at run time. */
22998
Index: gcc/fortran/expr.c
22999
===================================================================
23000
--- a/src/gcc/fortran/expr.c (.../tags/gcc_4_8_2_release)
23001
+++ b/src/gcc/fortran/expr.c (.../branches/gcc-4_8-branch)
23002
@@ -3555,11 +3555,13 @@
23006
- if (!gfc_compare_interfaces (s2, s1, name, 0, 1,
23007
- err, sizeof(err), NULL, NULL))
23008
+ /* Check F2008Cor2, C729. */
23009
+ if (!s2->attr.intrinsic && s2->attr.if_source == IFSRC_UNKNOWN
23010
+ && !s2->attr.external && !s2->attr.subroutine && !s2->attr.function)
23012
- gfc_error ("Interface mismatch in procedure pointer assignment "
23013
- "at %L: %s", &rvalue->where, err);
23014
+ gfc_error ("Procedure pointer target '%s' at %L must be either an "
23015
+ "intrinsic, host or use associated, referenced or have "
23016
+ "the EXTERNAL attribute", s2->name, &rvalue->where);
23020
Index: gcc/fortran/module.c
23021
===================================================================
23022
--- a/src/gcc/fortran/module.c (.../tags/gcc_4_8_2_release)
23023
+++ b/src/gcc/fortran/module.c (.../branches/gcc-4_8-branch)
23024
@@ -386,37 +386,6 @@
23028
-/* Recursive function to find a pointer within a tree by brute force. */
23030
-static pointer_info *
23031
-fp2 (pointer_info *p, const void *target)
23038
- if (p->u.pointer == target)
23041
- q = fp2 (p->left, target);
23045
- return fp2 (p->right, target);
23049
-/* During reading, find a pointer_info node from the pointer value.
23050
- This amounts to a brute-force search. */
23052
-static pointer_info *
23053
-find_pointer2 (void *p)
23055
- return fp2 (pi_root, p);
23059
/* Resolve any fixups using a known pointer. */
23062
@@ -2522,45 +2491,13 @@
23063
the namespace and is not loaded again. */
23066
-mio_component_ref (gfc_component **cp, gfc_symbol *sym)
23067
+mio_component_ref (gfc_component **cp)
23069
- char name[GFC_MAX_SYMBOL_LEN + 1];
23070
- gfc_component *q;
23073
p = mio_pointer_ref (cp);
23074
if (p->type == P_UNKNOWN)
23075
p->type = P_COMPONENT;
23077
- if (iomode == IO_OUTPUT)
23078
- mio_pool_string (&(*cp)->name);
23081
- mio_internal_string (name);
23083
- if (sym && sym->attr.is_class)
23084
- sym = sym->components->ts.u.derived;
23086
- /* It can happen that a component reference can be read before the
23087
- associated derived type symbol has been loaded. Return now and
23088
- wait for a later iteration of load_needed. */
23092
- if (sym->components != NULL && p->u.pointer == NULL)
23094
- /* Symbol already loaded, so search by name. */
23095
- q = gfc_find_component (sym, name, true, true);
23098
- associate_integer_pointer (p, q);
23101
- /* Make sure this symbol will eventually be loaded. */
23102
- p = find_pointer2 (sym);
23103
- if (p->u.rsym.state == UNUSED)
23104
- p->u.rsym.state = NEEDED;
23109
@@ -2917,7 +2854,7 @@
23111
case REF_COMPONENT:
23112
mio_symbol_ref (&r->u.c.sym);
23113
- mio_component_ref (&r->u.c.component, r->u.c.sym);
23114
+ mio_component_ref (&r->u.c.component);
23117
case REF_SUBSTRING:
23118
@@ -3772,7 +3709,9 @@
23121
/* Unlike most other routines, the address of the symbol node is already
23122
- fixed on input and the name/module has already been filled in. */
23123
+ fixed on input and the name/module has already been filled in.
23124
+ If you update the symbol format here, don't forget to update read_module
23125
+ as well (look for "seek to the symbol's component list"). */
23128
mio_symbol (gfc_symbol *sym)
23129
@@ -3782,6 +3721,7 @@
23132
mio_symbol_attribute (&sym->attr);
23134
mio_typespec (&sym->ts);
23135
if (sym->ts.type == BT_CLASS)
23136
sym->attr.class_ok = 1;
23137
@@ -3812,7 +3752,6 @@
23139
/* Note that components are always saved, even if they are supposed
23140
to be private. Component access is checked during searching. */
23142
mio_component_list (&sym->components, sym->attr.vtype);
23144
if (sym->components != NULL)
23145
@@ -3914,14 +3853,17 @@
23149
-/* Skip a list between balanced left and right parens. */
23150
+/* Skip a list between balanced left and right parens.
23151
+ By setting NEST_LEVEL one assumes that a number of NEST_LEVEL opening parens
23152
+ have been already parsed by hand, and the remaining of the content is to be
23153
+ skipped here. The default value is 0 (balanced parens). */
23157
+skip_list (int nest_level = 0)
23162
+ level = nest_level;
23165
switch (parse_atom ())
23166
@@ -4555,7 +4497,6 @@
23167
info->u.rsym.ns = atom_int;
23169
get_module_locus (&info->u.rsym.where);
23172
/* See if the symbol has already been loaded by a previous module.
23173
If so, we reference the existing symbol and prevent it from
23174
@@ -4566,11 +4507,57 @@
23177
|| (sym->attr.flavor == FL_VARIABLE && info->u.rsym.ns !=1))
23184
info->u.rsym.state = USED;
23185
info->u.rsym.sym = sym;
23186
+ /* The current symbol has already been loaded, so we can avoid loading
23187
+ it again. However, if it is a derived type, some of its components
23188
+ can be used in expressions in the module. To avoid the module loading
23189
+ failing, we need to associate the module's component pointer indexes
23190
+ with the existing symbol's component pointers. */
23191
+ if (sym->attr.flavor == FL_DERIVED)
23193
+ gfc_component *c;
23195
+ /* First seek to the symbol's component list. */
23196
+ mio_lparen (); /* symbol opening. */
23197
+ skip_list (); /* skip symbol attribute. */
23198
+ skip_list (); /* typespec. */
23199
+ require_atom (ATOM_INTEGER); /* namespace ref. */
23200
+ require_atom (ATOM_INTEGER); /* common ref. */
23201
+ skip_list (); /* formal args. */
23203
+ skip_list (); /* array_spec. */
23204
+ require_atom (ATOM_INTEGER); /* result. */
23205
+ /* not a cray pointer. */
23207
+ mio_lparen (); /* component list opening. */
23208
+ for (c = sym->components; c; c = c->next)
23211
+ const char *comp_name;
23214
+ mio_lparen (); /* component opening. */
23215
+ mio_integer (&n);
23216
+ p = get_integer (n);
23217
+ if (p->u.pointer == NULL)
23218
+ associate_integer_pointer (p, c);
23219
+ mio_pool_string (&comp_name);
23220
+ gcc_assert (comp_name == c->name);
23221
+ skip_list (1); /* component end. */
23223
+ mio_rparen (); /* component list closing. */
23225
+ skip_list (1); /* symbol end. */
23230
/* Some symbols do not have a namespace (eg. formal arguments),
23231
so the automatic "unique symtree" mechanism must be suppressed
23232
by marking them as referenced. */
23233
Index: gcc/fortran/frontend-passes.c
23234
===================================================================
23235
--- a/src/gcc/fortran/frontend-passes.c (.../tags/gcc_4_8_2_release)
23236
+++ b/src/gcc/fortran/frontend-passes.c (.../branches/gcc-4_8-branch)
23237
@@ -1214,7 +1214,9 @@
23238
/* Replace A // B < A // C with B < C, and A // B < C // B
23240
if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
23241
+ && op1->expr_type == EXPR_OP
23242
&& op1->value.op.op == INTRINSIC_CONCAT
23243
+ && op2->expr_type == EXPR_OP
23244
&& op2->value.op.op == INTRINSIC_CONCAT)
23246
gfc_expr *op1_left = op1->value.op.op1;
23247
Index: gcc/fortran/resolve.c
23248
===================================================================
23249
--- a/src/gcc/fortran/resolve.c (.../tags/gcc_4_8_2_release)
23250
+++ b/src/gcc/fortran/resolve.c (.../branches/gcc-4_8-branch)
23252
/* Perform type resolution on the various structures.
23253
- Copyright (C) 2001-2013 Free Software Foundation, Inc.
23254
+ Copyright (C) 2001-2014 Free Software Foundation, Inc.
23255
Contributed by Andy Vaught
23257
This file is part of GCC.
23258
@@ -8705,10 +8705,11 @@
23259
&& exp->value.op.op == INTRINSIC_PARENTHESES)
23260
exp = exp->value.op.op1;
23262
- if (exp && exp->expr_type == EXPR_NULL && exp->ts.type == BT_UNKNOWN)
23263
+ if (exp && exp->expr_type == EXPR_NULL
23266
- gfc_error ("NULL intrinsic at %L in data transfer statement requires "
23267
- "MOLD=", &exp->where);
23268
+ gfc_error ("Invalid context for NULL () intrinsic at %L",
23273
@@ -11057,7 +11058,7 @@
23276
if (!init_expr && gfc_option.flag_init_character == GFC_INIT_CHARACTER_ON
23277
- && sym->ts.u.cl->length)
23278
+ && sym->ts.u.cl->length && gfc_option.flag_max_stack_var_size != 0)
23280
gfc_actual_arglist *arg;
23281
init_expr = gfc_get_expr ();
23282
@@ -11877,6 +11878,7 @@
23284
gfc_symbol *sym1, *sym2;
23285
const char *pass1, *pass2;
23286
+ gfc_formal_arglist *dummy_args;
23288
gcc_assert (t1->specific && t2->specific);
23289
gcc_assert (!t1->specific->is_generic);
23290
@@ -11899,19 +11901,33 @@
23294
- /* Compare the interfaces. */
23295
+ /* Determine PASS arguments. */
23296
if (t1->specific->nopass)
23298
else if (t1->specific->pass_arg)
23299
pass1 = t1->specific->pass_arg;
23301
- pass1 = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym)->sym->name;
23303
+ dummy_args = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym);
23305
+ pass1 = dummy_args->sym->name;
23309
if (t2->specific->nopass)
23311
else if (t2->specific->pass_arg)
23312
pass2 = t2->specific->pass_arg;
23314
- pass2 = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym)->sym->name;
23316
+ dummy_args = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym);
23318
+ pass2 = dummy_args->sym->name;
23323
+ /* Compare the interfaces. */
23324
if (gfc_compare_interfaces (sym1, sym2, sym2->name, !t1->is_operator, 0,
23325
NULL, 0, pass1, pass2))
23327
@@ -12425,9 +12441,6 @@
23328
resolve_bindings_derived = derived;
23329
resolve_bindings_result = SUCCESS;
23331
- /* Make sure the vtab has been generated. */
23332
- gfc_find_derived_vtab (derived);
23334
if (derived->f2k_derived->tb_sym_root)
23335
gfc_traverse_symtree (derived->f2k_derived->tb_sym_root,
23336
&resolve_typebound_procedure);
23337
@@ -13256,7 +13269,8 @@
23338
if (sym->attr.flavor == FL_UNKNOWN
23339
|| (sym->attr.flavor == FL_PROCEDURE && !sym->attr.intrinsic
23340
&& !sym->attr.generic && !sym->attr.external
23341
- && sym->attr.if_source == IFSRC_UNKNOWN))
23342
+ && sym->attr.if_source == IFSRC_UNKNOWN
23343
+ && sym->ts.type == BT_UNKNOWN))
23346
/* If we find that a flavorless symbol is an interface in one of the
23347
Index: gcc/fortran/trans-io.c
23348
===================================================================
23349
--- a/src/gcc/fortran/trans-io.c (.../tags/gcc_4_8_2_release)
23350
+++ b/src/gcc/fortran/trans-io.c (.../branches/gcc-4_8-branch)
23351
@@ -243,16 +243,16 @@
23353
/* The code to generate the error. */
23354
gfc_start_block (&block);
23357
arg1 = gfc_build_addr_expr (NULL_TREE, var);
23360
arg2 = build_int_cst (integer_type_node, error_code),
23363
asprintf (&message, "%s", _(msgid));
23364
arg3 = gfc_build_addr_expr (pchar_type_node,
23365
gfc_build_localized_cstring_const (message));
23369
tmp = build_call_expr_loc (input_location,
23370
gfor_fndecl_generate_error, 3, arg1, arg2, arg3);
23372
@@ -521,7 +521,7 @@
23373
gfc_trans_io_runtime_check (cond, var, LIBERROR_BAD_UNIT,
23374
"Unit number in I/O statement too small",
23378
/* UNIT numbers should be less than the max. */
23379
val = gfc_conv_mpz_to_tree (gfc_integer_kinds[i].huge, 4);
23380
cond = fold_build2_loc (input_location, GT_EXPR, boolean_type_node,
23381
@@ -1000,7 +1000,7 @@
23383
mask |= set_string (&block, &post_block, var, IOPARM_open_convert,
23388
mask |= set_parameter_ref (&block, &post_block, var, IOPARM_open_newunit,
23390
@@ -1234,7 +1234,7 @@
23392
mask |= set_parameter_ref (&block, &post_block, var, IOPARM_inquire_exist,
23396
if (p->unit && !p->iostat)
23398
p->iostat = create_dummy_iostat ();
23399
@@ -1322,7 +1322,7 @@
23401
mask |= set_string (&block, &post_block, var, IOPARM_inquire_pad,
23406
mask |= set_string (&block, &post_block, var, IOPARM_inquire_convert,
23408
@@ -1547,7 +1547,7 @@
23411
tree decl = NULL_TREE;
23417
@@ -2032,7 +2032,7 @@
23418
if (gfc_notification_std (GFC_STD_GNU) != SILENT)
23420
gfc_error_now ("Derived type '%s' at %L has PRIVATE components",
23421
- ts->u.derived->name, code != NULL ? &(code->loc) :
23422
+ ts->u.derived->name, code != NULL ? &(code->loc) :
23423
&gfc_current_locus);
23426
@@ -2041,7 +2041,7 @@
23427
ts->kind = ts->u.derived->ts.kind;
23428
ts->f90_type = ts->u.derived->ts.f90_type;
23435
@@ -2123,7 +2123,7 @@
23436
function = iocall[IOCALL_X_CHARACTER_WIDE];
23438
function = iocall[IOCALL_X_CHARACTER_WIDE_WRITE];
23441
tmp = gfc_build_addr_expr (NULL_TREE, dt_parm);
23442
tmp = build_call_expr_loc (input_location,
23443
function, 4, tmp, addr_expr, arg2, arg3);
23444
@@ -2158,6 +2158,12 @@
23445
expr = build_fold_indirect_ref_loc (input_location,
23448
+ /* Make sure that the derived type has been built. An external
23449
+ function, if only referenced in an io statement requires this
23450
+ check (see PR58771). */
23451
+ if (ts->u.derived->backend_decl == NULL_TREE)
23452
+ tmp = gfc_typenode_for_spec (ts);
23454
for (c = ts->u.derived->components; c; c = c->next)
23456
field = c->backend_decl;
23457
Index: gcc/fortran/trans-decl.c
23458
===================================================================
23459
--- a/src/gcc/fortran/trans-decl.c (.../tags/gcc_4_8_2_release)
23460
+++ b/src/gcc/fortran/trans-decl.c (.../branches/gcc-4_8-branch)
23461
@@ -1013,6 +1013,10 @@
23462
TREE_STATIC (decl) = 0;
23463
DECL_EXTERNAL (decl) = 0;
23465
+ /* Avoid uninitialized warnings for optional dummy arguments. */
23466
+ if (sym->attr.optional)
23467
+ TREE_NO_WARNING (decl) = 1;
23469
/* We should never get deferred shape arrays here. We used to because of
23471
gcc_assert (sym->as->type != AS_DEFERRED);
23472
@@ -1358,9 +1362,10 @@
23474
if (sym->attr.flavor == FL_PROCEDURE)
23476
- /* Catch function declarations. Only used for actual parameters,
23477
+ /* Catch functions. Only used for actual parameters,
23478
procedure pointers and procptr initialization targets. */
23479
- if (sym->attr.external || sym->attr.use_assoc || sym->attr.intrinsic)
23480
+ if (sym->attr.external || sym->attr.use_assoc || sym->attr.intrinsic
23481
+ || sym->attr.if_source != IFSRC_DECL)
23483
decl = gfc_get_extern_function_decl (sym);
23484
gfc_set_decl_location (decl, &sym->declared_at);
23485
Index: gcc/fortran/check.c
23486
===================================================================
23487
--- a/src/gcc/fortran/check.c (.../tags/gcc_4_8_2_release)
23488
+++ b/src/gcc/fortran/check.c (.../branches/gcc-4_8-branch)
23489
@@ -3208,7 +3208,7 @@
23490
"than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
23493
- else if (shape->expr_type == EXPR_ARRAY)
23494
+ else if (shape->expr_type == EXPR_ARRAY && gfc_is_constant_expr (shape))
23498
Index: gcc/fortran/primary.c
23499
===================================================================
23500
--- a/src/gcc/fortran/primary.c (.../tags/gcc_4_8_2_release)
23501
+++ b/src/gcc/fortran/primary.c (.../branches/gcc-4_8-branch)
23502
@@ -2252,7 +2252,7 @@
23503
case EXPR_FUNCTION:
23504
gfc_clear_attr (&attr);
23506
- if (e->value.function.esym != NULL)
23507
+ if (e->value.function.esym && e->value.function.esym->result)
23509
gfc_symbol *sym = e->value.function.esym->result;
23511
@@ -2540,7 +2540,8 @@
23512
if (parent && !comp)
23515
- actual = actual->next;
23517
+ actual = actual->next;
23520
if (build_actual_constructor (&comp_head, &ctor_head, sym) == FAILURE)
23521
Index: gcc/fortran/trans-intrinsic.c
23522
===================================================================
23523
--- a/src/gcc/fortran/trans-intrinsic.c (.../tags/gcc_4_8_2_release)
23524
+++ b/src/gcc/fortran/trans-intrinsic.c (.../branches/gcc-4_8-branch)
23525
@@ -4685,8 +4685,10 @@
23526
gfc_conv_intrinsic_ichar (gfc_se * se, gfc_expr * expr)
23528
tree args[2], type, pchartype;
23531
- gfc_conv_intrinsic_function_args (se, expr, args, 2);
23532
+ nargs = gfc_intrinsic_argument_list_length (expr);
23533
+ gfc_conv_intrinsic_function_args (se, expr, args, nargs);
23534
gcc_assert (POINTER_TYPE_P (TREE_TYPE (args[1])));
23535
pchartype = gfc_get_pchar_type (expr->value.function.actual->expr->ts.kind);
23536
args[1] = fold_build1_loc (input_location, NOP_EXPR, pchartype, args[1]);
23537
Index: gcc/configure.ac
23538
===================================================================
23539
--- a/src/gcc/configure.ac (.../tags/gcc_4_8_2_release)
23540
+++ b/src/gcc/configure.ac (.../branches/gcc-4_8-branch)
23541
@@ -1516,13 +1516,11 @@
23542
/* | [A-Za-z]:[\\/]* ) realsrcdir=${srcdir};;
23543
*) realsrcdir=../${srcdir};;
23545
- saved_CFLAGS="${CFLAGS}"
23546
CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
23547
- LDFLAGS="${LDFLAGS_FOR_BUILD}" \
23548
+ LDFLAGS="${LDFLAGS_FOR_BUILD}" GMPINC="" \
23549
${realsrcdir}/configure \
23550
--enable-languages=${enable_languages-all} \
23551
--target=$target_alias --host=$build_alias --build=$build_alias
23552
- CFLAGS="${saved_CFLAGS}"
23554
# We just finished tests for the build machine, so rename
23555
# the file auto-build.h in the gcc directory.
23556
@@ -1887,6 +1885,7 @@
23557
if test x$build != x$host || test "x$coverage_flags" != x
23559
BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
23560
+ BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CXXFLAGS_FOR_BUILD)'
23561
BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
23564
@@ -3611,6 +3610,19 @@
23565
kasumi_fi_xor %f46, %f48, %f50, %f52],,
23566
[AC_DEFINE(HAVE_AS_SPARC4, 1,
23567
[Define if your assembler supports SPARC4 instructions.])])
23569
+ gcc_GAS_CHECK_FEATURE([LEON instructions],
23570
+ gcc_cv_as_sparc_leon,,
23573
+ .register %g2, #scratch
23574
+ .register %g3, #scratch
23576
+ smac %g2, %g3, %g1
23577
+ umac %g2, %g3, %g1
23578
+ cas [[%g2]], %g3, %g1],,
23579
+ [AC_DEFINE(HAVE_AS_LEON, 1,
23580
+ [Define if your assembler supports LEON instructions.])])
23584
@@ -3749,8 +3761,13 @@
23586
# These two are used unconditionally by i386.[ch]; it is to be defined
23587
# to 1 if the feature is present, 0 otherwise.
23588
+ as_ix86_gotoff_in_data_opt=
23589
+ if test x$gas = xyes; then
23590
+ as_ix86_gotoff_in_data_opt="--32"
23592
gcc_GAS_CHECK_FEATURE([GOTOFF in data],
23593
- gcc_cv_as_ix86_gotoff_in_data, [2,11,0],,
23594
+ gcc_cv_as_ix86_gotoff_in_data, [2,11,0],
23595
+ [$as_ix86_gotoff_in_data_opt],
23599
@@ -3772,6 +3789,12 @@
23600
[AC_DEFINE(HAVE_AS_IX86_REP_LOCK_PREFIX, 1,
23601
[Define if the assembler supports 'rep <insn>, lock <insn>'.])])
23603
+ gcc_GAS_CHECK_FEATURE([ud2 mnemonic],
23604
+ gcc_cv_as_ix86_ud2,,,
23606
+ [AC_DEFINE(HAVE_AS_IX86_UD2, 1,
23607
+ [Define if your assembler supports the 'ud2' mnemonic.])])
23609
gcc_GAS_CHECK_FEATURE([R_386_TLS_GD_PLT reloc],
23610
gcc_cv_as_ix86_tlsgdplt,,,
23611
[call tls_gd@tlsgdplt],
23612
@@ -5193,15 +5216,15 @@
23613
AC_MSG_CHECKING([for exported symbols])
23614
if test "x$export_sym_check" != x; then
23615
echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
23616
- ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest > /dev/null 2>&1
23617
- if $export_sym_check conftest | grep foobar > /dev/null; then
23618
+ ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > /dev/null 2>&1
23619
+ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
23620
: # No need to use a flag
23621
AC_MSG_RESULT([yes])
23623
AC_MSG_RESULT([yes])
23624
AC_MSG_CHECKING([for -rdynamic])
23625
- ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest > /dev/null 2>&1
23626
- if $export_sym_check conftest | grep foobar > /dev/null; then
23627
+ ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest$ac_exeext > /dev/null 2>&1
23628
+ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
23629
plugin_rdynamic=yes
23630
pluginlibs="-rdynamic"
23632
Index: gcc/print-rtl.c
23633
===================================================================
23634
--- a/src/gcc/print-rtl.c (.../tags/gcc_4_8_2_release)
23635
+++ b/src/gcc/print-rtl.c (.../branches/gcc-4_8-branch)
23636
@@ -582,6 +582,8 @@
23638
if (MEM_EXPR (in_rtx))
23639
print_mem_expr (outfile, MEM_EXPR (in_rtx));
23641
+ fputc (' ', outfile);
23643
if (MEM_OFFSET_KNOWN_P (in_rtx))
23644
fprintf (outfile, "+" HOST_WIDE_INT_PRINT_DEC, MEM_OFFSET (in_rtx));
23645
Index: gcc/tree-vectorizer.h
23646
===================================================================
23647
--- a/src/gcc/tree-vectorizer.h (.../tags/gcc_4_8_2_release)
23648
+++ b/src/gcc/tree-vectorizer.h (.../branches/gcc-4_8-branch)
23649
@@ -542,6 +542,10 @@
23653
+ /* The minimum negative dependence distance this stmt participates in
23654
+ or zero if none. */
23655
+ unsigned int min_neg_dist;
23657
/* Not all stmts in the loop need to be vectorized. e.g, the increment
23658
of the loop induction variable and computation of array indexes. relevant
23659
indicates whether the stmt needs to be vectorized. */
23660
@@ -593,6 +597,7 @@
23661
#define STMT_VINFO_GROUP_READ_WRITE_DEPENDENCE(S) (S)->read_write_dep
23662
#define STMT_VINFO_GROUPED_ACCESS(S) ((S)->first_element != NULL && (S)->data_ref_info)
23663
#define STMT_VINFO_LOOP_PHI_EVOLUTION_PART(S) (S)->loop_phi_evolution_part
23664
+#define STMT_VINFO_MIN_NEG_DIST(S) (S)->min_neg_dist
23666
#define GROUP_FIRST_ELEMENT(S) (S)->first_element
23667
#define GROUP_NEXT_ELEMENT(S) (S)->next_element
23668
Index: gcc/ipa-split.c
23669
===================================================================
23670
--- a/src/gcc/ipa-split.c (.../tags/gcc_4_8_2_release)
23671
+++ b/src/gcc/ipa-split.c (.../branches/gcc-4_8-branch)
23672
@@ -136,7 +136,7 @@
23673
variable, check it if it is present in bitmap passed via DATA. */
23676
-test_nonssa_use (gimple stmt ATTRIBUTE_UNUSED, tree t, void *data)
23677
+test_nonssa_use (gimple, tree t, tree, void *data)
23679
t = get_base_address (t);
23681
@@ -229,7 +229,7 @@
23683
if (gimple_code (stmt) == GIMPLE_LABEL
23684
&& test_nonssa_use (stmt, gimple_label_label (stmt),
23686
+ NULL_TREE, non_ssa_vars))
23690
@@ -258,7 +258,7 @@
23691
if (virtual_operand_p (gimple_phi_result (stmt)))
23693
if (TREE_CODE (op) != SSA_NAME
23694
- && test_nonssa_use (stmt, op, non_ssa_vars))
23695
+ && test_nonssa_use (stmt, op, op, non_ssa_vars))
23699
@@ -670,7 +670,7 @@
23700
Return true when access to T prevents splitting the function. */
23703
-mark_nonssa_use (gimple stmt ATTRIBUTE_UNUSED, tree t, void *data)
23704
+mark_nonssa_use (gimple, tree t, tree, void *data)
23706
t = get_base_address (t);
23708
@@ -830,7 +830,7 @@
23709
if (TREE_CODE (op) == SSA_NAME)
23710
bitmap_set_bit (used_ssa_names, SSA_NAME_VERSION (op));
23712
- can_split &= !mark_nonssa_use (stmt, op, non_ssa_vars);
23713
+ can_split &= !mark_nonssa_use (stmt, op, op, non_ssa_vars);
23718
===================================================================
23719
--- a/src/gcc/alias.c (.../tags/gcc_4_8_2_release)
23720
+++ b/src/gcc/alias.c (.../branches/gcc-4_8-branch)
23721
@@ -2871,17 +2871,14 @@
23722
/* Wipe the reg_seen array clean. */
23723
bitmap_clear (reg_seen);
23725
- /* Mark all hard registers which may contain an address.
23726
- The stack, frame and argument pointers may contain an address.
23727
- An argument register which can hold a Pmode value may contain
23728
- an address even if it is not in BASE_REGS.
23729
+ /* Initialize the alias information for this pass. */
23730
+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
23731
+ if (static_reg_base_value[i])
23733
+ new_reg_base_value[i] = static_reg_base_value[i];
23734
+ bitmap_set_bit (reg_seen, i);
23737
- The address expression is VOIDmode for an argument and
23738
- Pmode for other registers. */
23740
- memcpy (new_reg_base_value, static_reg_base_value,
23741
- FIRST_PSEUDO_REGISTER * sizeof (rtx));
23743
/* Walk the insns adding values to the new_reg_base_value array. */
23744
for (i = 0; i < rpo_cnt; i++)
23746
Index: gcc/tree-vect-loop.c
23747
===================================================================
23748
--- a/src/gcc/tree-vect-loop.c (.../tags/gcc_4_8_2_release)
23749
+++ b/src/gcc/tree-vect-loop.c (.../branches/gcc-4_8-branch)
23750
@@ -1537,7 +1537,7 @@
23752
if (!LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo)
23753
|| LOOP_VINFO_INT_NITERS (loop_vinfo) % vectorization_factor != 0
23754
- || LOOP_PEELING_FOR_ALIGNMENT (loop_vinfo))
23755
+ || LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo))
23757
if (dump_enabled_p ())
23758
dump_printf_loc (MSG_NOTE, vect_location, "epilog loop required.");
23759
@@ -2097,6 +2097,12 @@
23760
|| (!check_reduction && flow_loop_nested_p (vect_loop, loop)));
23762
name = PHI_RESULT (phi);
23763
+ /* ??? If there are no uses of the PHI result the inner loop reduction
23764
+ won't be detected as possibly double-reduction by vectorizable_reduction
23765
+ because that tries to walk the PHI arg from the preheader edge which
23766
+ can be constant. See PR60382. */
23767
+ if (has_zero_uses (name))
23770
FOR_EACH_IMM_USE_FAST (use_p, imm_iter, name)
23772
@@ -3115,7 +3121,6 @@
23773
stmt_vec_info stmt_vinfo = vinfo_for_stmt (iv_phi);
23774
loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_vinfo);
23775
struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
23776
- tree scalar_type;
23779
edge pe = loop_preheader_edge (loop);
23780
@@ -3122,7 +3127,6 @@
23781
struct loop *iv_loop;
23782
basic_block new_bb;
23783
tree new_vec, vec_init, vec_step, t;
23787
gimple init_stmt, induction_phi, new_stmt;
23788
@@ -3130,7 +3134,6 @@
23789
tree init_expr, step_expr;
23790
int vf = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
23795
stmt_vec_info phi_info = vinfo_for_stmt (iv_phi);
23796
@@ -3159,16 +3162,14 @@
23797
latch_e = loop_latch_edge (iv_loop);
23798
loop_arg = PHI_ARG_DEF_FROM_EDGE (iv_phi, latch_e);
23800
- access_fn = analyze_scalar_evolution (iv_loop, PHI_RESULT (iv_phi));
23801
- gcc_assert (access_fn);
23802
- STRIP_NOPS (access_fn);
23803
- ok = vect_is_simple_iv_evolution (iv_loop->num, access_fn,
23804
- &init_expr, &step_expr);
23806
+ step_expr = STMT_VINFO_LOOP_PHI_EVOLUTION_PART (phi_info);
23807
+ gcc_assert (step_expr != NULL_TREE);
23809
pe = loop_preheader_edge (iv_loop);
23810
+ init_expr = PHI_ARG_DEF_FROM_EDGE (iv_phi,
23811
+ loop_preheader_edge (iv_loop));
23813
- scalar_type = TREE_TYPE (init_expr);
23814
- vectype = get_vectype_for_scalar_type (scalar_type);
23815
+ vectype = get_vectype_for_scalar_type (TREE_TYPE (init_expr));
23816
resvectype = get_vectype_for_scalar_type (TREE_TYPE (PHI_RESULT (iv_phi)));
23817
gcc_assert (vectype);
23818
nunits = TYPE_VECTOR_SUBPARTS (vectype);
23819
@@ -3177,6 +3178,16 @@
23820
gcc_assert (phi_info);
23821
gcc_assert (ncopies >= 1);
23823
+ /* Convert the step to the desired type. */
23824
+ step_expr = force_gimple_operand (fold_convert (TREE_TYPE (vectype),
23826
+ &stmts, true, NULL_TREE);
23829
+ new_bb = gsi_insert_seq_on_edge_immediate (pe, stmts);
23830
+ gcc_assert (!new_bb);
23833
/* Find the first insertion point in the BB. */
23834
si = gsi_after_labels (bb);
23836
@@ -3186,9 +3197,7 @@
23837
/* iv_loop is nested in the loop to be vectorized. init_expr had already
23838
been created during vectorization of previous stmts. We obtain it
23839
from the STMT_VINFO_VEC_STMT of the defining stmt. */
23840
- tree iv_def = PHI_ARG_DEF_FROM_EDGE (iv_phi,
23841
- loop_preheader_edge (iv_loop));
23842
- vec_init = vect_get_vec_def_for_operand (iv_def, iv_phi, NULL);
23843
+ vec_init = vect_get_vec_def_for_operand (init_expr, iv_phi, NULL);
23844
/* If the initial value is not of proper type, convert it. */
23845
if (!useless_type_conversion_p (vectype, TREE_TYPE (vec_init)))
23847
@@ -3211,8 +3220,11 @@
23849
/* iv_loop is the loop to be vectorized. Create:
23850
vec_init = [X, X+S, X+2*S, X+3*S] (S = step_expr, X = init_expr) */
23851
- new_var = vect_get_new_vect_var (scalar_type, vect_scalar_var, "var_");
23852
- new_name = force_gimple_operand (init_expr, &stmts, false, new_var);
23853
+ new_var = vect_get_new_vect_var (TREE_TYPE (vectype),
23854
+ vect_scalar_var, "var_");
23855
+ new_name = force_gimple_operand (fold_convert (TREE_TYPE (vectype),
23857
+ &stmts, false, new_var);
23860
new_bb = gsi_insert_seq_on_edge_immediate (pe, stmts);
23861
@@ -3224,9 +3236,7 @@
23862
for (i = 1; i < nunits; i++)
23864
/* Create: new_name_i = new_name + step_expr */
23865
- enum tree_code code = POINTER_TYPE_P (scalar_type)
23866
- ? POINTER_PLUS_EXPR : PLUS_EXPR;
23867
- init_stmt = gimple_build_assign_with_ops (code, new_var,
23868
+ init_stmt = gimple_build_assign_with_ops (PLUS_EXPR, new_var,
23869
new_name, step_expr);
23870
new_name = make_ssa_name (new_var, init_stmt);
23871
gimple_assign_set_lhs (init_stmt, new_name);
23872
@@ -5564,8 +5574,9 @@
23873
&& !STMT_VINFO_LIVE_P (stmt_info))
23876
- if ((TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info))
23877
- != (unsigned HOST_WIDE_INT) vectorization_factor)
23878
+ if (STMT_VINFO_VECTYPE (stmt_info)
23879
+ && (TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info))
23880
+ != (unsigned HOST_WIDE_INT) vectorization_factor)
23881
&& dump_enabled_p ())
23882
dump_printf_loc (MSG_NOTE, vect_location, "multiple-types.");
23884
Index: gcc/lra-coalesce.c
23885
===================================================================
23886
--- a/src/gcc/lra-coalesce.c (.../tags/gcc_4_8_2_release)
23887
+++ b/src/gcc/lra-coalesce.c (.../branches/gcc-4_8-branch)
23888
@@ -221,9 +221,12 @@
23890
rtx mv, set, insn, next, *sorted_moves;
23891
int i, mv_num, sregno, dregno;
23892
+ unsigned int regno;
23893
int coalesced_moves;
23894
int max_regno = max_reg_num ();
23895
bitmap_head involved_insns_bitmap;
23896
+ bitmap_head result_pseudo_vals_bitmap;
23897
+ bitmap_iterator bi;
23899
timevar_push (TV_LRA_COALESCE);
23901
@@ -318,6 +321,34 @@
23905
+ /* If we have situation after inheritance pass:
23907
+ r1 <- ... insn originally setting p1
23908
+ i1 <- r1 setting inheritance i1 from reload r1
23910
+ ... <- ... p2 ... dead p2
23916
+ And we are coalescing p1 and p2 using p1. In this case i1 and p1
23917
+ should have different values, otherwise they can get the same
23918
+ hard reg and this is wrong for insn using p2 before coalescing.
23919
+ So invalidate such inheritance pseudo values. */
23920
+ bitmap_initialize (&result_pseudo_vals_bitmap, ®_obstack);
23921
+ EXECUTE_IF_SET_IN_BITMAP (&coalesced_pseudos_bitmap, 0, regno, bi)
23922
+ bitmap_set_bit (&result_pseudo_vals_bitmap,
23923
+ lra_reg_info[first_coalesced_pseudo[regno]].val);
23924
+ EXECUTE_IF_SET_IN_BITMAP (&lra_inheritance_pseudos, 0, regno, bi)
23925
+ if (bitmap_bit_p (&result_pseudo_vals_bitmap, lra_reg_info[regno].val))
23927
+ lra_set_regno_unique_value (regno);
23928
+ if (lra_dump_file != NULL)
23929
+ fprintf (lra_dump_file,
23930
+ " Make unique value for inheritance r%d\n", regno);
23932
+ bitmap_clear (&result_pseudo_vals_bitmap);
23933
bitmap_clear (&used_pseudos_bitmap);
23934
bitmap_clear (&involved_insns_bitmap);
23935
bitmap_clear (&coalesced_pseudos_bitmap);
23936
Index: gcc/tree-vect-data-refs.c
23937
===================================================================
23938
--- a/src/gcc/tree-vect-data-refs.c (.../tags/gcc_4_8_2_release)
23939
+++ b/src/gcc/tree-vect-data-refs.c (.../branches/gcc-4_8-branch)
23940
@@ -739,6 +739,13 @@
23941
if (dump_enabled_p ())
23942
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
23943
"dependence distance negative.");
23944
+ /* Record a negative dependence distance to later limit the
23945
+ amount of stmt copying / unrolling we can perform.
23946
+ Only need to handle read-after-write dependence. */
23947
+ if (DR_IS_READ (drb)
23948
+ && (STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) == 0
23949
+ || STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) > (unsigned)dist))
23950
+ STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) = dist;
23954
Index: gcc/gimplify.c
23955
===================================================================
23956
--- a/src/gcc/gimplify.c (.../tags/gcc_4_8_2_release)
23957
+++ b/src/gcc/gimplify.c (.../branches/gcc-4_8-branch)
23958
@@ -2060,6 +2060,9 @@
23959
/* Nonlocal VLAs seen in the current function. */
23960
static struct pointer_set_t *nonlocal_vlas;
23962
+/* The VAR_DECLs created for nonlocal VLAs for debug info purposes. */
23963
+static tree nonlocal_vla_vars;
23965
/* Gimplify a VAR_DECL or PARM_DECL. Return GS_OK if we expanded a
23966
DECL_VALUE_EXPR, and it's worth re-examining things. */
23968
@@ -2106,14 +2109,13 @@
23969
ctx = ctx->outer_context;
23970
if (!ctx && !pointer_set_insert (nonlocal_vlas, decl))
23972
- tree copy = copy_node (decl), block;
23973
+ tree copy = copy_node (decl);
23975
lang_hooks.dup_lang_specific_decl (copy);
23976
SET_DECL_RTL (copy, 0);
23977
TREE_USED (copy) = 1;
23978
- block = DECL_INITIAL (current_function_decl);
23979
- DECL_CHAIN (copy) = BLOCK_VARS (block);
23980
- BLOCK_VARS (block) = copy;
23981
+ DECL_CHAIN (copy) = nonlocal_vla_vars;
23982
+ nonlocal_vla_vars = copy;
23983
SET_DECL_VALUE_EXPR (copy, unshare_expr (value_expr));
23984
DECL_HAS_VALUE_EXPR_P (copy) = 1;
23986
@@ -4369,7 +4371,7 @@
23987
unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
23988
tree index = bitsize_int (indexi);
23989
if (offset / part_widthi
23990
- <= TYPE_VECTOR_SUBPARTS (TREE_TYPE (addrtype)))
23991
+ < TYPE_VECTOR_SUBPARTS (TREE_TYPE (addrtype)))
23992
return fold_build3 (BIT_FIELD_REF, type, TREE_OPERAND (addr, 0),
23993
part_width, index);
23995
@@ -6131,7 +6133,7 @@
23996
region's REDUCTION clause. */
23999
-omp_check_private (struct gimplify_omp_ctx *ctx, tree decl)
24000
+omp_check_private (struct gimplify_omp_ctx *ctx, tree decl, bool copyprivate)
24004
@@ -6140,8 +6142,11 @@
24005
ctx = ctx->outer_context;
24007
return !(is_global_var (decl)
24008
- /* References might be private, but might be shared too. */
24009
- || lang_hooks.decls.omp_privatize_by_reference (decl));
24010
+ /* References might be private, but might be shared too,
24011
+ when checking for copyprivate, assume they might be
24012
+ private, otherwise assume they might be shared. */
24014
+ && lang_hooks.decls.omp_privatize_by_reference (decl)));
24016
n = splay_tree_lookup (ctx->variables, (splay_tree_key) decl);
24018
@@ -6267,12 +6272,36 @@
24022
+ if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_COPYPRIVATE
24024
+ && !omp_check_private (ctx, decl, true))
24027
+ if (is_global_var (decl))
24029
+ if (DECL_THREAD_LOCAL_P (decl))
24031
+ else if (DECL_HAS_VALUE_EXPR_P (decl))
24033
+ tree value = get_base_address (DECL_VALUE_EXPR (decl));
24036
+ && DECL_P (value)
24037
+ && DECL_THREAD_LOCAL_P (value))
24042
+ error_at (OMP_CLAUSE_LOCATION (c),
24043
+ "copyprivate variable %qE is not threadprivate"
24044
+ " or private in outer context", DECL_NAME (decl));
24048
omp_notice_variable (outer_ctx, decl, true);
24049
if (check_non_private
24050
&& region_type == ORT_WORKSHARE
24051
- && omp_check_private (ctx, decl))
24052
+ && omp_check_private (ctx, decl, false))
24054
error ("%s variable %qE is private in outer context",
24055
check_non_private, DECL_NAME (decl));
24056
@@ -8261,6 +8290,21 @@
24060
+ if (nonlocal_vla_vars)
24062
+ /* tree-nested.c may later on call declare_vars (..., true);
24063
+ which relies on BLOCK_VARS chain to be the tail of the
24064
+ gimple_bind_vars chain. Ensure we don't violate that
24066
+ if (gimple_bind_block (outer_bind)
24067
+ == DECL_INITIAL (current_function_decl))
24068
+ declare_vars (nonlocal_vla_vars, outer_bind, true);
24070
+ BLOCK_VARS (DECL_INITIAL (current_function_decl))
24071
+ = chainon (BLOCK_VARS (DECL_INITIAL (current_function_decl)),
24072
+ nonlocal_vla_vars);
24073
+ nonlocal_vla_vars = NULL_TREE;
24075
pointer_set_destroy (nonlocal_vlas);
24076
nonlocal_vlas = NULL;
24078
Index: gcc/tree-dfa.c
24079
===================================================================
24080
--- a/src/gcc/tree-dfa.c (.../tags/gcc_4_8_2_release)
24081
+++ b/src/gcc/tree-dfa.c (.../branches/gcc-4_8-branch)
24082
@@ -386,7 +386,6 @@
24083
double_int bit_offset = double_int_zero;
24084
HOST_WIDE_INT hbit_offset;
24085
bool seen_variable_array_ref = false;
24088
/* First get the final access size from just the outermost expression. */
24089
if (TREE_CODE (exp) == COMPONENT_REF)
24090
@@ -417,8 +416,6 @@
24091
and find the ultimate containing object. */
24094
- base_type = TREE_TYPE (exp);
24096
switch (TREE_CODE (exp))
24098
case BIT_FIELD_REF:
24099
@@ -543,7 +540,38 @@
24100
case VIEW_CONVERT_EXPR:
24103
+ case TARGET_MEM_REF:
24104
+ /* Via the variable index or index2 we can reach the
24105
+ whole object. Still hand back the decl here. */
24106
+ if (TREE_CODE (TMR_BASE (exp)) == ADDR_EXPR
24107
+ && (TMR_INDEX (exp) || TMR_INDEX2 (exp)))
24109
+ exp = TREE_OPERAND (TMR_BASE (exp), 0);
24110
+ bit_offset = double_int_zero;
24116
+ /* We need to deal with variable arrays ending structures such as
24117
+ struct { int length; int a[1]; } x; x.a[d]
24118
+ struct { struct { int a; int b; } a[1]; } x; x.a[d].a
24119
+ struct { struct { int a[1]; } a[1]; } x; x.a[0][d], x.a[d][0]
24120
+ struct { int len; union { int a[1]; struct X x; } u; } x; x.u.a[d]
24121
+ where we do not know maxsize for variable index accesses to
24122
+ the array. The simplest way to conservatively deal with this
24123
+ is to punt in the case that offset + maxsize reaches the
24124
+ base type boundary. This needs to include possible trailing
24125
+ padding that is there for alignment purposes. */
24126
+ if (seen_variable_array_ref
24128
+ && (!bit_offset.fits_shwi ()
24129
+ || !host_integerp (TYPE_SIZE (TREE_TYPE (exp)), 1)
24130
+ || (bit_offset.to_shwi () + maxsize
24131
+ == (HOST_WIDE_INT) TREE_INT_CST_LOW
24132
+ (TYPE_SIZE (TREE_TYPE (exp))))))
24135
/* Hand back the decl for MEM[&decl, off]. */
24136
if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR)
24138
@@ -565,37 +593,6 @@
24142
- case TARGET_MEM_REF:
24143
- /* Hand back the decl for MEM[&decl, off]. */
24144
- if (TREE_CODE (TMR_BASE (exp)) == ADDR_EXPR)
24146
- /* Via the variable index or index2 we can reach the
24148
- if (TMR_INDEX (exp) || TMR_INDEX2 (exp))
24150
- exp = TREE_OPERAND (TMR_BASE (exp), 0);
24151
- bit_offset = double_int_zero;
24155
- if (integer_zerop (TMR_OFFSET (exp)))
24156
- exp = TREE_OPERAND (TMR_BASE (exp), 0);
24159
- double_int off = mem_ref_offset (exp);
24160
- off = off.alshift (BITS_PER_UNIT == 8
24161
- ? 3 : exact_log2 (BITS_PER_UNIT),
24162
- HOST_BITS_PER_DOUBLE_INT);
24163
- off += bit_offset;
24164
- if (off.fits_shwi ())
24166
- bit_offset = off;
24167
- exp = TREE_OPERAND (TMR_BASE (exp), 0);
24176
@@ -602,8 +599,18 @@
24178
exp = TREE_OPERAND (exp, 0);
24181
+ /* We need to deal with variable arrays ending structures. */
24182
+ if (seen_variable_array_ref
24184
+ && (!bit_offset.fits_shwi ()
24185
+ || !host_integerp (TYPE_SIZE (TREE_TYPE (exp)), 1)
24186
+ || (bit_offset.to_shwi () + maxsize
24187
+ == (HOST_WIDE_INT)
24188
+ TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (exp))))))
24193
if (!bit_offset.fits_shwi ())
24196
@@ -615,24 +622,6 @@
24198
hbit_offset = bit_offset.to_shwi ();
24200
- /* We need to deal with variable arrays ending structures such as
24201
- struct { int length; int a[1]; } x; x.a[d]
24202
- struct { struct { int a; int b; } a[1]; } x; x.a[d].a
24203
- struct { struct { int a[1]; } a[1]; } x; x.a[0][d], x.a[d][0]
24204
- struct { int len; union { int a[1]; struct X x; } u; } x; x.u.a[d]
24205
- where we do not know maxsize for variable index accesses to
24206
- the array. The simplest way to conservatively deal with this
24207
- is to punt in the case that offset + maxsize reaches the
24208
- base type boundary. This needs to include possible trailing padding
24209
- that is there for alignment purposes. */
24211
- if (seen_variable_array_ref
24213
- && (!host_integerp (TYPE_SIZE (base_type), 1)
24214
- || (hbit_offset + maxsize
24215
- == (signed) TREE_INT_CST_LOW (TYPE_SIZE (base_type)))))
24218
/* In case of a decl or constant base object we can do better. */
24221
Index: gcc/gimple-fold.c
24222
===================================================================
24223
--- a/src/gcc/gimple-fold.c (.../tags/gcc_4_8_2_release)
24224
+++ b/src/gcc/gimple-fold.c (.../branches/gcc-4_8-branch)
24225
@@ -178,7 +178,7 @@
24226
/* Make sure we create a cgraph node for functions we'll reference.
24227
They can be non-existent if the reference comes from an entry
24228
of an external vtable for example. */
24229
- cgraph_get_create_node (base);
24230
+ cgraph_get_create_real_symbol_node (base);
24232
/* Fixup types in global initializers. */
24233
if (TREE_TYPE (TREE_TYPE (cval)) != TREE_TYPE (TREE_OPERAND (cval, 0)))
24234
@@ -866,6 +866,7 @@
24236
case BUILT_IN_STRCPY:
24237
case BUILT_IN_STRNCPY:
24238
+ case BUILT_IN_STRCAT:
24242
@@ -941,6 +942,13 @@
24246
+ case BUILT_IN_STRCAT:
24247
+ if (val[1] && is_gimple_val (val[1]) && nargs == 2)
24248
+ result = fold_builtin_strcat (loc, gimple_call_arg (stmt, 0),
24249
+ gimple_call_arg (stmt, 1),
24253
case BUILT_IN_FPUTS:
24255
result = fold_builtin_fputs (loc, gimple_call_arg (stmt, 0),
24256
Index: gcc/cfgexpand.c
24257
===================================================================
24258
--- a/src/gcc/cfgexpand.c (.../tags/gcc_4_8_2_release)
24259
+++ b/src/gcc/cfgexpand.c (.../branches/gcc-4_8-branch)
24260
@@ -331,7 +331,7 @@
24261
enter its partition number into bitmap DATA. */
24264
-visit_op (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
24265
+visit_op (gimple, tree op, tree, void *data)
24267
bitmap active = (bitmap)data;
24268
op = get_base_address (op);
24269
@@ -351,7 +351,7 @@
24270
from bitmap DATA. */
24273
-visit_conflict (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
24274
+visit_conflict (gimple, tree op, tree, void *data)
24276
bitmap active = (bitmap)data;
24277
op = get_base_address (op);
24278
@@ -385,7 +385,7 @@
24281
gimple_stmt_iterator gsi;
24282
- bool (*visit)(gimple, tree, void *);
24283
+ walk_stmt_load_store_addr_fn visit;
24285
bitmap_clear (work);
24286
FOR_EACH_EDGE (e, ei, bb->preds)
24287
@@ -4707,14 +4707,18 @@
24290
rebuild_jump_labels_chain (e->insns.r);
24291
- /* Avoid putting insns before parm_birth_insn. */
24292
+ /* Put insns after parm birth, but before
24293
+ NOTE_INSNS_FUNCTION_BEG. */
24294
if (e->src == ENTRY_BLOCK_PTR
24295
- && single_succ_p (ENTRY_BLOCK_PTR)
24296
- && parm_birth_insn)
24297
+ && single_succ_p (ENTRY_BLOCK_PTR))
24299
rtx insns = e->insns.r;
24300
e->insns.r = NULL_RTX;
24301
- emit_insn_after_noloc (insns, parm_birth_insn, e->dest);
24302
+ if (NOTE_P (parm_birth_insn)
24303
+ && NOTE_KIND (parm_birth_insn) == NOTE_INSN_FUNCTION_BEG)
24304
+ emit_insn_before_noloc (insns, parm_birth_insn, e->dest);
24306
+ emit_insn_after_noloc (insns, parm_birth_insn, e->dest);
24309
commit_one_edge_insertion (e);
24310
Index: gcc/tree-ssa-pre.c
24311
===================================================================
24312
--- a/src/gcc/tree-ssa-pre.c (.../tags/gcc_4_8_2_release)
24313
+++ b/src/gcc/tree-ssa-pre.c (.../branches/gcc-4_8-branch)
24314
@@ -3664,6 +3664,12 @@
24315
if (dump_file && dump_flags & TDF_DETAILS)
24316
fprintf (dump_file, "Starting insert iteration %d\n", num_iterations);
24317
new_stuff = insert_aux (ENTRY_BLOCK_PTR);
24319
+ /* Clear the NEW sets before the next iteration. We have already
24320
+ fully propagated its contents. */
24323
+ bitmap_set_free (NEW_SETS (bb));
24325
statistics_histogram_event (cfun, "insert iterations", num_iterations);
24327
Index: gcc/cfgcleanup.c
24328
===================================================================
24329
--- a/src/gcc/cfgcleanup.c (.../tags/gcc_4_8_2_release)
24330
+++ b/src/gcc/cfgcleanup.c (.../branches/gcc-4_8-branch)
24331
@@ -1293,7 +1293,6 @@
24333
rtx i1, i2, last1, last2, afterlast1, afterlast2;
24336
enum replace_direction dir, last_dir, afterlast_dir;
24337
bool follow_fallthru, did_fallthru;
24339
@@ -1321,8 +1320,9 @@
24340
|| (returnjump_p (i2) && !side_effects_p (PATTERN (i2))))
24343
- /* Count everything except for unconditional jump as insn. */
24344
- if (!simplejump_p (i2) && !returnjump_p (i2) && last1)
24345
+ /* Count everything except for unconditional jump as insn.
24346
+ Don't count any jumps if dir_p is NULL. */
24347
+ if (!simplejump_p (i2) && !returnjump_p (i2) && last1 && dir_p)
24349
i2 = PREV_INSN (i2);
24351
@@ -1373,8 +1373,8 @@
24352
last1 = i1, last2 = i2;
24353
afterlast_dir = last_dir;
24355
- p1 = PATTERN (i1);
24356
- if (!(GET_CODE (p1) == USE || GET_CODE (p1) == CLOBBER))
24357
+ if (GET_CODE (PATTERN (i1)) != USE
24358
+ && GET_CODE (PATTERN (i1)) != CLOBBER)
24362
@@ -1420,7 +1420,8 @@
24363
/* Like flow_find_cross_jump, except start looking for a matching sequence from
24364
the head of the two blocks. Do not include jumps at the end.
24365
If STOP_AFTER is nonzero, stop after finding that many matching
24367
+ instructions. If STOP_AFTER is zero, count all INSN_P insns, if it is
24368
+ non-zero, only count active insns. */
24371
flow_find_head_matching_sequence (basic_block bb1, basic_block bb2, rtx *f1,
24372
@@ -1492,7 +1493,10 @@
24374
beforelast1 = last1, beforelast2 = last2;
24375
last1 = i1, last2 = i2;
24378
+ || (GET_CODE (PATTERN (i1)) != USE
24379
+ && GET_CODE (PATTERN (i1)) != CLOBBER))
24383
if (i1 == BB_END (bb1) || i2 == BB_END (bb2)
24384
Index: gcc/simplify-rtx.c
24385
===================================================================
24386
--- a/src/gcc/simplify-rtx.c (.../tags/gcc_4_8_2_release)
24387
+++ b/src/gcc/simplify-rtx.c (.../branches/gcc-4_8-branch)
24388
@@ -639,11 +639,16 @@
24389
XEXP (op, 0), origmode);
24392
- /* Simplify (truncate:SI (op:DI (x:DI) (y:DI)))
24393
- to (op:SI (truncate:SI (x:DI)) (truncate:SI (x:DI))). */
24394
- if (GET_CODE (op) == PLUS
24395
- || GET_CODE (op) == MINUS
24396
- || GET_CODE (op) == MULT)
24397
+ /* If the machine can perform operations in the truncated mode, distribute
24398
+ the truncation, i.e. simplify (truncate:QI (op:SI (x:SI) (y:SI))) into
24399
+ (op:QI (truncate:QI (x:SI)) (truncate:QI (y:SI))). */
24401
+#ifdef WORD_REGISTER_OPERATIONS
24402
+ && precision >= BITS_PER_WORD
24404
+ && (GET_CODE (op) == PLUS
24405
+ || GET_CODE (op) == MINUS
24406
+ || GET_CODE (op) == MULT))
24408
rtx op0 = simplify_gen_unary (TRUNCATE, mode, XEXP (op, 0), op_mode);
24410
Index: gcc/tree-ssa-live.c
24411
===================================================================
24412
--- a/src/gcc/tree-ssa-live.c (.../tags/gcc_4_8_2_release)
24413
+++ b/src/gcc/tree-ssa-live.c (.../branches/gcc-4_8-branch)
24414
@@ -394,7 +394,8 @@
24416
/* When a global var becomes used for the first time also walk its
24417
initializer (non global ones don't have any). */
24418
- if (set_is_used (t) && is_global_var (t))
24419
+ if (set_is_used (t) && is_global_var (t)
24420
+ && DECL_CONTEXT (t) == current_function_decl)
24421
mark_all_vars_used (&DECL_INITIAL (t));
24423
/* remove_unused_scope_block_p requires information about labels
24424
Index: gcc/tree-sra.c
24425
===================================================================
24426
--- a/src/gcc/tree-sra.c (.../tags/gcc_4_8_2_release)
24427
+++ b/src/gcc/tree-sra.c (.../branches/gcc-4_8-branch)
24428
@@ -1161,8 +1161,7 @@
24429
GIMPLE_ASM operands with memory constrains which cannot be scalarized. */
24432
-asm_visit_addr (gimple stmt ATTRIBUTE_UNUSED, tree op,
24433
- void *data ATTRIBUTE_UNUSED)
24434
+asm_visit_addr (gimple, tree op, tree, void *)
24436
op = get_base_address (op);
24438
@@ -2890,6 +2889,10 @@
24443
+ && !useless_type_conversion_p (lacc->type, TREE_TYPE (drhs)))
24444
+ drhs = fold_build1_loc (loc, VIEW_CONVERT_EXPR,
24445
+ lacc->type, drhs);
24446
ds = gimple_build_debug_bind (get_access_replacement (lacc),
24447
drhs, gsi_stmt (*old_gsi));
24448
gsi_insert_after (new_gsi, ds, GSI_NEW_STMT);
24449
@@ -4868,6 +4871,14 @@
24453
+ if (!opt_for_fn (node->symbol.decl, optimize)
24454
+ || !opt_for_fn (node->symbol.decl, flag_ipa_sra))
24457
+ fprintf (dump_file, "Function not optimized.\n");
24461
if (DECL_VIRTUAL_P (current_function_decl))
24464
Index: gcc/tree-predcom.c
24465
===================================================================
24466
--- a/src/gcc/tree-predcom.c (.../tags/gcc_4_8_2_release)
24467
+++ b/src/gcc/tree-predcom.c (.../branches/gcc-4_8-branch)
24468
@@ -1323,90 +1323,43 @@
24469
gsi_insert_after (&bsi, new_stmt, GSI_NEW_STMT);
24472
-/* Returns the reference to the address of REF in the ITER-th iteration of
24473
- LOOP, or NULL if we fail to determine it (ITER may be negative). We
24474
- try to preserve the original shape of the reference (not rewrite it
24475
- as an indirect ref to the address), to make tree_could_trap_p in
24476
- prepare_initializers_chain return false more often. */
24477
+/* Returns a memory reference to DR in the ITER-th iteration of
24478
+ the loop it was analyzed in. Append init stmts to STMTS. */
24481
-ref_at_iteration (struct loop *loop, tree ref, int iter)
24483
+ref_at_iteration (data_reference_p dr, int iter, gimple_seq *stmts)
24485
- tree idx, *idx_p, type, val, op0 = NULL_TREE, ret;
24489
- if (handled_component_p (ref))
24490
+ tree off = DR_OFFSET (dr);
24491
+ tree coff = DR_INIT (dr);
24494
+ else if (TREE_CODE (DR_STEP (dr)) == INTEGER_CST)
24495
+ coff = size_binop (PLUS_EXPR, coff,
24496
+ size_binop (MULT_EXPR, DR_STEP (dr), ssize_int (iter)));
24498
+ off = size_binop (PLUS_EXPR, off,
24499
+ size_binop (MULT_EXPR, DR_STEP (dr), ssize_int (iter)));
24500
+ tree addr = fold_build_pointer_plus (DR_BASE_ADDRESS (dr), off);
24501
+ addr = force_gimple_operand_1 (addr, stmts, is_gimple_mem_ref_addr,
24503
+ tree alias_ptr = fold_convert (reference_alias_ptr_type (DR_REF (dr)), coff);
24504
+ /* While data-ref analysis punts on bit offsets it still handles
24505
+ bitfield accesses at byte boundaries. Cope with that. Note that
24506
+ we cannot simply re-apply the outer COMPONENT_REF because the
24507
+ byte-granular portion of it is already applied via DR_INIT and
24508
+ DR_OFFSET, so simply build a BIT_FIELD_REF knowing that the bits
24509
+ start at offset zero. */
24510
+ if (TREE_CODE (DR_REF (dr)) == COMPONENT_REF
24511
+ && DECL_BIT_FIELD (TREE_OPERAND (DR_REF (dr), 1)))
24513
- op0 = ref_at_iteration (loop, TREE_OPERAND (ref, 0), iter);
24515
- return NULL_TREE;
24516
+ tree field = TREE_OPERAND (DR_REF (dr), 1);
24517
+ return build3 (BIT_FIELD_REF, TREE_TYPE (DR_REF (dr)),
24518
+ build2 (MEM_REF, DECL_BIT_FIELD_TYPE (field),
24519
+ addr, alias_ptr),
24520
+ DECL_SIZE (field), bitsize_zero_node);
24522
- else if (!INDIRECT_REF_P (ref)
24523
- && TREE_CODE (ref) != MEM_REF)
24524
- return unshare_expr (ref);
24526
- if (TREE_CODE (ref) == MEM_REF)
24528
- ret = unshare_expr (ref);
24529
- idx = TREE_OPERAND (ref, 0);
24530
- idx_p = &TREE_OPERAND (ret, 0);
24532
- else if (TREE_CODE (ref) == COMPONENT_REF)
24534
- /* Check that the offset is loop invariant. */
24535
- if (TREE_OPERAND (ref, 2)
24536
- && !expr_invariant_in_loop_p (loop, TREE_OPERAND (ref, 2)))
24537
- return NULL_TREE;
24539
- return build3 (COMPONENT_REF, TREE_TYPE (ref), op0,
24540
- unshare_expr (TREE_OPERAND (ref, 1)),
24541
- unshare_expr (TREE_OPERAND (ref, 2)));
24543
- else if (TREE_CODE (ref) == ARRAY_REF)
24545
- /* Check that the lower bound and the step are loop invariant. */
24546
- if (TREE_OPERAND (ref, 2)
24547
- && !expr_invariant_in_loop_p (loop, TREE_OPERAND (ref, 2)))
24548
- return NULL_TREE;
24549
- if (TREE_OPERAND (ref, 3)
24550
- && !expr_invariant_in_loop_p (loop, TREE_OPERAND (ref, 3)))
24551
- return NULL_TREE;
24553
- ret = build4 (ARRAY_REF, TREE_TYPE (ref), op0, NULL_TREE,
24554
- unshare_expr (TREE_OPERAND (ref, 2)),
24555
- unshare_expr (TREE_OPERAND (ref, 3)));
24556
- idx = TREE_OPERAND (ref, 1);
24557
- idx_p = &TREE_OPERAND (ret, 1);
24560
- return NULL_TREE;
24562
- ok = simple_iv (loop, loop, idx, &iv, true);
24564
- return NULL_TREE;
24565
- iv.base = expand_simple_operations (iv.base);
24566
- if (integer_zerop (iv.step))
24567
- *idx_p = unshare_expr (iv.base);
24570
- type = TREE_TYPE (iv.base);
24571
- if (POINTER_TYPE_P (type))
24573
- val = fold_build2 (MULT_EXPR, sizetype, iv.step,
24574
- size_int (iter));
24575
- val = fold_build_pointer_plus (iv.base, val);
24579
- val = fold_build2 (MULT_EXPR, type, iv.step,
24580
- build_int_cst_type (type, iter));
24581
- val = fold_build2 (PLUS_EXPR, type, iv.base, val);
24583
- *idx_p = unshare_expr (val);
24587
+ return fold_build2 (MEM_REF, TREE_TYPE (DR_REF (dr)), addr, alias_ptr);
24590
/* Get the initialization expression for the INDEX-th temporary variable
24591
@@ -2068,7 +2021,11 @@
24593
stmt = find_common_use_stmt (&name1, &name2);
24597
+ /* A simple post-dominance check - make sure the combination
24598
+ is executed under the same condition as the references. */
24599
+ || (gimple_bb (stmt) != gimple_bb (r1->stmt)
24600
+ && gimple_bb (stmt) != gimple_bb (r2->stmt)))
24603
acode = gimple_assign_rhs_code (stmt);
24604
@@ -2365,14 +2322,10 @@
24605
if (chain->inits[i] != NULL_TREE)
24608
- init = ref_at_iteration (loop, DR_REF (dr), (int) i - n);
24612
+ init = ref_at_iteration (dr, (int) i - n, &stmts);
24613
if (!chain->all_always_accessed && tree_could_trap_p (init))
24616
- init = force_gimple_operand (init, &stmts, false, NULL_TREE);
24618
gsi_insert_seq_on_edge_immediate (entry, stmts);
24620
@@ -2449,6 +2402,7 @@
24623
free_data_refs (datarefs);
24624
+ free_affine_expand_cache (&name_expansions);
24628
Index: gcc/loop-iv.c
24629
===================================================================
24630
--- a/src/gcc/loop-iv.c (.../tags/gcc_4_8_2_release)
24631
+++ b/src/gcc/loop-iv.c (.../branches/gcc-4_8-branch)
24632
@@ -425,7 +425,9 @@
24633
&& !iv->first_special)
24635
rtx val = get_iv_value (iv, const0_rtx);
24636
- val = lowpart_subreg (mode, val, iv->extend_mode);
24637
+ val = lowpart_subreg (mode, val,
24638
+ iv->extend == IV_UNKNOWN_EXTEND
24639
+ ? iv->mode : iv->extend_mode);
24642
iv->extend = IV_UNKNOWN_EXTEND;
24643
@@ -465,8 +467,14 @@
24644
&& !iv->first_special)
24646
rtx val = get_iv_value (iv, const0_rtx);
24647
+ if (iv->extend_mode != iv->mode
24648
+ && iv->extend != IV_UNKNOWN_EXTEND
24649
+ && iv->extend != extend)
24650
+ val = lowpart_subreg (iv->mode, val, iv->extend_mode);
24651
val = simplify_gen_unary (iv_extend_to_rtx_code (extend), mode,
24652
- val, iv->extend_mode);
24654
+ iv->extend == extend
24655
+ ? iv->extend_mode : iv->mode);
24657
iv->extend = IV_UNKNOWN_EXTEND;
24658
iv->mode = iv->extend_mode = mode;
24659
Index: gcc/ipa-prop.c
24660
===================================================================
24661
--- a/src/gcc/ipa-prop.c (.../tags/gcc_4_8_2_release)
24662
+++ b/src/gcc/ipa-prop.c (.../branches/gcc-4_8-branch)
24663
@@ -623,16 +623,22 @@
24664
if (parm_ainfo && parm_ainfo->parm_modified)
24667
- gcc_checking_assert (gimple_vuse (stmt) != NULL_TREE);
24668
- ao_ref_init (&refd, parm_load);
24669
- /* We can cache visited statements only when parm_ainfo is available and when
24670
- we are looking at a naked load of the whole parameter. */
24671
- if (!parm_ainfo || TREE_CODE (parm_load) != PARM_DECL)
24672
- visited_stmts = NULL;
24675
+ gcc_checking_assert (gimple_vuse (stmt) != NULL_TREE);
24676
+ ao_ref_init (&refd, parm_load);
24677
+ /* We can cache visited statements only when parm_ainfo is available and
24678
+ when we are looking at a naked load of the whole parameter. */
24679
+ if (!parm_ainfo || TREE_CODE (parm_load) != PARM_DECL)
24680
+ visited_stmts = NULL;
24682
+ visited_stmts = &parm_ainfo->parm_visited_statements;
24683
+ walk_aliased_vdefs (&refd, gimple_vuse (stmt), mark_modified, &modified,
24687
- visited_stmts = &parm_ainfo->parm_visited_statements;
24688
- walk_aliased_vdefs (&refd, gimple_vuse (stmt), mark_modified, &modified,
24692
if (parm_ainfo && modified)
24693
parm_ainfo->parm_modified = true;
24695
@@ -740,7 +746,7 @@
24696
ipa_load_from_parm_agg_1 (vec<ipa_param_descriptor_t> descriptors,
24697
struct param_analysis_info *parms_ainfo, gimple stmt,
24698
tree op, int *index_p, HOST_WIDE_INT *offset_p,
24700
+ HOST_WIDE_INT *size_p, bool *by_ref_p)
24703
HOST_WIDE_INT size, max_size;
24704
@@ -758,6 +764,8 @@
24713
@@ -800,6 +808,8 @@
24722
@@ -814,7 +824,7 @@
24725
return ipa_load_from_parm_agg_1 (info->descriptors, NULL, stmt, op, index_p,
24726
- offset_p, by_ref_p);
24727
+ offset_p, NULL, by_ref_p);
24730
/* Given that an actual argument is an SSA_NAME (given in NAME) and is a result
24731
@@ -1051,7 +1061,8 @@
24733
parm = TREE_OPERAND (expr, 0);
24734
index = ipa_get_param_decl_index (info, SSA_NAME_VAR (parm));
24735
- gcc_assert (index >= 0);
24739
cond_bb = single_pred (assign_bb);
24740
cond = last_stmt (cond_bb);
24741
@@ -1462,6 +1473,9 @@
24743
struct cgraph_edge *cs;
24748
for (cs = node->callees; cs; cs = cs->next_callee)
24750
struct cgraph_node *callee = cgraph_function_or_thunk_node (cs->callee,
24751
@@ -1646,7 +1660,7 @@
24752
if (gimple_assign_single_p (def)
24753
&& ipa_load_from_parm_agg_1 (info->descriptors, parms_ainfo, def,
24754
gimple_assign_rhs1 (def), &index, &offset,
24758
struct cgraph_edge *cs = ipa_note_param_call (node, index, call);
24759
cs->indirect_info->offset = offset;
24760
@@ -1847,8 +1861,7 @@
24764
-visit_ref_for_mod_analysis (gimple stmt ATTRIBUTE_UNUSED,
24765
- tree op, void *data)
24766
+visit_ref_for_mod_analysis (gimple, tree op, tree, void *data)
24768
struct ipa_node_params *info = (struct ipa_node_params *) data;
24770
@@ -2126,7 +2139,6 @@
24771
we may create the first reference to the object in the unit. */
24772
if (!callee || callee->global.inlined_to)
24774
- struct cgraph_node *first_clone = callee;
24776
/* We are better to ensure we can refer to it.
24777
In the case of static functions we are out of luck, since we already
24778
@@ -2142,31 +2154,7 @@
24779
xstrdup (cgraph_node_name (ie->callee)), ie->callee->uid);
24783
- /* Create symbol table node. Even if inline clone exists, we can not take
24784
- it as a target of non-inlined call. */
24785
- callee = cgraph_create_node (target);
24787
- /* OK, we previously inlined the function, then removed the offline copy and
24788
- now we want it back for external call. This can happen when devirtualizing
24789
- while inlining function called once that happens after extern inlined and
24790
- virtuals are already removed. In this case introduce the external node
24791
- and make it available for call. */
24794
- first_clone->clone_of = callee;
24795
- callee->clones = first_clone;
24796
- symtab_prevail_in_asm_name_hash ((symtab_node)callee);
24797
- symtab_insert_node_to_hashtable ((symtab_node)callee);
24799
- fprintf (dump_file, "ipa-prop: Introduced new external node "
24800
- "(%s/%i) and turned into root of the clone tree.\n",
24801
- xstrdup (cgraph_node_name (callee)), callee->uid);
24803
- else if (dump_file)
24804
- fprintf (dump_file, "ipa-prop: Introduced new external node "
24806
- xstrdup (cgraph_node_name (callee)), callee->uid);
24807
+ callee = cgraph_get_create_real_symbol_node (target);
24809
ipa_check_create_node_params ();
24811
@@ -3902,7 +3890,7 @@
24812
struct ipa_agg_replacement_value *v;
24813
gimple stmt = gsi_stmt (gsi);
24815
- HOST_WIDE_INT offset;
24816
+ HOST_WIDE_INT offset, size;
24820
@@ -3929,13 +3917,15 @@
24823
if (!ipa_load_from_parm_agg_1 (descriptors, parms_ainfo, stmt,
24824
- rhs, &index, &offset, &by_ref))
24825
+ rhs, &index, &offset, &size, &by_ref))
24827
for (v = aggval; v; v = v->next)
24828
if (v->index == index
24829
&& v->offset == offset)
24831
- if (!v || v->by_ref != by_ref)
24833
+ || v->by_ref != by_ref
24834
+ || tree_low_cst (TYPE_SIZE (TREE_TYPE (v->value)), 0) != size)
24837
gcc_checking_assert (is_gimple_ip_invariant (v->value));
24838
Index: gcc/tree-ssa-dce.c
24839
===================================================================
24840
--- a/src/gcc/tree-ssa-dce.c (.../tags/gcc_4_8_2_release)
24841
+++ b/src/gcc/tree-ssa-dce.c (.../branches/gcc-4_8-branch)
24842
@@ -1307,26 +1307,19 @@
24845
/* We can mark a call to free as not necessary if the
24846
- defining statement of its argument is an allocation
24847
- function and that is not necessary itself. */
24848
- if (gimple_call_builtin_p (stmt, BUILT_IN_FREE))
24849
+ defining statement of its argument is not necessary
24850
+ (and thus is getting removed). */
24851
+ if (gimple_plf (stmt, STMT_NECESSARY)
24852
+ && gimple_call_builtin_p (stmt, BUILT_IN_FREE))
24854
tree ptr = gimple_call_arg (stmt, 0);
24857
- if (TREE_CODE (ptr) != SSA_NAME)
24859
- def_stmt = SSA_NAME_DEF_STMT (ptr);
24860
- if (!is_gimple_call (def_stmt)
24861
- || gimple_plf (def_stmt, STMT_NECESSARY))
24863
- callee2 = gimple_call_fndecl (def_stmt);
24864
- if (callee2 == NULL_TREE
24865
- || DECL_BUILT_IN_CLASS (callee2) != BUILT_IN_NORMAL
24866
- || (DECL_FUNCTION_CODE (callee2) != BUILT_IN_MALLOC
24867
- && DECL_FUNCTION_CODE (callee2) != BUILT_IN_CALLOC))
24869
- gimple_set_plf (stmt, STMT_NECESSARY, false);
24870
+ if (TREE_CODE (ptr) == SSA_NAME)
24872
+ gimple def_stmt = SSA_NAME_DEF_STMT (ptr);
24873
+ if (!gimple_nop_p (def_stmt)
24874
+ && !gimple_plf (def_stmt, STMT_NECESSARY))
24875
+ gimple_set_plf (stmt, STMT_NECESSARY, false);
24879
/* If GSI is not necessary then remove it. */
24880
Index: gcc/tree-ssa-ter.c
24881
===================================================================
24882
--- a/src/gcc/tree-ssa-ter.c (.../tags/gcc_4_8_2_release)
24883
+++ b/src/gcc/tree-ssa-ter.c (.../branches/gcc-4_8-branch)
24884
@@ -590,6 +590,30 @@
24888
+/* Helper function for find_ssaname_in_stores. Called via walk_tree to
24889
+ find a SSA_NAME DATA somewhere in *TP. */
24892
+find_ssaname (tree *tp, int *walk_subtrees, void *data)
24894
+ tree var = (tree) data;
24897
+ else if (IS_TYPE_OR_DECL_P (*tp))
24898
+ *walk_subtrees = 0;
24899
+ return NULL_TREE;
24902
+/* Helper function for find_replaceable_in_bb. Return true if SSA_NAME DATA
24903
+ is used somewhere in T, which is a store in the statement. Called via
24904
+ walk_stmt_load_store_addr_ops. */
24907
+find_ssaname_in_store (gimple, tree, tree t, void *data)
24909
+ return walk_tree (&t, find_ssaname, data, NULL) != NULL_TREE;
24912
/* This function processes basic block BB, and looks for variables which can
24913
be replaced by their expressions. Results are stored in the table TAB. */
24915
@@ -643,8 +667,7 @@
24916
/* If the stmt does a memory store and the replacement
24917
is a load aliasing it avoid creating overlapping
24918
assignments which we cannot expand correctly. */
24919
- if (gimple_vdef (stmt)
24920
- && gimple_assign_single_p (stmt))
24921
+ if (gimple_vdef (stmt))
24923
gimple def_stmt = SSA_NAME_DEF_STMT (use);
24924
while (is_gimple_assign (def_stmt)
24925
@@ -653,9 +676,29 @@
24926
= SSA_NAME_DEF_STMT (gimple_assign_rhs1 (def_stmt));
24927
if (gimple_vuse (def_stmt)
24928
&& gimple_assign_single_p (def_stmt)
24929
- && refs_may_alias_p (gimple_assign_lhs (stmt),
24930
- gimple_assign_rhs1 (def_stmt)))
24931
- same_root_var = true;
24932
+ && stmt_may_clobber_ref_p (stmt,
24933
+ gimple_assign_rhs1 (def_stmt)))
24935
+ /* For calls, it is not a problem if USE is among
24936
+ call's arguments or say OBJ_TYPE_REF argument,
24937
+ all those necessarily need to be evaluated before
24938
+ the call that may clobber the memory. But if
24939
+ LHS of the call refers to USE, expansion might
24940
+ evaluate it after the call, prevent TER in that
24942
+ For inline asm, allow TER of loads into input
24943
+ arguments, but disallow TER for USEs that occur
24944
+ somewhere in outputs. */
24945
+ if (is_gimple_call (stmt)
24946
+ || gimple_code (stmt) == GIMPLE_ASM)
24948
+ if (walk_stmt_load_store_ops (stmt, use, NULL,
24949
+ find_ssaname_in_store))
24950
+ same_root_var = true;
24953
+ same_root_var = true;
24957
/* Mark expression as replaceable unless stmt is volatile, or the
24959
===================================================================
24960
--- a/src/gcc/ira.c (.../tags/gcc_4_8_2_release)
24961
+++ b/src/gcc/ira.c (.../branches/gcc-4_8-branch)
24962
@@ -4742,6 +4742,18 @@
24963
if (need_dce && optimize)
24966
+ /* Diagnose uses of the hard frame pointer when it is used as a global
24967
+ register. Often we can get away with letting the user appropriate
24968
+ the frame pointer, but we should let them know when code generation
24969
+ makes that impossible. */
24970
+ if (global_regs[HARD_FRAME_POINTER_REGNUM] && frame_pointer_needed)
24972
+ tree decl = global_regs_decl[HARD_FRAME_POINTER_REGNUM];
24973
+ error_at (DECL_SOURCE_LOCATION (current_function_decl),
24974
+ "frame pointer required, but reserved");
24975
+ inform (DECL_SOURCE_LOCATION (decl), "for %qD", decl);
24978
timevar_pop (TV_IRA);
24982
===================================================================
24983
--- a/src/gcc/rtl.h (.../tags/gcc_4_8_2_release)
24984
+++ b/src/gcc/rtl.h (.../branches/gcc-4_8-branch)
24985
@@ -2789,6 +2789,8 @@
24986
#define fatal_insn_not_found(insn) \
24987
_fatal_insn_not_found (insn, __FILE__, __LINE__, __FUNCTION__)
24990
+extern tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
24993
#endif /* ! GCC_RTL_H */
24994
Index: gcc/tree-vect-stmts.c
24995
===================================================================
24996
--- a/src/gcc/tree-vect-stmts.c (.../tags/gcc_4_8_2_release)
24997
+++ b/src/gcc/tree-vect-stmts.c (.../branches/gcc-4_8-branch)
24998
@@ -4369,6 +4369,20 @@
25002
+ /* Invalidate assumptions made by dependence analysis when vectorization
25003
+ on the unrolled body effectively re-orders stmts. */
25005
+ && STMT_VINFO_MIN_NEG_DIST (stmt_info) != 0
25006
+ && ((unsigned)LOOP_VINFO_VECT_FACTOR (loop_vinfo)
25007
+ > STMT_VINFO_MIN_NEG_DIST (stmt_info)))
25009
+ if (dump_enabled_p ())
25010
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
25011
+ "cannot perform implicit CSE when unrolling "
25012
+ "with negative dependence distance\n");
25016
if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo)
25019
@@ -4425,6 +4439,20 @@
25020
else if (!vect_grouped_load_supported (vectype, group_size))
25024
+ /* Invalidate assumptions made by dependence analysis when vectorization
25025
+ on the unrolled body effectively re-orders stmts. */
25026
+ if (!PURE_SLP_STMT (stmt_info)
25027
+ && STMT_VINFO_MIN_NEG_DIST (stmt_info) != 0
25028
+ && ((unsigned)LOOP_VINFO_VECT_FACTOR (loop_vinfo)
25029
+ > STMT_VINFO_MIN_NEG_DIST (stmt_info)))
25031
+ if (dump_enabled_p ())
25032
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
25033
+ "cannot perform implicit CSE when performing "
25034
+ "group loads with negative dependence distance\n");
25040
@@ -6054,8 +6082,7 @@
25041
corresponding to that mode. The theory is that any use that
25042
would cause problems with this will disable vectorization anyway. */
25043
else if (!SCALAR_FLOAT_TYPE_P (scalar_type)
25044
- && !INTEGRAL_TYPE_P (scalar_type)
25045
- && !POINTER_TYPE_P (scalar_type))
25046
+ && !INTEGRAL_TYPE_P (scalar_type))
25047
scalar_type = lang_hooks.types.type_for_mode (inner_mode, 1);
25049
/* We can't build a vector type of elements with alignment bigger than
25050
Index: gcc/tree-ssa-phiprop.c
25051
===================================================================
25052
--- a/src/gcc/tree-ssa-phiprop.c (.../tags/gcc_4_8_2_release)
25053
+++ b/src/gcc/tree-ssa-phiprop.c (.../branches/gcc-4_8-branch)
25054
@@ -307,6 +307,12 @@
25058
+ /* Only replace loads in blocks that post-dominate the PHI node. That
25059
+ makes sure we don't end up speculating loads. */
25060
+ if (!dominated_by_p (CDI_POST_DOMINATORS,
25061
+ bb, gimple_bb (use_stmt)))
25064
/* Check whether this is a load of *ptr. */
25065
if (!(is_gimple_assign (use_stmt)
25066
&& TREE_CODE (gimple_assign_lhs (use_stmt)) == SSA_NAME
25067
@@ -378,6 +384,7 @@
25070
calculate_dominance_info (CDI_DOMINATORS);
25071
+ calculate_dominance_info (CDI_POST_DOMINATORS);
25074
phivn = XCNEWVEC (struct phiprop_d, n);
25075
@@ -395,6 +402,8 @@
25079
+ free_dominance_info (CDI_POST_DOMINATORS);
25084
Index: gcc/tree-object-size.c
25085
===================================================================
25086
--- a/src/gcc/tree-object-size.c (.../tags/gcc_4_8_2_release)
25087
+++ b/src/gcc/tree-object-size.c (.../branches/gcc-4_8-branch)
25089
the subobject (innermost array or field with address taken).
25090
object_sizes[2] is lower bound for number of bytes till the end of
25091
the object and object_sizes[3] lower bound for subobject. */
25092
-static unsigned HOST_WIDE_INT *object_sizes[4];
25093
+static vec<unsigned HOST_WIDE_INT> object_sizes[4];
25095
/* Bitmaps what object sizes have been computed already. */
25096
static bitmap computed[4];
25097
@@ -493,7 +493,7 @@
25099
if (TREE_CODE (ptr) == SSA_NAME
25100
&& POINTER_TYPE_P (TREE_TYPE (ptr))
25101
- && object_sizes[object_size_type] != NULL)
25102
+ && computed[object_size_type] != NULL)
25104
if (!bitmap_bit_p (computed[object_size_type], SSA_NAME_VERSION (ptr)))
25106
@@ -501,6 +501,8 @@
25107
bitmap_iterator bi;
25110
+ if (num_ssa_names > object_sizes[object_size_type].length ())
25111
+ object_sizes[object_size_type].safe_grow (num_ssa_names);
25114
fprintf (dump_file, "Computing %s %sobject size for ",
25115
@@ -1162,12 +1164,12 @@
25117
int object_size_type;
25119
- if (object_sizes[0])
25123
for (object_size_type = 0; object_size_type <= 3; object_size_type++)
25125
- object_sizes[object_size_type] = XNEWVEC (unsigned HOST_WIDE_INT, num_ssa_names);
25126
+ object_sizes[object_size_type].safe_grow (num_ssa_names);
25127
computed[object_size_type] = BITMAP_ALLOC (NULL);
25130
@@ -1184,9 +1186,8 @@
25132
for (object_size_type = 0; object_size_type <= 3; object_size_type++)
25134
- free (object_sizes[object_size_type]);
25135
+ object_sizes[object_size_type].release ();
25136
BITMAP_FREE (computed[object_size_type]);
25137
- object_sizes[object_size_type] = NULL;
25141
@@ -1202,18 +1203,11 @@
25142
gimple_stmt_iterator i;
25143
for (i = gsi_start_bb (bb); !gsi_end_p (i); gsi_next (&i))
25145
- tree callee, result;
25147
gimple call = gsi_stmt (i);
25149
- if (gimple_code (call) != GIMPLE_CALL)
25150
+ if (!gimple_call_builtin_p (call, BUILT_IN_OBJECT_SIZE))
25153
- callee = gimple_call_fndecl (call);
25155
- || DECL_BUILT_IN_CLASS (callee) != BUILT_IN_NORMAL
25156
- || DECL_FUNCTION_CODE (callee) != BUILT_IN_OBJECT_SIZE)
25159
init_object_sizes ();
25160
result = fold_call_stmt (call, false);
25162
@@ -1240,20 +1234,32 @@
25166
+ gcc_assert (TREE_CODE (result) == INTEGER_CST);
25168
if (dump_file && (dump_flags & TDF_DETAILS))
25170
fprintf (dump_file, "Simplified\n ");
25171
print_gimple_stmt (dump_file, call, 0, dump_flags);
25172
+ fprintf (dump_file, " to ");
25173
+ print_generic_expr (dump_file, result, 0);
25174
+ fprintf (dump_file, "\n");
25177
- if (!update_call_from_tree (&i, result))
25178
- gcc_unreachable ();
25179
+ tree lhs = gimple_call_lhs (call);
25183
- if (dump_file && (dump_flags & TDF_DETAILS))
25184
+ /* Propagate into all uses and fold those stmts. */
25186
+ imm_use_iterator iter;
25187
+ FOR_EACH_IMM_USE_STMT (use_stmt, iter, lhs)
25189
- fprintf (dump_file, "to\n ");
25190
- print_gimple_stmt (dump_file, gsi_stmt (i), 0, dump_flags);
25191
- fprintf (dump_file, "\n");
25192
+ use_operand_p use_p;
25193
+ FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
25194
+ SET_USE (use_p, result);
25195
+ gimple_stmt_iterator gsi = gsi_for_stmt (use_stmt);
25196
+ fold_stmt (&gsi);
25197
+ update_stmt (gsi_stmt (gsi));
25201
Index: gcc/combine.c
25202
===================================================================
25203
--- a/src/gcc/combine.c (.../tags/gcc_4_8_2_release)
25204
+++ b/src/gcc/combine.c (.../branches/gcc-4_8-branch)
25205
@@ -3884,15 +3884,19 @@
25207
PATTERN (undobuf.other_insn) = other_pat;
25209
- /* If any of the notes in OTHER_INSN were REG_UNUSED, ensure that they
25210
- are still valid. Then add any non-duplicate notes added by
25211
- recog_for_combine. */
25212
+ /* If any of the notes in OTHER_INSN were REG_DEAD or REG_UNUSED,
25213
+ ensure that they are still valid. Then add any non-duplicate
25214
+ notes added by recog_for_combine. */
25215
for (note = REG_NOTES (undobuf.other_insn); note; note = next)
25217
next = XEXP (note, 1);
25219
- if (REG_NOTE_KIND (note) == REG_UNUSED
25220
- && ! reg_set_p (XEXP (note, 0), PATTERN (undobuf.other_insn)))
25221
+ if ((REG_NOTE_KIND (note) == REG_DEAD
25222
+ && !reg_referenced_p (XEXP (note, 0),
25223
+ PATTERN (undobuf.other_insn)))
25224
+ ||(REG_NOTE_KIND (note) == REG_UNUSED
25225
+ && !reg_set_p (XEXP (note, 0),
25226
+ PATTERN (undobuf.other_insn))))
25227
remove_note (undobuf.other_insn, note);
25230
@@ -5798,8 +5802,15 @@
25234
- /* If the code changed, return a whole new comparison. */
25235
- if (new_code != code)
25236
+ /* If the code changed, return a whole new comparison.
25237
+ We also need to avoid using SUBST in cases where
25238
+ simplify_comparison has widened a comparison with a CONST_INT,
25239
+ since in that case the wider CONST_INT may fail the sanity
25240
+ checks in do_SUBST. */
25241
+ if (new_code != code
25242
+ || (CONST_INT_P (op1)
25243
+ && GET_MODE (op0) != GET_MODE (XEXP (x, 0))
25244
+ && GET_MODE (op0) != GET_MODE (XEXP (x, 1))))
25245
return gen_rtx_fmt_ee (new_code, mode, op0, op1);
25247
/* Otherwise, keep this operation, but maybe change its operands.
25248
@@ -7991,7 +8002,7 @@
25249
if (code == CALL || code == ASM_OPERANDS || code == CLOBBER)
25252
- /* We want to perform the operation is its present mode unless we know
25253
+ /* We want to perform the operation in its present mode unless we know
25254
that the operation is valid in MODE, in which case we do the operation
25256
op_mode = ((GET_MODE_CLASS (mode) == GET_MODE_CLASS (GET_MODE (x))
25257
@@ -8427,9 +8438,10 @@
25258
GET_MODE (x), GEN_INT (mask),
25260
if (temp && CONST_INT_P (temp))
25261
- SUBST (XEXP (x, 0),
25262
- force_to_mode (XEXP (x, 0), GET_MODE (x),
25263
- INTVAL (temp), next_select));
25264
+ x = simplify_gen_binary (code, GET_MODE (x),
25265
+ force_to_mode (XEXP (x, 0), GET_MODE (x),
25266
+ INTVAL (temp), next_select),
25271
@@ -8497,14 +8509,16 @@
25272
/* We have no way of knowing if the IF_THEN_ELSE can itself be
25273
written in a narrower mode. We play it safe and do not do so. */
25275
- SUBST (XEXP (x, 1),
25276
- gen_lowpart_or_truncate (GET_MODE (x),
25277
- force_to_mode (XEXP (x, 1), mode,
25278
- mask, next_select)));
25279
- SUBST (XEXP (x, 2),
25280
- gen_lowpart_or_truncate (GET_MODE (x),
25281
- force_to_mode (XEXP (x, 2), mode,
25282
- mask, next_select)));
25283
+ op0 = gen_lowpart_or_truncate (GET_MODE (x),
25284
+ force_to_mode (XEXP (x, 1), mode,
25285
+ mask, next_select));
25286
+ op1 = gen_lowpart_or_truncate (GET_MODE (x),
25287
+ force_to_mode (XEXP (x, 2), mode,
25288
+ mask, next_select));
25289
+ if (op0 != XEXP (x, 1) || op1 != XEXP (x, 2))
25290
+ x = simplify_gen_ternary (IF_THEN_ELSE, GET_MODE (x),
25291
+ GET_MODE (XEXP (x, 0)), XEXP (x, 0),
25296
Index: gcc/tree-flow.h
25297
===================================================================
25298
--- a/src/gcc/tree-flow.h (.../tags/gcc_4_8_2_release)
25299
+++ b/src/gcc/tree-flow.h (.../branches/gcc-4_8-branch)
25300
@@ -425,6 +425,7 @@
25301
basic_block, tree);
25302
void remove_edge_and_dominated_blocks (edge);
25303
bool tree_node_can_be_shared (tree);
25304
+extern unsigned int split_critical_edges (void);
25306
/* In tree-cfgcleanup.c */
25307
extern bitmap cfgcleanup_altered_bbs;
25308
Index: gcc/config.gcc
25309
===================================================================
25310
--- a/src/gcc/config.gcc (.../tags/gcc_4_8_2_release)
25311
+++ b/src/gcc/config.gcc (.../branches/gcc-4_8-branch)
25312
@@ -1761,6 +1761,14 @@
25313
tmake_file="${tmake_file} microblaze/t-microblaze-linux"
25315
microblaze*-*-rtems*)
25318
+ tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=0"
25321
+ tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=4321"
25324
tm_file="${tm_file} dbxelf.h"
25325
tm_file="${tm_file} microblaze/rtems.h rtems.h newlib-stdint.h"
25326
c_target_objs="${c_target_objs} microblaze-c.o"
25327
@@ -2963,11 +2971,18 @@
25335
- with_cpu="`echo ${target} | sed 's/-.*$//'`"
25336
+ case ${target} in
25344
+ with_cpu="`echo ${target} | sed 's/-.*$//'`"
25350
@@ -3587,7 +3602,7 @@
25352
"" | sparc | sparcv9 | sparc64 \
25354
- | v8 | supersparc | hypersparc | leon \
25355
+ | v8 | supersparc | hypersparc | leon | leon3 \
25356
| sparclite | f930 | f934 | sparclite86x \
25357
| sparclet | tsc701 \
25358
| v9 | ultrasparc | ultrasparc3 | niagara | niagara2 \
25359
@@ -3745,15 +3760,6 @@
25360
cxx_target_objs="${cxx_target_objs} sh-c.o"
25364
- if test x$with_tune = x ; then
25368
- # The SPARC port checks this value at compile-time.
25369
- target_cpu_default2="TARGET_CPU_$with_cpu"
25373
# Some standard aliases.
25375
@@ -3765,6 +3771,17 @@
25379
+ if test x$with_tune = x ; then
25380
+ case ${target} in
25390
# The SPARC port checks this value at compile-time.
25391
target_cpu_default2="TARGET_CPU_$with_cpu"
25393
Index: gcc/reginfo.c
25394
===================================================================
25395
--- a/src/gcc/reginfo.c (.../tags/gcc_4_8_2_release)
25396
+++ b/src/gcc/reginfo.c (.../branches/gcc-4_8-branch)
25398
char global_regs[FIRST_PSEUDO_REGISTER];
25400
/* Declaration for the global register. */
25401
-static tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
25402
+tree global_regs_decl[FIRST_PSEUDO_REGISTER];
25404
/* Same information as REGS_INVALIDATED_BY_CALL but in regset form to be used
25405
in dataflow more conveniently. */
25406
@@ -620,40 +620,35 @@
25407
mode = GET_MODE_WIDER_MODE (mode))
25408
if ((unsigned) hard_regno_nregs[regno][mode] == nregs
25409
&& HARD_REGNO_MODE_OK (regno, mode)
25410
- && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
25411
+ && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
25412
+ && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
25415
- if (found_mode != VOIDmode)
25416
- return found_mode;
25418
for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
25420
mode = GET_MODE_WIDER_MODE (mode))
25421
if ((unsigned) hard_regno_nregs[regno][mode] == nregs
25422
&& HARD_REGNO_MODE_OK (regno, mode)
25423
- && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
25424
+ && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
25425
+ && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
25428
- if (found_mode != VOIDmode)
25429
- return found_mode;
25431
for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT);
25433
mode = GET_MODE_WIDER_MODE (mode))
25434
if ((unsigned) hard_regno_nregs[regno][mode] == nregs
25435
&& HARD_REGNO_MODE_OK (regno, mode)
25436
- && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
25437
+ && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
25438
+ && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
25441
- if (found_mode != VOIDmode)
25442
- return found_mode;
25444
for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT);
25446
mode = GET_MODE_WIDER_MODE (mode))
25447
if ((unsigned) hard_regno_nregs[regno][mode] == nregs
25448
&& HARD_REGNO_MODE_OK (regno, mode)
25449
- && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
25450
+ && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
25451
+ && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
25454
if (found_mode != VOIDmode)
25455
Index: gcc/Makefile.in
25456
===================================================================
25457
--- a/src/gcc/Makefile.in (.../tags/gcc_4_8_2_release)
25458
+++ b/src/gcc/Makefile.in (.../branches/gcc-4_8-branch)
25459
@@ -1827,7 +1827,7 @@
25460
"$(MULTILIB_EXCLUSIONS)" \
25461
"$(MULTILIB_OSDIRNAMES)" \
25462
"$(MULTILIB_REQUIRED)" \
25463
- "$(MULTIARCH_DIRNAME)" \
25464
+ "$(if $(MULTILIB_OSDIRNAMES),,$(MULTIARCH_DIRNAME))" \
25465
"$(MULTILIB_REUSE)" \
25466
"@enable_multilib@" \
25468
@@ -2256,7 +2256,7 @@
25469
$(FUNCTION_H) $(TM_H) coretypes.h \
25470
$(TREE_PASS_H) $(BASIC_BLOCK_H) $(BITMAP_H) \
25471
$(FLAGS_H) $(HASHTAB_H) pointer-set.h \
25472
- $(GIMPLE_H) $(TREE_INLINE_H) $(GIMPLE_PRETTY_PRINT_H)
25473
+ $(GIMPLE_H) $(TREE_INLINE_H) $(GIMPLE_PRETTY_PRINT_H) $(PARAMS_H)
25474
tree-ssa.o : tree-ssa.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
25475
$(TREE_H) $(TM_P_H) $(EXPR_H) $(DIAGNOSTIC_H) \
25476
toplev.h $(FUNCTION_H) $(TM_H) coretypes.h \
25477
@@ -3037,7 +3037,7 @@
25478
$(TM_H) coretypes.h $(GIMPLE_H) \
25479
$(TREE_PASS_H) $(FLAGS_H) $(EXPR_H) $(BASIC_BLOCK_H) \
25480
$(GGC_H) $(OBSTACK_H) $(PARAMS_H) $(CPPLIB_H) $(PARAMS_H) \
25481
- $(GIMPLE_PRETTY_PRINT_H) langhooks.h
25482
+ $(GIMPLE_PRETTY_PRINT_H) langhooks.h $(OPTABS_H)
25483
tree-complex.o : tree-complex.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TREE_H) \
25484
$(TM_H) $(FLAGS_H) $(TREE_FLOW_H) $(GIMPLE_H) \
25485
tree-iterator.h $(TREE_PASS_H) tree-ssa-propagate.h
25486
@@ -3276,12 +3276,12 @@
25487
$(TM_H) $(RTL_H) $(REGS_H) insn-config.h insn-codes.h $(DF_H) \
25488
$(RECOG_H) output.h addresses.h $(REGS_H) hard-reg-set.h $(FLAGS_H) \
25489
$(FUNCTION_H) $(EXPR_H) $(BASIC_BLOCK_H) $(TM_P_H) $(EXCEPT_H) \
25490
- ira.h rtl-error.h $(LRA_INT_H)
25491
+ ira.h rtl-error.h $(LRA_INT_H) $(OPTABS_H)
25492
lra-eliminations.o : lra-eliminations.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
25493
$(TM_H) $(RTL_H) $(REGS_H) insn-config.h $(DF_H) \
25494
$(RECOG_H) output.h $(REGS_H) hard-reg-set.h $(FLAGS_H) $(FUNCTION_H) \
25495
$(EXPR_H) $(BASIC_BLOCK_H) $(TM_P_H) $(EXCEPT_H) ira.h \
25496
- rtl-error.h $(LRA_INT_H)
25497
+ rtl-error.h $(LRA_INT_H) $(OPTABS_H)
25498
lra-lives.o : lra-lives.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
25499
$(RTL_H) $(REGS_H) insn-config.h $(DF_H) \
25500
$(RECOG_H) output.h $(REGS_H) hard-reg-set.h $(FLAGS_H) $(FUNCTION_H) \
25501
Index: gcc/gimple.c
25502
===================================================================
25503
--- a/src/gcc/gimple.c (.../tags/gcc_4_8_2_release)
25504
+++ b/src/gcc/gimple.c (.../branches/gcc-4_8-branch)
25505
@@ -3841,42 +3841,46 @@
25507
/* For the statement STMT call the callbacks VISIT_LOAD, VISIT_STORE and
25508
VISIT_ADDR if non-NULL on loads, store and address-taken operands
25509
- passing the STMT, the base of the operand and DATA to it. The base
25510
- will be either a decl, an indirect reference (including TARGET_MEM_REF)
25511
- or the argument of an address expression.
25512
+ passing the STMT, the base of the operand, the operand itself containing
25513
+ the base and DATA to it. The base will be either a decl, an indirect
25514
+ reference (including TARGET_MEM_REF) or the argument of an address
25516
Returns the results of these callbacks or'ed. */
25519
walk_stmt_load_store_addr_ops (gimple stmt, void *data,
25520
- bool (*visit_load)(gimple, tree, void *),
25521
- bool (*visit_store)(gimple, tree, void *),
25522
- bool (*visit_addr)(gimple, tree, void *))
25523
+ walk_stmt_load_store_addr_fn visit_load,
25524
+ walk_stmt_load_store_addr_fn visit_store,
25525
+ walk_stmt_load_store_addr_fn visit_addr)
25529
if (gimple_assign_single_p (stmt))
25532
+ tree lhs, rhs, arg;
25535
- lhs = get_base_loadstore (gimple_assign_lhs (stmt));
25536
+ arg = gimple_assign_lhs (stmt);
25537
+ lhs = get_base_loadstore (arg);
25539
- ret |= visit_store (stmt, lhs, data);
25540
+ ret |= visit_store (stmt, lhs, arg, data);
25542
- rhs = gimple_assign_rhs1 (stmt);
25543
+ arg = gimple_assign_rhs1 (stmt);
25545
while (handled_component_p (rhs))
25546
rhs = TREE_OPERAND (rhs, 0);
25549
if (TREE_CODE (rhs) == ADDR_EXPR)
25550
- ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), data);
25551
+ ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), arg, data);
25552
else if (TREE_CODE (rhs) == TARGET_MEM_REF
25553
&& TREE_CODE (TMR_BASE (rhs)) == ADDR_EXPR)
25554
- ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (rhs), 0), data);
25555
+ ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (rhs), 0), arg,
25557
else if (TREE_CODE (rhs) == OBJ_TYPE_REF
25558
&& TREE_CODE (OBJ_TYPE_REF_OBJECT (rhs)) == ADDR_EXPR)
25559
ret |= visit_addr (stmt, TREE_OPERAND (OBJ_TYPE_REF_OBJECT (rhs),
25562
else if (TREE_CODE (rhs) == CONSTRUCTOR)
25565
@@ -3884,23 +3888,23 @@
25567
FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (rhs), ix, val)
25568
if (TREE_CODE (val) == ADDR_EXPR)
25569
- ret |= visit_addr (stmt, TREE_OPERAND (val, 0), data);
25570
+ ret |= visit_addr (stmt, TREE_OPERAND (val, 0), arg, data);
25571
else if (TREE_CODE (val) == OBJ_TYPE_REF
25572
&& TREE_CODE (OBJ_TYPE_REF_OBJECT (val)) == ADDR_EXPR)
25573
ret |= visit_addr (stmt,
25574
TREE_OPERAND (OBJ_TYPE_REF_OBJECT (val),
25578
lhs = gimple_assign_lhs (stmt);
25579
if (TREE_CODE (lhs) == TARGET_MEM_REF
25580
&& TREE_CODE (TMR_BASE (lhs)) == ADDR_EXPR)
25581
- ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (lhs), 0), data);
25582
+ ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (lhs), 0), lhs, data);
25586
rhs = get_base_loadstore (rhs);
25588
- ret |= visit_load (stmt, rhs, data);
25589
+ ret |= visit_load (stmt, rhs, arg, data);
25592
else if (visit_addr
25593
@@ -3913,7 +3917,7 @@
25594
if (op == NULL_TREE)
25596
else if (TREE_CODE (op) == ADDR_EXPR)
25597
- ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
25598
+ ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
25599
/* COND_EXPR and VCOND_EXPR rhs1 argument is a comparison
25600
tree with two operands. */
25601
else if (i == 1 && COMPARISON_CLASS_P (op))
25602
@@ -3920,10 +3924,10 @@
25604
if (TREE_CODE (TREE_OPERAND (op, 0)) == ADDR_EXPR)
25605
ret |= visit_addr (stmt, TREE_OPERAND (TREE_OPERAND (op, 0),
25608
if (TREE_CODE (TREE_OPERAND (op, 1)) == ADDR_EXPR)
25609
ret |= visit_addr (stmt, TREE_OPERAND (TREE_OPERAND (op, 1),
25615
@@ -3931,26 +3935,26 @@
25619
- tree lhs = gimple_call_lhs (stmt);
25621
+ tree arg = gimple_call_lhs (stmt);
25624
- lhs = get_base_loadstore (lhs);
25625
+ tree lhs = get_base_loadstore (arg);
25627
- ret |= visit_store (stmt, lhs, data);
25628
+ ret |= visit_store (stmt, lhs, arg, data);
25631
if (visit_load || visit_addr)
25632
for (i = 0; i < gimple_call_num_args (stmt); ++i)
25634
- tree rhs = gimple_call_arg (stmt, i);
25635
+ tree arg = gimple_call_arg (stmt, i);
25637
- && TREE_CODE (rhs) == ADDR_EXPR)
25638
- ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), data);
25639
+ && TREE_CODE (arg) == ADDR_EXPR)
25640
+ ret |= visit_addr (stmt, TREE_OPERAND (arg, 0), arg, data);
25641
else if (visit_load)
25643
- rhs = get_base_loadstore (rhs);
25644
+ tree rhs = get_base_loadstore (arg);
25646
- ret |= visit_load (stmt, rhs, data);
25647
+ ret |= visit_load (stmt, rhs, arg, data);
25651
@@ -3957,12 +3961,13 @@
25652
&& gimple_call_chain (stmt)
25653
&& TREE_CODE (gimple_call_chain (stmt)) == ADDR_EXPR)
25654
ret |= visit_addr (stmt, TREE_OPERAND (gimple_call_chain (stmt), 0),
25656
+ gimple_call_chain (stmt), data);
25658
&& gimple_call_return_slot_opt_p (stmt)
25659
&& gimple_call_lhs (stmt) != NULL_TREE
25660
&& TREE_ADDRESSABLE (TREE_TYPE (gimple_call_lhs (stmt))))
25661
- ret |= visit_addr (stmt, gimple_call_lhs (stmt), data);
25662
+ ret |= visit_addr (stmt, gimple_call_lhs (stmt),
25663
+ gimple_call_lhs (stmt), data);
25665
else if (gimple_code (stmt) == GIMPLE_ASM)
25667
@@ -3978,7 +3983,7 @@
25668
tree link = gimple_asm_output_op (stmt, i);
25669
tree op = get_base_loadstore (TREE_VALUE (link));
25670
if (op && visit_store)
25671
- ret |= visit_store (stmt, op, data);
25672
+ ret |= visit_store (stmt, op, TREE_VALUE (link), data);
25675
constraint = TREE_STRING_POINTER
25676
@@ -3987,7 +3992,7 @@
25677
parse_output_constraint (&constraint, i, 0, 0, &allows_mem,
25678
&allows_reg, &is_inout);
25679
if (op && !allows_reg && allows_mem)
25680
- ret |= visit_addr (stmt, op, data);
25681
+ ret |= visit_addr (stmt, op, TREE_VALUE (link), data);
25684
if (visit_load || visit_addr)
25685
@@ -3997,7 +4002,7 @@
25686
tree op = TREE_VALUE (link);
25688
&& TREE_CODE (op) == ADDR_EXPR)
25689
- ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
25690
+ ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
25691
else if (visit_load || visit_addr)
25693
op = get_base_loadstore (op);
25694
@@ -4004,7 +4009,7 @@
25698
- ret |= visit_load (stmt, op, data);
25699
+ ret |= visit_load (stmt, op, TREE_VALUE (link), data);
25702
constraint = TREE_STRING_POINTER
25703
@@ -4013,7 +4018,8 @@
25705
&allows_mem, &allows_reg);
25706
if (!allows_reg && allows_mem)
25707
- ret |= visit_addr (stmt, op, data);
25708
+ ret |= visit_addr (stmt, op, TREE_VALUE (link),
25713
@@ -4026,12 +4032,12 @@
25716
&& TREE_CODE (op) == ADDR_EXPR)
25717
- ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
25718
+ ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
25719
else if (visit_load)
25721
- op = get_base_loadstore (op);
25723
- ret |= visit_load (stmt, op, data);
25724
+ tree base = get_base_loadstore (op);
25726
+ ret |= visit_load (stmt, base, op, data);
25730
@@ -4042,7 +4048,7 @@
25732
tree op = PHI_ARG_DEF (stmt, i);
25733
if (TREE_CODE (op) == ADDR_EXPR)
25734
- ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
25735
+ ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
25738
else if (visit_addr
25739
@@ -4050,7 +4056,7 @@
25741
tree op = gimple_goto_dest (stmt);
25742
if (TREE_CODE (op) == ADDR_EXPR)
25743
- ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
25744
+ ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
25748
@@ -4061,8 +4067,8 @@
25751
walk_stmt_load_store_ops (gimple stmt, void *data,
25752
- bool (*visit_load)(gimple, tree, void *),
25753
- bool (*visit_store)(gimple, tree, void *))
25754
+ walk_stmt_load_store_addr_fn visit_load,
25755
+ walk_stmt_load_store_addr_fn visit_store)
25757
return walk_stmt_load_store_addr_ops (stmt, data,
25758
visit_load, visit_store, NULL);
25759
@@ -4071,8 +4077,7 @@
25760
/* Helper for gimple_ior_addresses_taken_1. */
25763
-gimple_ior_addresses_taken_1 (gimple stmt ATTRIBUTE_UNUSED,
25764
- tree addr, void *data)
25765
+gimple_ior_addresses_taken_1 (gimple, tree addr, tree, void *data)
25767
bitmap addresses_taken = (bitmap)data;
25768
addr = get_base_address (addr);
25769
Index: gcc/gimple.h
25770
===================================================================
25771
--- a/src/gcc/gimple.h (.../tags/gcc_4_8_2_release)
25772
+++ b/src/gcc/gimple.h (.../branches/gcc-4_8-branch)
25773
@@ -888,13 +888,14 @@
25774
extern alias_set_type gimple_get_alias_set (tree);
25775
extern void count_uses_and_derefs (tree, gimple, unsigned *, unsigned *,
25777
+typedef bool (*walk_stmt_load_store_addr_fn) (gimple, tree, tree, void *);
25778
extern bool walk_stmt_load_store_addr_ops (gimple, void *,
25779
- bool (*)(gimple, tree, void *),
25780
- bool (*)(gimple, tree, void *),
25781
- bool (*)(gimple, tree, void *));
25782
+ walk_stmt_load_store_addr_fn,
25783
+ walk_stmt_load_store_addr_fn,
25784
+ walk_stmt_load_store_addr_fn);
25785
extern bool walk_stmt_load_store_ops (gimple, void *,
25786
- bool (*)(gimple, tree, void *),
25787
- bool (*)(gimple, tree, void *));
25788
+ walk_stmt_load_store_addr_fn,
25789
+ walk_stmt_load_store_addr_fn);
25790
extern bool gimple_ior_addresses_taken (bitmap, gimple);
25791
extern bool gimple_call_builtin_p (gimple, enum built_in_class);
25792
extern bool gimple_call_builtin_p (gimple, enum built_in_function);
25793
Index: gcc/tree-cfg.c
25794
===================================================================
25795
--- a/src/gcc/tree-cfg.c (.../tags/gcc_4_8_2_release)
25796
+++ b/src/gcc/tree-cfg.c (.../branches/gcc-4_8-branch)
25797
@@ -104,7 +104,6 @@
25798
static void assign_discriminator (location_t, basic_block);
25799
static edge gimple_redirect_edge_and_branch (edge, basic_block);
25800
static edge gimple_try_redirect_by_replacing_jump (edge, basic_block);
25801
-static unsigned int split_critical_edges (void);
25803
/* Various helpers. */
25804
static inline bool stmt_starts_bb_p (gimple, gimple);
25805
@@ -1535,6 +1534,11 @@
25807
FOR_EACH_IMM_USE_STMT (stmt, imm_iter, name)
25809
+ /* Mark the block if we change the last stmt in it. */
25810
+ if (cfgcleanup_altered_bbs
25811
+ && stmt_ends_bb_p (stmt))
25812
+ bitmap_set_bit (cfgcleanup_altered_bbs, gimple_bb (stmt)->index);
25814
FOR_EACH_IMM_USE_ON_STMT (use, imm_iter)
25816
replace_exp (use, val);
25817
@@ -1559,11 +1563,6 @@
25818
gimple orig_stmt = stmt;
25821
- /* Mark the block if we changed the last stmt in it. */
25822
- if (cfgcleanup_altered_bbs
25823
- && stmt_ends_bb_p (stmt))
25824
- bitmap_set_bit (cfgcleanup_altered_bbs, gimple_bb (stmt)->index);
25826
/* FIXME. It shouldn't be required to keep TREE_CONSTANT
25827
on ADDR_EXPRs up-to-date on GIMPLE. Propagation will
25828
only change sth from non-invariant to invariant, and only
25829
@@ -3513,11 +3512,10 @@
25833
- /* We use regular PLUS_EXPR and MINUS_EXPR for vectors.
25834
- ??? This just makes the checker happy and may not be what is
25836
- if (TREE_CODE (lhs_type) == VECTOR_TYPE
25837
- && POINTER_TYPE_P (TREE_TYPE (lhs_type)))
25838
+ tree lhs_etype = lhs_type;
25839
+ tree rhs1_etype = rhs1_type;
25840
+ tree rhs2_etype = rhs2_type;
25841
+ if (TREE_CODE (lhs_type) == VECTOR_TYPE)
25843
if (TREE_CODE (rhs1_type) != VECTOR_TYPE
25844
|| TREE_CODE (rhs2_type) != VECTOR_TYPE)
25845
@@ -3525,22 +3523,13 @@
25846
error ("invalid non-vector operands to vector valued plus");
25849
- lhs_type = TREE_TYPE (lhs_type);
25850
- rhs1_type = TREE_TYPE (rhs1_type);
25851
- rhs2_type = TREE_TYPE (rhs2_type);
25852
- /* PLUS_EXPR is commutative, so we might end up canonicalizing
25853
- the pointer to 2nd place. */
25854
- if (POINTER_TYPE_P (rhs2_type))
25856
- tree tem = rhs1_type;
25857
- rhs1_type = rhs2_type;
25860
- goto do_pointer_plus_expr_check;
25861
+ lhs_etype = TREE_TYPE (lhs_type);
25862
+ rhs1_etype = TREE_TYPE (rhs1_type);
25863
+ rhs2_etype = TREE_TYPE (rhs2_type);
25865
- if (POINTER_TYPE_P (lhs_type)
25866
- || POINTER_TYPE_P (rhs1_type)
25867
- || POINTER_TYPE_P (rhs2_type))
25868
+ if (POINTER_TYPE_P (lhs_etype)
25869
+ || POINTER_TYPE_P (rhs1_etype)
25870
+ || POINTER_TYPE_P (rhs2_etype))
25872
error ("invalid (pointer) operands to plus/minus");
25874
@@ -3552,7 +3541,6 @@
25876
case POINTER_PLUS_EXPR:
25878
-do_pointer_plus_expr_check:
25879
if (!POINTER_TYPE_P (rhs1_type)
25880
|| !useless_type_conversion_p (lhs_type, rhs1_type)
25881
|| !ptrofftype_p (rhs2_type))
25882
@@ -7658,7 +7646,7 @@
25884
/* Split all critical edges. */
25886
-static unsigned int
25888
split_critical_edges (void)
25891
Index: gcc/passes.c
25892
===================================================================
25893
--- a/src/gcc/passes.c (.../tags/gcc_4_8_2_release)
25894
+++ b/src/gcc/passes.c (.../branches/gcc-4_8-branch)
25895
@@ -1398,6 +1398,7 @@
25896
/* After CCP we rewrite no longer addressed locals into SSA
25897
form if possible. */
25898
NEXT_PASS (pass_forwprop);
25899
+ NEXT_PASS (pass_object_sizes);
25900
/* pass_build_alias is a dummy pass that ensures that we
25901
execute TODO_rebuild_alias at this point. */
25902
NEXT_PASS (pass_build_alias);
25903
@@ -1435,7 +1436,6 @@
25904
NEXT_PASS (pass_dce);
25905
NEXT_PASS (pass_forwprop);
25906
NEXT_PASS (pass_phiopt);
25907
- NEXT_PASS (pass_object_sizes);
25908
NEXT_PASS (pass_strlen);
25909
NEXT_PASS (pass_ccp);
25910
/* After CCP we rewrite no longer addressed locals into SSA
25911
Index: gcc/tree-ssa-reassoc.c
25912
===================================================================
25913
--- a/src/gcc/tree-ssa-reassoc.c (.../tags/gcc_4_8_2_release)
25914
+++ b/src/gcc/tree-ssa-reassoc.c (.../branches/gcc-4_8-branch)
25915
@@ -1980,8 +1980,15 @@
25917
tem = fold_convert_loc (loc, optype, tem);
25918
gsi = gsi_for_stmt (stmt);
25919
- tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, true,
25921
+ /* In rare cases range->exp can be equal to lhs of stmt.
25922
+ In that case we have to insert after the stmt rather then before
25924
+ if (op == range->exp)
25925
+ tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, false,
25928
+ tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, true,
25931
/* If doing inter-bb range test optimization, update the
25932
stmts immediately. Start with changing the first range test
25933
Index: gcc/config/s390/s390.c
25934
===================================================================
25935
--- a/src/gcc/config/s390/s390.c (.../tags/gcc_4_8_2_release)
25936
+++ b/src/gcc/config/s390/s390.c (.../branches/gcc-4_8-branch)
25937
@@ -407,6 +407,65 @@
25938
bytes on a z10 (or higher) CPU. */
25939
#define PREDICT_DISTANCE (TARGET_Z10 ? 384 : 2048)
25941
+static const int s390_hotpatch_trampoline_halfwords_default = 12;
25942
+static const int s390_hotpatch_trampoline_halfwords_max = 1000000;
25943
+static int s390_hotpatch_trampoline_halfwords = -1;
25945
+/* Return the argument of the given hotpatch attribute or the default value if
25946
+ no argument is present. */
25949
+get_hotpatch_attribute (tree hotpatch_attr)
25953
+ args = TREE_VALUE (hotpatch_attr);
25956
+ TREE_INT_CST_LOW (TREE_VALUE (args)):
25957
+ s390_hotpatch_trampoline_halfwords_default;
25960
+/* Check whether the hotpatch attribute is applied to a function and, if it has
25961
+ an argument, the argument is valid. */
25964
+s390_handle_hotpatch_attribute (tree *node, tree name, tree args,
25965
+ int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
25967
+ if (TREE_CODE (*node) != FUNCTION_DECL)
25969
+ warning (OPT_Wattributes, "%qE attribute only applies to functions",
25971
+ *no_add_attrs = true;
25975
+ tree expr = TREE_VALUE (args);
25977
+ if (TREE_CODE (expr) != INTEGER_CST
25978
+ || !INTEGRAL_TYPE_P (TREE_TYPE (expr))
25979
+ || TREE_INT_CST_HIGH (expr) != 0
25980
+ || TREE_INT_CST_LOW (expr) > (unsigned int)
25981
+ s390_hotpatch_trampoline_halfwords_max)
25983
+ error ("requested %qE attribute is not a non-negative integer"
25984
+ " constant or too large (max. %d)", name,
25985
+ s390_hotpatch_trampoline_halfwords_max);
25986
+ *no_add_attrs = true;
25990
+ return NULL_TREE;
25993
+static const struct attribute_spec s390_attribute_table[] = {
25994
+ { "hotpatch", 0, 1, true, false, false, s390_handle_hotpatch_attribute, false
25996
+ /* End element. */
25997
+ { NULL, 0, 0, false, false, false, NULL, false }
26000
/* Return the alignment for LABEL. We default to the -falign-labels
26001
value except for the literal pool base label. */
26003
@@ -883,7 +942,8 @@
26005
/* For CCRAWmode put the required cc mask into the second
26007
- if (GET_MODE (XVECEXP (*op0, 0, 0)) == CCRAWmode)
26008
+ if (GET_MODE (XVECEXP (*op0, 0, 0)) == CCRAWmode
26009
+ && INTVAL (*op1) >= 0 && INTVAL (*op1) <= 3)
26010
*op1 = gen_rtx_CONST_INT (VOIDmode, 1 << (3 - INTVAL (*op1)));
26011
*op0 = XVECEXP (*op0, 0, 0);
26013
@@ -1594,6 +1654,46 @@
26015
s390_option_override (void)
26018
+ cl_deferred_option *opt;
26019
+ vec<cl_deferred_option> *v =
26020
+ (vec<cl_deferred_option> *) s390_deferred_options;
26023
+ FOR_EACH_VEC_ELT (*v, i, opt)
26025
+ switch (opt->opt_index)
26027
+ case OPT_mhotpatch:
26028
+ s390_hotpatch_trampoline_halfwords = (opt->value) ?
26029
+ s390_hotpatch_trampoline_halfwords_default : -1;
26031
+ case OPT_mhotpatch_:
26035
+ val = integral_argument (opt->arg);
26038
+ /* argument is not a plain number */
26039
+ error ("argument to %qs should be a non-negative integer",
26043
+ else if (val > s390_hotpatch_trampoline_halfwords_max)
26045
+ error ("argument to %qs is too large (max. %d)",
26046
+ "-mhotpatch=", s390_hotpatch_trampoline_halfwords_max);
26049
+ s390_hotpatch_trampoline_halfwords = val;
26053
+ gcc_unreachable ();
26057
/* Set up function hooks. */
26058
init_machine_status = s390_init_machine_status;
26060
@@ -3015,15 +3115,22 @@
26061
prefer ADDR_REGS. If 'class' is not a superset
26062
of ADDR_REGS, e.g. FP_REGS, reject this reload. */
26064
- /* A larl operand with odd addend will get fixed via secondary
26065
- reload. So don't request it to be pushed into literal
26067
+ /* Symrefs cannot be pushed into the literal pool with -fPIC
26068
+ so we *MUST NOT* return NO_REGS for these cases
26069
+ (s390_cannot_force_const_mem will return true).
26071
+ On the other hand we MUST return NO_REGS for symrefs with
26072
+ invalid addend which might have been pushed to the literal
26073
+ pool (no -fPIC). Usually we would expect them to be
26074
+ handled via secondary reload but this does not happen if
26075
+ they are used as literal pool slot replacement in reload
26076
+ inheritance (see emit_input_reload_insns). */
26077
if (TARGET_CPU_ZARCH
26078
&& GET_CODE (XEXP (op, 0)) == PLUS
26079
&& GET_CODE (XEXP (XEXP(op, 0), 0)) == SYMBOL_REF
26080
&& GET_CODE (XEXP (XEXP(op, 0), 1)) == CONST_INT)
26082
- if (reg_class_subset_p (ADDR_REGS, rclass))
26083
+ if (flag_pic && reg_class_subset_p (ADDR_REGS, rclass))
26087
@@ -5311,6 +5418,101 @@
26088
gcc_unreachable ();
26091
+/* Returns -1 if the function should not be made hotpatchable. Otherwise it
26092
+ returns a number >= 0 that is the desired size of the hotpatch trampoline
26095
+static int s390_function_num_hotpatch_trampoline_halfwords (tree decl,
26100
+ if (DECL_DECLARED_INLINE_P (decl)
26101
+ || DECL_ARTIFICIAL (decl)
26102
+ || MAIN_NAME_P (DECL_NAME (decl)))
26104
+ /* - Explicitly inlined functions cannot be hotpatched.
26105
+ - Artificial functions need not be hotpatched.
26106
+ - Making the main function hotpatchable is useless. */
26109
+ attr = lookup_attribute ("hotpatch", DECL_ATTRIBUTES (decl));
26110
+ if (attr || s390_hotpatch_trampoline_halfwords >= 0)
26112
+ if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (decl)))
26115
+ warning (OPT_Wattributes, "function %qE with the %qs attribute"
26116
+ " is not hotpatchable", DECL_NAME (decl), "always_inline");
26122
+ get_hotpatch_attribute (attr) : s390_hotpatch_trampoline_halfwords;
26129
+/* Hook to determine if one function can safely inline another. */
26132
+s390_can_inline_p (tree caller, tree callee)
26134
+ if (s390_function_num_hotpatch_trampoline_halfwords (callee, false) >= 0)
26137
+ return default_target_can_inline_p (caller, callee);
26140
+/* Write the extra assembler code needed to declare a function properly. */
26143
+s390_asm_output_function_label (FILE *asm_out_file, const char *fname,
26146
+ int hotpatch_trampoline_halfwords = -1;
26150
+ hotpatch_trampoline_halfwords =
26151
+ s390_function_num_hotpatch_trampoline_halfwords (decl, true);
26152
+ if (hotpatch_trampoline_halfwords >= 0
26153
+ && decl_function_context (decl) != NULL_TREE)
26155
+ warning_at (DECL_SOURCE_LOCATION (decl), OPT_mhotpatch,
26156
+ "hotpatching is not compatible with nested functions");
26157
+ hotpatch_trampoline_halfwords = -1;
26161
+ if (hotpatch_trampoline_halfwords > 0)
26165
+ /* Add a trampoline code area before the function label and initialize it
26166
+ with two-byte nop instructions. This area can be overwritten with code
26167
+ that jumps to a patched version of the function. */
26168
+ for (i = 0; i < hotpatch_trampoline_halfwords; i++)
26169
+ asm_fprintf (asm_out_file, "\tnopr\t%%r7\n");
26170
+ /* Note: The function label must be aligned so that (a) the bytes of the
26171
+ following nop do not cross a cacheline boundary, and (b) a jump address
26172
+ (eight bytes for 64 bit targets, 4 bytes for 32 bit targets) can be
26173
+ stored directly before the label without crossing a cacheline
26174
+ boundary. All this is necessary to make sure the trampoline code can
26175
+ be changed atomically. */
26178
+ ASM_OUTPUT_LABEL (asm_out_file, fname);
26180
+ /* Output a four-byte nop if hotpatching is enabled. This can be overwritten
26181
+ atomically with a relative backwards jump to the trampoline area. */
26182
+ if (hotpatch_trampoline_halfwords >= 0)
26183
+ asm_fprintf (asm_out_file, "\tnop\t0\n");
26186
/* Output machine-dependent UNSPECs occurring in address constant X
26187
in assembler syntax to stdio stream FILE. Returns true if the
26188
constant X could be recognized, false otherwise. */
26189
@@ -7846,6 +8048,9 @@
26191
bb = BASIC_BLOCK (bb_index);
26196
FOR_BB_INSNS (bb, insn)
26198
rtx ite, cc, pat, target;
26199
@@ -7959,7 +8164,10 @@
26203
- PATTERN (tbegin_insn) = XVECEXP (PATTERN (tbegin_insn), 0, 0);
26204
+ PATTERN (tbegin_insn) = gen_rtx_PARALLEL (VOIDmode,
26206
+ XVECEXP (PATTERN (tbegin_insn), 0, 0),
26207
+ XVECEXP (PATTERN (tbegin_insn), 0, 1)));
26208
INSN_CODE (tbegin_insn) = -1;
26209
df_insn_rescan (tbegin_insn);
26211
@@ -9568,61 +9776,47 @@
26213
s390_expand_tbegin (rtx dest, rtx tdb, rtx retry, bool clobber_fprs_p)
26215
- const int CC0 = 1 << 3;
26216
- const int CC1 = 1 << 2;
26217
- const int CC3 = 1 << 0;
26218
- rtx abort_label = gen_label_rtx ();
26219
- rtx leave_label = gen_label_rtx ();
26220
+ rtx retry_plus_two = gen_reg_rtx (SImode);
26221
rtx retry_reg = gen_reg_rtx (SImode);
26222
rtx retry_label = NULL_RTX;
26224
- rtx very_unlikely = GEN_INT (REG_BR_PROB_BASE / 100 - 1);
26226
if (retry != NULL_RTX)
26228
emit_move_insn (retry_reg, retry);
26229
+ emit_insn (gen_addsi3 (retry_plus_two, retry_reg, const2_rtx));
26230
+ emit_insn (gen_addsi3 (retry_reg, retry_reg, const1_rtx));
26231
retry_label = gen_label_rtx ();
26232
emit_label (retry_label);
26235
if (clobber_fprs_p)
26236
- emit_insn (gen_tbegin_1 (tdb,
26237
- gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK)));
26238
+ emit_insn (gen_tbegin_1 (gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK), tdb));
26240
- emit_insn (gen_tbegin_nofloat_1 (tdb,
26241
- gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK)));
26242
+ emit_insn (gen_tbegin_nofloat_1 (gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK),
26245
- jump = s390_emit_jump (abort_label,
26246
- gen_rtx_NE (VOIDmode,
26247
- gen_rtx_REG (CCRAWmode, CC_REGNUM),
26248
- gen_rtx_CONST_INT (VOIDmode, CC0)));
26250
- JUMP_LABEL (jump) = abort_label;
26251
- LABEL_NUSES (abort_label) = 1;
26252
- add_reg_note (jump, REG_BR_PROB, very_unlikely);
26254
- /* Initialize CC return value. */
26255
- emit_move_insn (dest, const0_rtx);
26257
- s390_emit_jump (leave_label, NULL_RTX);
26258
- LABEL_NUSES (leave_label) = 1;
26261
- /* Abort handler code. */
26263
- emit_label (abort_label);
26264
+ emit_move_insn (dest, gen_rtx_UNSPEC (SImode,
26265
+ gen_rtvec (1, gen_rtx_REG (CCRAWmode,
26267
+ UNSPEC_CC_TO_INT));
26268
if (retry != NULL_RTX)
26270
+ const int CC0 = 1 << 3;
26271
+ const int CC1 = 1 << 2;
26272
+ const int CC3 = 1 << 0;
26274
rtx count = gen_reg_rtx (SImode);
26275
+ rtx leave_label = gen_label_rtx ();
26277
+ /* Exit for success and permanent failures. */
26278
jump = s390_emit_jump (leave_label,
26279
gen_rtx_EQ (VOIDmode,
26280
gen_rtx_REG (CCRAWmode, CC_REGNUM),
26281
- gen_rtx_CONST_INT (VOIDmode, CC1 | CC3)));
26282
- LABEL_NUSES (leave_label) = 2;
26283
- add_reg_note (jump, REG_BR_PROB, very_unlikely);
26284
+ gen_rtx_CONST_INT (VOIDmode, CC0 | CC1 | CC3)));
26285
+ LABEL_NUSES (leave_label) = 1;
26287
/* CC2 - transient failure. Perform retry with ppa. */
26288
- emit_move_insn (count, retry);
26289
+ emit_move_insn (count, retry_plus_two);
26290
emit_insn (gen_subsi3 (count, count, retry_reg));
26291
emit_insn (gen_tx_assist (count));
26292
jump = emit_jump_insn (gen_doloop_si64 (retry_label,
26293
@@ -9630,13 +9824,8 @@
26295
JUMP_LABEL (jump) = retry_label;
26296
LABEL_NUSES (retry_label) = 1;
26297
+ emit_label (leave_label);
26300
- emit_move_insn (dest, gen_rtx_UNSPEC (SImode,
26301
- gen_rtvec (1, gen_rtx_REG (CCRAWmode,
26303
- UNSPEC_CC_TO_INT));
26304
- emit_label (leave_label);
26308
@@ -9674,6 +9863,9 @@
26309
s390_init_builtins (void)
26311
tree ftype, uint64_type;
26312
+ tree returns_twice_attr = tree_cons (get_identifier ("returns_twice"),
26314
+ tree noreturn_attr = tree_cons (get_identifier ("noreturn"), NULL, NULL);
26316
/* void foo (void) */
26317
ftype = build_function_type_list (void_type_node, NULL_TREE);
26318
@@ -9684,7 +9876,7 @@
26319
ftype = build_function_type_list (void_type_node, integer_type_node,
26321
add_builtin_function ("__builtin_tabort", ftype,
26322
- S390_BUILTIN_TABORT, BUILT_IN_MD, NULL, NULL_TREE);
26323
+ S390_BUILTIN_TABORT, BUILT_IN_MD, NULL, noreturn_attr);
26324
add_builtin_function ("__builtin_tx_assist", ftype,
26325
S390_BUILTIN_TX_ASSIST, BUILT_IN_MD, NULL, NULL_TREE);
26327
@@ -9691,10 +9883,10 @@
26328
/* int foo (void *) */
26329
ftype = build_function_type_list (integer_type_node, ptr_type_node, NULL_TREE);
26330
add_builtin_function ("__builtin_tbegin", ftype, S390_BUILTIN_TBEGIN,
26331
- BUILT_IN_MD, NULL, NULL_TREE);
26332
+ BUILT_IN_MD, NULL, returns_twice_attr);
26333
add_builtin_function ("__builtin_tbegin_nofloat", ftype,
26334
S390_BUILTIN_TBEGIN_NOFLOAT,
26335
- BUILT_IN_MD, NULL, NULL_TREE);
26336
+ BUILT_IN_MD, NULL, returns_twice_attr);
26338
/* int foo (void *, int) */
26339
ftype = build_function_type_list (integer_type_node, ptr_type_node,
26340
@@ -9702,11 +9894,11 @@
26341
add_builtin_function ("__builtin_tbegin_retry", ftype,
26342
S390_BUILTIN_TBEGIN_RETRY,
26344
- NULL, NULL_TREE);
26345
+ NULL, returns_twice_attr);
26346
add_builtin_function ("__builtin_tbegin_retry_nofloat", ftype,
26347
S390_BUILTIN_TBEGIN_RETRY_NOFLOAT,
26349
- NULL, NULL_TREE);
26350
+ NULL, returns_twice_attr);
26352
/* int foo (void) */
26353
ftype = build_function_type_list (integer_type_node, NULL_TREE);
26354
@@ -11622,6 +11814,12 @@
26355
#undef TARGET_CANONICALIZE_COMPARISON
26356
#define TARGET_CANONICALIZE_COMPARISON s390_canonicalize_comparison
26358
+#undef TARGET_ATTRIBUTE_TABLE
26359
+#define TARGET_ATTRIBUTE_TABLE s390_attribute_table
26361
+#undef TARGET_CAN_INLINE_P
26362
+#define TARGET_CAN_INLINE_P s390_can_inline_p
26364
struct gcc_target targetm = TARGET_INITIALIZER;
26366
#include "gt-s390.h"
26367
Index: gcc/config/s390/s390.h
26368
===================================================================
26369
--- a/src/gcc/config/s390/s390.h (.../tags/gcc_4_8_2_release)
26370
+++ b/src/gcc/config/s390/s390.h (.../branches/gcc-4_8-branch)
26371
@@ -217,7 +217,7 @@
26372
#define STACK_BOUNDARY 64
26374
/* Allocation boundary (in *bits*) for the code of a function. */
26375
-#define FUNCTION_BOUNDARY 32
26376
+#define FUNCTION_BOUNDARY 64
26378
/* There is no point aligning anything to a rounder boundary than this. */
26379
#define BIGGEST_ALIGNMENT 64
26380
@@ -878,6 +878,9 @@
26381
fputc ('\n', (FILE)); \
26384
+#undef ASM_OUTPUT_FUNCTION_LABEL
26385
+#define ASM_OUTPUT_FUNCTION_LABEL(FILE, NAME, DECL) \
26386
+ s390_asm_output_function_label (FILE, NAME, DECL)
26388
/* Miscellaneous parameters. */
26390
Index: gcc/config/s390/s390.md
26391
===================================================================
26392
--- a/src/gcc/config/s390/s390.md (.../tags/gcc_4_8_2_release)
26393
+++ b/src/gcc/config/s390/s390.md (.../branches/gcc-4_8-branch)
26394
@@ -147,6 +147,7 @@
26396
; Transactional Execution support
26398
+ UNSPECV_TBEGIN_TDB
26402
@@ -9896,9 +9897,10 @@
26404
(define_insn "tbegin_1"
26405
[(set (reg:CCRAW CC_REGNUM)
26406
- (unspec_volatile:CCRAW [(match_operand:BLK 0 "memory_operand" "=Q")
26407
- (match_operand 1 "const_int_operand" " D")]
26408
+ (unspec_volatile:CCRAW [(match_operand 0 "const_int_operand" "D")]
26410
+ (set (match_operand:BLK 1 "memory_operand" "=Q")
26411
+ (unspec_volatile:BLK [(match_dup 0)] UNSPECV_TBEGIN_TDB))
26412
(clobber (reg:DF 16))
26413
(clobber (reg:DF 17))
26414
(clobber (reg:DF 18))
26415
@@ -9917,18 +9919,19 @@
26416
(clobber (reg:DF 31))]
26417
; CONST_OK_FOR_CONSTRAINT_P does not work with D constraint since D is
26418
; not supposed to be used for immediates (see genpreds.c).
26419
- "TARGET_HTM && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 0xffff"
26421
+ "TARGET_HTM && INTVAL (operands[0]) >= 0 && INTVAL (operands[0]) <= 0xffff"
26423
[(set_attr "op_type" "SIL")])
26425
; Same as above but without the FPR clobbers
26426
(define_insn "tbegin_nofloat_1"
26427
[(set (reg:CCRAW CC_REGNUM)
26428
- (unspec_volatile:CCRAW [(match_operand:BLK 0 "memory_operand" "=Q")
26429
- (match_operand 1 "const_int_operand" " D")]
26430
- UNSPECV_TBEGIN))]
26431
- "TARGET_HTM && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 0xffff"
26433
+ (unspec_volatile:CCRAW [(match_operand 0 "const_int_operand" "D")]
26435
+ (set (match_operand:BLK 1 "memory_operand" "=Q")
26436
+ (unspec_volatile:BLK [(match_dup 0)] UNSPECV_TBEGIN_TDB))]
26437
+ "TARGET_HTM && INTVAL (operands[0]) >= 0 && INTVAL (operands[0]) <= 0xffff"
26439
[(set_attr "op_type" "SIL")])
26442
@@ -10012,15 +10015,12 @@
26443
; Transaction perform processor assist
26445
(define_expand "tx_assist"
26446
- [(set (match_dup 1) (const_int 0))
26447
- (unspec_volatile [(match_operand:SI 0 "register_operand" "")
26449
+ [(unspec_volatile [(match_operand:SI 0 "register_operand" "")
26450
+ (reg:SI GPR0_REGNUM)
26455
- operands[1] = gen_reg_rtx (SImode);
26459
(define_insn "*ppa"
26460
[(unspec_volatile [(match_operand:SI 0 "register_operand" "d")
26461
@@ -10028,5 +10028,5 @@
26462
(match_operand 2 "const_int_operand" "I")]
26464
"TARGET_HTM && INTVAL (operands[2]) < 16"
26467
[(set_attr "op_type" "RRF")])
26468
Index: gcc/config/s390/s390.opt
26469
===================================================================
26470
--- a/src/gcc/config/s390/s390.opt (.../tags/gcc_4_8_2_release)
26471
+++ b/src/gcc/config/s390/s390.opt (.../branches/gcc-4_8-branch)
26473
Target Report RejectNegative Negative(msoft-float) InverseMask(SOFT_FLOAT, HARD_FLOAT)
26474
Enable hardware floating point
26477
+Target Report Var(s390_deferred_options) Defer
26478
+Prepend the function label with 12 two-byte Nop instructions, and add a four byte Nop instruction after the label for hotpatching.
26481
+Target RejectNegative Report Joined Var(s390_deferred_options) Defer
26482
+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.
26485
Target Report RejectNegative Negative(mlong-double-64) Mask(LONG_DOUBLE_128)
26486
Use 128-bit long double
26487
Index: gcc/config/s390/htmxlintrin.h
26488
===================================================================
26489
--- a/src/gcc/config/s390/htmxlintrin.h (.../tags/gcc_4_8_2_release)
26490
+++ b/src/gcc/config/s390/htmxlintrin.h (.../branches/gcc-4_8-branch)
26491
@@ -33,13 +33,20 @@
26492
the IBM XL compiler. For documentation please see the "z/OS XL
26493
C/C++ Programming Guide" publically available on the web. */
26495
-extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
26496
+/* FIXME: __TM_simple_begin and __TM_begin should be marked
26497
+ __always_inline__ as well but this currently produces an error
26498
+ since the tbegin builtins are "returns_twice" and setjmp_call_p
26499
+ (calls.c) therefore identifies the functions as calling setjmp.
26500
+ The tree inliner currently refuses to inline functions calling
26504
__TM_simple_begin ()
26506
return __builtin_tbegin_nofloat (0);
26509
-extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
26511
__TM_begin (void* const tdb)
26513
return __builtin_tbegin_nofloat (tdb);
26518
- if (tdb->format == 0)
26519
+ if (tdb->format != 1)
26521
return tdb->nesting_depth;
26525
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
26527
- if (tdb->format == 0)
26528
+ if (tdb->format != 1)
26531
return !!(tdb->abort_code >= _HTM_FIRST_USER_ABORT_CODE);
26532
@@ -101,7 +108,7 @@
26534
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
26536
- if (tdb->format == 0)
26537
+ if (tdb->format != 1)
26540
if (tdb->abort_code >= _HTM_FIRST_USER_ABORT_CODE)
26541
@@ -117,7 +124,7 @@
26543
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
26545
- return (tdb->format == 0
26546
+ return (tdb->format == 1
26547
&& (tdb->abort_code == 4 /* unfiltered program interruption */
26548
|| tdb->abort_code == 11 /* restricted instruction */));
26550
@@ -127,7 +134,7 @@
26552
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
26554
- return (tdb->format == 0
26555
+ return (tdb->format == 1
26556
&& (tdb->abort_code == 7 /* fetch overflow */
26557
|| tdb->abort_code == 8 /* store overflow */));
26559
@@ -137,7 +144,7 @@
26561
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
26563
- return tdb->format == 0 && tdb->abort_code == 13; /* depth exceeded */
26564
+ return tdb->format == 1 && tdb->abort_code == 13; /* depth exceeded */
26567
extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
26568
@@ -145,7 +152,7 @@
26570
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
26572
- return (tdb->format == 0
26573
+ return (tdb->format == 1
26574
&& (tdb->abort_code == 9 /* fetch conflict */
26575
|| tdb->abort_code == 10 /* store conflict */));
26577
Index: gcc/config/s390/s390-protos.h
26578
===================================================================
26579
--- a/src/gcc/config/s390/s390-protos.h (.../tags/gcc_4_8_2_release)
26580
+++ b/src/gcc/config/s390/s390-protos.h (.../branches/gcc-4_8-branch)
26581
@@ -110,5 +110,6 @@
26582
extern int s390_branch_condition_mask (rtx);
26583
extern int s390_compare_and_branch_condition_mask (rtx);
26584
extern bool s390_extzv_shift_ok (int, int, unsigned HOST_WIDE_INT);
26585
+extern void s390_asm_output_function_label (FILE *, const char *, tree);
26587
#endif /* RTX_CODE */
26588
Index: gcc/config/sparc/t-rtems
26589
===================================================================
26590
--- a/src/gcc/config/sparc/t-rtems (.../tags/gcc_4_8_2_release)
26591
+++ b/src/gcc/config/sparc/t-rtems (.../branches/gcc-4_8-branch)
26593
# <http://www.gnu.org/licenses/>.
26596
-MULTILIB_OPTIONS = msoft-float mcpu=v8
26597
-MULTILIB_DIRNAMES = soft v8
26598
+MULTILIB_OPTIONS = msoft-float mcpu=v8/mcpu=leon3
26599
+MULTILIB_DIRNAMES = soft v8 leon3
26600
MULTILIB_MATCHES = msoft-float=mno-fpu
26601
Index: gcc/config/sparc/sparc.md
26602
===================================================================
26603
--- a/src/gcc/config/sparc/sparc.md (.../tags/gcc_4_8_2_release)
26604
+++ b/src/gcc/config/sparc/sparc.md (.../branches/gcc-4_8-branch)
26605
@@ -206,7 +206,7 @@
26606
;; 'f' for all DF/TFmode values, including those that are specific to the v8.
26608
;; Attribute for cpu type.
26609
-;; These must match the values for enum processor_type in sparc.h.
26610
+;; These must match the values of the enum processor_type in sparc-opts.h.
26614
@@ -214,6 +214,7 @@
26622
@@ -5548,7 +5549,7 @@
26623
[(set (match_operand:DF 0 "register_operand" "=e")
26624
(mult:DF (float_extend:DF (match_operand:SF 1 "register_operand" "f"))
26625
(float_extend:DF (match_operand:SF 2 "register_operand" "f"))))]
26626
- "(TARGET_V8 || TARGET_V9) && TARGET_FPU"
26627
+ "(TARGET_V8 || TARGET_V9) && TARGET_FPU && !sparc_fix_ut699"
26628
"fsmuld\t%1, %2, %0"
26629
[(set_attr "type" "fpmul")
26630
(set_attr "fptype" "double")])
26631
@@ -5577,20 +5578,37 @@
26632
"fdivq\t%1, %2, %0"
26633
[(set_attr "type" "fpdivd")])
26635
-(define_insn "divdf3"
26636
+(define_expand "divdf3"
26637
[(set (match_operand:DF 0 "register_operand" "=e")
26638
(div:DF (match_operand:DF 1 "register_operand" "e")
26639
(match_operand:DF 2 "register_operand" "e")))]
26643
+(define_insn "*divdf3_nofix"
26644
+ [(set (match_operand:DF 0 "register_operand" "=e")
26645
+ (div:DF (match_operand:DF 1 "register_operand" "e")
26646
+ (match_operand:DF 2 "register_operand" "e")))]
26647
+ "TARGET_FPU && !sparc_fix_ut699"
26648
"fdivd\t%1, %2, %0"
26649
[(set_attr "type" "fpdivd")
26650
(set_attr "fptype" "double")])
26652
+(define_insn "*divdf3_fix"
26653
+ [(set (match_operand:DF 0 "register_operand" "=e")
26654
+ (div:DF (match_operand:DF 1 "register_operand" "e")
26655
+ (match_operand:DF 2 "register_operand" "e")))]
26656
+ "TARGET_FPU && sparc_fix_ut699"
26657
+ "fdivd\t%1, %2, %0\n\tstd\t%0, [%%sp-8]"
26658
+ [(set_attr "type" "fpdivd")
26659
+ (set_attr "fptype" "double")
26660
+ (set_attr "length" "2")])
26662
(define_insn "divsf3"
26663
[(set (match_operand:SF 0 "register_operand" "=f")
26664
(div:SF (match_operand:SF 1 "register_operand" "f")
26665
(match_operand:SF 2 "register_operand" "f")))]
26667
+ "TARGET_FPU && !sparc_fix_ut699"
26668
"fdivs\t%1, %2, %0"
26669
[(set_attr "type" "fpdivs")])
26671
@@ -5791,18 +5809,33 @@
26673
[(set_attr "type" "fpsqrtd")])
26675
-(define_insn "sqrtdf2"
26676
+(define_expand "sqrtdf2"
26677
[(set (match_operand:DF 0 "register_operand" "=e")
26678
(sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
26682
+(define_insn "*sqrtdf2_nofix"
26683
+ [(set (match_operand:DF 0 "register_operand" "=e")
26684
+ (sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
26685
+ "TARGET_FPU && !sparc_fix_ut699"
26687
[(set_attr "type" "fpsqrtd")
26688
(set_attr "fptype" "double")])
26690
+(define_insn "*sqrtdf2_fix"
26691
+ [(set (match_operand:DF 0 "register_operand" "=e")
26692
+ (sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
26693
+ "TARGET_FPU && sparc_fix_ut699"
26694
+ "fsqrtd\t%1, %0\n\tstd\t%0, [%%sp-8]"
26695
+ [(set_attr "type" "fpsqrtd")
26696
+ (set_attr "fptype" "double")
26697
+ (set_attr "length" "2")])
26699
(define_insn "sqrtsf2"
26700
[(set (match_operand:SF 0 "register_operand" "=f")
26701
(sqrt:SF (match_operand:SF 1 "register_operand" "f")))]
26703
+ "TARGET_FPU && !sparc_fix_ut699"
26705
[(set_attr "type" "fpsqrts")])
26707
Index: gcc/config/sparc/t-sparc
26708
===================================================================
26709
--- a/src/gcc/config/sparc/t-sparc (.../tags/gcc_4_8_2_release)
26710
+++ b/src/gcc/config/sparc/t-sparc (.../branches/gcc-4_8-branch)
26712
insn-codes.h conditions.h output.h $(INSN_ATTR_H) $(FLAGS_H) \
26713
$(FUNCTION_H) $(EXCEPT_H) $(EXPR_H) $(OPTABS_H) $(RECOG_H) \
26714
$(DIAGNOSTIC_CORE_H) $(GGC_H) $(TM_P_H) debug.h $(TARGET_H) \
26715
- $(TARGET_DEF_H) $(COMMON_TARGET_H) $(GIMPLE_H) \
26716
+ $(TARGET_DEF_H) $(COMMON_TARGET_H) $(GIMPLE_H) $(TREE_PASS_H) \
26717
langhooks.h reload.h $(PARAMS_H) $(DF_H) $(OPTS_H) \
26720
Index: gcc/config/sparc/sparc.opt
26721
===================================================================
26722
--- a/src/gcc/config/sparc/sparc.opt (.../tags/gcc_4_8_2_release)
26723
+++ b/src/gcc/config/sparc/sparc.opt (.../branches/gcc-4_8-branch)
26724
@@ -146,6 +146,9 @@
26725
Enum(sparc_processor_type) String(leon) Value(PROCESSOR_LEON)
26728
+Enum(sparc_processor_type) String(leon3) Value(PROCESSOR_LEON3)
26731
Enum(sparc_processor_type) String(sparclite) Value(PROCESSOR_SPARCLITE)
26734
@@ -201,9 +204,19 @@
26735
Enable workaround for single erratum of AT697F processor
26736
(corresponding to erratum #13 of AT697E processor)
26739
+Target Report RejectNegative Var(sparc_fix_ut699)
26740
+Enable workarounds for the errata of the UT699 processor
26742
Mask(LONG_DOUBLE_128)
26743
;; Use 128-bit long double
26746
+;; Generate code for LEON
26749
+;; Generate code for LEON3
26752
;; Generate code for SPARClite
26754
Index: gcc/config/sparc/sync.md
26755
===================================================================
26756
--- a/src/gcc/config/sparc/sync.md (.../tags/gcc_4_8_2_release)
26757
+++ b/src/gcc/config/sparc/sync.md (.../branches/gcc-4_8-branch)
26758
@@ -161,7 +161,8 @@
26759
(match_operand:SI 5 "const_int_operand" "") ;; is_weak
26760
(match_operand:SI 6 "const_int_operand" "") ;; mod_s
26761
(match_operand:SI 7 "const_int_operand" "")] ;; mod_f
26762
- "TARGET_V9 && (<MODE>mode != DImode || TARGET_ARCH64 || TARGET_V8PLUS)"
26763
+ "(TARGET_V9 || TARGET_LEON3)
26764
+ && (<MODE>mode != DImode || TARGET_ARCH64 || TARGET_V8PLUS)"
26766
sparc_expand_compare_and_swap (operands);
26768
@@ -176,7 +177,7 @@
26769
[(match_operand:I48MODE 2 "register_operand" "")
26770
(match_operand:I48MODE 3 "register_operand" "")]
26773
+ "TARGET_V9 || TARGET_LEON3"
26776
(define_insn "*atomic_compare_and_swap<mode>_1"
26777
@@ -187,7 +188,7 @@
26778
[(match_operand:I48MODE 2 "register_operand" "r")
26779
(match_operand:I48MODE 3 "register_operand" "0")]
26781
- "TARGET_V9 && (<MODE>mode == SImode || TARGET_ARCH64)"
26782
+ "(TARGET_V9 || TARGET_LEON3) && (<MODE>mode != DImode || TARGET_ARCH64)"
26783
"cas<modesuffix>\t%1, %2, %0"
26784
[(set_attr "type" "multi")])
26786
@@ -220,7 +221,7 @@
26787
(match_operand:SI 1 "memory_operand" "")
26788
(match_operand:SI 2 "register_operand" "")
26789
(match_operand:SI 3 "const_int_operand" "")]
26790
- "TARGET_V8 || TARGET_V9"
26791
+ "(TARGET_V8 || TARGET_V9) && !sparc_fix_ut699"
26793
enum memmodel model = (enum memmodel) INTVAL (operands[3]);
26795
@@ -236,7 +237,7 @@
26798
(match_operand:SI 2 "register_operand" "0"))]
26799
- "TARGET_V8 || TARGET_V9"
26800
+ "(TARGET_V8 || TARGET_V9) && !sparc_fix_ut699"
26802
[(set_attr "type" "multi")])
26804
@@ -244,7 +245,7 @@
26805
[(match_operand:QI 0 "register_operand" "")
26806
(match_operand:QI 1 "memory_operand" "")
26807
(match_operand:SI 2 "const_int_operand" "")]
26809
+ "!sparc_fix_ut699"
26811
enum memmodel model = (enum memmodel) INTVAL (operands[2]);
26813
@@ -268,6 +269,6 @@
26814
(unspec_volatile:QI [(match_operand:QI 1 "memory_operand" "+m")]
26816
(set (match_dup 1) (const_int -1))]
26818
+ "!sparc_fix_ut699"
26820
[(set_attr "type" "multi")])
26821
Index: gcc/config/sparc/sparc-opts.h
26822
===================================================================
26823
--- a/src/gcc/config/sparc/sparc-opts.h (.../tags/gcc_4_8_2_release)
26824
+++ b/src/gcc/config/sparc/sparc-opts.h (.../branches/gcc-4_8-branch)
26826
PROCESSOR_SUPERSPARC,
26827
PROCESSOR_HYPERSPARC,
26830
PROCESSOR_SPARCLITE,
26833
Index: gcc/config/sparc/sparc.c
26834
===================================================================
26835
--- a/src/gcc/config/sparc/sparc.c (.../tags/gcc_4_8_2_release)
26836
+++ b/src/gcc/config/sparc/sparc.c (.../branches/gcc-4_8-branch)
26838
#include "params.h"
26841
+#include "tree-pass.h"
26843
/* Processor costs */
26845
@@ -226,6 +227,30 @@
26849
+struct processor_costs leon3_costs = {
26850
+ COSTS_N_INSNS (1), /* int load */
26851
+ COSTS_N_INSNS (1), /* int signed load */
26852
+ COSTS_N_INSNS (1), /* int zeroed load */
26853
+ COSTS_N_INSNS (1), /* float load */
26854
+ COSTS_N_INSNS (1), /* fmov, fneg, fabs */
26855
+ COSTS_N_INSNS (1), /* fadd, fsub */
26856
+ COSTS_N_INSNS (1), /* fcmp */
26857
+ COSTS_N_INSNS (1), /* fmov, fmovr */
26858
+ COSTS_N_INSNS (1), /* fmul */
26859
+ COSTS_N_INSNS (14), /* fdivs */
26860
+ COSTS_N_INSNS (15), /* fdivd */
26861
+ COSTS_N_INSNS (22), /* fsqrts */
26862
+ COSTS_N_INSNS (23), /* fsqrtd */
26863
+ COSTS_N_INSNS (5), /* imul */
26864
+ COSTS_N_INSNS (5), /* imulX */
26865
+ 0, /* imul bit factor */
26866
+ COSTS_N_INSNS (35), /* idiv */
26867
+ COSTS_N_INSNS (35), /* idivX */
26868
+ COSTS_N_INSNS (1), /* movcc/movr */
26869
+ 0, /* shift penalty */
26873
struct processor_costs sparclet_costs = {
26874
COSTS_N_INSNS (3), /* int load */
26875
COSTS_N_INSNS (3), /* int signed load */
26876
@@ -538,7 +563,6 @@
26877
HOST_WIDE_INT, tree);
26878
static bool sparc_can_output_mi_thunk (const_tree, HOST_WIDE_INT,
26879
HOST_WIDE_INT, const_tree);
26880
-static void sparc_reorg (void);
26881
static struct machine_function * sparc_init_machine_status (void);
26882
static bool sparc_cannot_force_const_mem (enum machine_mode, rtx);
26883
static rtx sparc_tls_get_addr (void);
26884
@@ -680,9 +704,6 @@
26885
#undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
26886
#define TARGET_ASM_CAN_OUTPUT_MI_THUNK sparc_can_output_mi_thunk
26888
-#undef TARGET_MACHINE_DEPENDENT_REORG
26889
-#define TARGET_MACHINE_DEPENDENT_REORG sparc_reorg
26891
#undef TARGET_RTX_COSTS
26892
#define TARGET_RTX_COSTS sparc_rtx_costs
26893
#undef TARGET_ADDRESS_COST
26894
@@ -804,6 +825,206 @@
26896
struct gcc_target targetm = TARGET_INITIALIZER;
26898
+/* Return the memory reference contained in X if any, zero otherwise. */
26903
+ if (GET_CODE (x) == SIGN_EXTEND || GET_CODE (x) == ZERO_EXTEND)
26912
+/* We use a machine specific pass to enable workarounds for errata.
26913
+ We need to have the (essentially) final form of the insn stream in order
26914
+ to properly detect the various hazards. Therefore, this machine specific
26915
+ pass runs as late as possible. The pass is inserted in the pass pipeline
26916
+ at the end of sparc_option_override. */
26919
+sparc_gate_work_around_errata (void)
26921
+ /* The only errata we handle are those of the AT697F and UT699. */
26922
+ return sparc_fix_at697f != 0 || sparc_fix_ut699 != 0;
26925
+static unsigned int
26926
+sparc_do_work_around_errata (void)
26930
+ /* Force all instructions to be split into their final form. */
26931
+ split_all_insns_noflow ();
26933
+ /* Now look for specific patterns in the insn stream. */
26934
+ for (insn = get_insns (); insn; insn = next)
26936
+ bool insert_nop = false;
26939
+ /* Look into the instruction in a delay slot. */
26940
+ if (NONJUMP_INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE)
26941
+ insn = XVECEXP (PATTERN (insn), 0, 1);
26943
+ /* Look for a single-word load into an odd-numbered FP register. */
26944
+ if (sparc_fix_at697f
26945
+ && NONJUMP_INSN_P (insn)
26946
+ && (set = single_set (insn)) != NULL_RTX
26947
+ && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
26948
+ && MEM_P (SET_SRC (set))
26949
+ && REG_P (SET_DEST (set))
26950
+ && REGNO (SET_DEST (set)) > 31
26951
+ && REGNO (SET_DEST (set)) % 2 != 0)
26953
+ /* The wrong dependency is on the enclosing double register. */
26954
+ unsigned int x = REGNO (SET_DEST (set)) - 1;
26955
+ unsigned int src1, src2, dest;
26958
+ /* If the insn has a delay slot, then it cannot be problematic. */
26959
+ next = next_active_insn (insn);
26962
+ if (NONJUMP_INSN_P (next) && GET_CODE (PATTERN (next)) == SEQUENCE)
26965
+ extract_insn (next);
26966
+ code = INSN_CODE (next);
26970
+ case CODE_FOR_adddf3:
26971
+ case CODE_FOR_subdf3:
26972
+ case CODE_FOR_muldf3:
26973
+ case CODE_FOR_divdf3:
26974
+ dest = REGNO (recog_data.operand[0]);
26975
+ src1 = REGNO (recog_data.operand[1]);
26976
+ src2 = REGNO (recog_data.operand[2]);
26977
+ if (src1 != src2)
26980
+ ld [address], %fx+1
26981
+ FPOPd %f{x,y}, %f{y,x}, %f{x,y} */
26982
+ if ((src1 == x || src2 == x)
26983
+ && (dest == src1 || dest == src2))
26984
+ insert_nop = true;
26989
+ ld [address], %fx+1
26990
+ FPOPd %fx, %fx, %fx */
26993
+ && (code == CODE_FOR_adddf3 || code == CODE_FOR_muldf3))
26994
+ insert_nop = true;
26998
+ case CODE_FOR_sqrtdf2:
26999
+ dest = REGNO (recog_data.operand[0]);
27000
+ src1 = REGNO (recog_data.operand[1]);
27002
+ ld [address], %fx+1
27003
+ fsqrtd %fx, %fx */
27004
+ if (src1 == x && dest == src1)
27005
+ insert_nop = true;
27013
+ /* Look for a single-word load into an integer register. */
27014
+ else if (sparc_fix_ut699
27015
+ && NONJUMP_INSN_P (insn)
27016
+ && (set = single_set (insn)) != NULL_RTX
27017
+ && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) <= 4
27018
+ && mem_ref (SET_SRC (set)) != NULL_RTX
27019
+ && REG_P (SET_DEST (set))
27020
+ && REGNO (SET_DEST (set)) < 32)
27022
+ /* There is no problem if the second memory access has a data
27023
+ dependency on the first single-cycle load. */
27024
+ rtx x = SET_DEST (set);
27026
+ /* If the insn has a delay slot, then it cannot be problematic. */
27027
+ next = next_active_insn (insn);
27030
+ if (NONJUMP_INSN_P (next) && GET_CODE (PATTERN (next)) == SEQUENCE)
27033
+ /* Look for a second memory access to/from an integer register. */
27034
+ if ((set = single_set (next)) != NULL_RTX)
27036
+ rtx src = SET_SRC (set);
27037
+ rtx dest = SET_DEST (set);
27040
+ /* LDD is affected. */
27041
+ if ((mem = mem_ref (src)) != NULL_RTX
27043
+ && REGNO (dest) < 32
27044
+ && !reg_mentioned_p (x, XEXP (mem, 0)))
27045
+ insert_nop = true;
27047
+ /* STD is *not* affected. */
27048
+ else if ((mem = mem_ref (dest)) != NULL_RTX
27049
+ && GET_MODE_SIZE (GET_MODE (mem)) <= 4
27050
+ && (src == const0_rtx
27052
+ && REGNO (src) < 32
27053
+ && REGNO (src) != REGNO (x)))
27054
+ && !reg_mentioned_p (x, XEXP (mem, 0)))
27055
+ insert_nop = true;
27060
+ next = NEXT_INSN (insn);
27063
+ emit_insn_before (gen_nop (), next);
27069
+struct rtl_opt_pass pass_work_around_errata =
27073
+ "errata", /* name */
27074
+ OPTGROUP_NONE, /* optinfo_flags */
27075
+ sparc_gate_work_around_errata, /* gate */
27076
+ sparc_do_work_around_errata, /* execute */
27079
+ 0, /* static_pass_number */
27080
+ TV_MACH_DEP, /* tv_id */
27081
+ 0, /* properties_required */
27082
+ 0, /* properties_provided */
27083
+ 0, /* properties_destroyed */
27084
+ 0, /* todo_flags_start */
27085
+ TODO_verify_rtl_sharing, /* todo_flags_finish */
27089
+struct register_pass_info insert_pass_work_around_errata =
27091
+ &pass_work_around_errata.pass, /* pass */
27092
+ "dbr", /* reference_pass_name */
27093
+ 1, /* ref_pass_instance_number */
27094
+ PASS_POS_INSERT_AFTER /* po_op */
27097
+/* Helpers for TARGET_DEBUG_OPTIONS. */
27099
dump_target_flag_bits (const int flags)
27101
@@ -888,6 +1109,7 @@
27102
{ TARGET_CPU_supersparc, PROCESSOR_SUPERSPARC },
27103
{ TARGET_CPU_hypersparc, PROCESSOR_HYPERSPARC },
27104
{ TARGET_CPU_leon, PROCESSOR_LEON },
27105
+ { TARGET_CPU_leon3, PROCESSOR_LEON3 },
27106
{ TARGET_CPU_sparclite, PROCESSOR_F930 },
27107
{ TARGET_CPU_sparclite86x, PROCESSOR_SPARCLITE86X },
27108
{ TARGET_CPU_sparclet, PROCESSOR_TSC701 },
27109
@@ -902,7 +1124,7 @@
27111
const struct cpu_default *def;
27112
/* Table of values for -m{cpu,tune}=. This must match the order of
27113
- the PROCESSOR_* enumeration. */
27114
+ the enum processor_type in sparc-opts.h. */
27115
static struct cpu_table {
27116
const char *const name;
27118
@@ -914,8 +1136,8 @@
27119
/* TI TMS390Z55 supersparc */
27120
{ "supersparc", MASK_ISA, MASK_V8 },
27121
{ "hypersparc", MASK_ISA, MASK_V8|MASK_FPU },
27123
- { "leon", MASK_ISA, MASK_V8|MASK_FPU },
27124
+ { "leon", MASK_ISA, MASK_V8|MASK_LEON|MASK_FPU },
27125
+ { "leon3", MASK_ISA, MASK_V8|MASK_LEON3|MASK_FPU },
27126
{ "sparclite", MASK_ISA, MASK_SPARCLITE },
27127
/* The Fujitsu MB86930 is the original sparclite chip, with no FPU. */
27128
{ "f930", MASK_ISA|MASK_FPU, MASK_SPARCLITE },
27129
@@ -1075,6 +1297,9 @@
27130
#ifndef HAVE_AS_SPARC4
27133
+#ifndef HAVE_AS_LEON
27134
+ & ~(MASK_LEON | MASK_LEON3)
27138
/* If -mfpu or -mno-fpu was explicitly used, don't override with
27139
@@ -1164,6 +1389,9 @@
27140
case PROCESSOR_LEON:
27141
sparc_costs = &leon_costs;
27143
+ case PROCESSOR_LEON3:
27144
+ sparc_costs = &leon3_costs;
27146
case PROCESSOR_SPARCLET:
27147
case PROCESSOR_TSC701:
27148
sparc_costs = &sparclet_costs;
27149
@@ -1200,6 +1428,10 @@
27150
/* Choose the most relaxed model for the processor. */
27151
else if (TARGET_V9)
27152
sparc_memory_model = SMM_RMO;
27153
+ else if (TARGET_LEON3)
27154
+ sparc_memory_model = SMM_TSO;
27155
+ else if (TARGET_LEON)
27156
+ sparc_memory_model = SMM_SC;
27157
else if (TARGET_V8)
27158
sparc_memory_model = SMM_PSO;
27160
@@ -1241,6 +1473,13 @@
27161
pessimizes for double floating-point registers. */
27162
if (!global_options_set.x_flag_ira_share_save_slots)
27163
flag_ira_share_save_slots = 0;
27165
+ /* We register a machine specific pass to work around errata, if any.
27166
+ The pass mut be scheduled as late as possible so that we have the
27167
+ (essentially) final form of the insn stream to work on.
27168
+ Registering the pass must be done at start up. It's convenient to
27170
+ register_pass (&insert_pass_work_around_errata);
27173
/* Miscellaneous utilities. */
27174
@@ -10355,7 +10594,8 @@
27175
tmp = e0.add_with_sign (tmp, false, &add1_ovf);
27176
if (tmp.is_negative ())
27177
tmp = tmp.neg_with_overflow (&neg2_ovf);
27180
+ neg2_ovf = false;
27181
result = result.add_with_sign (tmp, false, &add2_ovf);
27182
overflow |= neg1_ovf | neg2_ovf | add1_ovf | add2_ovf;
27184
@@ -10897,107 +11137,6 @@
27185
return (vcall_offset >= -32768 || ! fixed_regs[5]);
27188
-/* We use the machine specific reorg pass to enable workarounds for errata. */
27191
-sparc_reorg (void)
27195
- /* The only erratum we handle for now is that of the AT697F processor. */
27196
- if (!sparc_fix_at697f)
27199
- /* We need to have the (essentially) final form of the insn stream in order
27200
- to properly detect the various hazards. Run delay slot scheduling. */
27201
- if (optimize > 0 && flag_delayed_branch)
27203
- cleanup_barriers ();
27204
- dbr_schedule (get_insns ());
27207
- /* Now look for specific patterns in the insn stream. */
27208
- for (insn = get_insns (); insn; insn = next)
27210
- bool insert_nop = false;
27213
- /* Look for a single-word load into an odd-numbered FP register. */
27214
- if (NONJUMP_INSN_P (insn)
27215
- && (set = single_set (insn)) != NULL_RTX
27216
- && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
27217
- && MEM_P (SET_SRC (set))
27218
- && REG_P (SET_DEST (set))
27219
- && REGNO (SET_DEST (set)) > 31
27220
- && REGNO (SET_DEST (set)) % 2 != 0)
27222
- /* The wrong dependency is on the enclosing double register. */
27223
- unsigned int x = REGNO (SET_DEST (set)) - 1;
27224
- unsigned int src1, src2, dest;
27227
- /* If the insn has a delay slot, then it cannot be problematic. */
27228
- next = next_active_insn (insn);
27229
- if (NONJUMP_INSN_P (next) && GET_CODE (PATTERN (next)) == SEQUENCE)
27233
- extract_insn (next);
27234
- code = INSN_CODE (next);
27239
- case CODE_FOR_adddf3:
27240
- case CODE_FOR_subdf3:
27241
- case CODE_FOR_muldf3:
27242
- case CODE_FOR_divdf3:
27243
- dest = REGNO (recog_data.operand[0]);
27244
- src1 = REGNO (recog_data.operand[1]);
27245
- src2 = REGNO (recog_data.operand[2]);
27246
- if (src1 != src2)
27249
- ld [address], %fx+1
27250
- FPOPd %f{x,y}, %f{y,x}, %f{x,y} */
27251
- if ((src1 == x || src2 == x)
27252
- && (dest == src1 || dest == src2))
27253
- insert_nop = true;
27258
- ld [address], %fx+1
27259
- FPOPd %fx, %fx, %fx */
27262
- && (code == CODE_FOR_adddf3 || code == CODE_FOR_muldf3))
27263
- insert_nop = true;
27267
- case CODE_FOR_sqrtdf2:
27268
- dest = REGNO (recog_data.operand[0]);
27269
- src1 = REGNO (recog_data.operand[1]);
27271
- ld [address], %fx+1
27272
- fsqrtd %fx, %fx */
27273
- if (src1 == x && dest == src1)
27274
- insert_nop = true;
27282
- next = NEXT_INSN (insn);
27285
- emit_insn_after (gen_nop (), insn);
27289
/* How to allocate a 'struct machine_function'. */
27291
static struct machine_function *
27292
Index: gcc/config/sparc/leon.md
27293
===================================================================
27294
--- a/src/gcc/config/sparc/leon.md (.../tags/gcc_4_8_2_release)
27295
+++ b/src/gcc/config/sparc/leon.md (.../branches/gcc-4_8-branch)
27296
@@ -17,40 +17,48 @@
27297
;; along with GCC; see the file COPYING3. If not see
27298
;; <http://www.gnu.org/licenses/>.
27300
+;; Leon is a single-issue processor.
27302
(define_automaton "leon")
27304
-(define_cpu_unit "leon_memory, leon_fpalu" "leon")
27305
-(define_cpu_unit "leon_fpmds" "leon")
27306
-(define_cpu_unit "write_buf" "leon")
27307
+(define_cpu_unit "leon_memory" "leon")
27309
(define_insn_reservation "leon_load" 1
27310
- (and (eq_attr "cpu" "leon")
27311
- (eq_attr "type" "load,sload,fpload"))
27312
+ (and (eq_attr "cpu" "leon") (eq_attr "type" "load,sload"))
27315
-(define_insn_reservation "leon_store" 1
27316
- (and (eq_attr "cpu" "leon")
27317
- (eq_attr "type" "store,fpstore"))
27318
- "leon_memory+write_buf")
27320
-(define_insn_reservation "leon_fp_alu" 1
27321
- (and (eq_attr "cpu" "leon")
27322
- (eq_attr "type" "fp,fpmove"))
27323
- "leon_fpalu, nothing")
27324
+;; Use a double reservation to work around the load pipeline hazard on UT699.
27325
+(define_insn_reservation "leon3_load" 1
27326
+ (and (eq_attr "cpu" "leon3") (eq_attr "type" "load,sload"))
27329
-(define_insn_reservation "leon_fp_mult" 1
27330
- (and (eq_attr "cpu" "leon")
27331
- (eq_attr "type" "fpmul"))
27332
- "leon_fpmds, nothing")
27333
+(define_insn_reservation "leon_store" 2
27334
+ (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "store"))
27337
-(define_insn_reservation "leon_fp_div" 16
27338
- (and (eq_attr "cpu" "leon")
27339
- (eq_attr "type" "fpdivs,fpdivd"))
27340
- "leon_fpmds, nothing*15")
27341
+;; This describes Gaisler Research's FPU
27343
-(define_insn_reservation "leon_fp_sqrt" 23
27344
- (and (eq_attr "cpu" "leon")
27345
- (eq_attr "type" "fpsqrts,fpsqrtd"))
27346
- "leon_fpmds, nothing*21")
27347
+(define_automaton "grfpu")
27349
+(define_cpu_unit "grfpu_alu" "grfpu")
27350
+(define_cpu_unit "grfpu_ds" "grfpu")
27352
+(define_insn_reservation "leon_fp_alu" 4
27353
+ (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fp,fpcmp,fpmul"))
27354
+ "grfpu_alu, nothing*3")
27356
+(define_insn_reservation "leon_fp_divs" 16
27357
+ (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpdivs"))
27358
+ "grfpu_ds*14, nothing*2")
27360
+(define_insn_reservation "leon_fp_divd" 17
27361
+ (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpdivd"))
27362
+ "grfpu_ds*15, nothing*2")
27364
+(define_insn_reservation "leon_fp_sqrts" 24
27365
+ (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpsqrts"))
27366
+ "grfpu_ds*22, nothing*2")
27368
+(define_insn_reservation "leon_fp_sqrtd" 25
27369
+ (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpsqrtd"))
27370
+ "grfpu_ds*23, nothing*2")
27371
Index: gcc/config/sparc/sparc.h
27372
===================================================================
27373
--- a/src/gcc/config/sparc/sparc.h (.../tags/gcc_4_8_2_release)
27374
+++ b/src/gcc/config/sparc/sparc.h (.../branches/gcc-4_8-branch)
27375
@@ -136,21 +136,22 @@
27376
#define TARGET_CPU_supersparc 2
27377
#define TARGET_CPU_hypersparc 3
27378
#define TARGET_CPU_leon 4
27379
-#define TARGET_CPU_sparclite 5
27380
-#define TARGET_CPU_f930 5 /* alias */
27381
-#define TARGET_CPU_f934 5 /* alias */
27382
-#define TARGET_CPU_sparclite86x 6
27383
-#define TARGET_CPU_sparclet 7
27384
-#define TARGET_CPU_tsc701 7 /* alias */
27385
-#define TARGET_CPU_v9 8 /* generic v9 implementation */
27386
-#define TARGET_CPU_sparcv9 8 /* alias */
27387
-#define TARGET_CPU_sparc64 8 /* alias */
27388
-#define TARGET_CPU_ultrasparc 9
27389
-#define TARGET_CPU_ultrasparc3 10
27390
-#define TARGET_CPU_niagara 11
27391
-#define TARGET_CPU_niagara2 12
27392
-#define TARGET_CPU_niagara3 13
27393
-#define TARGET_CPU_niagara4 14
27394
+#define TARGET_CPU_leon3 5
27395
+#define TARGET_CPU_sparclite 6
27396
+#define TARGET_CPU_f930 6 /* alias */
27397
+#define TARGET_CPU_f934 6 /* alias */
27398
+#define TARGET_CPU_sparclite86x 7
27399
+#define TARGET_CPU_sparclet 8
27400
+#define TARGET_CPU_tsc701 8 /* alias */
27401
+#define TARGET_CPU_v9 9 /* generic v9 implementation */
27402
+#define TARGET_CPU_sparcv9 9 /* alias */
27403
+#define TARGET_CPU_sparc64 9 /* alias */
27404
+#define TARGET_CPU_ultrasparc 10
27405
+#define TARGET_CPU_ultrasparc3 11
27406
+#define TARGET_CPU_niagara 12
27407
+#define TARGET_CPU_niagara2 13
27408
+#define TARGET_CPU_niagara3 14
27409
+#define TARGET_CPU_niagara4 15
27411
#if TARGET_CPU_DEFAULT == TARGET_CPU_v9 \
27412
|| TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc \
27413
@@ -232,9 +233,10 @@
27414
#define ASM_CPU32_DEFAULT_SPEC ""
27417
-#if TARGET_CPU_DEFAULT == TARGET_CPU_leon
27418
+#if TARGET_CPU_DEFAULT == TARGET_CPU_leon \
27419
+ || TARGET_CPU_DEFAULT == TARGET_CPU_leon3
27420
#define CPP_CPU32_DEFAULT_SPEC "-D__leon__ -D__sparc_v8__"
27421
-#define ASM_CPU32_DEFAULT_SPEC ""
27422
+#define ASM_CPU32_DEFAULT_SPEC AS_LEON_FLAG
27426
@@ -282,6 +284,7 @@
27427
%{mcpu=supersparc:-D__supersparc__ -D__sparc_v8__} \
27428
%{mcpu=hypersparc:-D__hypersparc__ -D__sparc_v8__} \
27429
%{mcpu=leon:-D__leon__ -D__sparc_v8__} \
27430
+%{mcpu=leon3:-D__leon__ -D__sparc_v8__} \
27431
%{mcpu=v9:-D__sparc_v9__} \
27432
%{mcpu=ultrasparc:-D__sparc_v9__} \
27433
%{mcpu=ultrasparc3:-D__sparc_v9__} \
27434
@@ -329,7 +332,8 @@
27436
%{mcpu=supersparc:-Av8} \
27437
%{mcpu=hypersparc:-Av8} \
27438
-%{mcpu=leon:-Av8} \
27439
+%{mcpu=leon:" AS_LEON_FLAG "} \
27440
+%{mcpu=leon3:" AS_LEON_FLAG "} \
27441
%{mv8plus:-Av8plus} \
27443
%{mcpu=ultrasparc:%{!mv8plus:-Av9a}} \
27444
@@ -1754,6 +1758,12 @@
27445
#define AS_NIAGARA4_FLAG "-Av9" AS_NIAGARA3_FLAG
27448
+#ifdef HAVE_AS_LEON
27449
+#define AS_LEON_FLAG "-Aleon"
27451
+#define AS_LEON_FLAG "-Av8"
27454
/* We use gcc _mcount for profiling. */
27455
#define NO_PROFILE_COUNTERS 0
27457
Index: gcc/config/i386/i386.h
27458
===================================================================
27459
--- a/src/gcc/config/i386/i386.h (.../tags/gcc_4_8_2_release)
27460
+++ b/src/gcc/config/i386/i386.h (.../branches/gcc-4_8-branch)
27461
@@ -197,10 +197,10 @@
27463
/* Macros used in the machine description to test the flags. */
27465
-/* configure can arrange to make this 2, to force a 486. */
27466
+/* configure can arrange to change it. */
27468
#ifndef TARGET_CPU_DEFAULT
27469
-#define TARGET_CPU_DEFAULT TARGET_CPU_DEFAULT_generic
27470
+#define TARGET_CPU_DEFAULT PROCESSOR_GENERIC32
27473
#ifndef TARGET_FPMATH_DEFAULT
27474
@@ -591,43 +591,6 @@
27475
/* Target Pragmas. */
27476
#define REGISTER_TARGET_PRAGMAS() ix86_register_pragmas ()
27478
-enum target_cpu_default
27480
- TARGET_CPU_DEFAULT_generic = 0,
27482
- TARGET_CPU_DEFAULT_i386,
27483
- TARGET_CPU_DEFAULT_i486,
27484
- TARGET_CPU_DEFAULT_pentium,
27485
- TARGET_CPU_DEFAULT_pentium_mmx,
27486
- TARGET_CPU_DEFAULT_pentiumpro,
27487
- TARGET_CPU_DEFAULT_pentium2,
27488
- TARGET_CPU_DEFAULT_pentium3,
27489
- TARGET_CPU_DEFAULT_pentium4,
27490
- TARGET_CPU_DEFAULT_pentium_m,
27491
- TARGET_CPU_DEFAULT_prescott,
27492
- TARGET_CPU_DEFAULT_nocona,
27493
- TARGET_CPU_DEFAULT_core2,
27494
- TARGET_CPU_DEFAULT_corei7,
27495
- TARGET_CPU_DEFAULT_haswell,
27496
- TARGET_CPU_DEFAULT_atom,
27498
- TARGET_CPU_DEFAULT_geode,
27499
- TARGET_CPU_DEFAULT_k6,
27500
- TARGET_CPU_DEFAULT_k6_2,
27501
- TARGET_CPU_DEFAULT_k6_3,
27502
- TARGET_CPU_DEFAULT_athlon,
27503
- TARGET_CPU_DEFAULT_athlon_sse,
27504
- TARGET_CPU_DEFAULT_k8,
27505
- TARGET_CPU_DEFAULT_amdfam10,
27506
- TARGET_CPU_DEFAULT_bdver1,
27507
- TARGET_CPU_DEFAULT_bdver2,
27508
- TARGET_CPU_DEFAULT_bdver3,
27509
- TARGET_CPU_DEFAULT_btver1,
27510
- TARGET_CPU_DEFAULT_btver2,
27512
- TARGET_CPU_DEFAULT_max
27516
#define CC1_SPEC "%(cc1_cpu) "
27518
@@ -2089,25 +2052,27 @@
27519
with x86-64 medium memory model */
27520
#define DEFAULT_LARGE_SECTION_THRESHOLD 65536
27522
-/* Which processor to tune code generation for. */
27523
+/* Which processor to tune code generation for. These must be in sync
27524
+ with processor_target_table in i386.c. */
27526
enum processor_type
27528
- PROCESSOR_I386 = 0, /* 80386 */
27529
+ PROCESSOR_GENERIC32 = 0,
27530
+ PROCESSOR_GENERIC64,
27531
+ PROCESSOR_I386, /* 80386 */
27532
PROCESSOR_I486, /* 80486DX, 80486SX, 80486DX[24] */
27534
PROCESSOR_PENTIUMPRO,
27537
- PROCESSOR_ATHLON,
27538
PROCESSOR_PENTIUM4,
27544
- PROCESSOR_GENERIC32,
27545
- PROCESSOR_GENERIC64,
27549
+ PROCESSOR_ATHLON,
27551
PROCESSOR_AMDFAM10,
27554
@@ -2114,7 +2079,6 @@
27562
Index: gcc/config/i386/i386.md
27563
===================================================================
27564
--- a/src/gcc/config/i386/i386.md (.../tags/gcc_4_8_2_release)
27565
+++ b/src/gcc/config/i386/i386.md (.../branches/gcc-4_8-branch)
27566
@@ -363,6 +363,13 @@
27567
(const_string "unknown")]
27568
(const_string "integer")))
27570
+;; The minimum required alignment of vector mode memory operands of the SSE
27571
+;; (non-VEX/EVEX) instruction in bits, if it is different from
27572
+;; GET_MODE_ALIGNMENT of the operand, otherwise 0. If an instruction has
27573
+;; multiple alternatives, this should be conservative maximum of those minimum
27574
+;; required alignments.
27575
+(define_attr "ssememalign" "" (const_int 0))
27577
;; The (bounding maximum) length of an instruction immediate.
27578
(define_attr "length_immediate" ""
27579
(cond [(eq_attr "type" "incdec,setcc,icmov,str,lea,other,multi,idiv,leave,
27580
@@ -1570,7 +1577,7 @@
27581
split_double_mode (DImode, &operands[1], 1, &operands[2], &operands[3]);
27583
operands[1] = gen_lowpart (DImode, operands[2]);
27584
- operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx,
27585
+ operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
27589
@@ -1587,7 +1594,7 @@
27590
split_double_mode (DImode, &operands[1], 1, &operands[2], &operands[3]);
27592
operands[1] = gen_lowpart (DImode, operands[2]);
27593
- operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx,
27594
+ operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
27598
@@ -2715,7 +2722,20 @@
27600
[(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_dup 2)))
27601
(set (mem:SF (reg:P SP_REG)) (match_dup 1))]
27602
- "operands[2] = GEN_INT (-GET_MODE_SIZE (<P:MODE>mode));")
27604
+ rtx op = XEXP (operands[0], 0);
27605
+ if (GET_CODE (op) == PRE_DEC)
27607
+ gcc_assert (!TARGET_64BIT);
27608
+ op = GEN_INT (-4);
27612
+ op = XEXP (XEXP (op, 1), 1);
27613
+ gcc_assert (CONST_INT_P (op));
27615
+ operands[2] = op;
27619
[(set (match_operand:SF 0 "push_operand")
27620
@@ -5443,6 +5463,12 @@
27623
ix86_split_lea_for_addr (curr_insn, operands, mode);
27625
+ /* Zero-extend return register to DImode for zero-extended addresses. */
27626
+ if (mode != <MODE>mode)
27627
+ emit_insn (gen_zero_extendsidi2
27628
+ (operands[0], gen_lowpart (mode, operands[0])));
27632
[(set_attr "type" "lea")
27633
@@ -6589,7 +6615,7 @@
27634
(set_attr "use_carry" "1")
27635
(set_attr "mode" "<MODE>")])
27637
-;; Overflow setting add and subtract instructions
27638
+;; Overflow setting add instructions
27640
(define_insn "*add<mode>3_cconly_overflow"
27641
[(set (reg:CCC FLAGS_REG)
27642
@@ -6604,43 +6630,31 @@
27643
[(set_attr "type" "alu")
27644
(set_attr "mode" "<MODE>")])
27646
-(define_insn "*sub<mode>3_cconly_overflow"
27647
+(define_insn "*add<mode>3_cc_overflow"
27648
[(set (reg:CCC FLAGS_REG)
27651
- (match_operand:SWI 0 "nonimmediate_operand" "<r>m,<r>")
27652
- (match_operand:SWI 1 "<general_operand>" "<r><i>,<r>m"))
27655
- "cmp{<imodesuffix>}\t{%1, %0|%0, %1}"
27656
- [(set_attr "type" "icmp")
27657
- (set_attr "mode" "<MODE>")])
27659
-(define_insn "*<plusminus_insn><mode>3_cc_overflow"
27660
- [(set (reg:CCC FLAGS_REG)
27663
- (match_operand:SWI 1 "nonimmediate_operand" "<comm>0,0")
27665
+ (match_operand:SWI 1 "nonimmediate_operand" "%0,0")
27666
(match_operand:SWI 2 "<general_operand>" "<r><i>,<r>m"))
27668
(set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m,<r>")
27669
- (plusminus:SWI (match_dup 1) (match_dup 2)))]
27670
- "ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
27671
- "<plusminus_mnemonic>{<imodesuffix>}\t{%2, %0|%0, %2}"
27672
+ (plus:SWI (match_dup 1) (match_dup 2)))]
27673
+ "ix86_binary_operator_ok (PLUS, <MODE>mode, operands)"
27674
+ "add{<imodesuffix>}\t{%2, %0|%0, %2}"
27675
[(set_attr "type" "alu")
27676
(set_attr "mode" "<MODE>")])
27678
-(define_insn "*<plusminus_insn>si3_zext_cc_overflow"
27679
+(define_insn "*addsi3_zext_cc_overflow"
27680
[(set (reg:CCC FLAGS_REG)
27683
- (match_operand:SI 1 "nonimmediate_operand" "<comm>0")
27685
+ (match_operand:SI 1 "nonimmediate_operand" "%0")
27686
(match_operand:SI 2 "x86_64_general_operand" "rme"))
27688
(set (match_operand:DI 0 "register_operand" "=r")
27689
- (zero_extend:DI (plusminus:SI (match_dup 1) (match_dup 2))))]
27690
- "TARGET_64BIT && ix86_binary_operator_ok (<CODE>, SImode, operands)"
27691
- "<plusminus_mnemonic>{l}\t{%2, %k0|%k0, %2}"
27692
+ (zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))]
27693
+ "TARGET_64BIT && ix86_binary_operator_ok (PLUS, SImode, operands)"
27694
+ "add{l}\t{%2, %k0|%k0, %2}"
27695
[(set_attr "type" "alu")
27696
(set_attr "mode" "SI")])
27698
@@ -8012,7 +8026,18 @@
27700
(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,rm")
27701
(and:DI (match_dup 1) (match_dup 2)))]
27702
- "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)
27704
+ && ix86_match_ccmode
27706
+ /* If we are going to emit andl instead of andq, and the operands[2]
27707
+ constant might have the SImode sign bit set, make sure the sign
27708
+ flag isn't tested, because the instruction will set the sign flag
27709
+ based on bit 31 rather than bit 63. If it isn't CONST_INT,
27710
+ conservatively assume it might have bit 31 set. */
27711
+ (satisfies_constraint_Z (operands[2])
27712
+ && (!CONST_INT_P (operands[2])
27713
+ || val_signbit_known_set_p (SImode, INTVAL (operands[2]))))
27714
+ ? CCZmode : CCNOmode)
27715
&& ix86_binary_operator_ok (AND, DImode, operands)"
27717
and{l}\t{%k2, %k0|%k0, %k2}
27718
@@ -17569,7 +17594,13 @@
27719
(define_insn "trap"
27720
[(trap_if (const_int 1) (const_int 6))]
27722
- { return ASM_SHORT "0x0b0f"; }
27724
+#ifdef HAVE_AS_IX86_UD2
27727
+ return ASM_SHORT "0x0b0f";
27730
[(set_attr "length" "2")])
27732
(define_expand "prefetch"
27733
Index: gcc/config/i386/f16cintrin.h
27734
===================================================================
27735
--- a/src/gcc/config/i386/f16cintrin.h (.../tags/gcc_4_8_2_release)
27736
+++ b/src/gcc/config/i386/f16cintrin.h (.../branches/gcc-4_8-branch)
27738
extern __inline float __attribute__((__gnu_inline__, __always_inline__, __artificial__))
27739
_cvtsh_ss (unsigned short __S)
27741
- __v8hi __H = __extension__ (__v8hi){ __S, 0, 0, 0, 0, 0, 0, 0 };
27742
+ __v8hi __H = __extension__ (__v8hi){ (short) __S, 0, 0, 0, 0, 0, 0, 0 };
27743
__v4sf __A = __builtin_ia32_vcvtph2ps (__H);
27744
return __builtin_ia32_vec_ext_v4sf (__A, 0);
27746
Index: gcc/config/i386/t-rtems
27747
===================================================================
27748
--- a/src/gcc/config/i386/t-rtems (.../tags/gcc_4_8_2_release)
27749
+++ b/src/gcc/config/i386/t-rtems (.../branches/gcc-4_8-branch)
27750
@@ -17,11 +17,10 @@
27751
# <http://www.gnu.org/licenses/>.
27754
-MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro \
27756
+MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro msoft-float
27757
MULTILIB_DIRNAMES= m486 mpentium mpentiumpro soft-float
27758
-MULTILIB_MATCHES = msoft-float=mno-m80387
27759
-MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?mathlon
27760
+MULTILIB_MATCHES = msoft-float=mno-80387
27761
+MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?athlon
27762
MULTILIB_EXCEPTIONS = \
27763
mtune=pentium/*msoft-float* \
27764
mtune=pentiumpro/*msoft-float*
27765
Index: gcc/config/i386/winnt.c
27766
===================================================================
27767
--- a/src/gcc/config/i386/winnt.c (.../tags/gcc_4_8_2_release)
27768
+++ b/src/gcc/config/i386/winnt.c (.../branches/gcc-4_8-branch)
27769
@@ -547,8 +547,9 @@
27770
sets 'discard' characteristic, rather than telling linker
27771
to warn of size or content mismatch, so do the same. */
27772
bool discard = (flags & SECTION_CODE)
27773
- || lookup_attribute ("selectany",
27774
- DECL_ATTRIBUTES (decl));
27775
+ || (TREE_CODE (decl) != IDENTIFIER_NODE
27776
+ && lookup_attribute ("selectany",
27777
+ DECL_ATTRIBUTES (decl)));
27778
fprintf (asm_out_file, "\t.linkonce %s\n",
27779
(discard ? "discard" : "same_size"));
27781
Index: gcc/config/i386/sse.md
27782
===================================================================
27783
--- a/src/gcc/config/i386/sse.md (.../tags/gcc_4_8_2_release)
27784
+++ b/src/gcc/config/i386/sse.md (.../branches/gcc-4_8-branch)
27785
@@ -605,6 +605,7 @@
27787
[(set_attr "type" "ssemov")
27788
(set_attr "movu" "1")
27789
+ (set_attr "ssememalign" "8")
27790
(set_attr "prefix" "maybe_vex")
27792
(cond [(match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
27793
@@ -634,6 +635,7 @@
27795
[(set_attr "type" "ssemov")
27796
(set_attr "movu" "1")
27797
+ (set_attr "ssememalign" "8")
27798
(set_attr "prefix" "maybe_vex")
27800
(cond [(ior (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
27801
@@ -663,6 +665,7 @@
27803
[(set_attr "type" "ssemov")
27804
(set_attr "movu" "1")
27805
+ (set_attr "ssememalign" "8")
27806
(set (attr "prefix_data16")
27808
(match_test "TARGET_AVX")
27809
@@ -696,6 +699,7 @@
27811
[(set_attr "type" "ssemov")
27812
(set_attr "movu" "1")
27813
+ (set_attr "ssememalign" "8")
27814
(set (attr "prefix_data16")
27816
(match_test "TARGET_AVX")
27817
@@ -721,6 +725,7 @@
27818
"%vlddqu\t{%1, %0|%0, %1}"
27819
[(set_attr "type" "ssemov")
27820
(set_attr "movu" "1")
27821
+ (set_attr "ssememalign" "8")
27822
(set (attr "prefix_data16")
27824
(match_test "TARGET_AVX")
27825
@@ -1001,6 +1006,7 @@
27826
vrcpss\t{%1, %2, %0|%0, %2, %1}"
27827
[(set_attr "isa" "noavx,avx")
27828
(set_attr "type" "sse")
27829
+ (set_attr "ssememalign" "32")
27830
(set_attr "atom_sse_attr" "rcp")
27831
(set_attr "btver2_sse_attr" "rcp")
27832
(set_attr "prefix" "orig,vex")
27833
@@ -1089,6 +1095,7 @@
27834
vrsqrtss\t{%1, %2, %0|%0, %2, %1}"
27835
[(set_attr "isa" "noavx,avx")
27836
(set_attr "type" "sse")
27837
+ (set_attr "ssememalign" "32")
27838
(set_attr "prefix" "orig,vex")
27839
(set_attr "mode" "SF")])
27841
@@ -2844,6 +2851,7 @@
27842
"%vcvtdq2pd\t{%1, %0|%0, %q1}"
27843
[(set_attr "type" "ssecvt")
27844
(set_attr "prefix" "maybe_vex")
27845
+ (set_attr "ssememalign" "64")
27846
(set_attr "mode" "V2DF")])
27848
(define_insn "avx_cvtpd2dq256"
27849
@@ -3572,6 +3580,7 @@
27850
%vmovhps\t{%2, %0|%0, %2}"
27851
[(set_attr "isa" "noavx,avx,noavx,avx,*")
27852
(set_attr "type" "ssemov")
27853
+ (set_attr "ssememalign" "64")
27854
(set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
27855
(set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
27857
@@ -3617,6 +3626,7 @@
27858
%vmovlps\t{%2, %H0|%H0, %2}"
27859
[(set_attr "isa" "noavx,avx,noavx,avx,*")
27860
(set_attr "type" "ssemov")
27861
+ (set_attr "ssememalign" "64")
27862
(set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
27863
(set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
27865
@@ -3941,6 +3951,7 @@
27866
%vmovhlps\t{%1, %d0|%d0, %1}
27867
%vmovlps\t{%H1, %d0|%d0, %H1}"
27868
[(set_attr "type" "ssemov")
27869
+ (set_attr "ssememalign" "64")
27870
(set_attr "prefix" "maybe_vex")
27871
(set_attr "mode" "V2SF,V4SF,V2SF")])
27873
@@ -3980,6 +3991,7 @@
27874
%vmovlps\t{%2, %H0|%H0, %2}"
27875
[(set_attr "isa" "noavx,avx,noavx,avx,*")
27876
(set_attr "type" "ssemov")
27877
+ (set_attr "ssememalign" "64")
27878
(set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
27879
(set_attr "mode" "V2SF,V2SF,V4SF,V4SF,V2SF")])
27881
@@ -4033,6 +4045,7 @@
27882
%vmovlps\t{%2, %0|%0, %2}"
27883
[(set_attr "isa" "noavx,avx,noavx,avx,*")
27884
(set_attr "type" "sseshuf,sseshuf,ssemov,ssemov,ssemov")
27885
+ (set_attr "ssememalign" "64")
27886
(set_attr "length_immediate" "1,1,*,*,*")
27887
(set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
27888
(set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
27889
@@ -4642,7 +4655,8 @@
27890
vmovlpd\t{%H1, %2, %0|%0, %2, %H1}
27891
%vmovhpd\t{%1, %0|%0, %1}"
27892
[(set_attr "isa" "noavx,avx,sse3,noavx,avx,*")
27893
- (set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
27894
+ (set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
27895
+ (set_attr "ssememalign" "64")
27896
(set_attr "prefix_data16" "*,*,*,1,*,1")
27897
(set_attr "prefix" "orig,vex,maybe_vex,orig,vex,maybe_vex")
27898
(set_attr "mode" "V2DF,V2DF,DF,V1DF,V1DF,V1DF")])
27899
@@ -4744,6 +4758,7 @@
27900
%vmovlpd\t{%2, %H0|%H0, %2}"
27901
[(set_attr "isa" "noavx,avx,sse3,noavx,avx,*")
27902
(set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
27903
+ (set_attr "ssememalign" "64")
27904
(set_attr "prefix_data16" "*,*,*,1,*,1")
27905
(set_attr "prefix" "orig,vex,maybe_vex,orig,vex,maybe_vex")
27906
(set_attr "mode" "V2DF,V2DF,DF,V1DF,V1DF,V1DF")])
27907
@@ -4982,6 +4997,7 @@
27908
movhlps\t{%1, %0|%0, %1}
27909
movlps\t{%H1, %0|%0, %H1}"
27910
[(set_attr "type" "ssemov")
27911
+ (set_attr "ssememalign" "64")
27912
(set_attr "mode" "V2SF,V4SF,V2SF")])
27914
;; Avoid combining registers from different units in a single alternative,
27915
@@ -5077,6 +5093,7 @@
27917
[(set_attr "isa" "noavx,avx,noavx,avx,*,*,*")
27918
(set_attr "type" "ssemov,ssemov,sselog,sselog,ssemov,fmov,imov")
27919
+ (set_attr "ssememalign" "64")
27920
(set_attr "prefix_data16" "1,*,*,*,*,*,*")
27921
(set_attr "prefix" "orig,vex,orig,vex,*,*,*")
27922
(set_attr "mode" "V1DF,V1DF,V2DF,V2DF,DF,DF,DF")])
27923
@@ -5145,6 +5162,7 @@
27924
(const_string "imov")
27926
(const_string "ssemov")))
27927
+ (set_attr "ssememalign" "64")
27928
(set_attr "prefix_data16" "*,1,*,*,*,*,1,*,*,*,*")
27929
(set_attr "length_immediate" "*,*,*,*,*,1,*,*,*,*,*")
27930
(set_attr "prefix" "maybe_vex,orig,vex,orig,vex,orig,orig,vex,*,*,*")
27931
@@ -5189,6 +5207,7 @@
27933
(const_string "*")))
27934
(set_attr "length_immediate" "*,*,*,*,*,1,*,*,*")
27935
+ (set_attr "ssememalign" "64")
27936
(set_attr "prefix" "orig,vex,orig,vex,maybe_vex,orig,orig,vex,maybe_vex")
27937
(set_attr "mode" "DF,DF,V1DF,V1DF,V1DF,V2DF,V1DF,V1DF,V1DF")])
27939
@@ -8736,6 +8755,7 @@
27941
"%vpmov<extsuffix>bw\t{%1, %0|%0, %q1}"
27942
[(set_attr "type" "ssemov")
27943
+ (set_attr "ssememalign" "64")
27944
(set_attr "prefix_extra" "1")
27945
(set_attr "prefix" "maybe_vex")
27946
(set_attr "mode" "TI")])
27947
@@ -8766,6 +8786,7 @@
27949
"%vpmov<extsuffix>bd\t{%1, %0|%0, %k1}"
27950
[(set_attr "type" "ssemov")
27951
+ (set_attr "ssememalign" "32")
27952
(set_attr "prefix_extra" "1")
27953
(set_attr "prefix" "maybe_vex")
27954
(set_attr "mode" "TI")])
27955
@@ -8791,6 +8812,7 @@
27957
"%vpmov<extsuffix>wd\t{%1, %0|%0, %q1}"
27958
[(set_attr "type" "ssemov")
27959
+ (set_attr "ssememalign" "64")
27960
(set_attr "prefix_extra" "1")
27961
(set_attr "prefix" "maybe_vex")
27962
(set_attr "mode" "TI")])
27963
@@ -8818,6 +8840,7 @@
27965
"%vpmov<extsuffix>bq\t{%1, %0|%0, %w1}"
27966
[(set_attr "type" "ssemov")
27967
+ (set_attr "ssememalign" "16")
27968
(set_attr "prefix_extra" "1")
27969
(set_attr "prefix" "maybe_vex")
27970
(set_attr "mode" "TI")])
27971
@@ -8845,6 +8868,7 @@
27973
"%vpmov<extsuffix>wq\t{%1, %0|%0, %k1}"
27974
[(set_attr "type" "ssemov")
27975
+ (set_attr "ssememalign" "32")
27976
(set_attr "prefix_extra" "1")
27977
(set_attr "prefix" "maybe_vex")
27978
(set_attr "mode" "TI")])
27979
@@ -8868,6 +8892,7 @@
27981
"%vpmov<extsuffix>dq\t{%1, %0|%0, %q1}"
27982
[(set_attr "type" "ssemov")
27983
+ (set_attr "ssememalign" "64")
27984
(set_attr "prefix_extra" "1")
27985
(set_attr "prefix" "maybe_vex")
27986
(set_attr "mode" "TI")])
27987
@@ -9151,6 +9176,7 @@
27988
[(set_attr "type" "sselog")
27989
(set_attr "prefix_data16" "1")
27990
(set_attr "prefix_extra" "1")
27991
+ (set_attr "ssememalign" "8")
27992
(set_attr "length_immediate" "1")
27993
(set_attr "memory" "none,load")
27994
(set_attr "mode" "TI")])
27995
@@ -9213,6 +9239,7 @@
27996
[(set_attr "type" "sselog")
27997
(set_attr "prefix_data16" "1")
27998
(set_attr "prefix_extra" "1")
27999
+ (set_attr "ssememalign" "8")
28000
(set_attr "length_immediate" "1")
28001
(set_attr "memory" "load")
28002
(set_attr "mode" "TI")])
28003
@@ -9240,6 +9267,7 @@
28004
(set_attr "prefix_data16" "1")
28005
(set_attr "prefix_extra" "1")
28006
(set_attr "prefix" "maybe_vex")
28007
+ (set_attr "ssememalign" "8")
28008
(set_attr "length_immediate" "1")
28009
(set_attr "btver2_decode" "vector")
28010
(set_attr "memory" "none,load")
28011
@@ -9267,6 +9295,7 @@
28012
[(set_attr "type" "sselog")
28013
(set_attr "prefix_data16" "1")
28014
(set_attr "prefix_extra" "1")
28015
+ (set_attr "ssememalign" "8")
28016
(set_attr "length_immediate" "1")
28017
(set_attr "prefix" "maybe_vex")
28018
(set_attr "btver2_decode" "vector")
28019
@@ -9293,6 +9322,7 @@
28020
[(set_attr "type" "sselog")
28021
(set_attr "prefix_data16" "1")
28022
(set_attr "prefix_extra" "1")
28023
+ (set_attr "ssememalign" "8")
28024
(set_attr "length_immediate" "1")
28025
(set_attr "memory" "none,load,none,load")
28026
(set_attr "btver2_decode" "vector,vector,vector,vector")
28027
@@ -9346,6 +9376,7 @@
28028
[(set_attr "type" "sselog")
28029
(set_attr "prefix_data16" "1")
28030
(set_attr "prefix_extra" "1")
28031
+ (set_attr "ssememalign" "8")
28032
(set_attr "length_immediate" "1")
28033
(set_attr "memory" "none,load")
28034
(set_attr "mode" "TI")])
28035
@@ -9399,6 +9430,7 @@
28036
[(set_attr "type" "sselog")
28037
(set_attr "prefix_data16" "1")
28038
(set_attr "prefix_extra" "1")
28039
+ (set_attr "ssememalign" "8")
28040
(set_attr "length_immediate" "1")
28041
(set_attr "memory" "load")
28042
(set_attr "mode" "TI")])
28043
@@ -9421,6 +9453,7 @@
28044
[(set_attr "type" "sselog")
28045
(set_attr "prefix_data16" "1")
28046
(set_attr "prefix_extra" "1")
28047
+ (set_attr "ssememalign" "8")
28048
(set_attr "length_immediate" "1")
28049
(set_attr "prefix" "maybe_vex")
28050
(set_attr "memory" "none,load")
28051
@@ -9445,6 +9478,7 @@
28052
[(set_attr "type" "sselog")
28053
(set_attr "prefix_data16" "1")
28054
(set_attr "prefix_extra" "1")
28055
+ (set_attr "ssememalign" "8")
28056
(set_attr "length_immediate" "1")
28057
(set_attr "prefix" "maybe_vex")
28058
(set_attr "memory" "none,load")
28059
@@ -9469,6 +9503,7 @@
28060
[(set_attr "type" "sselog")
28061
(set_attr "prefix_data16" "1")
28062
(set_attr "prefix_extra" "1")
28063
+ (set_attr "ssememalign" "8")
28064
(set_attr "length_immediate" "1")
28065
(set_attr "memory" "none,load,none,load")
28066
(set_attr "prefix" "maybe_vex")
28067
@@ -10213,7 +10248,6 @@
28068
[(set_attr "type" "ssecvt1")
28069
(set_attr "mode" "<MODE>")])
28072
(define_expand "xop_vmfrcz<mode>2"
28073
[(set (match_operand:VF_128 0 "register_operand")
28075
@@ -10220,14 +10254,12 @@
28077
[(match_operand:VF_128 1 "nonimmediate_operand")]
28084
- operands[3] = CONST0_RTX (<MODE>mode);
28086
+ "operands[2] = CONST0_RTX (<MODE>mode);")
28088
-(define_insn "*xop_vmfrcz_<mode>"
28089
+(define_insn "*xop_vmfrcz<mode>2"
28090
[(set (match_operand:VF_128 0 "register_operand" "=x")
28093
Index: gcc/config/i386/xopintrin.h
28094
===================================================================
28095
--- a/src/gcc/config/i386/xopintrin.h (.../tags/gcc_4_8_2_release)
28096
+++ b/src/gcc/config/i386/xopintrin.h (.../branches/gcc-4_8-branch)
28097
@@ -745,13 +745,17 @@
28098
extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
28099
_mm_frcz_ss (__m128 __A, __m128 __B)
28101
- return (__m128) __builtin_ia32_vfrczss ((__v4sf)__A, (__v4sf)__B);
28102
+ return (__m128) __builtin_ia32_movss ((__v4sf)__A,
28104
+ __builtin_ia32_vfrczss ((__v4sf)__B));
28107
extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
28108
_mm_frcz_sd (__m128d __A, __m128d __B)
28110
- return (__m128d) __builtin_ia32_vfrczsd ((__v2df)__A, (__v2df)__B);
28111
+ return (__m128d) __builtin_ia32_movsd ((__v2df)__A,
28113
+ __builtin_ia32_vfrczsd ((__v2df)__B));
28116
extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
28117
Index: gcc/config/i386/driver-i386.c
28118
===================================================================
28119
--- a/src/gcc/config/i386/driver-i386.c (.../tags/gcc_4_8_2_release)
28120
+++ b/src/gcc/config/i386/driver-i386.c (.../branches/gcc-4_8-branch)
28121
@@ -126,6 +126,18 @@
28123
level1->sizekb = 16; level1->assoc = 4; level1->line = 32;
28126
+ level1->sizekb = 16; level1->assoc = 4; level1->line = 64;
28129
+ level1->sizekb = 24; level1->assoc = 6; level1->line = 64;
28132
+ level2->sizekb = 256; level2->assoc = 8; level2->line = 64;
28135
+ level2->sizekb = 1024; level2->assoc = 16; level2->line = 64;
28138
level1->sizekb = 32; level1->assoc = 8; level1->line = 64;
28140
@@ -162,6 +174,9 @@
28142
level2->sizekb = 2048; level2->assoc = 4; level2->line = 32;
28145
+ level2->sizekb = 3072; level2->assoc = 12; level2->line = 64;
28150
@@ -203,6 +218,9 @@
28152
level2->sizekb = 512; level2->assoc = 2; level2->line = 64;
28155
+ level2->sizekb = 512; level2->assoc = 8; level2->line = 64;
28158
level2->sizekb = 256; level2->assoc = 8; level2->line = 32;
28160
@@ -470,6 +488,28 @@
28161
has_xsaveopt = eax & bit_XSAVEOPT;
28164
+ /* Check cpuid level of extended features. */
28165
+ __cpuid (0x80000000, ext_level, ebx, ecx, edx);
28167
+ if (ext_level > 0x80000000)
28169
+ __cpuid (0x80000001, eax, ebx, ecx, edx);
28171
+ has_lahf_lm = ecx & bit_LAHF_LM;
28172
+ has_sse4a = ecx & bit_SSE4a;
28173
+ has_abm = ecx & bit_ABM;
28174
+ has_lwp = ecx & bit_LWP;
28175
+ has_fma4 = ecx & bit_FMA4;
28176
+ has_xop = ecx & bit_XOP;
28177
+ has_tbm = ecx & bit_TBM;
28178
+ has_lzcnt = ecx & bit_LZCNT;
28179
+ has_prfchw = ecx & bit_PRFCHW;
28181
+ has_longmode = edx & bit_LM;
28182
+ has_3dnowp = edx & bit_3DNOWP;
28183
+ has_3dnow = edx & bit_3DNOW;
28186
/* Get XCR_XFEATURE_ENABLED_MASK register with xgetbv. */
28187
#define XCR_XFEATURE_ENABLED_MASK 0x0
28188
#define XSTATE_FP 0x1
28189
@@ -488,33 +528,12 @@
28199
- /* Check cpuid level of extended features. */
28200
- __cpuid (0x80000000, ext_level, ebx, ecx, edx);
28202
- if (ext_level > 0x80000000)
28204
- __cpuid (0x80000001, eax, ebx, ecx, edx);
28206
- has_lahf_lm = ecx & bit_LAHF_LM;
28207
- has_sse4a = ecx & bit_SSE4a;
28208
- has_abm = ecx & bit_ABM;
28209
- has_lwp = ecx & bit_LWP;
28210
- has_fma4 = ecx & bit_FMA4;
28211
- has_xop = ecx & bit_XOP;
28212
- has_tbm = ecx & bit_TBM;
28213
- has_lzcnt = ecx & bit_LZCNT;
28214
- has_prfchw = ecx & bit_PRFCHW;
28216
- has_longmode = edx & bit_LM;
28217
- has_3dnowp = edx & bit_3DNOWP;
28218
- has_3dnow = edx & bit_3DNOW;
28223
if (vendor == signature_AMD_ebx
28224
Index: gcc/config/i386/i386.c
28225
===================================================================
28226
--- a/src/gcc/config/i386/i386.c (.../tags/gcc_4_8_2_release)
28227
+++ b/src/gcc/config/i386/i386.c (.../branches/gcc-4_8-branch)
28228
@@ -1378,7 +1378,7 @@
28229
8, /* MMX or SSE register to integer */
28230
8, /* size of l1 cache. */
28231
1024, /* size of l2 cache. */
28232
- 128, /* size of prefetch block */
28233
+ 64, /* size of prefetch block */
28234
8, /* number of parallel prefetches */
28235
1, /* Branch cost */
28236
COSTS_N_INSNS (6), /* cost of FADD and FSUB insns. */
28237
@@ -1894,10 +1894,10 @@
28238
m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_ATOM | m_AMDFAM10 | m_BDVER | m_GENERIC,
28240
/* X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL */
28241
- m_COREI7 | m_AMDFAM10 | m_BDVER | m_BTVER,
28242
+ m_COREI7 | m_HASWELL | m_AMDFAM10 | m_BDVER | m_BTVER,
28244
/* X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL */
28245
- m_COREI7 | m_BDVER,
28246
+ m_COREI7 | m_HASWELL| m_BDVER,
28248
/* X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL */
28250
@@ -2409,6 +2409,7 @@
28251
/* Processor target table, indexed by processor number */
28254
+ const char *const name; /* processor name */
28255
const struct processor_costs *cost; /* Processor costs */
28256
const int align_loop; /* Default alignments. */
28257
const int align_loop_max_skip;
28258
@@ -2417,67 +2418,32 @@
28259
const int align_func;
28262
+/* This table must be in sync with enum processor_type in i386.h. */
28263
static const struct ptt processor_target_table[PROCESSOR_max] =
28265
- {&i386_cost, 4, 3, 4, 3, 4},
28266
- {&i486_cost, 16, 15, 16, 15, 16},
28267
- {&pentium_cost, 16, 7, 16, 7, 16},
28268
- {&pentiumpro_cost, 16, 15, 16, 10, 16},
28269
- {&geode_cost, 0, 0, 0, 0, 0},
28270
- {&k6_cost, 32, 7, 32, 7, 32},
28271
- {&athlon_cost, 16, 7, 16, 7, 16},
28272
- {&pentium4_cost, 0, 0, 0, 0, 0},
28273
- {&k8_cost, 16, 7, 16, 7, 16},
28274
- {&nocona_cost, 0, 0, 0, 0, 0},
28276
- {&core_cost, 16, 10, 16, 10, 16},
28278
- {&core_cost, 16, 10, 16, 10, 16},
28280
- {&core_cost, 16, 10, 16, 10, 16},
28281
- {&generic32_cost, 16, 7, 16, 7, 16},
28282
- {&generic64_cost, 16, 10, 16, 10, 16},
28283
- {&amdfam10_cost, 32, 24, 32, 7, 32},
28284
- {&bdver1_cost, 16, 10, 16, 7, 11},
28285
- {&bdver2_cost, 16, 10, 16, 7, 11},
28286
- {&bdver3_cost, 16, 10, 16, 7, 11},
28287
- {&btver1_cost, 16, 10, 16, 7, 11},
28288
- {&btver2_cost, 16, 10, 16, 7, 11},
28289
- {&atom_cost, 16, 15, 16, 7, 16}
28290
+ {"generic", &generic32_cost, 16, 7, 16, 7, 16},
28291
+ {"generic", &generic64_cost, 16, 10, 16, 10, 16},
28292
+ {"i386", &i386_cost, 4, 3, 4, 3, 4},
28293
+ {"i486", &i486_cost, 16, 15, 16, 15, 16},
28294
+ {"pentium", &pentium_cost, 16, 7, 16, 7, 16},
28295
+ {"pentiumpro", &pentiumpro_cost, 16, 15, 16, 10, 16},
28296
+ {"pentium4", &pentium4_cost, 0, 0, 0, 0, 0},
28297
+ {"nocona", &nocona_cost, 0, 0, 0, 0, 0},
28298
+ {"core2", &core_cost, 16, 10, 16, 10, 16},
28299
+ {"corei7", &core_cost, 16, 10, 16, 10, 16},
28300
+ {"core-avx2", &core_cost, 16, 10, 16, 10, 16},
28301
+ {"atom", &atom_cost, 16, 15, 16, 7, 16},
28302
+ {"geode", &geode_cost, 0, 0, 0, 0, 0},
28303
+ {"k6", &k6_cost, 32, 7, 32, 7, 32},
28304
+ {"athlon", &athlon_cost, 16, 7, 16, 7, 16},
28305
+ {"k8", &k8_cost, 16, 7, 16, 7, 16},
28306
+ {"amdfam10", &amdfam10_cost, 32, 24, 32, 7, 32},
28307
+ {"bdver1", &bdver1_cost, 16, 10, 16, 7, 11},
28308
+ {"bdver2", &bdver2_cost, 16, 10, 16, 7, 11},
28309
+ {"bdver3", &bdver3_cost, 16, 10, 16, 7, 11},
28310
+ {"btver1", &btver1_cost, 16, 10, 16, 7, 11},
28311
+ {"btver2", &btver2_cost, 16, 10, 16, 7, 11}
28314
-static const char *const cpu_names[TARGET_CPU_DEFAULT_max] =
28348
gate_insert_vzeroupper (void)
28349
@@ -2983,7 +2949,7 @@
28350
{"bdver3", PROCESSOR_BDVER3, CPU_BDVER3,
28351
PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
28352
| PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_SSSE3 | PTA_SSE4_1
28353
- | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX
28354
+ | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX | PTA_FMA4
28355
| PTA_XOP | PTA_LWP | PTA_BMI | PTA_TBM | PTA_F16C
28356
| PTA_FMA | PTA_PRFCHW | PTA_FXSR | PTA_XSAVE
28358
@@ -3125,7 +3091,8 @@
28359
ix86_tune_string = ix86_arch_string;
28360
if (!ix86_tune_string)
28362
- ix86_tune_string = cpu_names[TARGET_CPU_DEFAULT];
28364
+ = processor_target_table[TARGET_CPU_DEFAULT].name;
28365
ix86_tune_defaulted = 1;
28368
@@ -4078,19 +4045,15 @@
28369
= ix86_target_string (ptr->x_ix86_isa_flags, ptr->x_target_flags,
28370
NULL, NULL, ptr->x_ix86_fpmath, false);
28372
+ gcc_assert (ptr->arch < PROCESSOR_max);
28373
fprintf (file, "%*sarch = %d (%s)\n",
28376
- ((ptr->arch < TARGET_CPU_DEFAULT_max)
28377
- ? cpu_names[ptr->arch]
28379
+ ptr->arch, processor_target_table[ptr->arch].name);
28381
+ gcc_assert (ptr->tune < PROCESSOR_max);
28382
fprintf (file, "%*stune = %d (%s)\n",
28385
- ((ptr->tune < TARGET_CPU_DEFAULT_max)
28386
- ? cpu_names[ptr->tune]
28388
+ ptr->tune, processor_target_table[ptr->tune].name);
28390
fprintf (file, "%*sbranch_cost = %d\n", indent, "", ptr->branch_cost);
28392
@@ -5213,7 +5176,12 @@
28393
/* Use register calling convention for local functions when possible. */
28395
&& TREE_CODE (decl) == FUNCTION_DECL
28397
+ /* Caller and callee must agree on the calling convention, so
28398
+ checking here just optimize means that with
28399
+ __attribute__((optimize (...))) caller could use regparm convention
28400
+ and callee not, or vice versa. Instead look at whether the callee
28401
+ is optimized or not. */
28402
+ && opt_for_fn (decl, optimize)
28403
&& !(profile_flag && !flag_fentry))
28405
/* FIXME: remove this CONST_CAST when cgraph.[ch] is constified. */
28406
@@ -5409,6 +5377,17 @@
28410
+ /* For pre-AVX disallow unaligned loads/stores where the
28411
+ instructions don't support it. */
28413
+ && VECTOR_MODE_P (GET_MODE (op))
28414
+ && misaligned_operand (op, GET_MODE (op)))
28416
+ int min_align = get_attr_ssememalign (insn);
28417
+ if (min_align == 0)
28421
/* A unary operator may be accepted by the predicate, but it
28422
is irrelevant for matching constraints. */
28424
@@ -5747,9 +5726,9 @@
28426
cum->sse_nregs = 0;
28427
cum->mmx_nregs = 0;
28428
- cum->warn_avx = 0;
28429
- cum->warn_sse = 0;
28430
- cum->warn_mmx = 0;
28431
+ cum->warn_avx = false;
28432
+ cum->warn_sse = false;
28433
+ cum->warn_mmx = false;
28437
@@ -5790,10 +5769,14 @@
28439
The midde-end can't deal with the vector types > 16 bytes. In this
28440
case, we return the original mode and warn ABI change if CUM isn't
28444
+ If INT_RETURN is true, warn ABI change if the vector mode isn't
28445
+ available for function return value. */
28447
static enum machine_mode
28448
-type_natural_mode (const_tree type, const CUMULATIVE_ARGS *cum)
28449
+type_natural_mode (const_tree type, const CUMULATIVE_ARGS *cum,
28452
enum machine_mode mode = TYPE_MODE (type);
28454
@@ -5819,33 +5802,61 @@
28455
if (size == 32 && !TARGET_AVX)
28457
static bool warnedavx;
28458
+ static bool warnedavx_ret;
28462
- && cum->warn_avx)
28463
+ if (cum && cum->warn_avx && !warnedavx)
28465
- warnedavx = true;
28466
- warning (0, "AVX vector argument without AVX "
28467
- "enabled changes the ABI");
28468
+ if (warning (OPT_Wpsabi, "AVX vector argument "
28469
+ "without AVX enabled changes the ABI"))
28470
+ warnedavx = true;
28472
+ else if (in_return && !warnedavx_ret)
28474
+ if (warning (OPT_Wpsabi, "AVX vector return "
28475
+ "without AVX enabled changes the ABI"))
28476
+ warnedavx_ret = true;
28479
return TYPE_MODE (type);
28481
- else if ((size == 8 || size == 16) && !TARGET_SSE)
28482
+ else if (((size == 8 && TARGET_64BIT) || size == 16)
28485
static bool warnedsse;
28486
+ static bool warnedsse_ret;
28490
- && cum->warn_sse)
28491
+ if (cum && cum->warn_sse && !warnedsse)
28493
- warnedsse = true;
28494
- warning (0, "SSE vector argument without SSE "
28495
- "enabled changes the ABI");
28496
+ if (warning (OPT_Wpsabi, "SSE vector argument "
28497
+ "without SSE enabled changes the ABI"))
28498
+ warnedsse = true;
28501
+ else if (!TARGET_64BIT && in_return && !warnedsse_ret)
28503
+ if (warning (OPT_Wpsabi, "SSE vector return "
28504
+ "without SSE enabled changes the ABI"))
28505
+ warnedsse_ret = true;
28510
+ else if ((size == 8 && !TARGET_64BIT) && !TARGET_MMX)
28512
+ static bool warnedmmx;
28513
+ static bool warnedmmx_ret;
28515
+ if (cum && cum->warn_mmx && !warnedmmx)
28517
+ if (warning (OPT_Wpsabi, "MMX vector argument "
28518
+ "without MMX enabled changes the ABI"))
28519
+ warnedmmx = true;
28521
+ else if (in_return && !warnedmmx_ret)
28523
+ if (warning (OPT_Wpsabi, "MMX vector return "
28524
+ "without MMX enabled changes the ABI"))
28525
+ warnedmmx_ret = true;
28531
gcc_unreachable ();
28532
@@ -6190,25 +6201,28 @@
28536
- int size = (bit_offset % 64)+ (int) GET_MODE_BITSIZE (mode);
28537
+ int size = bit_offset + (int) GET_MODE_BITSIZE (mode);
28540
+ /* Analyze last 128 bits only. */
28541
+ size = (size - 1) & 0x7f;
28545
classes[0] = X86_64_INTEGERSI_CLASS;
28548
- else if (size <= 64)
28549
+ else if (size < 64)
28551
classes[0] = X86_64_INTEGER_CLASS;
28554
- else if (size <= 64+32)
28555
+ else if (size < 64+32)
28557
classes[0] = X86_64_INTEGER_CLASS;
28558
classes[1] = X86_64_INTEGERSI_CLASS;
28561
- else if (size <= 64+64)
28562
+ else if (size < 64+64)
28564
classes[0] = classes[1] = X86_64_INTEGER_CLASS;
28566
@@ -6475,7 +6489,7 @@
28568
&& regclass[0] == X86_64_INTEGER_CLASS
28569
&& regclass[1] == X86_64_INTEGER_CLASS
28570
- && (mode == CDImode || mode == TImode || mode == TFmode)
28571
+ && (mode == CDImode || mode == TImode)
28572
&& intreg[0] + 1 == intreg[1])
28573
return gen_rtx_REG (mode, intreg[0]);
28575
@@ -6725,7 +6739,7 @@
28576
words = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
28579
- mode = type_natural_mode (type, NULL);
28580
+ mode = type_natural_mode (type, NULL, false);
28582
if (TARGET_64BIT && (cum ? cum->call_abi : ix86_abi) == MS_ABI)
28583
function_arg_advance_ms_64 (cum, bytes, words);
28584
@@ -6753,8 +6767,6 @@
28585
enum machine_mode orig_mode, const_tree type,
28586
HOST_WIDE_INT bytes, HOST_WIDE_INT words)
28588
- static bool warnedsse, warnedmmx;
28590
/* Avoid the AL settings for the Unix64 ABI. */
28591
if (mode == VOIDmode)
28592
return constm1_rtx;
28593
@@ -6811,12 +6823,6 @@
28595
if (!type || !AGGREGATE_TYPE_P (type))
28597
- if (!TARGET_SSE && !warnedsse && cum->warn_sse)
28599
- warnedsse = true;
28600
- warning (0, "SSE vector argument without SSE enabled "
28601
- "changes the ABI");
28603
if (cum->sse_nregs)
28604
return gen_reg_or_parallel (mode, orig_mode,
28605
cum->sse_regno + FIRST_SSE_REG);
28606
@@ -6849,12 +6855,6 @@
28608
if (!type || !AGGREGATE_TYPE_P (type))
28610
- if (!TARGET_MMX && !warnedmmx && cum->warn_mmx)
28612
- warnedmmx = true;
28613
- warning (0, "MMX vector argument without MMX enabled "
28614
- "changes the ABI");
28616
if (cum->mmx_nregs)
28617
return gen_reg_or_parallel (mode, orig_mode,
28618
cum->mmx_regno + FIRST_MMX_REG);
28619
@@ -6977,7 +6977,7 @@
28620
/* To simplify the code below, represent vector types with a vector mode
28621
even if MMX/SSE are not active. */
28622
if (type && TREE_CODE (type) == VECTOR_TYPE)
28623
- mode = type_natural_mode (type, cum);
28624
+ mode = type_natural_mode (type, cum, false);
28626
if (TARGET_64BIT && (cum ? cum->call_abi : ix86_abi) == MS_ABI)
28627
arg = function_arg_ms_64 (cum, mode, omode, named, bytes);
28628
@@ -7235,9 +7235,15 @@
28636
+ return TARGET_64BIT && ix86_abi != MS_ABI;
28638
- case FIRST_FLOAT_REG:
28639
+ /* Complex values are returned in %st(0)/%st(1) pair. */
28642
/* TODO: The function should depend on current function ABI but
28643
builtins.c would need updating then. Therefore we use the
28645
@@ -7245,10 +7251,12 @@
28647
return TARGET_FLOAT_RETURNS_IN_80387;
28649
- case FIRST_SSE_REG:
28650
+ /* Complex values are returned in %xmm0/%xmm1 pair. */
28655
- case FIRST_MMX_REG:
28657
if (TARGET_MACHO || TARGET_64BIT)
28660
@@ -7420,7 +7428,7 @@
28661
enum machine_mode mode, orig_mode;
28663
orig_mode = TYPE_MODE (valtype);
28664
- mode = type_natural_mode (valtype, NULL);
28665
+ mode = type_natural_mode (valtype, NULL, true);
28666
return ix86_function_value_1 (valtype, fntype_or_decl, orig_mode, mode);
28669
@@ -7535,7 +7543,7 @@
28670
#ifdef SUBTARGET_RETURN_IN_MEMORY
28671
return SUBTARGET_RETURN_IN_MEMORY (type, fntype);
28673
- const enum machine_mode mode = type_natural_mode (type, NULL);
28674
+ const enum machine_mode mode = type_natural_mode (type, NULL, true);
28678
@@ -7549,52 +7557,6 @@
28682
-/* When returning SSE vector types, we have a choice of either
28683
- (1) being abi incompatible with a -march switch, or
28684
- (2) generating an error.
28685
- Given no good solution, I think the safest thing is one warning.
28686
- The user won't be able to use -Werror, but....
28688
- Choose the STRUCT_VALUE_RTX hook because that's (at present) only
28689
- called in response to actually generating a caller or callee that
28690
- uses such a type. As opposed to TARGET_RETURN_IN_MEMORY, which is called
28691
- via aggregate_value_p for general type probing from tree-ssa. */
28694
-ix86_struct_value_rtx (tree type, int incoming ATTRIBUTE_UNUSED)
28696
- static bool warnedsse, warnedmmx;
28698
- if (!TARGET_64BIT && type)
28700
- /* Look at the return type of the function, not the function type. */
28701
- enum machine_mode mode = TYPE_MODE (TREE_TYPE (type));
28703
- if (!TARGET_SSE && !warnedsse)
28705
- if (mode == TImode
28706
- || (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 16))
28708
- warnedsse = true;
28709
- warning (0, "SSE vector return without SSE enabled "
28710
- "changes the ABI");
28714
- if (!TARGET_MMX && !warnedmmx)
28716
- if (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 8)
28718
- warnedmmx = true;
28719
- warning (0, "MMX vector return without MMX enabled "
28720
- "changes the ABI");
28729
/* Create the va_list data type. */
28731
@@ -8019,7 +7981,7 @@
28732
size = int_size_in_bytes (type);
28733
rsize = (size + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
28735
- nat_mode = type_natural_mode (type, NULL);
28736
+ nat_mode = type_natural_mode (type, NULL, false);
28740
@@ -10560,18 +10522,20 @@
28742
m->fs.sp_offset += allocate;
28744
+ /* Use stack_pointer_rtx for relative addressing so that code
28745
+ works for realigned stack, too. */
28746
if (r10_live && eax_live)
28748
- t = choose_baseaddr (m->fs.sp_offset - allocate);
28749
+ t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax);
28750
emit_move_insn (gen_rtx_REG (word_mode, R10_REG),
28751
gen_frame_mem (word_mode, t));
28752
- t = choose_baseaddr (m->fs.sp_offset - allocate - UNITS_PER_WORD);
28753
+ t = plus_constant (Pmode, t, UNITS_PER_WORD);
28754
emit_move_insn (gen_rtx_REG (word_mode, AX_REG),
28755
gen_frame_mem (word_mode, t));
28757
else if (eax_live || r10_live)
28759
- t = choose_baseaddr (m->fs.sp_offset - allocate);
28760
+ t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax);
28761
emit_move_insn (gen_rtx_REG (word_mode,
28762
(eax_live ? AX_REG : R10_REG)),
28763
gen_frame_mem (word_mode, t));
28764
@@ -11561,30 +11525,6 @@
28768
-/* Determine if op is suitable SUBREG RTX for address. */
28771
-ix86_address_subreg_operand (rtx op)
28773
- enum machine_mode mode;
28778
- mode = GET_MODE (op);
28780
- if (GET_MODE_CLASS (mode) != MODE_INT)
28783
- /* Don't allow SUBREGs that span more than a word. It can lead to spill
28784
- failures when the register is one word out of a two word structure. */
28785
- if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
28788
- /* Allow only SUBREGs of non-eliminable hard registers. */
28789
- return register_no_elim_operand (op, mode);
28792
/* Extract the parts of an RTL expression that is a valid memory address
28793
for an instruction. Return 0 if the structure of the address is
28794
grossly off. Return -1 if the address contains ASHIFT, so it is not
28795
@@ -11641,7 +11581,7 @@
28797
else if (GET_CODE (addr) == SUBREG)
28799
- if (ix86_address_subreg_operand (SUBREG_REG (addr)))
28800
+ if (REG_P (SUBREG_REG (addr)))
28804
@@ -11705,7 +11645,7 @@
28808
- if (!ix86_address_subreg_operand (SUBREG_REG (op)))
28809
+ if (!REG_P (SUBREG_REG (op)))
28813
@@ -11750,19 +11690,6 @@
28814
scale = 1 << scale;
28817
- else if (CONST_INT_P (addr))
28819
- if (!x86_64_immediate_operand (addr, VOIDmode))
28822
- /* Constant addresses are sign extended to 64bit, we have to
28823
- prevent addresses from 0x80000000 to 0xffffffff in x32 mode. */
28825
- && val_signbit_known_set_p (SImode, INTVAL (addr)))
28831
disp = addr; /* displacement */
28833
@@ -11771,18 +11698,12 @@
28836
else if (GET_CODE (index) == SUBREG
28837
- && ix86_address_subreg_operand (SUBREG_REG (index)))
28838
+ && REG_P (SUBREG_REG (index)))
28844
-/* Address override works only on the (%reg) part of %fs:(%reg). */
28845
- if (seg != SEG_DEFAULT
28846
- && ((base && GET_MODE (base) != word_mode)
28847
- || (index && GET_MODE (index) != word_mode)))
28850
/* Extract the integral value of scale. */
28853
@@ -12258,6 +12179,45 @@
28857
+/* Determine if op is suitable RTX for an address register.
28858
+ Return naked register if a register or a register subreg is
28859
+ found, otherwise return NULL_RTX. */
28862
+ix86_validate_address_register (rtx op)
28864
+ enum machine_mode mode = GET_MODE (op);
28866
+ /* Only SImode or DImode registers can form the address. */
28867
+ if (mode != SImode && mode != DImode)
28872
+ else if (GET_CODE (op) == SUBREG)
28874
+ rtx reg = SUBREG_REG (op);
28876
+ if (!REG_P (reg))
28879
+ mode = GET_MODE (reg);
28881
+ /* Don't allow SUBREGs that span more than a word. It can
28882
+ lead to spill failures when the register is one word out
28883
+ of a two word structure. */
28884
+ if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
28887
+ /* Allow only SUBREGs of non-eliminable hard registers. */
28888
+ if (register_no_elim_operand (reg, mode))
28892
+ /* Op is not a register. */
28896
/* Recognizes RTL expressions that are valid memory addresses for an
28897
instruction. The MODE argument is the machine mode for the MEM
28898
expression that wants to use this address.
28899
@@ -12273,6 +12233,7 @@
28900
struct ix86_address parts;
28901
rtx base, index, disp;
28902
HOST_WIDE_INT scale;
28903
+ enum ix86_address_seg seg;
28905
if (ix86_decompose_address (addr, &parts) <= 0)
28906
/* Decomposition failed. */
28907
@@ -12282,23 +12243,16 @@
28908
index = parts.index;
28910
scale = parts.scale;
28913
/* Validate base register. */
28917
+ rtx reg = ix86_validate_address_register (base);
28919
- if (REG_P (base))
28921
- else if (GET_CODE (base) == SUBREG && REG_P (SUBREG_REG (base)))
28922
- reg = SUBREG_REG (base);
28924
- /* Base is not a register. */
28925
+ if (reg == NULL_RTX)
28928
- if (GET_MODE (base) != SImode && GET_MODE (base) != DImode)
28931
if ((strict && ! REG_OK_FOR_BASE_STRICT_P (reg))
28932
|| (! strict && ! REG_OK_FOR_BASE_NONSTRICT_P (reg)))
28933
/* Base is not valid. */
28934
@@ -12308,19 +12262,11 @@
28935
/* Validate index register. */
28939
+ rtx reg = ix86_validate_address_register (index);
28941
- if (REG_P (index))
28943
- else if (GET_CODE (index) == SUBREG && REG_P (SUBREG_REG (index)))
28944
- reg = SUBREG_REG (index);
28946
- /* Index is not a register. */
28947
+ if (reg == NULL_RTX)
28950
- if (GET_MODE (index) != SImode && GET_MODE (index) != DImode)
28953
if ((strict && ! REG_OK_FOR_INDEX_STRICT_P (reg))
28954
|| (! strict && ! REG_OK_FOR_INDEX_NONSTRICT_P (reg)))
28955
/* Index is not valid. */
28956
@@ -12332,6 +12278,12 @@
28957
&& GET_MODE (base) != GET_MODE (index))
28960
+ /* Address override works only on the (%reg) part of %fs:(%reg). */
28961
+ if (seg != SEG_DEFAULT
28962
+ && ((base && GET_MODE (base) != word_mode)
28963
+ || (index && GET_MODE (index) != word_mode)))
28966
/* Validate scale factor. */
28969
@@ -12453,6 +12405,12 @@
28970
&& !x86_64_immediate_operand (disp, VOIDmode))
28971
/* Displacement is out of range. */
28973
+ /* In x32 mode, constant addresses are sign extended to 64bit, so
28974
+ we have to prevent addresses from 0x80000000 to 0xffffffff. */
28975
+ else if (TARGET_X32 && !(index || base)
28976
+ && CONST_INT_P (disp)
28977
+ && val_signbit_known_set_p (SImode, INTVAL (disp)))
28981
/* Everything looks valid. */
28982
@@ -13817,8 +13775,6 @@
28983
Those same assemblers have the same but opposite lossage on cmov. */
28984
if (mode == CCmode)
28985
suffix = fp ? "nbe" : "a";
28986
- else if (mode == CCCmode)
28989
gcc_unreachable ();
28991
@@ -13840,8 +13796,12 @@
28995
- gcc_assert (mode == CCmode || mode == CCCmode);
28997
+ if (mode == CCmode)
28999
+ else if (mode == CCCmode)
29002
+ gcc_unreachable ();
29006
@@ -13861,9 +13821,12 @@
29010
- /* ??? As above. */
29011
- gcc_assert (mode == CCmode || mode == CCCmode);
29012
- suffix = fp ? "nb" : "ae";
29013
+ if (mode == CCmode)
29014
+ suffix = fp ? "nb" : "ae";
29015
+ else if (mode == CCCmode)
29018
+ gcc_unreachable ();
29021
gcc_assert (mode == CCmode || mode == CCGCmode || mode == CCNOmode);
29022
@@ -13870,11 +13833,8 @@
29026
- /* ??? As above. */
29027
if (mode == CCmode)
29029
- else if (mode == CCCmode)
29030
- suffix = fp ? "nb" : "ae";
29032
gcc_unreachable ();
29034
@@ -15340,7 +15300,7 @@
29035
rtx arg = XEXP (XEXP (link, 0), 0);
29037
if (ix86_check_avx256_register (&arg, NULL))
29038
- return AVX_U128_ANY;
29039
+ return AVX_U128_DIRTY;
29043
@@ -15460,8 +15420,8 @@
29045
bool avx_reg256_found = false;
29046
note_stores (pat, ix86_check_avx256_stores, &avx_reg256_found);
29047
- if (!avx_reg256_found)
29048
- return AVX_U128_CLEAN;
29050
+ return avx_reg256_found ? AVX_U128_DIRTY : AVX_U128_CLEAN;
29053
/* Otherwise, return current mode. Remember that if insn
29054
@@ -17350,10 +17310,20 @@
29055
if (!TARGET_OPT_AGU || optimize_function_for_size_p (cfun))
29058
- /* Check it is correct to split here. */
29059
- if (!ix86_ok_to_clobber_flags(insn))
29060
+ /* The "at least two components" test below might not catch simple
29061
+ move or zero extension insns if parts.base is non-NULL and parts.disp
29062
+ is const0_rtx as the only components in the address, e.g. if the
29063
+ register is %rbp or %r13. As this test is much cheaper and moves or
29064
+ zero extensions are the common case, do this check first. */
29065
+ if (REG_P (operands[1])
29066
+ || (SImode_address_operand (operands[1], VOIDmode)
29067
+ && REG_P (XEXP (operands[1], 0))))
29070
+ /* Check if it is OK to split here. */
29071
+ if (!ix86_ok_to_clobber_flags (insn))
29074
ok = ix86_decompose_address (operands[1], &parts);
29077
@@ -18486,12 +18456,7 @@
29079
case GTU: /* CF=0 & ZF=0 */
29080
case LEU: /* CF=1 | ZF=1 */
29081
- /* Detect overflow checks. They need just the carry flag. */
29082
- if (GET_CODE (op0) == MINUS
29083
- && rtx_equal_p (op1, XEXP (op0, 0)))
29088
/* Codes possibly doable only with sign flag when
29089
comparing against zero. */
29090
case GE: /* SF=OF or SF=0 */
29091
@@ -20500,7 +20465,7 @@
29095
- mask = gen_lowpart (V8SFmode, mask);
29096
+ mask = gen_lowpart (V8SImode, mask);
29097
if (one_operand_shuffle)
29098
emit_insn (gen_avx2_permvarv8sf (target, op0, mask));
29100
@@ -21740,6 +21705,21 @@
29104
+/* Copy the address to a Pmode register. This is used for x32 to
29105
+ truncate DImode TLS address to a SImode register. */
29108
+ix86_copy_addr_to_reg (rtx addr)
29110
+ if (GET_MODE (addr) == Pmode)
29111
+ return copy_addr_to_reg (addr);
29114
+ gcc_assert (GET_MODE (addr) == DImode && Pmode == SImode);
29115
+ return gen_rtx_SUBREG (SImode, copy_to_mode_reg (DImode, addr), 0);
29119
/* When SRCPTR is non-NULL, output simple loop to move memory
29120
pointer to SRCPTR to DESTPTR via chunks of MODE unrolled UNROLL times,
29121
overall size is COUNT specified in bytes. When SRCPTR is NULL, output the
29122
@@ -22728,8 +22708,8 @@
29123
gcc_assert (alg != no_stringop);
29125
count_exp = copy_to_mode_reg (GET_MODE (count_exp), count_exp);
29126
- destreg = copy_addr_to_reg (XEXP (dst, 0));
29127
- srcreg = copy_addr_to_reg (XEXP (src, 0));
29128
+ destreg = ix86_copy_addr_to_reg (XEXP (dst, 0));
29129
+ srcreg = ix86_copy_addr_to_reg (XEXP (src, 0));
29133
@@ -23119,7 +23099,7 @@
29134
gcc_assert (alg != no_stringop);
29136
count_exp = copy_to_mode_reg (counter_mode (count_exp), count_exp);
29137
- destreg = copy_addr_to_reg (XEXP (dst, 0));
29138
+ destreg = ix86_copy_addr_to_reg (XEXP (dst, 0));
29142
@@ -24988,7 +24968,8 @@
29144
ix86_data_alignment (tree type, int align)
29146
- int max_align = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
29148
+ = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
29150
if (AGGREGATE_TYPE_P (type)
29151
&& TYPE_SIZE (type)
29152
@@ -27984,8 +27965,8 @@
29153
{ OPTION_MASK_ISA_XOP, CODE_FOR_xop_shlv8hi3, "__builtin_ia32_vpshlw", IX86_BUILTIN_VPSHLW, UNKNOWN, (int)MULTI_ARG_2_HI },
29154
{ OPTION_MASK_ISA_XOP, CODE_FOR_xop_shlv16qi3, "__builtin_ia32_vpshlb", IX86_BUILTIN_VPSHLB, UNKNOWN, (int)MULTI_ARG_2_QI },
29156
- { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv4sf2, "__builtin_ia32_vfrczss", IX86_BUILTIN_VFRCZSS, UNKNOWN, (int)MULTI_ARG_2_SF },
29157
- { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv2df2, "__builtin_ia32_vfrczsd", IX86_BUILTIN_VFRCZSD, UNKNOWN, (int)MULTI_ARG_2_DF },
29158
+ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv4sf2, "__builtin_ia32_vfrczss", IX86_BUILTIN_VFRCZSS, UNKNOWN, (int)MULTI_ARG_1_SF },
29159
+ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv2df2, "__builtin_ia32_vfrczsd", IX86_BUILTIN_VFRCZSD, UNKNOWN, (int)MULTI_ARG_1_DF },
29160
{ OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv4sf2, "__builtin_ia32_vfrczps", IX86_BUILTIN_VFRCZPS, UNKNOWN, (int)MULTI_ARG_1_SF },
29161
{ OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv2df2, "__builtin_ia32_vfrczpd", IX86_BUILTIN_VFRCZPD, UNKNOWN, (int)MULTI_ARG_1_DF },
29162
{ OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv8sf2, "__builtin_ia32_vfrczps256", IX86_BUILTIN_VFRCZPS256, UNKNOWN, (int)MULTI_ARG_1_SF2 },
29163
@@ -31245,11 +31226,12 @@
29166
ix86_expand_special_args_builtin (const struct builtin_description *d,
29167
- tree exp, rtx target)
29168
+ tree exp, rtx target)
29172
unsigned int i, nargs, arg_adjust, memory;
29173
+ bool aligned_mem = false;
29177
@@ -31295,6 +31277,15 @@
29183
+ case CODE_FOR_sse4_1_movntdqa:
29184
+ case CODE_FOR_avx2_movntdqa:
29185
+ aligned_mem = true;
29191
case VOID_FTYPE_PV2SF_V4SF:
29192
case VOID_FTYPE_PV4DI_V4DI:
29193
@@ -31312,6 +31303,26 @@
29195
/* Reserve memory operand for target. */
29196
memory = ARRAY_SIZE (args);
29199
+ /* These builtins and instructions require the memory
29200
+ to be properly aligned. */
29201
+ case CODE_FOR_avx_movntv4di:
29202
+ case CODE_FOR_sse2_movntv2di:
29203
+ case CODE_FOR_avx_movntv8sf:
29204
+ case CODE_FOR_sse_movntv4sf:
29205
+ case CODE_FOR_sse4a_vmmovntv4sf:
29206
+ case CODE_FOR_avx_movntv4df:
29207
+ case CODE_FOR_sse2_movntv2df:
29208
+ case CODE_FOR_sse4a_vmmovntv2df:
29209
+ case CODE_FOR_sse2_movntidi:
29210
+ case CODE_FOR_sse_movntq:
29211
+ case CODE_FOR_sse2_movntisi:
29212
+ aligned_mem = true;
29218
case V4SF_FTYPE_V4SF_PCV2SF:
29219
case V2DF_FTYPE_V2DF_PCDOUBLE:
29220
@@ -31368,6 +31379,17 @@
29222
op = force_reg (Pmode, convert_to_mode (Pmode, op, 1));
29223
target = gen_rtx_MEM (tmode, op);
29224
+ /* target at this point has just BITS_PER_UNIT MEM_ALIGN
29225
+ on it. Try to improve it using get_pointer_alignment,
29226
+ and if the special builtin is one that requires strict
29227
+ mode alignment, also from it's GET_MODE_ALIGNMENT.
29228
+ Failure to do so could lead to ix86_legitimate_combined_insn
29229
+ rejecting all changes to such insns. */
29230
+ unsigned int align = get_pointer_alignment (arg);
29231
+ if (aligned_mem && align < GET_MODE_ALIGNMENT (tmode))
29232
+ align = GET_MODE_ALIGNMENT (tmode);
29233
+ if (MEM_ALIGN (target) < align)
29234
+ set_mem_align (target, align);
29237
target = force_reg (tmode, op);
29238
@@ -31413,8 +31435,17 @@
29239
/* This must be the memory operand. */
29240
op = force_reg (Pmode, convert_to_mode (Pmode, op, 1));
29241
op = gen_rtx_MEM (mode, op);
29242
- gcc_assert (GET_MODE (op) == mode
29243
- || GET_MODE (op) == VOIDmode);
29244
+ /* op at this point has just BITS_PER_UNIT MEM_ALIGN
29245
+ on it. Try to improve it using get_pointer_alignment,
29246
+ and if the special builtin is one that requires strict
29247
+ mode alignment, also from it's GET_MODE_ALIGNMENT.
29248
+ Failure to do so could lead to ix86_legitimate_combined_insn
29249
+ rejecting all changes to such insns. */
29250
+ unsigned int align = get_pointer_alignment (arg);
29251
+ if (aligned_mem && align < GET_MODE_ALIGNMENT (mode))
29252
+ align = GET_MODE_ALIGNMENT (mode);
29253
+ if (MEM_ALIGN (op) < align)
29254
+ set_mem_align (op, align);
29258
@@ -32208,7 +32239,9 @@
29259
mode4 = insn_data[icode].operand[5].mode;
29261
if (target == NULL_RTX
29262
- || GET_MODE (target) != insn_data[icode].operand[0].mode)
29263
+ || GET_MODE (target) != insn_data[icode].operand[0].mode
29264
+ || !insn_data[icode].operand[0].predicate (target,
29265
+ GET_MODE (target)))
29266
subtarget = gen_reg_rtx (insn_data[icode].operand[0].mode);
29268
subtarget = target;
29269
@@ -33879,10 +33912,10 @@
29271
/* We implement the move patterns for all vector modes into and
29272
out of SSE registers, even when no operation instructions
29273
- are available. OImode move is available only when AVX is
29275
- return ((TARGET_AVX && mode == OImode)
29276
- || VALID_AVX256_REG_MODE (mode)
29277
+ are available. OImode and AVX modes are available only when
29278
+ AVX is enabled. */
29279
+ return ((TARGET_AVX
29280
+ && VALID_AVX256_REG_OR_OI_MODE (mode))
29281
|| VALID_SSE_REG_MODE (mode)
29282
|| VALID_SSE2_REG_MODE (mode)
29283
|| VALID_MMX_REG_MODE (mode)
29284
@@ -35232,7 +35265,10 @@
29285
The smallest offset in the page INSN can start is the case where START
29286
ends on the offset 0. Offset of INSN is then NBYTES - sizeof (INSN).
29287
We add p2align to 16byte window with maxskip 15 - NBYTES + sizeof (INSN).
29290
+ Don't consider asm goto as jump, while it can contain a jump, it doesn't
29291
+ have to, control transfer to label(s) can be performed through other
29292
+ means, and also we estimate minimum length of all asm stmts as 0. */
29293
for (insn = start; insn; insn = NEXT_INSN (insn))
29296
@@ -35260,6 +35296,7 @@
29298
start = NEXT_INSN (start);
29299
if ((JUMP_P (start)
29300
+ && asm_noperands (PATTERN (start)) < 0
29301
&& GET_CODE (PATTERN (start)) != ADDR_VEC
29302
&& GET_CODE (PATTERN (start)) != ADDR_DIFF_VEC)
29304
@@ -35278,6 +35315,7 @@
29305
fprintf (dump_file, "Insn %i estimated to %i bytes\n",
29306
INSN_UID (insn), min_size);
29308
+ && asm_noperands (PATTERN (insn)) < 0
29309
&& GET_CODE (PATTERN (insn)) != ADDR_VEC
29310
&& GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC)
29312
@@ -35289,6 +35327,7 @@
29314
start = NEXT_INSN (start);
29315
if ((JUMP_P (start)
29316
+ && asm_noperands (PATTERN (start)) < 0
29317
&& GET_CODE (PATTERN (start)) != ADDR_VEC
29318
&& GET_CODE (PATTERN (start)) != ADDR_DIFF_VEC)
29320
@@ -39371,7 +39410,9 @@
29322
dfinal.perm[i] = e;
29324
- dfinal.op0 = gen_reg_rtx (dfinal.vmode);
29326
+ if (!d->testing_p)
29327
+ dfinal.op0 = gen_reg_rtx (dfinal.vmode);
29328
dfinal.op1 = dfinal.op0;
29329
dfinal.one_operand_p = true;
29330
dremap.target = dfinal.op0;
29331
@@ -39806,6 +39847,9 @@
29333
gcc_assert (!d->one_operand_p);
29335
+ if (d->testing_p)
29339
eltsz = GET_MODE_SIZE (GET_MODE_INNER (d->vmode));
29341
@@ -40005,6 +40049,8 @@
29345
+ if (d->testing_p)
29347
t1 = gen_reg_rtx (V4DFmode);
29348
t2 = gen_reg_rtx (V4DFmode);
29350
@@ -40024,6 +40070,8 @@
29352
int mask = odd ? 0xdd : 0x88;
29354
+ if (d->testing_p)
29356
t1 = gen_reg_rtx (V8SFmode);
29357
t2 = gen_reg_rtx (V8SFmode);
29358
t3 = gen_reg_rtx (V8SFmode);
29359
@@ -40065,6 +40113,8 @@
29360
return expand_vec_perm_pshufb2 (d);
29363
+ if (d->testing_p)
29365
/* We need 2*log2(N)-1 operations to achieve odd/even
29366
with interleave. */
29367
t1 = gen_reg_rtx (V8HImode);
29368
@@ -40086,6 +40136,8 @@
29369
return expand_vec_perm_pshufb2 (d);
29372
+ if (d->testing_p)
29374
t1 = gen_reg_rtx (V16QImode);
29375
t2 = gen_reg_rtx (V16QImode);
29376
t3 = gen_reg_rtx (V16QImode);
29377
@@ -40118,6 +40170,9 @@
29378
return expand_vec_perm_even_odd_1 (&d_copy, odd);
29381
+ if (d->testing_p)
29384
t1 = gen_reg_rtx (V4DImode);
29385
t2 = gen_reg_rtx (V4DImode);
29387
@@ -40144,6 +40199,9 @@
29388
return expand_vec_perm_even_odd_1 (&d_copy, odd);
29391
+ if (d->testing_p)
29394
t1 = gen_reg_rtx (V8SImode);
29395
t2 = gen_reg_rtx (V8SImode);
29397
@@ -40236,6 +40294,8 @@
29399
/* These can be implemented via interleave. We save one insn by
29400
stopping once we have promoted to V4SImode and then use pshufd. */
29401
+ if (d->testing_p)
29406
@@ -42473,8 +42533,6 @@
29408
#undef TARGET_PROMOTE_PROTOTYPES
29409
#define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_true
29410
-#undef TARGET_STRUCT_VALUE_RTX
29411
-#define TARGET_STRUCT_VALUE_RTX ix86_struct_value_rtx
29412
#undef TARGET_SETUP_INCOMING_VARARGS
29413
#define TARGET_SETUP_INCOMING_VARARGS ix86_setup_incoming_varargs
29414
#undef TARGET_MUST_PASS_IN_STACK
29415
Index: gcc/config/tilegx/tilegx.md
29416
===================================================================
29417
--- a/src/gcc/config/tilegx/tilegx.md (.../tags/gcc_4_8_2_release)
29418
+++ b/src/gcc/config/tilegx/tilegx.md (.../branches/gcc-4_8-branch)
29419
@@ -5076,10 +5076,8 @@
29421
;; Network intrinsics
29423
-;; Note the "pseudo" text is handled specially by the
29424
-;; asm_output_opcode routine. If the output is an empty string, the
29425
-;; instruction would bypass the asm_output_opcode routine, bypassing
29426
-;; the bundle handling code.
29427
+;; Note the this barrier is of type "nothing," which is deleted after
29428
+;; the final scheduling pass so that nothing is emitted for it.
29429
(define_insn "tilegx_network_barrier"
29430
[(unspec_volatile:SI [(const_int 0)] UNSPEC_NETWORK_BARRIER)]
29432
Index: gcc/config/tilegx/tilegx-c.c
29433
===================================================================
29434
--- a/src/gcc/config/tilegx/tilegx-c.c (.../tags/gcc_4_8_2_release)
29435
+++ b/src/gcc/config/tilegx/tilegx-c.c (.../branches/gcc-4_8-branch)
29438
builtin_define ("__tilegx32__");
29440
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
29441
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
29443
TILEGX_CPU_CPP_ENDIAN_BUILTINS ();
29444
GNU_USER_TARGET_OS_CPP_BUILTINS ();
29446
Index: gcc/config/tilegx/sync.md
29447
===================================================================
29448
--- a/src/gcc/config/tilegx/sync.md (.../tags/gcc_4_8_2_release)
29449
+++ b/src/gcc/config/tilegx/sync.md (.../branches/gcc-4_8-branch)
29450
@@ -150,15 +150,22 @@
29451
(match_operand:SI 3 "const_int_operand" "")] ;; model
29455
enum memmodel model = (enum memmodel) INTVAL (operands[3]);
29457
if (operands[2] != const0_rtx)
29458
- emit_move_insn (operands[2], gen_rtx_NEG (<MODE>mode, operands[2]));
29460
+ addend = gen_reg_rtx (<MODE>mode);
29461
+ emit_move_insn (addend,
29462
+ gen_rtx_MINUS (<MODE>mode, const0_rtx, operands[2]));
29465
+ addend = operands[2];
29467
tilegx_pre_atomic_barrier (model);
29468
emit_insn (gen_atomic_fetch_add_bare<mode> (operands[0],
29472
tilegx_post_atomic_barrier (model);
29475
Index: gcc/config/tilegx/tilegx.c
29476
===================================================================
29477
--- a/src/gcc/config/tilegx/tilegx.c (.../tags/gcc_4_8_2_release)
29478
+++ b/src/gcc/config/tilegx/tilegx.c (.../branches/gcc-4_8-branch)
29479
@@ -702,6 +702,16 @@
29483
+/* Implement TARGET_EXPAND_TO_RTL_HOOK. */
29485
+tilegx_expand_to_rtl_hook (void)
29487
+ /* Exclude earlier sets of crtl->uses_pic_offset_table, because we
29488
+ only care about uses actually emitted. */
29489
+ crtl->uses_pic_offset_table = 0;
29493
/* Implement TARGET_SHIFT_TRUNCATION_MASK. DImode shifts use the mode
29494
matching insns and therefore guarantee that the shift count is
29495
modulo 64. SImode shifts sometimes use the 64 bit version so do
29496
@@ -3543,6 +3553,12 @@
29501
+ /* If we are generating a prefetch, tell the scheduler not to move
29503
+ if (GET_CODE (pat) == PREFETCH)
29504
+ PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
29509
@@ -4368,10 +4384,12 @@
29514
+ rtx insn, next, prev;
29515
rtx end = NEXT_INSN (BB_END (bb));
29517
- for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn; insn = next)
29519
+ for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn;
29520
+ prev = insn, insn = next)
29522
next = next_insn_to_bundle (NEXT_INSN (insn), end);
29524
@@ -4396,6 +4414,18 @@
29525
PUT_MODE (insn, SImode);
29529
+ /* Delete barrier insns, because they can mess up the
29530
+ emitting of bundle braces. If it is end-of-bundle, then
29531
+ the previous insn must be marked end-of-bundle. */
29532
+ if (get_attr_type (insn) == TYPE_NOTHING) {
29533
+ if (GET_MODE (insn) == QImode && prev != NULL
29534
+ && GET_MODE (prev) == SImode)
29536
+ PUT_MODE (prev, QImode);
29538
+ delete_insn (insn);
29543
@@ -5498,6 +5528,9 @@
29544
#undef TARGET_RTX_COSTS
29545
#define TARGET_RTX_COSTS tilegx_rtx_costs
29547
+#undef TARGET_EXPAND_TO_RTL_HOOK
29548
+#define TARGET_EXPAND_TO_RTL_HOOK tilegx_expand_to_rtl_hook
29550
#undef TARGET_SHIFT_TRUNCATION_MASK
29551
#define TARGET_SHIFT_TRUNCATION_MASK tilegx_shift_truncation_mask
29553
Index: gcc/config/sh/predicates.md
29554
===================================================================
29555
--- a/src/gcc/config/sh/predicates.md (.../tags/gcc_4_8_2_release)
29556
+++ b/src/gcc/config/sh/predicates.md (.../branches/gcc-4_8-branch)
29557
@@ -389,6 +389,12 @@
29558
XEXP (XEXP (op, 0), 1),
29559
TARGET_SH2A, true)")))
29561
+;; Returns true if OP is a displacement address that can fit into a
29562
+;; 16 bit (non-SH2A) memory load / store insn.
29563
+(define_predicate "short_displacement_mem_operand"
29564
+ (match_test "sh_disp_addr_displacement (op)
29565
+ <= sh_max_mov_insn_displacement (GET_MODE (op), false)"))
29567
;; Returns 1 if the operand can be used in an SH2A movu.{b|w} insn.
29568
(define_predicate "zero_extend_movu_operand"
29569
(and (match_operand 0 "displacement_mem_operand")
29570
@@ -413,6 +419,11 @@
29571
if (t_reg_operand (op, mode))
29574
+ /* Disallow PC relative QImode loads, since these is no insn to do that
29575
+ and an imm8 load should be used instead. */
29576
+ if (IS_PC_RELATIVE_LOAD_ADDR_P (op) && GET_MODE (op) == QImode)
29581
rtx inside = XEXP (op, 0);
29582
Index: gcc/config/sh/sh-protos.h
29583
===================================================================
29584
--- a/src/gcc/config/sh/sh-protos.h (.../tags/gcc_4_8_2_release)
29585
+++ b/src/gcc/config/sh/sh-protos.h (.../branches/gcc-4_8-branch)
29586
@@ -159,6 +159,8 @@
29587
extern bool sh_cfun_trap_exit_p (void);
29588
extern rtx sh_find_equiv_gbr_addr (rtx cur_insn, rtx mem);
29589
extern int sh_eval_treg_value (rtx op);
29590
+extern HOST_WIDE_INT sh_disp_addr_displacement (rtx mem_op);
29591
+extern int sh_max_mov_insn_displacement (machine_mode mode, bool consider_sh2a);
29593
/* Result value of sh_find_set_of_reg. */
29595
Index: gcc/config/sh/sh.c
29596
===================================================================
29597
--- a/src/gcc/config/sh/sh.c (.../tags/gcc_4_8_2_release)
29598
+++ b/src/gcc/config/sh/sh.c (.../branches/gcc-4_8-branch)
29599
@@ -310,9 +310,7 @@
29600
static void sh_conditional_register_usage (void);
29601
static bool sh_legitimate_constant_p (enum machine_mode, rtx);
29602
static int mov_insn_size (enum machine_mode, bool);
29603
-static int max_mov_insn_displacement (enum machine_mode, bool);
29604
static int mov_insn_alignment_mask (enum machine_mode, bool);
29605
-static HOST_WIDE_INT disp_addr_displacement (rtx);
29606
static bool sequence_insn_p (rtx);
29607
static void sh_canonicalize_comparison (int *, rtx *, rtx *, bool);
29608
static void sh_canonicalize_comparison (enum rtx_code&, rtx&, rtx&,
29609
@@ -3628,8 +3626,8 @@
29611
/* Determine the maximum possible displacement for a move insn for the
29614
-max_mov_insn_displacement (enum machine_mode mode, bool consider_sh2a)
29616
+sh_max_mov_insn_displacement (machine_mode mode, bool consider_sh2a)
29618
/* The 4 byte displacement move insns are the same as the 2 byte
29619
versions but take a 12 bit displacement. All we need to do is to
29620
@@ -3665,8 +3663,8 @@
29623
/* Return the displacement value of a displacement address. */
29624
-static inline HOST_WIDE_INT
29625
-disp_addr_displacement (rtx x)
29627
+sh_disp_addr_displacement (rtx x)
29629
gcc_assert (satisfies_constraint_Sdd (x));
29630
return INTVAL (XEXP (XEXP (x, 0), 1));
29631
@@ -3703,12 +3701,12 @@
29632
HImode and QImode loads/stores with displacement put pressure on
29633
R0 which will most likely require another reg copy. Thus account
29634
a higher cost for that. */
29635
- if (offset > 0 && offset <= max_mov_insn_displacement (mode, false))
29636
+ if (offset > 0 && offset <= sh_max_mov_insn_displacement (mode, false))
29637
return (mode == HImode || mode == QImode) ? 2 : 1;
29639
/* The displacement would fit into a 4 byte move insn (SH2A). */
29641
- && offset > 0 && offset <= max_mov_insn_displacement (mode, true))
29642
+ && offset > 0 && offset <= sh_max_mov_insn_displacement (mode, true))
29645
/* The displacement is probably out of range and will require extra
29646
@@ -10218,7 +10216,7 @@
29649
const HOST_WIDE_INT offset = INTVAL (op);
29650
- const int max_disp = max_mov_insn_displacement (mode, consider_sh2a);
29651
+ const int max_disp = sh_max_mov_insn_displacement (mode, consider_sh2a);
29652
const int align_mask = mov_insn_alignment_mask (mode, consider_sh2a);
29654
/* If the mode does not support any displacement always return false.
29655
@@ -10404,7 +10402,7 @@
29656
effectively disable the small displacement insns. */
29657
const int mode_sz = GET_MODE_SIZE (mode);
29658
const int mov_insn_sz = mov_insn_size (mode, false);
29659
- const int max_disp = max_mov_insn_displacement (mode, false);
29660
+ const int max_disp = sh_max_mov_insn_displacement (mode, false);
29661
const int max_disp_next = max_disp + mov_insn_sz;
29662
HOST_WIDE_INT align_modifier = offset > 127 ? mov_insn_sz : 0;
29663
HOST_WIDE_INT offset_adjust;
29664
@@ -13165,7 +13163,8 @@
29665
the insns must have the appropriate alternatives. */
29666
if ((mode == QImode || mode == HImode) && rclass != R0_REGS
29667
&& satisfies_constraint_Sdd (x)
29668
- && disp_addr_displacement (x) <= max_mov_insn_displacement (mode, false))
29669
+ && sh_disp_addr_displacement (x)
29670
+ <= sh_max_mov_insn_displacement (mode, false))
29673
/* When reload is trying to address a QImode or HImode subreg on the stack,
29674
Index: gcc/config/sh/constraints.md
29675
===================================================================
29676
--- a/src/gcc/config/sh/constraints.md (.../tags/gcc_4_8_2_release)
29677
+++ b/src/gcc/config/sh/constraints.md (.../branches/gcc-4_8-branch)
29678
@@ -221,6 +221,7 @@
29679
(define_constraint "Q"
29680
"A pc relative load operand."
29681
(and (match_code "mem")
29682
+ (match_test "GET_MODE (op) != QImode")
29683
(match_test "IS_PC_RELATIVE_LOAD_ADDR_P (XEXP (op, 0))")))
29685
(define_constraint "Bsc"
29686
@@ -295,13 +296,15 @@
29688
(define_memory_constraint "Sdd"
29689
"A memory reference that uses displacement addressing."
29690
- (and (match_test "MEM_P (op) && GET_CODE (XEXP (op, 0)) == PLUS")
29691
+ (and (match_code "mem")
29692
+ (match_test "GET_CODE (XEXP (op, 0)) == PLUS")
29693
(match_test "REG_P (XEXP (XEXP (op, 0), 0))")
29694
(match_test "CONST_INT_P (XEXP (XEXP (op, 0), 1))")))
29696
(define_memory_constraint "Snd"
29697
"A memory reference that excludes displacement addressing."
29698
- (match_test "! satisfies_constraint_Sdd (op)"))
29699
+ (and (match_code "mem")
29700
+ (match_test "! satisfies_constraint_Sdd (op)")))
29702
(define_memory_constraint "Sbv"
29703
"A memory reference, as used in SH2A bclr.b, bset.b, etc."
29704
Index: gcc/config/sh/sh.md
29705
===================================================================
29706
--- a/src/gcc/config/sh/sh.md (.../tags/gcc_4_8_2_release)
29707
+++ b/src/gcc/config/sh/sh.md (.../branches/gcc-4_8-branch)
29708
@@ -6831,34 +6831,9 @@
29709
prepare_move_operands (operands, QImode);
29712
-;; If movqi_reg_reg is specified as an alternative of movqi, movqi will be
29713
-;; selected to copy QImode regs. If one of them happens to be allocated
29714
-;; on the stack, reload will stick to movqi insn and generate wrong
29715
-;; displacement addressing because of the generic m alternatives.
29716
-;; With the movqi_reg_reg being specified before movqi it will be initially
29717
-;; picked to load/store regs. If the regs regs are on the stack reload
29718
-;; try other insns and not stick to movqi_reg_reg, unless there were spilled
29719
-;; pseudos in which case 'm' constraints pertain.
29720
-;; The same applies to the movhi variants.
29722
-;; Notice, that T bit is not allowed as a mov src operand here. This is to
29723
-;; avoid things like (set (reg:QI) (subreg:QI (reg:SI T_REG) 0)), which
29724
-;; introduces zero extensions after T bit stores and redundant reg copies.
29726
-;; FIXME: We can't use 'arith_reg_operand' (which disallows T_REG) as a
29727
-;; predicate for the mov src operand because reload will have trouble
29728
-;; reloading MAC subregs otherwise. For that probably special patterns
29729
-;; would be required.
29730
-(define_insn "*mov<mode>_reg_reg"
29731
- [(set (match_operand:QIHI 0 "arith_reg_dest" "=r,m,*z")
29732
- (match_operand:QIHI 1 "register_operand" "r,*z,m"))]
29733
- "TARGET_SH1 && !t_reg_operand (operands[1], VOIDmode)"
29738
- [(set_attr "type" "move,store,load")])
29740
+;; Specifying the displacement addressing load / store patterns separately
29741
+;; before the generic movqi / movhi pattern allows controlling the order
29742
+;; in which load / store insns are selected in a more fine grained way.
29743
;; FIXME: The non-SH2A and SH2A variants should be combined by adding
29744
;; "enabled" attribute as it is done in other targets.
29745
(define_insn "*mov<mode>_store_mem_disp04"
29746
@@ -6908,38 +6883,44 @@
29747
[(set_attr "type" "load")
29748
(set_attr "length" "2,2,4")])
29750
-;; The m constraints basically allow any kind of addresses to be used with any
29751
-;; source/target register as the other operand. This is not true for
29752
-;; displacement addressing modes on anything but SH2A. That's why the
29753
-;; specialized load/store insns are specified above.
29754
-(define_insn "*movqi"
29755
- [(set (match_operand:QI 0 "general_movdst_operand" "=r,r,m,r,l")
29756
- (match_operand:QI 1 "general_movsrc_operand" "i,m,r,l,r"))]
29757
+;; The order of the constraint alternatives is important here.
29758
+;; Q/r has to come first, otherwise PC relative loads might wrongly get
29759
+;; placed into delay slots. Since there is no QImode PC relative load, the
29760
+;; Q constraint and general_movsrc_operand will reject it for QImode.
29761
+;; The Snd alternatives should come before Sdd in order to avoid a preference
29762
+;; of using r0 als the register operand for addressing modes other than
29763
+;; displacement addressing.
29764
+;; The Sdd alternatives allow only r0 as register operand, even though on
29765
+;; SH2A any register could be allowed by switching to a 32 bit insn.
29766
+;; Generally sticking to the r0 is preferrable, since it generates smaller
29767
+;; code. Obvious r0 reloads can then be eliminated with a peephole on SH2A.
29768
+(define_insn "*mov<mode>"
29769
+ [(set (match_operand:QIHI 0 "general_movdst_operand"
29770
+ "=r,r,r,Snd,r, Sdd,z, r,l")
29771
+ (match_operand:QIHI 1 "general_movsrc_operand"
29772
+ "Q,r,i,r, Snd,z, Sdd,l,r"))]
29774
- && (arith_reg_operand (operands[0], QImode)
29775
- || arith_reg_operand (operands[1], QImode))"
29776
+ && (arith_reg_operand (operands[0], <MODE>mode)
29777
+ || arith_reg_operand (operands[1], <MODE>mode))"
29785
- [(set_attr "type" "movi8,load,store,prget,prset")])
29787
-(define_insn "*movhi"
29788
- [(set (match_operand:HI 0 "general_movdst_operand" "=r,r,r,m,r,l")
29789
- (match_operand:HI 1 "general_movsrc_operand" "Q,i,m,r,l,r"))]
29791
- && (arith_reg_operand (operands[0], HImode)
29792
- || arith_reg_operand (operands[1], HImode))"
29804
- [(set_attr "type" "pcload,movi8,load,store,prget,prset")])
29805
+ [(set_attr "type" "pcload,move,movi8,store,load,store,load,prget,prset")
29806
+ (set (attr "length")
29807
+ (cond [(and (match_operand 0 "displacement_mem_operand")
29808
+ (not (match_operand 0 "short_displacement_mem_operand")))
29810
+ (and (match_operand 1 "displacement_mem_operand")
29811
+ (not (match_operand 1 "short_displacement_mem_operand")))
29813
+ (const_int 2)))])
29815
(define_insn "*movqi_media"
29816
[(set (match_operand:QI 0 "general_movdst_operand" "=r,r,r,m")
29817
@@ -8427,11 +8408,9 @@
29821
- /* It's not safe to go beyond the current basic block after reload. */
29822
set_of_reg s1 = sh_find_set_of_reg (tested_reg, s0.insn,
29824
- ? prev_nonnote_insn_bb
29825
- : prev_nonnote_insn);
29826
+ prev_nonnote_insn);
29828
if (s1.set_src == NULL_RTX)
29831
@@ -8449,15 +8428,25 @@
29835
- /* It's only safe to remove the testing insn if the T bit is not
29836
- modified between the testing insn and the insn that stores the
29837
- T bit. Notice that some T bit stores such as negc also modify
29839
- if (modified_between_p (get_t_reg_rtx (), s1.insn, testing_insn)
29840
- || modified_in_p (get_t_reg_rtx (), s1.insn))
29841
- operands[2] = NULL_RTX;
29842
+ /* It's only safe to remove the testing insn if the T bit is not
29843
+ modified between the testing insn and the insn that stores the
29844
+ T bit. Notice that some T bit stores such as negc also modify
29846
+ if (modified_between_p (get_t_reg_rtx (), s1.insn, testing_insn)
29847
+ || modified_in_p (get_t_reg_rtx (), s1.insn)
29848
+ || !no_labels_between_p (s1.insn, testing_insn))
29849
+ operands[2] = NULL_RTX;
29852
+ /* If the insn that sets the tested reg has a REG_DEAD note on
29853
+ the T bit remove that note since we're extending the usage
29855
+ rtx n = find_regno_note (s1.insn, REG_DEAD, T_REG);
29856
+ if (n != NULL_RTX)
29857
+ remove_note (s1.insn, n);
29864
if (operands[2] == NULL_RTX)
29865
Index: gcc/config/sh/sh.opt
29866
===================================================================
29867
--- a/src/gcc/config/sh/sh.opt (.../tags/gcc_4_8_2_release)
29868
+++ b/src/gcc/config/sh/sh.opt (.../branches/gcc-4_8-branch)
29870
;; Used for various architecture options.
29873
-;; Set if the default precision of th FPU is single.
29874
+;; Set if the default precision of the FPU is single.
29877
;; Set if the a double-precision FPU is present but is restricted to
29878
Index: gcc/config/microblaze/predicates.md
29879
===================================================================
29880
--- a/src/gcc/config/microblaze/predicates.md (.../tags/gcc_4_8_2_release)
29881
+++ b/src/gcc/config/microblaze/predicates.md (.../branches/gcc-4_8-branch)
29883
(ior (match_operand 0 "const_0_operand")
29884
(match_operand 0 "register_operand")))
29886
+(define_predicate "reg_or_mem_operand"
29887
+ (ior (match_operand 0 "memory_operand")
29888
+ (match_operand 0 "register_operand")))
29890
;; Return if the operand is either the PC or a label_ref.
29891
(define_special_predicate "pc_or_label_operand"
29892
(ior (match_code "pc,label_ref")
29893
@@ -119,3 +123,7 @@
29894
;; Test for valid PIC call operand
29895
(define_predicate "call_insn_plt_operand"
29896
(match_test "PLT_ADDR_P (op)"))
29898
+;; Return if the code of this rtx pattern is a comparison.
29899
+(define_predicate "cmp_op"
29900
+ (match_code "gt,ge,gtu,geu,lt,le,ltu,leu"))
29901
Index: gcc/config/microblaze/microblaze.md
29902
===================================================================
29903
--- a/src/gcc/config/microblaze/microblaze.md (.../tags/gcc_4_8_2_release)
29904
+++ b/src/gcc/config/microblaze/microblaze.md (.../branches/gcc-4_8-branch)
29906
;; bshift Shift operations
29908
(define_attr "type"
29909
- "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"
29910
+ "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"
29911
(const_string "unknown"))
29913
;; Main data type used by the insn
29914
@@ -365,7 +365,8 @@
29915
[(set (match_operand:HI 0 "register_operand" "=r")
29916
(bswap:HI (match_operand:HI 1 "register_operand" "r")))]
29923
;;----------------------------------------------------------------
29924
@@ -1118,6 +1119,18 @@
29928
+;;Load and store reverse
29929
+(define_insn "movsi4_rev"
29930
+ [(set (match_operand:SI 0 "reg_or_mem_operand" "=r,Q")
29931
+ (bswap:SI (match_operand:SF 1 "reg_or_mem_operand" "Q,r")))]
29936
+ [(set_attr "type" "load,store")
29937
+ (set_attr "mode" "SI")
29938
+ (set_attr "length" "4,4")])
29940
;; 32-bit floating point moves
29942
(define_expand "movsf"
29943
@@ -1472,7 +1485,7 @@
29944
(set_attr "length" "124")]
29947
-(define_insn "*ashlri_reg"
29948
+(define_insn "*ashrsi_reg"
29949
[(set (match_operand:SI 0 "register_operand" "=&d")
29950
(ashiftrt:SI (match_operand:SI 1 "register_operand" "d")
29951
(match_operand:SI 2 "register_operand" "d")))]
29952
@@ -1561,7 +1574,7 @@
29953
(set_attr "length" "124")]
29956
-(define_insn "*lshlri_reg"
29957
+(define_insn "*lshrsi_reg"
29958
[(set (match_operand:SI 0 "register_operand" "=&d")
29959
(lshiftrt:SI (match_operand:SI 1 "register_operand" "d")
29960
(match_operand:SI 2 "register_operand" "d")))]
29961
@@ -1622,34 +1635,12 @@
29962
(set_attr "length" "4")]
29965
-(define_insn "signed_compare"
29966
- [(set (match_operand:SI 0 "register_operand" "=d")
29968
- [(match_operand:SI 1 "register_operand" "d")
29969
- (match_operand:SI 2 "register_operand" "d")] UNSPEC_CMP))]
29972
- [(set_attr "type" "arith")
29973
- (set_attr "mode" "SI")
29974
- (set_attr "length" "4")])
29976
-(define_insn "unsigned_compare"
29977
- [(set (match_operand:SI 0 "register_operand" "=d")
29979
- [(match_operand:SI 1 "register_operand" "d")
29980
- (match_operand:SI 2 "register_operand" "d")] UNSPEC_CMPU))]
29983
- [(set_attr "type" "arith")
29984
- (set_attr "mode" "SI")
29985
- (set_attr "length" "4")])
29987
;;----------------------------------------------------------------
29988
;; Setting a register from an floating point comparison.
29989
;;----------------------------------------------------------------
29990
(define_insn "cstoresf4"
29991
[(set (match_operand:SI 0 "register_operand" "=r")
29992
- (match_operator 1 "comparison_operator"
29993
+ (match_operator:SI 1 "ordered_comparison_operator"
29994
[(match_operand:SF 2 "register_operand" "r")
29995
(match_operand:SF 3 "register_operand" "r")]))]
29996
"TARGET_HARD_FLOAT"
29997
@@ -1678,7 +1669,7 @@
29999
(define_expand "cbranchsf4"
30001
- (if_then_else (match_operator 0 "comparison_operator"
30002
+ (if_then_else (match_operator 0 "ordered_comparison_operator"
30003
[(match_operand:SF 1 "register_operand")
30004
(match_operand:SF 2 "register_operand")])
30005
(label_ref (match_operand 3 ""))
30006
@@ -1717,6 +1708,47 @@
30007
(set_attr "length" "4")]
30010
+(define_insn "branch_compare"
30012
+ (if_then_else (match_operator:SI 0 "cmp_op"
30013
+ [(match_operand:SI 1 "register_operand" "d")
30014
+ (match_operand:SI 2 "register_operand" "d")
30016
+ (label_ref (match_operand 3))
30018
+ (clobber(reg:SI R_TMP))]
30021
+ operands[4] = gen_rtx_REG (SImode, MB_ABI_ASM_TEMP_REGNUM);
30022
+ enum rtx_code code = GET_CODE (operands[0]);
30024
+ if (code == GT || code == LE)
30026
+ output_asm_insn ("cmp\tr18,%z1,%z2", operands);
30027
+ code = swap_condition (code);
30029
+ else if (code == GTU || code == LEU)
30031
+ output_asm_insn ("cmpu\tr18,%z1,%z2", operands);
30032
+ code = swap_condition (code);
30034
+ else if (code == GE || code == LT)
30036
+ output_asm_insn ("cmp\tr18,%z2,%z1", operands);
30038
+ else if (code == GEU || code == LTU)
30040
+ output_asm_insn ("cmpu\tr18,%z2,%z1", operands);
30043
+ operands[0] = gen_rtx_fmt_ee (signed_condition (code), SImode, operands[4], const0_rtx);
30044
+ return "b%C0i%?\tr18,%3";
30046
+ [(set_attr "type" "branch")
30047
+ (set_attr "mode" "none")
30048
+ (set_attr "length" "12")]
30051
;;----------------------------------------------------------------
30052
;; Unconditional branches
30053
;;----------------------------------------------------------------
30054
@@ -2201,6 +2233,14 @@
30055
(set_attr "mode" "none")
30056
(set_attr "length" "4")])
30058
+;; Trap instruction pattern for __builtin_trap. Same as the glibc ABORT_INSTRUCTION
30059
+(define_insn "trap"
30060
+ [(trap_if (const_int 1) (const_int 0))]
30063
+ [(set_attr "type" "trap")]
30066
;; The insn to set GOT. The hardcoded number "8" accounts for $pc difference
30067
;; between "mfs" and "addik" instructions.
30068
(define_insn "set_got"
30069
Index: gcc/config/microblaze/microblaze.c
30070
===================================================================
30071
--- a/src/gcc/config/microblaze/microblaze.c (.../tags/gcc_4_8_2_release)
30072
+++ b/src/gcc/config/microblaze/microblaze.c (.../branches/gcc-4_8-branch)
30073
@@ -1609,21 +1609,28 @@
30074
microblaze_version_to_int (const char *version)
30077
- const char *tmpl = "vX.YY.Z";
30078
+ const char *tmpl = "vXX.YY.Z";
30088
{ /* Looking for major */
30089
- if (!(*p >= '0' && *p <= '9'))
30091
- iver += (int) (*p - '0');
30100
+ if (!(*p >= '0' && *p <= '9'))
30102
+ iver += (int) (*p - '0');
30106
else if (*v == 'Y')
30107
{ /* Looking for minor */
30108
if (!(*p >= '0' && *p <= '9'))
30109
@@ -3064,6 +3071,73 @@
30114
+microblaze_asm_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
30115
+ HOST_WIDE_INT delta, HOST_WIDE_INT vcall_offset,
30118
+ rtx this_rtx, insn, funexp;
30120
+ reload_completed = 1;
30121
+ epilogue_completed = 1;
30123
+ /* Mark the end of the (empty) prologue. */
30124
+ emit_note (NOTE_INSN_PROLOGUE_END);
30126
+ /* Find the "this" pointer. If the function returns a structure,
30127
+ the structure return pointer is in MB_ABI_FIRST_ARG_REGNUM. */
30128
+ if (aggregate_value_p (TREE_TYPE (TREE_TYPE (function)), function))
30129
+ this_rtx = gen_rtx_REG (Pmode, (MB_ABI_FIRST_ARG_REGNUM + 1));
30131
+ this_rtx = gen_rtx_REG (Pmode, MB_ABI_FIRST_ARG_REGNUM);
30133
+ /* Apply the constant offset, if required. */
30135
+ emit_insn (gen_addsi3 (this_rtx, this_rtx, GEN_INT (delta)));
30137
+ /* Apply the offset from the vtable, if required. */
30138
+ if (vcall_offset)
30140
+ rtx vcall_offset_rtx = GEN_INT (vcall_offset);
30141
+ rtx temp1 = gen_rtx_REG (Pmode, MB_ABI_TEMP1_REGNUM);
30143
+ emit_move_insn (temp1, gen_rtx_MEM (Pmode, this_rtx));
30145
+ rtx loc = gen_rtx_PLUS (Pmode, temp1, vcall_offset_rtx);
30146
+ emit_move_insn (temp1, gen_rtx_MEM (Pmode, loc));
30148
+ emit_insn (gen_addsi3 (this_rtx, this_rtx, temp1));
30151
+ /* Generate a tail call to the target function. */
30152
+ if (!TREE_USED (function))
30154
+ assemble_external (function);
30155
+ TREE_USED (function) = 1;
30158
+ funexp = XEXP (DECL_RTL (function), 0);
30159
+ rtx temp2 = gen_rtx_REG (Pmode, MB_ABI_TEMP2_REGNUM);
30162
+ emit_move_insn (temp2, expand_pic_symbol_ref (Pmode, funexp));
30164
+ emit_move_insn (temp2, funexp);
30166
+ emit_insn (gen_indirect_jump (temp2));
30168
+ /* Run just enough of rest_of_compilation. This sequence was
30169
+ "borrowed" from rs6000.c. */
30170
+ insn = get_insns ();
30171
+ shorten_branches (insn);
30172
+ final_start_function (insn, file, 1);
30173
+ final (insn, file, 1);
30174
+ final_end_function ();
30176
+ reload_completed = 0;
30177
+ epilogue_completed = 0;
30181
microblaze_expand_move (enum machine_mode mode, rtx operands[])
30183
@@ -3234,67 +3308,47 @@
30184
emit_move_insn (mem, fnaddr);
30187
-/* Emit instruction to perform compare.
30188
- cmp is (compare_op op0 op1). */
30190
-microblaze_emit_compare (enum machine_mode mode, rtx cmp, enum rtx_code *cmp_code)
30191
+/* Generate conditional branch -- first, generate test condition,
30192
+ second, generate correct branch instruction. */
30195
+microblaze_expand_conditional_branch (enum machine_mode mode, rtx operands[])
30197
- rtx cmp_op0 = XEXP (cmp, 0);
30198
- rtx cmp_op1 = XEXP (cmp, 1);
30199
+ enum rtx_code code = GET_CODE (operands[0]);
30200
+ rtx cmp_op0 = operands[1];
30201
+ rtx cmp_op1 = operands[2];
30202
+ rtx label1 = operands[3];
30203
rtx comp_reg = gen_reg_rtx (SImode);
30204
- enum rtx_code code = *cmp_code;
30208
gcc_assert ((GET_CODE (cmp_op0) == REG) || (GET_CODE (cmp_op0) == SUBREG));
30210
/* If comparing against zero, just test source reg. */
30211
- if (cmp_op1 == const0_rtx)
30213
+ if (cmp_op1 == const0_rtx)
30215
+ comp_reg = cmp_op0;
30216
+ condition = gen_rtx_fmt_ee (signed_condition (code), SImode, comp_reg, const0_rtx);
30217
+ emit_jump_insn (gen_condjump (condition, label1));
30220
- if (code == EQ || code == NE)
30221
+ else if (code == EQ || code == NE)
30223
/* Use xor for equal/not-equal comparison. */
30224
emit_insn (gen_xorsi3 (comp_reg, cmp_op0, cmp_op1));
30225
+ condition = gen_rtx_fmt_ee (signed_condition (code), SImode, comp_reg, const0_rtx);
30226
+ emit_jump_insn (gen_condjump (condition, label1));
30228
- else if (code == GT || code == GTU || code == LE || code == LEU)
30231
- /* MicroBlaze compare is not symmetrical. */
30232
- /* Swap argument order. */
30233
+ /* Generate compare and branch in single instruction. */
30234
cmp_op1 = force_reg (mode, cmp_op1);
30235
- if (code == GT || code == LE)
30236
- emit_insn (gen_signed_compare (comp_reg, cmp_op0, cmp_op1));
30238
- emit_insn (gen_unsigned_compare (comp_reg, cmp_op0, cmp_op1));
30239
- /* Translate test condition. */
30240
- *cmp_code = swap_condition (code);
30241
+ condition = gen_rtx_fmt_ee (code, mode, cmp_op0, cmp_op1);
30242
+ emit_jump_insn (gen_branch_compare(condition, cmp_op0, cmp_op1, label1));
30244
- else /* if (code == GE || code == GEU || code == LT || code == LTU) */
30246
- cmp_op1 = force_reg (mode, cmp_op1);
30247
- if (code == GE || code == LT)
30248
- emit_insn (gen_signed_compare (comp_reg, cmp_op1, cmp_op0));
30250
- emit_insn (gen_unsigned_compare (comp_reg, cmp_op1, cmp_op0));
30256
-/* Generate conditional branch -- first, generate test condition,
30257
- second, generate correct branch instruction. */
30260
-microblaze_expand_conditional_branch (enum machine_mode mode, rtx operands[])
30262
- enum rtx_code code = GET_CODE (operands[0]);
30266
- comp = microblaze_emit_compare (mode, operands[0], &code);
30267
- condition = gen_rtx_fmt_ee (signed_condition (code), SImode, comp, const0_rtx);
30268
- emit_jump_insn (gen_condjump (condition, operands[3]));
30272
microblaze_expand_conditional_branch_sf (rtx operands[])
30275
@@ -3501,6 +3555,12 @@
30276
#undef TARGET_SECONDARY_RELOAD
30277
#define TARGET_SECONDARY_RELOAD microblaze_secondary_reload
30279
+#undef TARGET_ASM_OUTPUT_MI_THUNK
30280
+#define TARGET_ASM_OUTPUT_MI_THUNK microblaze_asm_output_mi_thunk
30282
+#undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
30283
+#define TARGET_ASM_CAN_OUTPUT_MI_THUNK hook_bool_const_tree_hwi_hwi_const_tree_true
30285
#undef TARGET_SCHED_ADJUST_COST
30286
#define TARGET_SCHED_ADJUST_COST microblaze_adjust_cost
30288
Index: gcc/config/microblaze/microblaze.h
30289
===================================================================
30290
--- a/src/gcc/config/microblaze/microblaze.h (.../tags/gcc_4_8_2_release)
30291
+++ b/src/gcc/config/microblaze/microblaze.h (.../branches/gcc-4_8-branch)
30292
@@ -213,6 +213,12 @@
30293
#define STRICT_ALIGNMENT 1
30294
#define PCC_BITFIELD_TYPE_MATTERS 1
30297
+#define SIZE_TYPE "unsigned int"
30299
+#undef PTRDIFF_TYPE
30300
+#define PTRDIFF_TYPE "int"
30302
#define CONSTANT_ALIGNMENT(EXP, ALIGN) \
30303
((TREE_CODE (EXP) == STRING_CST || TREE_CODE (EXP) == CONSTRUCTOR) \
30304
&& (ALIGN) < BITS_PER_WORD \
30305
@@ -407,9 +413,6 @@
30306
|| GET_MODE (X) == VOIDmode) \
30307
? (GR_REGS) : (CLASS))))
30309
-#define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) \
30310
- (GET_MODE_CLASS (MODE) == MODE_INT)
30312
/* Stack layout; function entry, exit and calling. */
30314
#define STACK_GROWS_DOWNWARD
30315
Index: gcc/config/cris/cris.md
30316
===================================================================
30317
--- a/src/gcc/config/cris/cris.md (.../tags/gcc_4_8_2_release)
30318
+++ b/src/gcc/config/cris/cris.md (.../branches/gcc-4_8-branch)
30319
@@ -758,7 +758,7 @@
30320
(match_operand:SI 1 "const_int_operand" ""))
30321
(match_operand:SI 2 "register_operand" ""))])
30322
(match_operand 3 "register_operand" ""))
30323
- (set (match_operand:SI 4 "register_operand" "")
30324
+ (set (match_operand:SI 4 "cris_nonsp_register_operand" "")
30325
(plus:SI (mult:SI (match_dup 0)
30328
@@ -859,7 +859,7 @@
30329
(match_operand:SI 0 "cris_bdap_operand" "")
30330
(match_operand:SI 1 "cris_bdap_operand" ""))])
30331
(match_operand 2 "register_operand" ""))
30332
- (set (match_operand:SI 3 "register_operand" "")
30333
+ (set (match_operand:SI 3 "cris_nonsp_register_operand" "")
30334
(plus:SI (match_dup 0) (match_dup 1)))])]
30335
"reload_completed && reg_overlap_mentioned_p (operands[3], operands[2])"
30336
[(set (match_dup 4) (match_dup 2))
30337
@@ -3960,7 +3960,7 @@
30341
- [(set (match_operand 0 "register_operand" "")
30342
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
30344
4 "cris_operand_extend_operator"
30345
[(match_operand 1 "register_operand" "")
30346
@@ -3990,7 +3990,7 @@
30347
;; Call this op-extend-split-rx=rz
30350
- [(set (match_operand 0 "register_operand" "")
30351
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
30353
4 "cris_plus_or_bound_operator"
30354
[(match_operand 1 "register_operand" "")
30355
@@ -4018,7 +4018,7 @@
30356
;; Call this op-extend-split-swapped
30359
- [(set (match_operand 0 "register_operand" "")
30360
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
30362
4 "cris_plus_or_bound_operator"
30364
@@ -4044,7 +4044,7 @@
30365
;; bound. Call this op-extend-split-swapped-rx=rz.
30368
- [(set (match_operand 0 "register_operand" "")
30369
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
30371
4 "cris_plus_or_bound_operator"
30373
@@ -4075,7 +4075,7 @@
30374
;; Call this op-extend.
30377
- [(set (match_operand 0 "register_operand" "")
30378
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
30380
3 "cris_orthogonal_operator"
30381
[(match_operand 1 "register_operand" "")
30382
@@ -4099,7 +4099,7 @@
30383
;; Call this op-split-rx=rz
30386
- [(set (match_operand 0 "register_operand" "")
30387
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
30389
3 "cris_commutative_orth_op"
30390
[(match_operand 2 "memory_operand" "")
30391
@@ -4123,7 +4123,7 @@
30392
;; Call this op-split-swapped.
30395
- [(set (match_operand 0 "register_operand" "")
30396
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
30398
3 "cris_commutative_orth_op"
30399
[(match_operand 1 "register_operand" "")
30400
@@ -4146,7 +4146,7 @@
30401
;; Call this op-split-swapped-rx=rz.
30404
- [(set (match_operand 0 "register_operand" "")
30405
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
30407
3 "cris_orthogonal_operator"
30408
[(match_operand 2 "memory_operand" "")
30409
@@ -4555,10 +4555,11 @@
30410
;; We're not allowed to generate copies of registers with different mode
30411
;; until after reload; copying pseudos upsets reload. CVS as of
30412
;; 2001-08-24, unwind-dw2-fde.c, _Unwind_Find_FDE ICE in
30413
-;; cselib_invalidate_regno.
30414
+;; cselib_invalidate_regno. Also, don't do this for the stack-pointer,
30415
+;; as we don't want it set temporarily to an invalid value.
30417
(define_split ; indir_to_reg_split
30418
- [(set (match_operand 0 "register_operand" "")
30419
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
30420
(match_operand 1 "indirect_operand" ""))]
30422
&& REG_P (operands[0])
30423
@@ -4574,7 +4575,7 @@
30424
;; As the above, but MOVS and MOVU.
30427
- [(set (match_operand 0 "register_operand" "")
30428
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
30430
4 "cris_extend_operator"
30431
[(match_operand 1 "indirect_operand" "")]))]
30432
Index: gcc/config/cris/predicates.md
30433
===================================================================
30434
--- a/src/gcc/config/cris/predicates.md (.../tags/gcc_4_8_2_release)
30435
+++ b/src/gcc/config/cris/predicates.md (.../branches/gcc-4_8-branch)
30437
(match_test "cris_simple_address_operand (XEXP (op, 0),
30440
+(define_predicate "cris_nonsp_register_operand"
30441
+ (and (match_operand 0 "register_operand")
30442
+ (match_test "op != stack_pointer_rtx")))
30444
;; The caller needs to use :SI.
30445
(define_predicate "cris_bdap_sign_extend_operand"
30446
; Disabled until <URL:http://gcc.gnu.org/ml/gcc-patches/2005-10/msg01376.html>
30447
Index: gcc/config/m68k/m68k.c
30448
===================================================================
30449
--- a/src/gcc/config/m68k/m68k.c (.../tags/gcc_4_8_2_release)
30450
+++ b/src/gcc/config/m68k/m68k.c (.../branches/gcc-4_8-branch)
30451
@@ -3325,12 +3325,12 @@
30452
latehalf[1] = adjust_address (operands[1], SImode, 0);
30455
- /* If insn is effectively movd N(sp),-(sp) then we will do the
30456
- high word first. We should use the adjusted operand 1 (which is N+4(sp))
30457
- for the low word as well, to compensate for the first decrement of sp. */
30458
+ /* If insn is effectively movd N(REG),-(REG) then we will do the high
30459
+ word first. We should use the adjusted operand 1 (which is N+4(REG))
30460
+ for the low word as well, to compensate for the first decrement of
30462
if (optype0 == PUSHOP
30463
- && REGNO (XEXP (XEXP (operands[0], 0), 0)) == STACK_POINTER_REGNUM
30464
- && reg_overlap_mentioned_p (stack_pointer_rtx, operands[1]))
30465
+ && reg_overlap_mentioned_p (XEXP (XEXP (operands[0], 0), 0), operands[1]))
30466
operands[1] = middlehalf[1] = latehalf[1];
30468
/* For (set (reg:DI N) (mem:DI ... (reg:SI N) ...)),
30469
Index: gcc/config/aarch64/aarch64-simd.md
30470
===================================================================
30471
--- a/src/gcc/config/aarch64/aarch64-simd.md (.../tags/gcc_4_8_2_release)
30472
+++ b/src/gcc/config/aarch64/aarch64-simd.md (.../branches/gcc-4_8-branch)
30475
; Main data types used by the insntructions
30477
-(define_attr "simd_mode" "unknown,none,V8QI,V16QI,V4HI,V8HI,V2SI,V4SI,V2DI,V2SF,V4SF,V2DF,OI,CI,XI,DI,DF,SI,HI,QI"
30478
+(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"
30479
(const_string "unknown"))
30482
@@ -1548,12 +1548,12 @@
30486
- emit_insn (gen_aarch64_cmhs<mode> (mask, operands[4], operands[5]));
30487
+ emit_insn (gen_aarch64_cmgeu<mode> (mask, operands[4], operands[5]));
30492
- emit_insn (gen_aarch64_cmhi<mode> (mask, operands[4], operands[5]));
30493
+ emit_insn (gen_aarch64_cmgtu<mode> (mask, operands[4], operands[5]));
30497
@@ -3034,48 +3034,181 @@
30501
-;; cm(eq|ge|le|lt|gt)
30502
+;; cm(eq|ge|gt|lt|le)
30503
+;; Note, we have constraints for Dz and Z as different expanders
30504
+;; have different ideas of what should be passed to this pattern.
30506
-(define_insn "aarch64_cm<cmp><mode>"
30507
+(define_insn "aarch64_cm<optab><mode>"
30508
[(set (match_operand:<V_cmp_result> 0 "register_operand" "=w,w")
30509
- (unspec:<V_cmp_result>
30510
- [(match_operand:VSDQ_I_DI 1 "register_operand" "w,w")
30511
- (match_operand:VSDQ_I_DI 2 "aarch64_simd_reg_or_zero" "w,Z")]
30513
+ (neg:<V_cmp_result>
30514
+ (COMPARISONS:<V_cmp_result>
30515
+ (match_operand:VDQ 1 "register_operand" "w,w")
30516
+ (match_operand:VDQ 2 "aarch64_simd_reg_or_zero" "w,ZDz")
30520
- cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>
30521
- cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, #0"
30522
+ cm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>
30523
+ cm<optab>\t%<v>0<Vmtype>, %<v>1<Vmtype>, #0"
30524
[(set_attr "simd_type" "simd_cmp")
30525
(set_attr "simd_mode" "<MODE>")]
30529
+(define_insn_and_split "aarch64_cm<optab>di"
30530
+ [(set (match_operand:DI 0 "register_operand" "=w,w,r")
30533
+ (match_operand:DI 1 "register_operand" "w,w,r")
30534
+ (match_operand:DI 2 "aarch64_simd_reg_or_zero" "w,ZDz,r")
30538
+ cm<n_optab>\t%d0, %d<cmp_1>, %d<cmp_2>
30539
+ cm<optab>\t%d0, %d1, #0
30541
+ "reload_completed
30542
+ /* We need to prevent the split from
30543
+ happening in the 'w' constraint cases. */
30544
+ && GP_REGNUM_P (REGNO (operands[0]))
30545
+ && GP_REGNUM_P (REGNO (operands[1]))"
30546
+ [(set (reg:CC CC_REGNUM)
30550
+ (set (match_dup 0)
30553
+ (match_operand 3 "cc_register" "")
30554
+ (const_int 0))))]
30556
+ enum machine_mode mode = SELECT_CC_MODE (<CMP>, operands[1], operands[2]);
30557
+ rtx cc_reg = aarch64_gen_compare_reg (<CMP>, operands[1], operands[2]);
30558
+ rtx comparison = gen_rtx_<CMP> (mode, operands[1], operands[2]);
30559
+ emit_insn (gen_cstoredi_neg (operands[0], comparison, cc_reg));
30562
+ [(set_attr "simd_type" "simd_cmp")
30563
+ (set_attr "simd_mode" "DI")]
30566
-(define_insn "aarch64_cm<cmp><mode>"
30569
+(define_insn "aarch64_cm<optab><mode>"
30570
[(set (match_operand:<V_cmp_result> 0 "register_operand" "=w")
30571
- (unspec:<V_cmp_result>
30572
- [(match_operand:VSDQ_I_DI 1 "register_operand" "w")
30573
- (match_operand:VSDQ_I_DI 2 "register_operand" "w")]
30575
+ (neg:<V_cmp_result>
30576
+ (UCOMPARISONS:<V_cmp_result>
30577
+ (match_operand:VDQ 1 "register_operand" "w")
30578
+ (match_operand:VDQ 2 "register_operand" "w")
30581
- "cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
30582
+ "cm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>"
30583
[(set_attr "simd_type" "simd_cmp")
30584
(set_attr "simd_mode" "<MODE>")]
30587
-;; fcm(eq|ge|le|lt|gt)
30588
+(define_insn_and_split "aarch64_cm<optab>di"
30589
+ [(set (match_operand:DI 0 "register_operand" "=w,r")
30592
+ (match_operand:DI 1 "register_operand" "w,r")
30593
+ (match_operand:DI 2 "aarch64_simd_reg_or_zero" "w,r")
30597
+ cm<n_optab>\t%d0, %d<cmp_1>, %d<cmp_2>
30599
+ "reload_completed
30600
+ /* We need to prevent the split from
30601
+ happening in the 'w' constraint cases. */
30602
+ && GP_REGNUM_P (REGNO (operands[0]))
30603
+ && GP_REGNUM_P (REGNO (operands[1]))"
30604
+ [(set (reg:CC CC_REGNUM)
30608
+ (set (match_dup 0)
30611
+ (match_operand 3 "cc_register" "")
30612
+ (const_int 0))))]
30614
+ enum machine_mode mode = SELECT_CC_MODE (<CMP>, operands[1], operands[2]);
30615
+ rtx cc_reg = aarch64_gen_compare_reg (<CMP>, operands[1], operands[2]);
30616
+ rtx comparison = gen_rtx_<CMP> (mode, operands[1], operands[2]);
30617
+ emit_insn (gen_cstoredi_neg (operands[0], comparison, cc_reg));
30620
+ [(set_attr "simd_type" "simd_cmp")
30621
+ (set_attr "simd_mode" "DI")]
30624
-(define_insn "aarch64_cm<cmp><mode>"
30627
+(define_insn "aarch64_cmtst<mode>"
30628
+ [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w")
30629
+ (neg:<V_cmp_result>
30630
+ (ne:<V_cmp_result>
30632
+ (match_operand:VDQ 1 "register_operand" "w")
30633
+ (match_operand:VDQ 2 "register_operand" "w"))
30634
+ (vec_duplicate:<V_cmp_result> (const_int 0)))))]
30636
+ "cmtst\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
30637
+ [(set_attr "simd_type" "simd_cmp")
30638
+ (set_attr "simd_mode" "<MODE>")]
30641
+(define_insn_and_split "aarch64_cmtstdi"
30642
+ [(set (match_operand:DI 0 "register_operand" "=w,r")
30646
+ (match_operand:DI 1 "register_operand" "w,r")
30647
+ (match_operand:DI 2 "register_operand" "w,r"))
30648
+ (const_int 0))))]
30651
+ cmtst\t%d0, %d1, %d2
30653
+ "reload_completed
30654
+ /* We need to prevent the split from
30655
+ happening in the 'w' constraint cases. */
30656
+ && GP_REGNUM_P (REGNO (operands[0]))
30657
+ && GP_REGNUM_P (REGNO (operands[1]))"
30658
+ [(set (reg:CC_NZ CC_REGNUM)
30660
+ (and:DI (match_dup 1)
30663
+ (set (match_dup 0)
30666
+ (match_operand 3 "cc_register" "")
30667
+ (const_int 0))))]
30669
+ rtx and_tree = gen_rtx_AND (DImode, operands[1], operands[2]);
30670
+ enum machine_mode mode = SELECT_CC_MODE (NE, and_tree, const0_rtx);
30671
+ rtx cc_reg = aarch64_gen_compare_reg (NE, and_tree, const0_rtx);
30672
+ rtx comparison = gen_rtx_NE (mode, and_tree, const0_rtx);
30673
+ emit_insn (gen_cstoredi_neg (operands[0], comparison, cc_reg));
30676
+ [(set_attr "simd_type" "simd_cmp")
30677
+ (set_attr "simd_mode" "DI")]
30680
+;; fcm(eq|ge|gt|le|lt)
30682
+(define_insn "aarch64_cm<optab><mode>"
30683
[(set (match_operand:<V_cmp_result> 0 "register_operand" "=w,w")
30684
- (unspec:<V_cmp_result>
30685
- [(match_operand:VDQF 1 "register_operand" "w,w")
30686
- (match_operand:VDQF 2 "aarch64_simd_reg_or_zero" "w,Dz")]
30688
+ (neg:<V_cmp_result>
30689
+ (COMPARISONS:<V_cmp_result>
30690
+ (match_operand:VALLF 1 "register_operand" "w,w")
30691
+ (match_operand:VALLF 2 "aarch64_simd_reg_or_zero" "w,YDz")
30695
- fcm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>
30696
- fcm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, 0"
30697
+ fcm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>
30698
+ fcm<optab>\t%<v>0<Vmtype>, %<v>1<Vmtype>, 0"
30699
[(set_attr "simd_type" "simd_fcmp")
30700
(set_attr "simd_mode" "<MODE>")]
30702
Index: gcc/config/aarch64/predicates.md
30703
===================================================================
30704
--- a/src/gcc/config/aarch64/predicates.md (.../tags/gcc_4_8_2_release)
30705
+++ b/src/gcc/config/aarch64/predicates.md (.../branches/gcc-4_8-branch)
30707
(ior (match_operand 0 "register_operand")
30708
(match_test "op == const0_rtx"))))
30710
+(define_predicate "aarch64_reg_or_fp_zero"
30711
+ (and (match_code "reg,subreg,const_double")
30712
+ (ior (match_operand 0 "register_operand")
30713
+ (match_test "aarch64_float_const_zero_rtx_p (op)"))))
30715
(define_predicate "aarch64_reg_zero_or_m1_or_1"
30716
(and (match_code "reg,subreg,const_int")
30717
(ior (match_operand 0 "register_operand")
30718
Index: gcc/config/aarch64/arm_neon.h
30719
===================================================================
30720
--- a/src/gcc/config/aarch64/arm_neon.h (.../tags/gcc_4_8_2_release)
30721
+++ b/src/gcc/config/aarch64/arm_neon.h (.../branches/gcc-4_8-branch)
30722
@@ -19551,7 +19551,7 @@
30723
__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
30724
vcge_u8 (uint8x8_t __a, uint8x8_t __b)
30726
- return (uint8x8_t) __builtin_aarch64_cmhsv8qi ((int8x8_t) __a,
30727
+ return (uint8x8_t) __builtin_aarch64_cmgeuv8qi ((int8x8_t) __a,
30731
@@ -19558,7 +19558,7 @@
30732
__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
30733
vcge_u16 (uint16x4_t __a, uint16x4_t __b)
30735
- return (uint16x4_t) __builtin_aarch64_cmhsv4hi ((int16x4_t) __a,
30736
+ return (uint16x4_t) __builtin_aarch64_cmgeuv4hi ((int16x4_t) __a,
30740
@@ -19565,7 +19565,7 @@
30741
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
30742
vcge_u32 (uint32x2_t __a, uint32x2_t __b)
30744
- return (uint32x2_t) __builtin_aarch64_cmhsv2si ((int32x2_t) __a,
30745
+ return (uint32x2_t) __builtin_aarch64_cmgeuv2si ((int32x2_t) __a,
30749
@@ -19572,7 +19572,7 @@
30750
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
30751
vcge_u64 (uint64x1_t __a, uint64x1_t __b)
30753
- return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __a,
30754
+ return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __a,
30758
@@ -19603,7 +19603,7 @@
30759
__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
30760
vcgeq_u8 (uint8x16_t __a, uint8x16_t __b)
30762
- return (uint8x16_t) __builtin_aarch64_cmhsv16qi ((int8x16_t) __a,
30763
+ return (uint8x16_t) __builtin_aarch64_cmgeuv16qi ((int8x16_t) __a,
30767
@@ -19610,7 +19610,7 @@
30768
__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
30769
vcgeq_u16 (uint16x8_t __a, uint16x8_t __b)
30771
- return (uint16x8_t) __builtin_aarch64_cmhsv8hi ((int16x8_t) __a,
30772
+ return (uint16x8_t) __builtin_aarch64_cmgeuv8hi ((int16x8_t) __a,
30776
@@ -19617,7 +19617,7 @@
30777
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
30778
vcgeq_u32 (uint32x4_t __a, uint32x4_t __b)
30780
- return (uint32x4_t) __builtin_aarch64_cmhsv4si ((int32x4_t) __a,
30781
+ return (uint32x4_t) __builtin_aarch64_cmgeuv4si ((int32x4_t) __a,
30785
@@ -19624,7 +19624,7 @@
30786
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
30787
vcgeq_u64 (uint64x2_t __a, uint64x2_t __b)
30789
- return (uint64x2_t) __builtin_aarch64_cmhsv2di ((int64x2_t) __a,
30790
+ return (uint64x2_t) __builtin_aarch64_cmgeuv2di ((int64x2_t) __a,
30794
@@ -19637,7 +19637,7 @@
30795
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
30796
vcged_u64 (uint64x1_t __a, uint64x1_t __b)
30798
- return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __a,
30799
+ return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __a,
30803
@@ -19676,7 +19676,7 @@
30804
__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
30805
vcgt_u8 (uint8x8_t __a, uint8x8_t __b)
30807
- return (uint8x8_t) __builtin_aarch64_cmhiv8qi ((int8x8_t) __a,
30808
+ return (uint8x8_t) __builtin_aarch64_cmgtuv8qi ((int8x8_t) __a,
30812
@@ -19683,7 +19683,7 @@
30813
__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
30814
vcgt_u16 (uint16x4_t __a, uint16x4_t __b)
30816
- return (uint16x4_t) __builtin_aarch64_cmhiv4hi ((int16x4_t) __a,
30817
+ return (uint16x4_t) __builtin_aarch64_cmgtuv4hi ((int16x4_t) __a,
30821
@@ -19690,7 +19690,7 @@
30822
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
30823
vcgt_u32 (uint32x2_t __a, uint32x2_t __b)
30825
- return (uint32x2_t) __builtin_aarch64_cmhiv2si ((int32x2_t) __a,
30826
+ return (uint32x2_t) __builtin_aarch64_cmgtuv2si ((int32x2_t) __a,
30830
@@ -19697,7 +19697,7 @@
30831
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
30832
vcgt_u64 (uint64x1_t __a, uint64x1_t __b)
30834
- return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __a,
30835
+ return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __a,
30839
@@ -19728,7 +19728,7 @@
30840
__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
30841
vcgtq_u8 (uint8x16_t __a, uint8x16_t __b)
30843
- return (uint8x16_t) __builtin_aarch64_cmhiv16qi ((int8x16_t) __a,
30844
+ return (uint8x16_t) __builtin_aarch64_cmgtuv16qi ((int8x16_t) __a,
30848
@@ -19735,7 +19735,7 @@
30849
__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
30850
vcgtq_u16 (uint16x8_t __a, uint16x8_t __b)
30852
- return (uint16x8_t) __builtin_aarch64_cmhiv8hi ((int16x8_t) __a,
30853
+ return (uint16x8_t) __builtin_aarch64_cmgtuv8hi ((int16x8_t) __a,
30857
@@ -19742,7 +19742,7 @@
30858
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
30859
vcgtq_u32 (uint32x4_t __a, uint32x4_t __b)
30861
- return (uint32x4_t) __builtin_aarch64_cmhiv4si ((int32x4_t) __a,
30862
+ return (uint32x4_t) __builtin_aarch64_cmgtuv4si ((int32x4_t) __a,
30866
@@ -19749,7 +19749,7 @@
30867
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
30868
vcgtq_u64 (uint64x2_t __a, uint64x2_t __b)
30870
- return (uint64x2_t) __builtin_aarch64_cmhiv2di ((int64x2_t) __a,
30871
+ return (uint64x2_t) __builtin_aarch64_cmgtuv2di ((int64x2_t) __a,
30875
@@ -19762,7 +19762,7 @@
30876
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
30877
vcgtd_u64 (uint64x1_t __a, uint64x1_t __b)
30879
- return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __a,
30880
+ return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __a,
30884
@@ -19801,7 +19801,7 @@
30885
__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
30886
vcle_u8 (uint8x8_t __a, uint8x8_t __b)
30888
- return (uint8x8_t) __builtin_aarch64_cmhsv8qi ((int8x8_t) __b,
30889
+ return (uint8x8_t) __builtin_aarch64_cmgeuv8qi ((int8x8_t) __b,
30893
@@ -19808,7 +19808,7 @@
30894
__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
30895
vcle_u16 (uint16x4_t __a, uint16x4_t __b)
30897
- return (uint16x4_t) __builtin_aarch64_cmhsv4hi ((int16x4_t) __b,
30898
+ return (uint16x4_t) __builtin_aarch64_cmgeuv4hi ((int16x4_t) __b,
30902
@@ -19815,7 +19815,7 @@
30903
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
30904
vcle_u32 (uint32x2_t __a, uint32x2_t __b)
30906
- return (uint32x2_t) __builtin_aarch64_cmhsv2si ((int32x2_t) __b,
30907
+ return (uint32x2_t) __builtin_aarch64_cmgeuv2si ((int32x2_t) __b,
30911
@@ -19822,7 +19822,7 @@
30912
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
30913
vcle_u64 (uint64x1_t __a, uint64x1_t __b)
30915
- return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __b,
30916
+ return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __b,
30920
@@ -19853,7 +19853,7 @@
30921
__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
30922
vcleq_u8 (uint8x16_t __a, uint8x16_t __b)
30924
- return (uint8x16_t) __builtin_aarch64_cmhsv16qi ((int8x16_t) __b,
30925
+ return (uint8x16_t) __builtin_aarch64_cmgeuv16qi ((int8x16_t) __b,
30929
@@ -19860,7 +19860,7 @@
30930
__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
30931
vcleq_u16 (uint16x8_t __a, uint16x8_t __b)
30933
- return (uint16x8_t) __builtin_aarch64_cmhsv8hi ((int16x8_t) __b,
30934
+ return (uint16x8_t) __builtin_aarch64_cmgeuv8hi ((int16x8_t) __b,
30938
@@ -19867,7 +19867,7 @@
30939
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
30940
vcleq_u32 (uint32x4_t __a, uint32x4_t __b)
30942
- return (uint32x4_t) __builtin_aarch64_cmhsv4si ((int32x4_t) __b,
30943
+ return (uint32x4_t) __builtin_aarch64_cmgeuv4si ((int32x4_t) __b,
30947
@@ -19874,7 +19874,7 @@
30948
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
30949
vcleq_u64 (uint64x2_t __a, uint64x2_t __b)
30951
- return (uint64x2_t) __builtin_aarch64_cmhsv2di ((int64x2_t) __b,
30952
+ return (uint64x2_t) __builtin_aarch64_cmgeuv2di ((int64x2_t) __b,
30956
@@ -19919,7 +19919,7 @@
30957
__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
30958
vclt_u8 (uint8x8_t __a, uint8x8_t __b)
30960
- return (uint8x8_t) __builtin_aarch64_cmhiv8qi ((int8x8_t) __b,
30961
+ return (uint8x8_t) __builtin_aarch64_cmgtuv8qi ((int8x8_t) __b,
30965
@@ -19926,7 +19926,7 @@
30966
__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
30967
vclt_u16 (uint16x4_t __a, uint16x4_t __b)
30969
- return (uint16x4_t) __builtin_aarch64_cmhiv4hi ((int16x4_t) __b,
30970
+ return (uint16x4_t) __builtin_aarch64_cmgtuv4hi ((int16x4_t) __b,
30974
@@ -19933,7 +19933,7 @@
30975
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
30976
vclt_u32 (uint32x2_t __a, uint32x2_t __b)
30978
- return (uint32x2_t) __builtin_aarch64_cmhiv2si ((int32x2_t) __b,
30979
+ return (uint32x2_t) __builtin_aarch64_cmgtuv2si ((int32x2_t) __b,
30983
@@ -19940,7 +19940,7 @@
30984
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
30985
vclt_u64 (uint64x1_t __a, uint64x1_t __b)
30987
- return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __b,
30988
+ return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __b,
30992
@@ -19971,7 +19971,7 @@
30993
__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
30994
vcltq_u8 (uint8x16_t __a, uint8x16_t __b)
30996
- return (uint8x16_t) __builtin_aarch64_cmhiv16qi ((int8x16_t) __b,
30997
+ return (uint8x16_t) __builtin_aarch64_cmgtuv16qi ((int8x16_t) __b,
31001
@@ -19978,7 +19978,7 @@
31002
__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
31003
vcltq_u16 (uint16x8_t __a, uint16x8_t __b)
31005
- return (uint16x8_t) __builtin_aarch64_cmhiv8hi ((int16x8_t) __b,
31006
+ return (uint16x8_t) __builtin_aarch64_cmgtuv8hi ((int16x8_t) __b,
31010
@@ -19985,7 +19985,7 @@
31011
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
31012
vcltq_u32 (uint32x4_t __a, uint32x4_t __b)
31014
- return (uint32x4_t) __builtin_aarch64_cmhiv4si ((int32x4_t) __b,
31015
+ return (uint32x4_t) __builtin_aarch64_cmgtuv4si ((int32x4_t) __b,
31019
@@ -19992,7 +19992,7 @@
31020
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
31021
vcltq_u64 (uint64x2_t __a, uint64x2_t __b)
31023
- return (uint64x2_t) __builtin_aarch64_cmhiv2di ((int64x2_t) __b,
31024
+ return (uint64x2_t) __builtin_aarch64_cmgtuv2di ((int64x2_t) __b,
31028
Index: gcc/config/aarch64/aarch64.md
31029
===================================================================
31030
--- a/src/gcc/config/aarch64/aarch64.md (.../tags/gcc_4_8_2_release)
31031
+++ b/src/gcc/config/aarch64/aarch64.md (.../branches/gcc-4_8-branch)
31032
@@ -2211,7 +2211,7 @@
31033
(set_attr "mode" "SI")]
31036
-(define_insn "*cstore<mode>_neg"
31037
+(define_insn "cstore<mode>_neg"
31038
[(set (match_operand:ALLI 0 "register_operand" "=r")
31039
(neg:ALLI (match_operator:ALLI 1 "aarch64_comparison_operator"
31040
[(match_operand 2 "cc_register" "") (const_int 0)])))]
31041
Index: gcc/config/aarch64/aarch64-simd-builtins.def
31042
===================================================================
31043
--- a/src/gcc/config/aarch64/aarch64-simd-builtins.def (.../tags/gcc_4_8_2_release)
31044
+++ b/src/gcc/config/aarch64/aarch64-simd-builtins.def (.../branches/gcc-4_8-branch)
31045
@@ -217,8 +217,8 @@
31046
BUILTIN_VSDQ_I_DI (BINOP, cmle)
31047
BUILTIN_VSDQ_I_DI (BINOP, cmlt)
31048
/* Implemented by aarch64_cm<cmp><mode>. */
31049
- BUILTIN_VSDQ_I_DI (BINOP, cmhs)
31050
- BUILTIN_VSDQ_I_DI (BINOP, cmhi)
31051
+ BUILTIN_VSDQ_I_DI (BINOP, cmgeu)
31052
+ BUILTIN_VSDQ_I_DI (BINOP, cmgtu)
31053
BUILTIN_VSDQ_I_DI (BINOP, cmtst)
31055
/* Implemented by aarch64_<fmaxmin><mode>. */
31056
Index: gcc/config/aarch64/aarch64.c
31057
===================================================================
31058
--- a/src/gcc/config/aarch64/aarch64.c (.../tags/gcc_4_8_2_release)
31059
+++ b/src/gcc/config/aarch64/aarch64.c (.../branches/gcc-4_8-branch)
31060
@@ -2274,7 +2274,7 @@
31061
if (ncount < zcount)
31063
emit_move_insn (gen_rtx_REG (Pmode, regnum),
31064
- GEN_INT ((~val) & 0xffff));
31065
+ GEN_INT (val | ~(HOST_WIDE_INT) 0xffff));
31069
Index: gcc/config/aarch64/iterators.md
31070
===================================================================
31071
--- a/src/gcc/config/aarch64/iterators.md (.../tags/gcc_4_8_2_release)
31072
+++ b/src/gcc/config/aarch64/iterators.md (.../branches/gcc-4_8-branch)
31074
;; Vector Float modes.
31075
(define_mode_iterator VDQF [V2SF V4SF V2DF])
31077
+;; All Float modes.
31078
+(define_mode_iterator VALLF [V2SF V4SF V2DF SF DF])
31080
;; Vector Float modes with 2 elements.
31081
(define_mode_iterator V2F [V2SF V2DF])
31083
@@ -213,13 +216,6 @@
31084
UNSPEC_URSHL ; Used in aarch64-simd.md.
31085
UNSPEC_SQRSHL ; Used in aarch64-simd.md.
31086
UNSPEC_UQRSHL ; Used in aarch64-simd.md.
31087
- UNSPEC_CMEQ ; Used in aarch64-simd.md.
31088
- UNSPEC_CMLE ; Used in aarch64-simd.md.
31089
- UNSPEC_CMLT ; Used in aarch64-simd.md.
31090
- UNSPEC_CMGE ; Used in aarch64-simd.md.
31091
- UNSPEC_CMGT ; Used in aarch64-simd.md.
31092
- UNSPEC_CMHS ; Used in aarch64-simd.md.
31093
- UNSPEC_CMHI ; Used in aarch64-simd.md.
31094
UNSPEC_SSLI ; Used in aarch64-simd.md.
31095
UNSPEC_USLI ; Used in aarch64-simd.md.
31096
UNSPEC_SSRI ; Used in aarch64-simd.md.
31097
@@ -227,7 +223,6 @@
31098
UNSPEC_SSHLL ; Used in aarch64-simd.md.
31099
UNSPEC_USHLL ; Used in aarch64-simd.md.
31100
UNSPEC_ADDP ; Used in aarch64-simd.md.
31101
- UNSPEC_CMTST ; Used in aarch64-simd.md.
31102
UNSPEC_FMAX ; Used in aarch64-simd.md.
31103
UNSPEC_FMIN ; Used in aarch64-simd.md.
31104
UNSPEC_BSL ; Used in aarch64-simd.md.
31105
@@ -251,6 +246,7 @@
31107
;; For scalar usage of vector/FP registers
31108
(define_mode_attr v [(QI "b") (HI "h") (SI "s") (DI "d")
31109
+ (SF "s") (DF "d")
31110
(V8QI "") (V16QI "")
31111
(V4HI "") (V8HI "")
31112
(V2SI "") (V4SI "")
31113
@@ -305,7 +301,8 @@
31114
(V4SF ".4s") (V2DF ".2d")
31121
;; Register suffix narrowed modes for VQN.
31122
(define_mode_attr Vmntype [(V8HI ".8b") (V4SI ".4h")
31123
@@ -444,7 +441,8 @@
31124
(V2SI "V2SI") (V4SI "V4SI")
31125
(DI "DI") (V2DI "V2DI")
31126
(V2SF "V2SI") (V4SF "V4SI")
31128
+ (V2DF "V2DI") (DF "DI")
31131
;; Lower case mode of results of comparison operations.
31132
(define_mode_attr v_cmp_result [(V8QI "v8qi") (V16QI "v16qi")
31133
@@ -452,7 +450,8 @@
31134
(V2SI "v2si") (V4SI "v4si")
31135
(DI "di") (V2DI "v2di")
31136
(V2SF "v2si") (V4SF "v4si")
31138
+ (V2DF "v2di") (DF "di")
31141
;; Vm for lane instructions is restricted to FP_LO_REGS.
31142
(define_mode_attr vwx [(V4HI "x") (V8HI "x") (HI "x")
31143
@@ -543,6 +542,12 @@
31144
;; Code iterator for signed variants of vector saturating binary ops.
31145
(define_code_iterator SBINQOPS [ss_plus ss_minus])
31147
+;; Comparison operators for <F>CM.
31148
+(define_code_iterator COMPARISONS [lt le eq ge gt])
31150
+;; Unsigned comparison operators.
31151
+(define_code_iterator UCOMPARISONS [ltu leu geu gtu])
31153
;; -------------------------------------------------------------------
31155
;; -------------------------------------------------------------------
31156
@@ -571,8 +576,29 @@
31169
+;; For comparison operators we use the FCM* and CM* instructions.
31170
+;; As there are no CMLE or CMLT instructions which act on 3 vector
31171
+;; operands, we must use CMGE or CMGT and swap the order of the
31172
+;; source operands.
31174
+(define_code_attr n_optab [(lt "gt") (le "ge") (eq "eq") (ge "ge") (gt "gt")
31175
+ (ltu "hi") (leu "hs") (geu "hs") (gtu "hi")])
31176
+(define_code_attr cmp_1 [(lt "2") (le "2") (eq "1") (ge "1") (gt "1")
31177
+ (ltu "2") (leu "2") (geu "1") (gtu "1")])
31178
+(define_code_attr cmp_2 [(lt "1") (le "1") (eq "2") (ge "2") (gt "2")
31179
+ (ltu "1") (leu "1") (geu "2") (gtu "2")])
31181
+(define_code_attr CMP [(lt "LT") (le "LE") (eq "EQ") (ge "GE") (gt "GT")
31182
+ (ltu "LTU") (leu "LEU") (geu "GEU") (gtu "GTU")])
31184
;; Optab prefix for sign/zero-extending operations
31185
(define_code_attr su_optab [(sign_extend "") (zero_extend "u")
31186
(div "") (udiv "u")
31187
@@ -680,11 +706,6 @@
31188
UNSPEC_SQSHRN UNSPEC_UQSHRN
31189
UNSPEC_SQRSHRN UNSPEC_UQRSHRN])
31191
-(define_int_iterator VCMP_S [UNSPEC_CMEQ UNSPEC_CMGE UNSPEC_CMGT
31192
- UNSPEC_CMLE UNSPEC_CMLT])
31194
-(define_int_iterator VCMP_U [UNSPEC_CMHS UNSPEC_CMHI UNSPEC_CMTST])
31196
(define_int_iterator PERMUTE [UNSPEC_ZIP1 UNSPEC_ZIP2
31197
UNSPEC_TRN1 UNSPEC_TRN2
31198
UNSPEC_UZP1 UNSPEC_UZP2])
31199
@@ -768,12 +789,6 @@
31200
(UNSPEC_RADDHN2 "add")
31201
(UNSPEC_RSUBHN2 "sub")])
31203
-(define_int_attr cmp [(UNSPEC_CMGE "ge") (UNSPEC_CMGT "gt")
31204
- (UNSPEC_CMLE "le") (UNSPEC_CMLT "lt")
31205
- (UNSPEC_CMEQ "eq")
31206
- (UNSPEC_CMHS "hs") (UNSPEC_CMHI "hi")
31207
- (UNSPEC_CMTST "tst")])
31209
(define_int_attr offsetlr [(UNSPEC_SSLI "1") (UNSPEC_USLI "1")
31210
(UNSPEC_SSRI "0") (UNSPEC_USRI "0")])
31212
Index: gcc/config/rs6000/rs6000.c
31213
===================================================================
31214
--- a/src/gcc/config/rs6000/rs6000.c (.../tags/gcc_4_8_2_release)
31215
+++ b/src/gcc/config/rs6000/rs6000.c (.../branches/gcc-4_8-branch)
31216
@@ -5428,12 +5428,13 @@
31222
if (TARGET_E500_DOUBLE)
31223
return (SPE_CONST_OFFSET_OK (offset)
31224
&& SPE_CONST_OFFSET_OK (offset + 8));
31225
+ /* fall through */
31232
Index: gcc/config/rs6000/rs6000.md
31233
===================================================================
31234
--- a/src/gcc/config/rs6000/rs6000.md (.../tags/gcc_4_8_2_release)
31235
+++ b/src/gcc/config/rs6000/rs6000.md (.../branches/gcc-4_8-branch)
31236
@@ -2412,7 +2412,7 @@
31237
(match_operand:SI 2 "gpc_reg_operand" "r,r"))
31239
(clobber (match_scratch:SI 3 "=r,r"))]
31245
@@ -2425,7 +2425,7 @@
31246
(match_operand:SI 2 "gpc_reg_operand" ""))
31248
(clobber (match_scratch:SI 3 ""))]
31249
- "reload_completed"
31250
+ "TARGET_32BIT && reload_completed"
31251
[(set (match_dup 3)
31252
(mult:SI (match_dup 1) (match_dup 2)))
31254
@@ -2440,7 +2440,7 @@
31256
(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
31257
(mult:SI (match_dup 1) (match_dup 2)))]
31263
@@ -2454,7 +2454,7 @@
31265
(set (match_operand:SI 0 "gpc_reg_operand" "")
31266
(mult:SI (match_dup 1) (match_dup 2)))]
31267
- "reload_completed"
31268
+ "TARGET_32BIT && reload_completed"
31269
[(set (match_dup 0)
31270
(mult:SI (match_dup 1) (match_dup 2)))
31272
Index: gcc/config/tilepro/tilepro-c.c
31273
===================================================================
31274
--- a/src/gcc/config/tilepro/tilepro-c.c (.../tags/gcc_4_8_2_release)
31275
+++ b/src/gcc/config/tilepro/tilepro-c.c (.../branches/gcc-4_8-branch)
31277
builtin_define ("__tile_chip__=1");
31278
builtin_define ("__tile_chip_rev__=0");
31280
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
31281
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
31282
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
31283
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
31285
TILEPRO_CPU_CPP_ENDIAN_BUILTINS ();
31286
GNU_USER_TARGET_OS_CPP_BUILTINS ();
31288
Index: gcc/config/tilepro/tilepro.c
31289
===================================================================
31290
--- a/src/gcc/config/tilepro/tilepro.c (.../tags/gcc_4_8_2_release)
31291
+++ b/src/gcc/config/tilepro/tilepro.c (.../branches/gcc-4_8-branch)
31292
@@ -3167,6 +3167,12 @@
31297
+ /* If we are generating a prefetch, tell the scheduler not to move
31299
+ if (GET_CODE (pat) == PREFETCH)
31300
+ PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
31305
Index: gcc/config/tilepro/tilepro.md
31306
===================================================================
31307
--- a/src/gcc/config/tilepro/tilepro.md (.../tags/gcc_4_8_2_release)
31308
+++ b/src/gcc/config/tilepro/tilepro.md (.../branches/gcc-4_8-branch)
31309
@@ -795,7 +795,7 @@
31311
(define_expand "ctzdi2"
31312
[(set (match_operand:DI 0 "register_operand" "")
31313
- (ctz:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
31314
+ (ctz:DI (match_operand:DI 1 "register_operand" "")))]
31317
rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, result;
31318
@@ -823,7 +823,7 @@
31320
(define_expand "clzdi2"
31321
[(set (match_operand:DI 0 "register_operand" "")
31322
- (clz:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
31323
+ (clz:DI (match_operand:DI 1 "register_operand" "")))]
31326
rtx lo, hi, clz_lo, clz_hi, clz_lo_plus_32, result;
31327
@@ -851,7 +851,7 @@
31329
(define_expand "ffsdi2"
31330
[(set (match_operand:DI 0 "register_operand" "")
31331
- (ffs:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
31332
+ (ffs:DI (match_operand:DI 1 "register_operand" "")))]
31335
rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, ctz, ctz_plus_1,ctz_cond;
31336
Index: gcc/config/arm/arm.c
31337
===================================================================
31338
--- a/src/gcc/config/arm/arm.c (.../tags/gcc_4_8_2_release)
31339
+++ b/src/gcc/config/arm/arm.c (.../branches/gcc-4_8-branch)
31340
@@ -5425,7 +5425,8 @@
31341
if (!crtl->uses_pic_offset_table)
31343
gcc_assert (can_create_pseudo_p ());
31344
- if (arm_pic_register != INVALID_REGNUM)
31345
+ if (arm_pic_register != INVALID_REGNUM
31346
+ && !(TARGET_THUMB1 && arm_pic_register > LAST_LO_REGNUM))
31348
if (!cfun->machine->pic_reg)
31349
cfun->machine->pic_reg = gen_rtx_REG (Pmode, arm_pic_register);
31350
@@ -5451,7 +5452,12 @@
31351
crtl->uses_pic_offset_table = 1;
31354
- arm_load_pic_register (0UL);
31355
+ if (TARGET_THUMB1 && arm_pic_register != INVALID_REGNUM
31356
+ && arm_pic_register > LAST_LO_REGNUM)
31357
+ emit_move_insn (cfun->machine->pic_reg,
31358
+ gen_rtx_REG (Pmode, arm_pic_register));
31360
+ arm_load_pic_register (0UL);
31362
seq = get_insns ();
31364
@@ -5709,6 +5715,14 @@
31365
emit_insn (gen_movsi (pic_offset_table_rtx, pic_tmp));
31366
emit_insn (gen_pic_add_dot_plus_four (pic_reg, pic_reg, labelno));
31368
+ else if (arm_pic_register != INVALID_REGNUM
31369
+ && arm_pic_register > LAST_LO_REGNUM
31370
+ && REGNO (pic_reg) <= LAST_LO_REGNUM)
31372
+ emit_insn (gen_pic_load_addr_unified (pic_reg, pic_rtx, labelno));
31373
+ emit_move_insn (gen_rtx_REG (Pmode, arm_pic_register), pic_reg);
31374
+ emit_use (gen_rtx_REG (Pmode, arm_pic_register));
31377
emit_insn (gen_pic_load_addr_unified (pic_reg, pic_rtx, labelno));
31379
@@ -21279,7 +21293,11 @@
31383
- op[argc] = expand_normal (arg[argc]);
31384
+ /* Use EXPAND_MEMORY for NEON_ARG_MEMORY to ensure a MEM_P
31386
+ op[argc] = expand_expr (arg[argc], NULL_RTX, VOIDmode,
31387
+ (thisarg == NEON_ARG_MEMORY
31388
+ ? EXPAND_MEMORY : EXPAND_NORMAL));
31392
@@ -21298,6 +21316,9 @@
31395
case NEON_ARG_MEMORY:
31396
+ /* Check if expand failed. */
31397
+ if (op[argc] == const0_rtx)
31399
gcc_assert (MEM_P (op[argc]));
31400
PUT_MODE (op[argc], mode[argc]);
31401
/* ??? arm_neon.h uses the same built-in functions for signed
31402
@@ -23555,6 +23576,7 @@
31403
num_regs = bit_count (saved_regs_mask);
31404
if ((offsets->outgoing_args != (1 + num_regs)) || cfun->calls_alloca)
31406
+ emit_insn (gen_blockage ());
31407
/* Unwind the stack to just below the saved registers. */
31408
emit_insn (gen_addsi3 (stack_pointer_rtx,
31409
hard_frame_pointer_rtx,
31410
@@ -23583,8 +23605,8 @@
31412
if (crtl->calls_eh_return)
31413
emit_insn (gen_addsi3 (stack_pointer_rtx,
31414
- stack_pointer_rtx,
31415
- GEN_INT (ARM_EH_STACKADJ_REGNUM)));
31416
+ stack_pointer_rtx,
31417
+ gen_rtx_REG (SImode, ARM_EH_STACKADJ_REGNUM)));
31419
if (IS_STACKALIGN (func_type))
31420
/* Restore the original stack pointer. Before prologue, the stack was
31421
Index: gcc/config/arm/arm.h
31422
===================================================================
31423
--- a/src/gcc/config/arm/arm.h (.../tags/gcc_4_8_2_release)
31424
+++ b/src/gcc/config/arm/arm.h (.../branches/gcc-4_8-branch)
31425
@@ -1213,11 +1213,15 @@
31427
In big-endian mode, modes greater than word size (i.e. DFmode) are stored in
31428
VFP registers in little-endian order. We can't describe that accurately to
31429
- GCC, so avoid taking subregs of such values. */
31430
-#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
31431
- (TARGET_VFP && TARGET_BIG_END \
31432
- && (GET_MODE_SIZE (FROM) > UNITS_PER_WORD \
31433
- || GET_MODE_SIZE (TO) > UNITS_PER_WORD) \
31434
+ GCC, so avoid taking subregs of such values.
31435
+ The only exception is going from a 128-bit to a 64-bit type. In that case
31436
+ the data layout happens to be consistent for big-endian, so we explicitly allow
31438
+#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
31439
+ (TARGET_VFP && TARGET_BIG_END \
31440
+ && !(GET_MODE_SIZE (FROM) == 16 && GET_MODE_SIZE (TO) == 8) \
31441
+ && (GET_MODE_SIZE (FROM) > UNITS_PER_WORD \
31442
+ || GET_MODE_SIZE (TO) > UNITS_PER_WORD) \
31443
&& reg_classes_intersect_p (VFP_REGS, (CLASS)))
31445
/* The class value for index registers, and the one for base regs. */
31446
Index: gcc/config/arm/vfp.md
31447
===================================================================
31448
--- a/src/gcc/config/arm/vfp.md (.../tags/gcc_4_8_2_release)
31449
+++ b/src/gcc/config/arm/vfp.md (.../branches/gcc-4_8-branch)
31450
@@ -1264,6 +1264,7 @@
31451
"TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
31452
"vrint<vrint_variant>%?.<V_if_elem>\\t%<V_reg>0, %<V_reg>1"
31453
[(set_attr "predicable" "<vrint_predicable>")
31454
+ (set_attr "conds" "<vrint_conds>")
31455
(set_attr "type" "f_rint<vfp_type>")]
31458
@@ -1280,7 +1281,8 @@
31459
(match_operand:SDF 2 "register_operand" "<F_constraint>")))]
31460
"TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
31461
"vmaxnm.<V_if_elem>\\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
31462
- [(set_attr "type" "f_minmax<vfp_type>")]
31463
+ [(set_attr "type" "f_minmax<vfp_type>")
31464
+ (set_attr "conds" "unconditional")]
31467
(define_insn "smin<mode>3"
31468
@@ -1289,7 +1291,8 @@
31469
(match_operand:SDF 2 "register_operand" "<F_constraint>")))]
31470
"TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
31471
"vminnm.<V_if_elem>\\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
31472
- [(set_attr "type" "f_minmax<vfp_type>")]
31473
+ [(set_attr "type" "f_minmax<vfp_type>")
31474
+ (set_attr "conds" "unconditional")]
31477
;; Unimplemented insns:
31478
Index: gcc/config/arm/ldmstm.md
31479
===================================================================
31480
--- a/src/gcc/config/arm/ldmstm.md (.../tags/gcc_4_8_2_release)
31481
+++ b/src/gcc/config/arm/ldmstm.md (.../branches/gcc-4_8-branch)
31482
@@ -23,15 +23,15 @@
31484
(define_insn "*ldm4_ia"
31485
[(match_parallel 0 "load_multiple_operation"
31486
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
31487
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
31488
(mem:SI (match_operand:SI 5 "s_register_operand" "rk")))
31489
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
31490
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
31491
(mem:SI (plus:SI (match_dup 5)
31493
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
31494
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
31495
(mem:SI (plus:SI (match_dup 5)
31497
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
31498
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
31499
(mem:SI (plus:SI (match_dup 5)
31500
(const_int 12))))])]
31501
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
31502
@@ -41,15 +41,15 @@
31504
(define_insn "*thumb_ldm4_ia"
31505
[(match_parallel 0 "load_multiple_operation"
31506
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
31507
+ [(set (match_operand:SI 1 "low_register_operand" "")
31508
(mem:SI (match_operand:SI 5 "s_register_operand" "l")))
31509
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
31510
+ (set (match_operand:SI 2 "low_register_operand" "")
31511
(mem:SI (plus:SI (match_dup 5)
31513
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
31514
+ (set (match_operand:SI 3 "low_register_operand" "")
31515
(mem:SI (plus:SI (match_dup 5)
31517
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
31518
+ (set (match_operand:SI 4 "low_register_operand" "")
31519
(mem:SI (plus:SI (match_dup 5)
31520
(const_int 12))))])]
31521
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
31522
@@ -60,15 +60,15 @@
31523
[(match_parallel 0 "load_multiple_operation"
31524
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
31525
(plus:SI (match_dup 5) (const_int 16)))
31526
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
31527
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
31528
(mem:SI (match_dup 5)))
31529
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
31530
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
31531
(mem:SI (plus:SI (match_dup 5)
31533
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
31534
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
31535
(mem:SI (plus:SI (match_dup 5)
31537
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
31538
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
31539
(mem:SI (plus:SI (match_dup 5)
31540
(const_int 12))))])]
31541
"TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
31542
@@ -80,15 +80,15 @@
31543
[(match_parallel 0 "load_multiple_operation"
31544
[(set (match_operand:SI 5 "s_register_operand" "+&l")
31545
(plus:SI (match_dup 5) (const_int 16)))
31546
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
31547
+ (set (match_operand:SI 1 "low_register_operand" "")
31548
(mem:SI (match_dup 5)))
31549
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
31550
+ (set (match_operand:SI 2 "low_register_operand" "")
31551
(mem:SI (plus:SI (match_dup 5)
31553
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
31554
+ (set (match_operand:SI 3 "low_register_operand" "")
31555
(mem:SI (plus:SI (match_dup 5)
31557
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
31558
+ (set (match_operand:SI 4 "low_register_operand" "")
31559
(mem:SI (plus:SI (match_dup 5)
31560
(const_int 12))))])]
31561
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 5"
31562
@@ -98,13 +98,13 @@
31563
(define_insn "*stm4_ia"
31564
[(match_parallel 0 "store_multiple_operation"
31565
[(set (mem:SI (match_operand:SI 5 "s_register_operand" "rk"))
31566
- (match_operand:SI 1 "arm_hard_register_operand" ""))
31567
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
31568
(set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
31569
- (match_operand:SI 2 "arm_hard_register_operand" ""))
31570
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
31571
(set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
31572
- (match_operand:SI 3 "arm_hard_register_operand" ""))
31573
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
31574
(set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
31575
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
31576
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
31577
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
31578
"stm%(ia%)\t%5, {%1, %2, %3, %4}"
31579
[(set_attr "type" "store4")
31580
@@ -115,13 +115,13 @@
31581
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
31582
(plus:SI (match_dup 5) (const_int 16)))
31583
(set (mem:SI (match_dup 5))
31584
- (match_operand:SI 1 "arm_hard_register_operand" ""))
31585
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
31586
(set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
31587
- (match_operand:SI 2 "arm_hard_register_operand" ""))
31588
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
31589
(set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
31590
- (match_operand:SI 3 "arm_hard_register_operand" ""))
31591
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
31592
(set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
31593
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
31594
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
31595
"TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
31596
"stm%(ia%)\t%5!, {%1, %2, %3, %4}"
31597
[(set_attr "type" "store4")
31598
@@ -132,13 +132,13 @@
31599
[(set (match_operand:SI 5 "s_register_operand" "+&l")
31600
(plus:SI (match_dup 5) (const_int 16)))
31601
(set (mem:SI (match_dup 5))
31602
- (match_operand:SI 1 "arm_hard_register_operand" ""))
31603
+ (match_operand:SI 1 "low_register_operand" ""))
31604
(set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
31605
- (match_operand:SI 2 "arm_hard_register_operand" ""))
31606
+ (match_operand:SI 2 "low_register_operand" ""))
31607
(set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
31608
- (match_operand:SI 3 "arm_hard_register_operand" ""))
31609
+ (match_operand:SI 3 "low_register_operand" ""))
31610
(set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
31611
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
31612
+ (match_operand:SI 4 "low_register_operand" ""))])]
31613
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 5"
31614
"stm%(ia%)\t%5!, {%1, %2, %3, %4}"
31615
[(set_attr "type" "store4")])
31616
@@ -145,16 +145,16 @@
31618
(define_insn "*ldm4_ib"
31619
[(match_parallel 0 "load_multiple_operation"
31620
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
31621
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
31622
(mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
31624
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
31625
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
31626
(mem:SI (plus:SI (match_dup 5)
31628
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
31629
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
31630
(mem:SI (plus:SI (match_dup 5)
31632
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
31633
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
31634
(mem:SI (plus:SI (match_dup 5)
31635
(const_int 16))))])]
31636
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
31637
@@ -166,16 +166,16 @@
31638
[(match_parallel 0 "load_multiple_operation"
31639
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
31640
(plus:SI (match_dup 5) (const_int 16)))
31641
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
31642
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
31643
(mem:SI (plus:SI (match_dup 5)
31645
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
31646
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
31647
(mem:SI (plus:SI (match_dup 5)
31649
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
31650
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
31651
(mem:SI (plus:SI (match_dup 5)
31653
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
31654
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
31655
(mem:SI (plus:SI (match_dup 5)
31656
(const_int 16))))])]
31657
"TARGET_ARM && XVECLEN (operands[0], 0) == 5"
31658
@@ -186,13 +186,13 @@
31659
(define_insn "*stm4_ib"
31660
[(match_parallel 0 "store_multiple_operation"
31661
[(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int 4)))
31662
- (match_operand:SI 1 "arm_hard_register_operand" ""))
31663
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
31664
(set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
31665
- (match_operand:SI 2 "arm_hard_register_operand" ""))
31666
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
31667
(set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
31668
- (match_operand:SI 3 "arm_hard_register_operand" ""))
31669
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
31670
(set (mem:SI (plus:SI (match_dup 5) (const_int 16)))
31671
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
31672
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
31673
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
31674
"stm%(ib%)\t%5, {%1, %2, %3, %4}"
31675
[(set_attr "type" "store4")
31676
@@ -203,13 +203,13 @@
31677
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
31678
(plus:SI (match_dup 5) (const_int 16)))
31679
(set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
31680
- (match_operand:SI 1 "arm_hard_register_operand" ""))
31681
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
31682
(set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
31683
- (match_operand:SI 2 "arm_hard_register_operand" ""))
31684
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
31685
(set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
31686
- (match_operand:SI 3 "arm_hard_register_operand" ""))
31687
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
31688
(set (mem:SI (plus:SI (match_dup 5) (const_int 16)))
31689
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
31690
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
31691
"TARGET_ARM && XVECLEN (operands[0], 0) == 5"
31692
"stm%(ib%)\t%5!, {%1, %2, %3, %4}"
31693
[(set_attr "type" "store4")
31694
@@ -217,16 +217,16 @@
31696
(define_insn "*ldm4_da"
31697
[(match_parallel 0 "load_multiple_operation"
31698
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
31699
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
31700
(mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
31702
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
31703
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
31704
(mem:SI (plus:SI (match_dup 5)
31706
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
31707
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
31708
(mem:SI (plus:SI (match_dup 5)
31710
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
31711
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
31712
(mem:SI (match_dup 5)))])]
31713
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
31714
"ldm%(da%)\t%5, {%1, %2, %3, %4}"
31715
@@ -237,16 +237,16 @@
31716
[(match_parallel 0 "load_multiple_operation"
31717
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
31718
(plus:SI (match_dup 5) (const_int -16)))
31719
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
31720
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
31721
(mem:SI (plus:SI (match_dup 5)
31723
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
31724
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
31725
(mem:SI (plus:SI (match_dup 5)
31727
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
31728
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
31729
(mem:SI (plus:SI (match_dup 5)
31731
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
31732
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
31733
(mem:SI (match_dup 5)))])]
31734
"TARGET_ARM && XVECLEN (operands[0], 0) == 5"
31735
"ldm%(da%)\t%5!, {%1, %2, %3, %4}"
31736
@@ -256,13 +256,13 @@
31737
(define_insn "*stm4_da"
31738
[(match_parallel 0 "store_multiple_operation"
31739
[(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int -12)))
31740
- (match_operand:SI 1 "arm_hard_register_operand" ""))
31741
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
31742
(set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
31743
- (match_operand:SI 2 "arm_hard_register_operand" ""))
31744
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
31745
(set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
31746
- (match_operand:SI 3 "arm_hard_register_operand" ""))
31747
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
31748
(set (mem:SI (match_dup 5))
31749
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
31750
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
31751
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
31752
"stm%(da%)\t%5, {%1, %2, %3, %4}"
31753
[(set_attr "type" "store4")
31754
@@ -273,13 +273,13 @@
31755
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
31756
(plus:SI (match_dup 5) (const_int -16)))
31757
(set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
31758
- (match_operand:SI 1 "arm_hard_register_operand" ""))
31759
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
31760
(set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
31761
- (match_operand:SI 2 "arm_hard_register_operand" ""))
31762
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
31763
(set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
31764
- (match_operand:SI 3 "arm_hard_register_operand" ""))
31765
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
31766
(set (mem:SI (match_dup 5))
31767
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
31768
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
31769
"TARGET_ARM && XVECLEN (operands[0], 0) == 5"
31770
"stm%(da%)\t%5!, {%1, %2, %3, %4}"
31771
[(set_attr "type" "store4")
31772
@@ -287,16 +287,16 @@
31774
(define_insn "*ldm4_db"
31775
[(match_parallel 0 "load_multiple_operation"
31776
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
31777
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
31778
(mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
31780
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
31781
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
31782
(mem:SI (plus:SI (match_dup 5)
31784
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
31785
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
31786
(mem:SI (plus:SI (match_dup 5)
31788
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
31789
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
31790
(mem:SI (plus:SI (match_dup 5)
31791
(const_int -4))))])]
31792
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
31793
@@ -308,16 +308,16 @@
31794
[(match_parallel 0 "load_multiple_operation"
31795
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
31796
(plus:SI (match_dup 5) (const_int -16)))
31797
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
31798
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
31799
(mem:SI (plus:SI (match_dup 5)
31801
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
31802
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
31803
(mem:SI (plus:SI (match_dup 5)
31805
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
31806
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
31807
(mem:SI (plus:SI (match_dup 5)
31809
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
31810
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
31811
(mem:SI (plus:SI (match_dup 5)
31812
(const_int -4))))])]
31813
"TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
31814
@@ -328,13 +328,13 @@
31815
(define_insn "*stm4_db"
31816
[(match_parallel 0 "store_multiple_operation"
31817
[(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int -16)))
31818
- (match_operand:SI 1 "arm_hard_register_operand" ""))
31819
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
31820
(set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
31821
- (match_operand:SI 2 "arm_hard_register_operand" ""))
31822
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
31823
(set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
31824
- (match_operand:SI 3 "arm_hard_register_operand" ""))
31825
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
31826
(set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
31827
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
31828
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
31829
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
31830
"stm%(db%)\t%5, {%1, %2, %3, %4}"
31831
[(set_attr "type" "store4")
31832
@@ -345,13 +345,13 @@
31833
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
31834
(plus:SI (match_dup 5) (const_int -16)))
31835
(set (mem:SI (plus:SI (match_dup 5) (const_int -16)))
31836
- (match_operand:SI 1 "arm_hard_register_operand" ""))
31837
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
31838
(set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
31839
- (match_operand:SI 2 "arm_hard_register_operand" ""))
31840
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
31841
(set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
31842
- (match_operand:SI 3 "arm_hard_register_operand" ""))
31843
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
31844
(set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
31845
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
31846
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
31847
"TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
31848
"stm%(db%)\t%5!, {%1, %2, %3, %4}"
31849
[(set_attr "type" "store4")
31850
@@ -466,12 +466,12 @@
31852
(define_insn "*ldm3_ia"
31853
[(match_parallel 0 "load_multiple_operation"
31854
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
31855
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
31856
(mem:SI (match_operand:SI 4 "s_register_operand" "rk")))
31857
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
31858
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
31859
(mem:SI (plus:SI (match_dup 4)
31861
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
31862
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
31863
(mem:SI (plus:SI (match_dup 4)
31864
(const_int 8))))])]
31865
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
31866
@@ -481,12 +481,12 @@
31868
(define_insn "*thumb_ldm3_ia"
31869
[(match_parallel 0 "load_multiple_operation"
31870
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
31871
+ [(set (match_operand:SI 1 "low_register_operand" "")
31872
(mem:SI (match_operand:SI 4 "s_register_operand" "l")))
31873
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
31874
+ (set (match_operand:SI 2 "low_register_operand" "")
31875
(mem:SI (plus:SI (match_dup 4)
31877
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
31878
+ (set (match_operand:SI 3 "low_register_operand" "")
31879
(mem:SI (plus:SI (match_dup 4)
31880
(const_int 8))))])]
31881
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
31882
@@ -497,12 +497,12 @@
31883
[(match_parallel 0 "load_multiple_operation"
31884
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
31885
(plus:SI (match_dup 4) (const_int 12)))
31886
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
31887
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
31888
(mem:SI (match_dup 4)))
31889
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
31890
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
31891
(mem:SI (plus:SI (match_dup 4)
31893
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
31894
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
31895
(mem:SI (plus:SI (match_dup 4)
31896
(const_int 8))))])]
31897
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
31898
@@ -514,12 +514,12 @@
31899
[(match_parallel 0 "load_multiple_operation"
31900
[(set (match_operand:SI 4 "s_register_operand" "+&l")
31901
(plus:SI (match_dup 4) (const_int 12)))
31902
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
31903
+ (set (match_operand:SI 1 "low_register_operand" "")
31904
(mem:SI (match_dup 4)))
31905
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
31906
+ (set (match_operand:SI 2 "low_register_operand" "")
31907
(mem:SI (plus:SI (match_dup 4)
31909
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
31910
+ (set (match_operand:SI 3 "low_register_operand" "")
31911
(mem:SI (plus:SI (match_dup 4)
31912
(const_int 8))))])]
31913
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
31914
@@ -529,11 +529,11 @@
31915
(define_insn "*stm3_ia"
31916
[(match_parallel 0 "store_multiple_operation"
31917
[(set (mem:SI (match_operand:SI 4 "s_register_operand" "rk"))
31918
- (match_operand:SI 1 "arm_hard_register_operand" ""))
31919
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
31920
(set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
31921
- (match_operand:SI 2 "arm_hard_register_operand" ""))
31922
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
31923
(set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
31924
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
31925
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
31926
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
31927
"stm%(ia%)\t%4, {%1, %2, %3}"
31928
[(set_attr "type" "store3")
31929
@@ -544,11 +544,11 @@
31930
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
31931
(plus:SI (match_dup 4) (const_int 12)))
31932
(set (mem:SI (match_dup 4))
31933
- (match_operand:SI 1 "arm_hard_register_operand" ""))
31934
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
31935
(set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
31936
- (match_operand:SI 2 "arm_hard_register_operand" ""))
31937
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
31938
(set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
31939
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
31940
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
31941
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
31942
"stm%(ia%)\t%4!, {%1, %2, %3}"
31943
[(set_attr "type" "store3")
31944
@@ -559,11 +559,11 @@
31945
[(set (match_operand:SI 4 "s_register_operand" "+&l")
31946
(plus:SI (match_dup 4) (const_int 12)))
31947
(set (mem:SI (match_dup 4))
31948
- (match_operand:SI 1 "arm_hard_register_operand" ""))
31949
+ (match_operand:SI 1 "low_register_operand" ""))
31950
(set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
31951
- (match_operand:SI 2 "arm_hard_register_operand" ""))
31952
+ (match_operand:SI 2 "low_register_operand" ""))
31953
(set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
31954
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
31955
+ (match_operand:SI 3 "low_register_operand" ""))])]
31956
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
31957
"stm%(ia%)\t%4!, {%1, %2, %3}"
31958
[(set_attr "type" "store3")])
31959
@@ -570,13 +570,13 @@
31961
(define_insn "*ldm3_ib"
31962
[(match_parallel 0 "load_multiple_operation"
31963
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
31964
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
31965
(mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
31967
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
31968
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
31969
(mem:SI (plus:SI (match_dup 4)
31971
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
31972
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
31973
(mem:SI (plus:SI (match_dup 4)
31974
(const_int 12))))])]
31975
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
31976
@@ -588,13 +588,13 @@
31977
[(match_parallel 0 "load_multiple_operation"
31978
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
31979
(plus:SI (match_dup 4) (const_int 12)))
31980
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
31981
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
31982
(mem:SI (plus:SI (match_dup 4)
31984
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
31985
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
31986
(mem:SI (plus:SI (match_dup 4)
31988
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
31989
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
31990
(mem:SI (plus:SI (match_dup 4)
31991
(const_int 12))))])]
31992
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
31993
@@ -605,11 +605,11 @@
31994
(define_insn "*stm3_ib"
31995
[(match_parallel 0 "store_multiple_operation"
31996
[(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int 4)))
31997
- (match_operand:SI 1 "arm_hard_register_operand" ""))
31998
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
31999
(set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
32000
- (match_operand:SI 2 "arm_hard_register_operand" ""))
32001
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
32002
(set (mem:SI (plus:SI (match_dup 4) (const_int 12)))
32003
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
32004
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
32005
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
32006
"stm%(ib%)\t%4, {%1, %2, %3}"
32007
[(set_attr "type" "store3")
32008
@@ -620,11 +620,11 @@
32009
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
32010
(plus:SI (match_dup 4) (const_int 12)))
32011
(set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
32012
- (match_operand:SI 1 "arm_hard_register_operand" ""))
32013
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
32014
(set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
32015
- (match_operand:SI 2 "arm_hard_register_operand" ""))
32016
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
32017
(set (mem:SI (plus:SI (match_dup 4) (const_int 12)))
32018
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
32019
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
32020
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
32021
"stm%(ib%)\t%4!, {%1, %2, %3}"
32022
[(set_attr "type" "store3")
32023
@@ -632,13 +632,13 @@
32025
(define_insn "*ldm3_da"
32026
[(match_parallel 0 "load_multiple_operation"
32027
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
32028
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
32029
(mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
32031
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
32032
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
32033
(mem:SI (plus:SI (match_dup 4)
32035
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
32036
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
32037
(mem:SI (match_dup 4)))])]
32038
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
32039
"ldm%(da%)\t%4, {%1, %2, %3}"
32040
@@ -649,13 +649,13 @@
32041
[(match_parallel 0 "load_multiple_operation"
32042
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
32043
(plus:SI (match_dup 4) (const_int -12)))
32044
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
32045
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
32046
(mem:SI (plus:SI (match_dup 4)
32048
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
32049
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
32050
(mem:SI (plus:SI (match_dup 4)
32052
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
32053
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
32054
(mem:SI (match_dup 4)))])]
32055
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
32056
"ldm%(da%)\t%4!, {%1, %2, %3}"
32057
@@ -665,11 +665,11 @@
32058
(define_insn "*stm3_da"
32059
[(match_parallel 0 "store_multiple_operation"
32060
[(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int -8)))
32061
- (match_operand:SI 1 "arm_hard_register_operand" ""))
32062
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
32063
(set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
32064
- (match_operand:SI 2 "arm_hard_register_operand" ""))
32065
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
32066
(set (mem:SI (match_dup 4))
32067
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
32068
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
32069
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
32070
"stm%(da%)\t%4, {%1, %2, %3}"
32071
[(set_attr "type" "store3")
32072
@@ -680,11 +680,11 @@
32073
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
32074
(plus:SI (match_dup 4) (const_int -12)))
32075
(set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
32076
- (match_operand:SI 1 "arm_hard_register_operand" ""))
32077
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
32078
(set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
32079
- (match_operand:SI 2 "arm_hard_register_operand" ""))
32080
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
32081
(set (mem:SI (match_dup 4))
32082
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
32083
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
32084
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
32085
"stm%(da%)\t%4!, {%1, %2, %3}"
32086
[(set_attr "type" "store3")
32087
@@ -692,13 +692,13 @@
32089
(define_insn "*ldm3_db"
32090
[(match_parallel 0 "load_multiple_operation"
32091
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
32092
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
32093
(mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
32095
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
32096
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
32097
(mem:SI (plus:SI (match_dup 4)
32099
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
32100
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
32101
(mem:SI (plus:SI (match_dup 4)
32102
(const_int -4))))])]
32103
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
32104
@@ -710,13 +710,13 @@
32105
[(match_parallel 0 "load_multiple_operation"
32106
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
32107
(plus:SI (match_dup 4) (const_int -12)))
32108
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
32109
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
32110
(mem:SI (plus:SI (match_dup 4)
32112
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
32113
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
32114
(mem:SI (plus:SI (match_dup 4)
32116
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
32117
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
32118
(mem:SI (plus:SI (match_dup 4)
32119
(const_int -4))))])]
32120
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
32121
@@ -727,11 +727,11 @@
32122
(define_insn "*stm3_db"
32123
[(match_parallel 0 "store_multiple_operation"
32124
[(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int -12)))
32125
- (match_operand:SI 1 "arm_hard_register_operand" ""))
32126
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
32127
(set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
32128
- (match_operand:SI 2 "arm_hard_register_operand" ""))
32129
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
32130
(set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
32131
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
32132
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
32133
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
32134
"stm%(db%)\t%4, {%1, %2, %3}"
32135
[(set_attr "type" "store3")
32136
@@ -742,11 +742,11 @@
32137
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
32138
(plus:SI (match_dup 4) (const_int -12)))
32139
(set (mem:SI (plus:SI (match_dup 4) (const_int -12)))
32140
- (match_operand:SI 1 "arm_hard_register_operand" ""))
32141
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
32142
(set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
32143
- (match_operand:SI 2 "arm_hard_register_operand" ""))
32144
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
32145
(set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
32146
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
32147
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
32148
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
32149
"stm%(db%)\t%4!, {%1, %2, %3}"
32150
[(set_attr "type" "store3")
32151
@@ -847,9 +847,9 @@
32153
(define_insn "*ldm2_ia"
32154
[(match_parallel 0 "load_multiple_operation"
32155
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
32156
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
32157
(mem:SI (match_operand:SI 3 "s_register_operand" "rk")))
32158
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
32159
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
32160
(mem:SI (plus:SI (match_dup 3)
32161
(const_int 4))))])]
32162
"TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
32163
@@ -859,9 +859,9 @@
32165
(define_insn "*thumb_ldm2_ia"
32166
[(match_parallel 0 "load_multiple_operation"
32167
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
32168
+ [(set (match_operand:SI 1 "low_register_operand" "")
32169
(mem:SI (match_operand:SI 3 "s_register_operand" "l")))
32170
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
32171
+ (set (match_operand:SI 2 "low_register_operand" "")
32172
(mem:SI (plus:SI (match_dup 3)
32173
(const_int 4))))])]
32174
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 2"
32175
@@ -872,9 +872,9 @@
32176
[(match_parallel 0 "load_multiple_operation"
32177
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
32178
(plus:SI (match_dup 3) (const_int 8)))
32179
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
32180
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
32181
(mem:SI (match_dup 3)))
32182
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
32183
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
32184
(mem:SI (plus:SI (match_dup 3)
32185
(const_int 4))))])]
32186
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
32187
@@ -886,9 +886,9 @@
32188
[(match_parallel 0 "load_multiple_operation"
32189
[(set (match_operand:SI 3 "s_register_operand" "+&l")
32190
(plus:SI (match_dup 3) (const_int 8)))
32191
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
32192
+ (set (match_operand:SI 1 "low_register_operand" "")
32193
(mem:SI (match_dup 3)))
32194
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
32195
+ (set (match_operand:SI 2 "low_register_operand" "")
32196
(mem:SI (plus:SI (match_dup 3)
32197
(const_int 4))))])]
32198
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
32199
@@ -898,9 +898,9 @@
32200
(define_insn "*stm2_ia"
32201
[(match_parallel 0 "store_multiple_operation"
32202
[(set (mem:SI (match_operand:SI 3 "s_register_operand" "rk"))
32203
- (match_operand:SI 1 "arm_hard_register_operand" ""))
32204
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
32205
(set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
32206
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
32207
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
32208
"TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
32209
"stm%(ia%)\t%3, {%1, %2}"
32210
[(set_attr "type" "store2")
32211
@@ -911,9 +911,9 @@
32212
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
32213
(plus:SI (match_dup 3) (const_int 8)))
32214
(set (mem:SI (match_dup 3))
32215
- (match_operand:SI 1 "arm_hard_register_operand" ""))
32216
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
32217
(set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
32218
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
32219
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
32220
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
32221
"stm%(ia%)\t%3!, {%1, %2}"
32222
[(set_attr "type" "store2")
32223
@@ -924,9 +924,9 @@
32224
[(set (match_operand:SI 3 "s_register_operand" "+&l")
32225
(plus:SI (match_dup 3) (const_int 8)))
32226
(set (mem:SI (match_dup 3))
32227
- (match_operand:SI 1 "arm_hard_register_operand" ""))
32228
+ (match_operand:SI 1 "low_register_operand" ""))
32229
(set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
32230
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
32231
+ (match_operand:SI 2 "low_register_operand" ""))])]
32232
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
32233
"stm%(ia%)\t%3!, {%1, %2}"
32234
[(set_attr "type" "store2")])
32235
@@ -933,10 +933,10 @@
32237
(define_insn "*ldm2_ib"
32238
[(match_parallel 0 "load_multiple_operation"
32239
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
32240
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
32241
(mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
32243
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
32244
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
32245
(mem:SI (plus:SI (match_dup 3)
32246
(const_int 8))))])]
32247
"TARGET_ARM && XVECLEN (operands[0], 0) == 2"
32248
@@ -948,10 +948,10 @@
32249
[(match_parallel 0 "load_multiple_operation"
32250
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
32251
(plus:SI (match_dup 3) (const_int 8)))
32252
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
32253
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
32254
(mem:SI (plus:SI (match_dup 3)
32256
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
32257
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
32258
(mem:SI (plus:SI (match_dup 3)
32259
(const_int 8))))])]
32260
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
32261
@@ -962,9 +962,9 @@
32262
(define_insn "*stm2_ib"
32263
[(match_parallel 0 "store_multiple_operation"
32264
[(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int 4)))
32265
- (match_operand:SI 1 "arm_hard_register_operand" ""))
32266
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
32267
(set (mem:SI (plus:SI (match_dup 3) (const_int 8)))
32268
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
32269
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
32270
"TARGET_ARM && XVECLEN (operands[0], 0) == 2"
32271
"stm%(ib%)\t%3, {%1, %2}"
32272
[(set_attr "type" "store2")
32273
@@ -975,9 +975,9 @@
32274
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
32275
(plus:SI (match_dup 3) (const_int 8)))
32276
(set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
32277
- (match_operand:SI 1 "arm_hard_register_operand" ""))
32278
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
32279
(set (mem:SI (plus:SI (match_dup 3) (const_int 8)))
32280
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
32281
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
32282
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
32283
"stm%(ib%)\t%3!, {%1, %2}"
32284
[(set_attr "type" "store2")
32285
@@ -985,10 +985,10 @@
32287
(define_insn "*ldm2_da"
32288
[(match_parallel 0 "load_multiple_operation"
32289
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
32290
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
32291
(mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
32293
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
32294
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
32295
(mem:SI (match_dup 3)))])]
32296
"TARGET_ARM && XVECLEN (operands[0], 0) == 2"
32297
"ldm%(da%)\t%3, {%1, %2}"
32298
@@ -999,10 +999,10 @@
32299
[(match_parallel 0 "load_multiple_operation"
32300
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
32301
(plus:SI (match_dup 3) (const_int -8)))
32302
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
32303
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
32304
(mem:SI (plus:SI (match_dup 3)
32306
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
32307
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
32308
(mem:SI (match_dup 3)))])]
32309
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
32310
"ldm%(da%)\t%3!, {%1, %2}"
32311
@@ -1012,9 +1012,9 @@
32312
(define_insn "*stm2_da"
32313
[(match_parallel 0 "store_multiple_operation"
32314
[(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int -4)))
32315
- (match_operand:SI 1 "arm_hard_register_operand" ""))
32316
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
32317
(set (mem:SI (match_dup 3))
32318
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
32319
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
32320
"TARGET_ARM && XVECLEN (operands[0], 0) == 2"
32321
"stm%(da%)\t%3, {%1, %2}"
32322
[(set_attr "type" "store2")
32323
@@ -1025,9 +1025,9 @@
32324
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
32325
(plus:SI (match_dup 3) (const_int -8)))
32326
(set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
32327
- (match_operand:SI 1 "arm_hard_register_operand" ""))
32328
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
32329
(set (mem:SI (match_dup 3))
32330
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
32331
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
32332
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
32333
"stm%(da%)\t%3!, {%1, %2}"
32334
[(set_attr "type" "store2")
32335
@@ -1035,10 +1035,10 @@
32337
(define_insn "*ldm2_db"
32338
[(match_parallel 0 "load_multiple_operation"
32339
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
32340
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
32341
(mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
32343
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
32344
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
32345
(mem:SI (plus:SI (match_dup 3)
32346
(const_int -4))))])]
32347
"TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
32348
@@ -1050,10 +1050,10 @@
32349
[(match_parallel 0 "load_multiple_operation"
32350
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
32351
(plus:SI (match_dup 3) (const_int -8)))
32352
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
32353
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
32354
(mem:SI (plus:SI (match_dup 3)
32356
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
32357
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
32358
(mem:SI (plus:SI (match_dup 3)
32359
(const_int -4))))])]
32360
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
32361
@@ -1064,9 +1064,9 @@
32362
(define_insn "*stm2_db"
32363
[(match_parallel 0 "store_multiple_operation"
32364
[(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int -8)))
32365
- (match_operand:SI 1 "arm_hard_register_operand" ""))
32366
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
32367
(set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
32368
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
32369
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
32370
"TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
32371
"stm%(db%)\t%3, {%1, %2}"
32372
[(set_attr "type" "store2")
32373
@@ -1077,9 +1077,9 @@
32374
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
32375
(plus:SI (match_dup 3) (const_int -8)))
32376
(set (mem:SI (plus:SI (match_dup 3) (const_int -8)))
32377
- (match_operand:SI 1 "arm_hard_register_operand" ""))
32378
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
32379
(set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
32380
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
32381
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
32382
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
32383
"stm%(db%)\t%3!, {%1, %2}"
32384
[(set_attr "type" "store2")
32385
Index: gcc/config/arm/predicates.md
32386
===================================================================
32387
--- a/src/gcc/config/arm/predicates.md (.../tags/gcc_4_8_2_release)
32388
+++ b/src/gcc/config/arm/predicates.md (.../branches/gcc-4_8-branch)
32389
@@ -31,11 +31,11 @@
32390
|| REGNO_REG_CLASS (REGNO (op)) != NO_REGS));
32393
-;; Any hard register.
32394
-(define_predicate "arm_hard_register_operand"
32395
+;; Any general register.
32396
+(define_predicate "arm_hard_general_register_operand"
32399
- return REGNO (op) < FIRST_PSEUDO_REGISTER;
32400
+ return REGNO (op) <= LAST_ARM_REGNUM;
32405
&& REGNO_REG_CLASS (REGNO (op)) == VFP_REGS)));
32408
+(define_predicate "vfp_hard_register_operand"
32409
+ (match_code "reg")
32411
+ return (IS_VFP_REGNUM (REGNO (op)));
32414
(define_predicate "zero_operand"
32415
(and (match_code "const_int,const_double,const_vector")
32416
(match_test "op == CONST0_RTX (mode)")))
32417
Index: gcc/config/arm/arm-ldmstm.ml
32418
===================================================================
32419
--- a/src/gcc/config/arm/arm-ldmstm.ml (.../tags/gcc_4_8_2_release)
32420
+++ b/src/gcc/config/arm/arm-ldmstm.ml (.../branches/gcc-4_8-branch)
32421
@@ -67,10 +67,13 @@
32422
Printf.sprintf ("(match_operand:SI %d \"s_register_operand\" \"%s%s\")")
32423
(nregs + 1) (inout_constr op_type) (constr thumb)
32425
+let reg_predicate thumb =
32426
+ if thumb then "low_register_operand" else "arm_hard_general_register_operand"
32428
let write_ldm_set thumb nregs offset opnr first =
32429
let indent = " " in
32430
Printf.printf "%s" (if first then " [" else indent);
32431
- Printf.printf "(set (match_operand:SI %d \"arm_hard_register_operand\" \"\")\n" opnr;
32432
+ Printf.printf "(set (match_operand:SI %d \"%s\" \"\")\n" opnr (reg_predicate thumb);
32433
Printf.printf "%s (mem:SI " indent;
32434
begin if offset != 0 then Printf.printf "(plus:SI " end;
32435
Printf.printf "%s" (destreg nregs first IN thumb);
32437
begin if offset != 0 then Printf.printf "(plus:SI " end;
32438
Printf.printf "%s" (destreg nregs first IN thumb);
32439
begin if offset != 0 then Printf.printf " (const_int %d))" offset end;
32440
- Printf.printf ")\n%s (match_operand:SI %d \"arm_hard_register_operand\" \"\"))" indent opnr
32441
+ Printf.printf ")\n%s (match_operand:SI %d \"%s\" \"\"))" indent opnr (reg_predicate thumb)
32443
let write_ldm_peep_set extra_indent nregs opnr first =
32444
let indent = " " ^ extra_indent in
32445
Index: gcc/config/arm/iterators.md
32446
===================================================================
32447
--- a/src/gcc/config/arm/iterators.md (.../tags/gcc_4_8_2_release)
32448
+++ b/src/gcc/config/arm/iterators.md (.../branches/gcc-4_8-branch)
32449
@@ -493,6 +493,10 @@
32450
(UNSPEC_VRINTA "no") (UNSPEC_VRINTM "no")
32451
(UNSPEC_VRINTR "yes") (UNSPEC_VRINTX "yes")])
32453
+(define_int_attr vrint_conds [(UNSPEC_VRINTZ "nocond") (UNSPEC_VRINTP "unconditional")
32454
+ (UNSPEC_VRINTA "unconditional") (UNSPEC_VRINTM "unconditional")
32455
+ (UNSPEC_VRINTR "nocond") (UNSPEC_VRINTX "nocond")])
32457
(define_int_attr nvrint_variant [(UNSPEC_NVRINTZ "z") (UNSPEC_NVRINTP "p")
32458
(UNSPEC_NVRINTA "a") (UNSPEC_NVRINTM "m")
32459
(UNSPEC_NVRINTX "x") (UNSPEC_NVRINTN "n")])
32460
Index: gcc/config/arm/arm.md
32461
===================================================================
32462
--- a/src/gcc/config/arm/arm.md (.../tags/gcc_4_8_2_release)
32463
+++ b/src/gcc/config/arm/arm.md (.../branches/gcc-4_8-branch)
32464
@@ -11036,7 +11036,7 @@
32465
[(set (match_operand:SI 1 "s_register_operand" "+rk")
32466
(plus:SI (match_dup 1)
32467
(match_operand:SI 2 "const_int_operand" "I")))
32468
- (set (match_operand:DF 3 "arm_hard_register_operand" "")
32469
+ (set (match_operand:DF 3 "vfp_hard_register_operand" "")
32470
(mem:DF (match_dup 1)))])]
32471
"TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
32473
@@ -11270,7 +11270,9 @@
32474
(match_operand:SI 1 "" "")
32475
(match_operand:SI 2 "" ""))]
32476
"TARGET_32BIT && arm_arch5e"
32479
+ [(set_attr "type" "load1")]
32482
;; General predication pattern
32484
Index: gcc/config/pa/pa.c
32485
===================================================================
32486
--- a/src/gcc/config/pa/pa.c (.../tags/gcc_4_8_2_release)
32487
+++ b/src/gcc/config/pa/pa.c (.../branches/gcc-4_8-branch)
32488
@@ -912,9 +912,12 @@
32489
legitimize_tls_address (rtx addr)
32491
rtx ret, insn, tmp, t1, t2, tp;
32492
- enum tls_model model = SYMBOL_REF_TLS_MODEL (addr);
32495
+ /* Currently, we can't handle anything but a SYMBOL_REF. */
32496
+ if (GET_CODE (addr) != SYMBOL_REF)
32499
+ switch (SYMBOL_REF_TLS_MODEL (addr))
32501
case TLS_MODEL_GLOBAL_DYNAMIC:
32502
tmp = gen_reg_rtx (Pmode);
32503
@@ -1035,7 +1038,7 @@
32504
&& !REG_POINTER (XEXP (x, 1)))
32505
return gen_rtx_PLUS (Pmode, XEXP (x, 1), XEXP (x, 0));
32507
- if (PA_SYMBOL_REF_TLS_P (x))
32508
+ if (pa_tls_referenced_p (x))
32509
return legitimize_tls_address (x);
32511
return legitimize_pic_address (x, mode, gen_reg_rtx (Pmode));
32512
@@ -1916,9 +1919,10 @@
32513
not consider them legitimate constants. Loop optimizations can
32514
call the emit_move_xxx with one as a source. */
32515
if ((GET_CODE (operand1) != HIGH && immediate_operand (operand1, mode))
32516
+ || (GET_CODE (operand1) == HIGH
32517
+ && symbolic_operand (XEXP (operand1, 0), mode))
32518
|| function_label_operand (operand1, VOIDmode)
32519
- || (GET_CODE (operand1) == HIGH
32520
- && symbolic_operand (XEXP (operand1, 0), mode)))
32521
+ || pa_tls_referenced_p (operand1))
32523
int ishighonly = 0;
32525
@@ -2625,7 +2629,7 @@
32526
if (optype0 == REGOP)
32527
latehalf[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
32528
else if (optype0 == OFFSOP)
32529
- latehalf[0] = adjust_address (operands[0], SImode, 4);
32530
+ latehalf[0] = adjust_address_nv (operands[0], SImode, 4);
32532
latehalf[0] = operands[0];
32534
@@ -2632,7 +2636,7 @@
32535
if (optype1 == REGOP)
32536
latehalf[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
32537
else if (optype1 == OFFSOP)
32538
- latehalf[1] = adjust_address (operands[1], SImode, 4);
32539
+ latehalf[1] = adjust_address_nv (operands[1], SImode, 4);
32540
else if (optype1 == CNSTOP)
32541
split_double (operands[1], &operands[1], &latehalf[1]);
32543
@@ -7539,7 +7543,7 @@
32544
if (!TARGET_LONG_CALLS && distance < MAX_PCREL17F_OFFSET)
32547
- if (TARGET_LONG_ABS_CALL && !flag_pic)
32552
@@ -8104,7 +8108,8 @@
32555
if (TARGET_FAST_INDIRECT_CALLS
32556
- || (!TARGET_PORTABLE_RUNTIME
32557
+ || (!TARGET_LONG_CALLS
32558
+ && !TARGET_PORTABLE_RUNTIME
32559
&& ((TARGET_PA_20 && !TARGET_SOM && distance < 7600000)
32560
|| distance < MAX_PCREL17F_OFFSET)))
32562
@@ -10397,7 +10402,7 @@
32563
/* TLS_MODEL_GLOBAL_DYNAMIC and TLS_MODEL_LOCAL_DYNAMIC are not
32564
legitimate constants. The other variants can't be handled by
32565
the move patterns after reload starts. */
32566
- if (PA_SYMBOL_REF_TLS_P (x))
32567
+ if (pa_tls_referenced_p (x))
32570
if (TARGET_64BIT && GET_CODE (x) == CONST_DOUBLE)
32571
@@ -10522,13 +10527,13 @@
32573
/* When INT14_OK_STRICT is false, a secondary reload is needed
32574
to adjust the displacement of SImode and DImode floating point
32575
- instructions. So, we return false when STRICT is true. We
32576
+ instructions but this may fail when the register also needs
32577
+ reloading. So, we return false when STRICT is true. We
32578
also reject long displacements for float mode addresses since
32579
the majority of accesses will use floating point instructions
32580
that don't support 14-bit offsets. */
32581
if (!INT14_OK_STRICT
32582
- && reload_in_progress
32584
+ && (strict || !(reload_in_progress || reload_completed))
32588
@@ -10588,8 +10593,7 @@
32591
if (!INT14_OK_STRICT
32592
- && reload_in_progress
32594
+ && (strict || !(reload_in_progress || reload_completed))
32598
Index: gcc/config/pa/pa.h
32599
===================================================================
32600
--- a/src/gcc/config/pa/pa.h (.../tags/gcc_4_8_2_release)
32601
+++ b/src/gcc/config/pa/pa.h (.../branches/gcc-4_8-branch)
32602
@@ -784,9 +784,9 @@
32604
#define MAX_REGS_PER_ADDRESS 2
32606
-/* Non-TLS symbolic references. */
32607
-#define PA_SYMBOL_REF_TLS_P(RTX) \
32608
- (GET_CODE (RTX) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (RTX) != 0)
32609
+/* TLS symbolic reference. */
32610
+#define PA_SYMBOL_REF_TLS_P(X) \
32611
+ (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (X) != 0)
32613
/* Recognize any constant value that is a valid address except
32614
for symbolic addresses. We get better CSE by rejecting them
32615
@@ -796,7 +796,8 @@
32616
#define CONSTANT_ADDRESS_P(X) \
32617
((GET_CODE (X) == LABEL_REF \
32618
|| (GET_CODE (X) == SYMBOL_REF && !SYMBOL_REF_TLS_MODEL (X)) \
32619
- || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST \
32620
+ || GET_CODE (X) == CONST_INT \
32621
+ || (GET_CODE (X) == CONST && !pa_tls_referenced_p (X)) \
32622
|| GET_CODE (X) == HIGH) \
32623
&& (reload_in_progress || reload_completed \
32624
|| ! pa_symbolic_expression_p (X)))
32625
Index: gcc/config/mips/driver-native.c
32626
===================================================================
32627
--- a/src/gcc/config/mips/driver-native.c (.../tags/gcc_4_8_2_release)
32628
+++ b/src/gcc/config/mips/driver-native.c (.../branches/gcc-4_8-branch)
32629
@@ -58,11 +58,17 @@
32630
if (strncmp (buf, "cpu model", sizeof ("cpu model") - 1) == 0)
32632
if (strstr (buf, "Godson2 V0.2") != NULL
32633
- || strstr (buf, "Loongson-2 V0.2") != NULL)
32634
+ || strstr (buf, "Loongson-2 V0.2") != NULL
32635
+ || strstr (buf, "Loongson-2E") != NULL)
32636
cpu = "loongson2e";
32637
else if (strstr (buf, "Godson2 V0.3") != NULL
32638
- || strstr (buf, "Loongson-2 V0.3") != NULL)
32639
+ || strstr (buf, "Loongson-2 V0.3") != NULL
32640
+ || strstr (buf, "Loongson-2F") != NULL)
32641
cpu = "loongson2f";
32642
+ else if (strstr (buf, "Godson3 V0.5") != NULL
32643
+ || strstr (buf, "Loongson-3 V0.5") != NULL
32644
+ || strstr (buf, "Loongson-3A") != NULL)
32645
+ cpu = "loongson3a";
32646
else if (strstr (buf, "SiByte SB1") != NULL)
32648
else if (strstr (buf, "R5000") != NULL)
32649
Index: gcc/config/mips/mips.md
32650
===================================================================
32651
--- a/src/gcc/config/mips/mips.md (.../tags/gcc_4_8_2_release)
32652
+++ b/src/gcc/config/mips/mips.md (.../branches/gcc-4_8-branch)
32657
+ ;; Integer operations that are too cumbersome to describe directly.
32662
;; Floating-point moves.
32665
@@ -1294,20 +1299,32 @@
32667
;; Combiner patterns for unsigned byte-add.
32669
-(define_insn "*baddu_si"
32670
+(define_insn "*baddu_si_eb"
32671
[(set (match_operand:SI 0 "register_operand" "=d")
32673
- (plus:QI (match_operand:QI 1 "register_operand" "d")
32674
- (match_operand:QI 2 "register_operand" "d"))))]
32677
+ (plus:SI (match_operand:SI 1 "register_operand" "d")
32678
+ (match_operand:SI 2 "register_operand" "d")) 3)))]
32679
+ "ISA_HAS_BADDU && BYTES_BIG_ENDIAN"
32681
[(set_attr "alu_type" "add")])
32683
+(define_insn "*baddu_si_el"
32684
+ [(set (match_operand:SI 0 "register_operand" "=d")
32687
+ (plus:SI (match_operand:SI 1 "register_operand" "d")
32688
+ (match_operand:SI 2 "register_operand" "d")) 0)))]
32689
+ "ISA_HAS_BADDU && !BYTES_BIG_ENDIAN"
32690
+ "baddu\\t%0,%1,%2"
32691
+ [(set_attr "alu_type" "add")])
32693
(define_insn "*baddu_di<mode>"
32694
[(set (match_operand:GPR 0 "register_operand" "=d")
32696
- (plus:QI (truncate:QI (match_operand:DI 1 "register_operand" "d"))
32697
- (truncate:QI (match_operand:DI 2 "register_operand" "d")))))]
32699
+ (plus:DI (match_operand:DI 1 "register_operand" "d")
32700
+ (match_operand:DI 2 "register_operand" "d")))))]
32701
"ISA_HAS_BADDU && TARGET_64BIT"
32703
[(set_attr "alu_type" "add")])
32704
@@ -5367,6 +5384,56 @@
32706
[(set_attr "type" "shift")
32707
(set_attr "mode" "<MODE>")])
32709
+(define_insn "bswaphi2"
32710
+ [(set (match_operand:HI 0 "register_operand" "=d")
32711
+ (bswap:HI (match_operand:HI 1 "register_operand" "d")))]
32714
+ [(set_attr "type" "shift")])
32716
+(define_insn_and_split "bswapsi2"
32717
+ [(set (match_operand:SI 0 "register_operand" "=d")
32718
+ (bswap:SI (match_operand:SI 1 "register_operand" "d")))]
32719
+ "ISA_HAS_WSBH && ISA_HAS_ROR"
32722
+ [(set (match_dup 0) (unspec:SI [(match_dup 1)] UNSPEC_WSBH))
32723
+ (set (match_dup 0) (rotatert:SI (match_dup 0) (const_int 16)))]
32725
+ [(set_attr "length" "8")])
32727
+(define_insn_and_split "bswapdi2"
32728
+ [(set (match_operand:DI 0 "register_operand" "=d")
32729
+ (bswap:DI (match_operand:DI 1 "register_operand" "d")))]
32730
+ "TARGET_64BIT && ISA_HAS_WSBH"
32733
+ [(set (match_dup 0) (unspec:DI [(match_dup 1)] UNSPEC_DSBH))
32734
+ (set (match_dup 0) (unspec:DI [(match_dup 0)] UNSPEC_DSHD))]
32736
+ [(set_attr "length" "8")])
32738
+(define_insn "wsbh"
32739
+ [(set (match_operand:SI 0 "register_operand" "=d")
32740
+ (unspec:SI [(match_operand:SI 1 "register_operand" "d")] UNSPEC_WSBH))]
32743
+ [(set_attr "type" "shift")])
32745
+(define_insn "dsbh"
32746
+ [(set (match_operand:DI 0 "register_operand" "=d")
32747
+ (unspec:DI [(match_operand:DI 1 "register_operand" "d")] UNSPEC_DSBH))]
32748
+ "TARGET_64BIT && ISA_HAS_WSBH"
32750
+ [(set_attr "type" "shift")])
32752
+(define_insn "dshd"
32753
+ [(set (match_operand:DI 0 "register_operand" "=d")
32754
+ (unspec:DI [(match_operand:DI 1 "register_operand" "d")] UNSPEC_DSHD))]
32755
+ "TARGET_64BIT && ISA_HAS_WSBH"
32757
+ [(set_attr "type" "shift")])
32760
;; ....................
32761
Index: gcc/config/mips/mips.c
32762
===================================================================
32763
--- a/src/gcc/config/mips/mips.c (.../tags/gcc_4_8_2_release)
32764
+++ b/src/gcc/config/mips/mips.c (.../branches/gcc-4_8-branch)
32765
@@ -3560,17 +3560,6 @@
32769
-/* Return the cost of an operand X that can be trucated for free.
32770
- SPEED says whether we're optimizing for size or speed. */
32773
-mips_truncated_op_cost (rtx x, bool speed)
32775
- if (GET_CODE (x) == TRUNCATE)
32777
- return set_src_cost (x, speed);
32780
/* Implement TARGET_RTX_COSTS. */
32783
@@ -3951,13 +3940,12 @@
32785
if (outer_code == SET
32787
+ && (GET_CODE (XEXP (x, 0)) == TRUNCATE
32788
+ || GET_CODE (XEXP (x, 0)) == SUBREG)
32789
&& GET_MODE (XEXP (x, 0)) == QImode
32790
- && GET_CODE (XEXP (x, 0)) == PLUS)
32791
+ && GET_CODE (XEXP (XEXP (x, 0), 0)) == PLUS)
32793
- rtx plus = XEXP (x, 0);
32794
- *total = (COSTS_N_INSNS (1)
32795
- + mips_truncated_op_cost (XEXP (plus, 0), speed)
32796
- + mips_truncated_op_cost (XEXP (plus, 1), speed));
32797
+ *total = set_src_cost (XEXP (XEXP (x, 0), 0), speed);
32800
*total = mips_zero_extend_cost (mode, XEXP (x, 0));
32801
@@ -8057,7 +8045,7 @@
32804
int truth = (code == NE) == (letter == 'T');
32805
- fputc ("zfnt"[truth * 2 + (GET_MODE (op) == CCmode)], file);
32806
+ fputc ("zfnt"[truth * 2 + ST_REG_P (REGNO (XEXP (op, 0)))], file);
32810
Index: gcc/config/mips/mips.h
32811
===================================================================
32812
--- a/src/gcc/config/mips/mips.h (.../tags/gcc_4_8_2_release)
32813
+++ b/src/gcc/config/mips/mips.h (.../branches/gcc-4_8-branch)
32814
@@ -949,6 +949,11 @@
32815
|| TARGET_SMARTMIPS) \
32818
+/* ISA has the WSBH (word swap bytes within halfwords) instruction.
32819
+ 64-bit targets also provide DSBH and DSHD. */
32820
+#define ISA_HAS_WSBH ((ISA_MIPS32R2 || ISA_MIPS64R2) \
32821
+ && !TARGET_MIPS16)
32823
/* ISA has data prefetch instructions. This controls use of 'pref'. */
32824
#define ISA_HAS_PREFETCH ((ISA_MIPS4 \
32825
|| TARGET_LOONGSON_2EF \
32826
Index: gcc/params.def
32827
===================================================================
32828
--- a/src/gcc/params.def (.../tags/gcc_4_8_2_release)
32829
+++ b/src/gcc/params.def (.../branches/gcc-4_8-branch)
32830
@@ -1014,6 +1014,12 @@
32831
"strength reduction",
32834
+DEFPARAM (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS,
32835
+ "uninit-control-dep-attempts",
32836
+ "Maximum number of nested calls to search for control dependencies "
32837
+ "during uninitialized variable analysis",
32843
Index: gcc/regcprop.c
32844
===================================================================
32845
--- a/src/gcc/regcprop.c (.../tags/gcc_4_8_2_release)
32846
+++ b/src/gcc/regcprop.c (.../branches/gcc-4_8-branch)
32847
@@ -747,6 +747,7 @@
32848
int n_ops, i, alt, predicated;
32849
bool is_asm, any_replacements;
32852
bool replaced[MAX_RECOG_OPERANDS];
32853
bool changed = false;
32854
struct kill_set_value_data ksvd;
32855
@@ -815,6 +816,23 @@
32856
if (recog_op_alt[i][alt].earlyclobber)
32857
kill_value (recog_data.operand[i], vd);
32859
+ /* If we have dead sets in the insn, then we need to note these as we
32860
+ would clobbers. */
32861
+ for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
32863
+ if (REG_NOTE_KIND (link) == REG_UNUSED)
32865
+ kill_value (XEXP (link, 0), vd);
32866
+ /* Furthermore, if the insn looked like a single-set,
32867
+ but the dead store kills the source value of that
32868
+ set, then we can no-longer use the plain move
32869
+ special case below. */
32871
+ && reg_overlap_mentioned_p (XEXP (link, 0), SET_SRC (set)))
32876
/* Special-case plain move instructions, since we may well
32877
be able to do the move from a different register class. */
32878
if (set && REG_P (SET_SRC (set)))
32879
Index: libgo/configure
32880
===================================================================
32881
--- a/src/libgo/configure (.../tags/gcc_4_8_2_release)
32882
+++ b/src/libgo/configure (.../branches/gcc-4_8-branch)
32883
@@ -14700,7 +14700,7 @@
32887
-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
32888
+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
32890
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
32891
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
32892
Index: libgo/Makefile.in
32893
===================================================================
32894
--- a/src/libgo/Makefile.in (.../tags/gcc_4_8_2_release)
32895
+++ b/src/libgo/Makefile.in (.../branches/gcc-4_8-branch)
32896
@@ -195,7 +195,7 @@
32897
@LIBGO_IS_LINUX_TRUE@am__objects_5 = getncpu-linux.lo
32898
am__objects_6 = go-append.lo go-assert.lo go-assert-interface.lo \
32899
go-byte-array-to-string.lo go-breakpoint.lo go-caller.lo \
32900
- go-callers.lo go-can-convert-interface.lo go-cgo.lo \
32901
+ go-callers.lo go-can-convert-interface.lo go-cdiv.lo go-cgo.lo \
32902
go-check-interface.lo go-construct-map.lo \
32903
go-convert-interface.lo go-copy.lo go-defer.lo \
32904
go-deferred-recover.lo go-eface-compare.lo \
32905
@@ -757,6 +757,7 @@
32906
runtime/go-caller.c \
32907
runtime/go-callers.c \
32908
runtime/go-can-convert-interface.c \
32909
+ runtime/go-cdiv.c \
32911
runtime/go-check-interface.c \
32912
runtime/go-construct-map.c \
32913
@@ -1446,7 +1447,7 @@
32914
go/go/build/build.go \
32915
go/go/build/doc.go \
32916
go/go/build/read.go \
32918
+ go/go/build/syslist.go
32920
go_go_doc_files = \
32921
go/go/doc/comment.go \
32922
@@ -2368,6 +2369,7 @@
32923
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-caller.Plo@am__quote@
32924
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-callers.Plo@am__quote@
32925
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-can-convert-interface.Plo@am__quote@
32926
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-cdiv.Plo@am__quote@
32927
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-cgo.Plo@am__quote@
32928
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-check-interface.Plo@am__quote@
32929
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-construct-map.Plo@am__quote@
32930
@@ -2554,6 +2556,13 @@
32931
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
32932
@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
32934
+go-cdiv.lo: runtime/go-cdiv.c
32935
+@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
32936
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/go-cdiv.Tpo $(DEPDIR)/go-cdiv.Plo
32937
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/go-cdiv.c' object='go-cdiv.lo' libtool=yes @AMDEPBACKSLASH@
32938
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
32939
+@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
32941
go-cgo.lo: runtime/go-cgo.c
32942
@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
32943
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/go-cgo.Tpo $(DEPDIR)/go-cgo.Plo
32944
@@ -5062,15 +5071,6 @@
32946
.PHONY: go/build/check
32948
-syslist.go: s-syslist; @true
32949
-s-syslist: Makefile
32950
- echo '// Generated automatically by make.' >syslist.go.tmp
32951
- echo 'package build' >>syslist.go.tmp
32952
- echo 'const goosList = "$(GOOS)"' >>syslist.go.tmp
32953
- echo 'const goarchList = "$(GOARCH)"' >>syslist.go.tmp
32954
- $(SHELL) $(srcdir)/../move-if-change syslist.go.tmp syslist.go
32957
@go_include@ go/doc.lo.dep
32958
go/doc.lo.dep: $(go_go_doc_files)
32960
Index: libgo/runtime/go-defer.c
32961
===================================================================
32962
--- a/src/libgo/runtime/go-defer.c (.../tags/gcc_4_8_2_release)
32963
+++ b/src/libgo/runtime/go-defer.c (.../branches/gcc-4_8-branch)
32967
n->__retaddr = NULL;
32968
+ n->__makefunc_can_recover = 0;
32972
Index: libgo/runtime/go-defer.h
32973
===================================================================
32974
--- a/src/libgo/runtime/go-defer.h (.../tags/gcc_4_8_2_release)
32975
+++ b/src/libgo/runtime/go-defer.h (.../branches/gcc-4_8-branch)
32977
set by __go_set_defer_retaddr which is called by the thunks
32978
created by defer statements. */
32979
const void *__retaddr;
32981
+ /* Set to true if a function created by reflect.MakeFunc is
32982
+ permitted to recover. The return address of such a function
32983
+ function will be somewhere in libffi, so __retaddr is not
32985
+ _Bool __makefunc_can_recover;
32987
Index: libgo/runtime/go-int-array-to-string.c
32988
===================================================================
32989
--- a/src/libgo/runtime/go-int-array-to-string.c (.../tags/gcc_4_8_2_release)
32990
+++ b/src/libgo/runtime/go-int-array-to-string.c (.../branches/gcc-4_8-branch)
32993
if (v < 0 || v > 0x10ffff)
32995
+ else if (0xd800 <= v && v <= 0xdfff)
33002
if (v < 0 || v > 0x10ffff)
33004
+ else if (0xd800 <= v && v <= 0xdfff)
33009
Index: libgo/runtime/go-nosys.c
33010
===================================================================
33011
--- a/src/libgo/runtime/go-nosys.c (.../tags/gcc_4_8_2_release)
33012
+++ b/src/libgo/runtime/go-nosys.c (.../branches/gcc-4_8-branch)
33019
+dup3 (int oldfd __attribute__ ((unused)),
33020
+ int newfd __attribute__ ((unused)),
33021
+ int flags __attribute__ ((unused)))
33028
#ifndef HAVE_EPOLL_CREATE1
33030
epoll_create1 (int flags __attribute__ ((unused)))
33031
@@ -112,6 +123,18 @@
33035
+#ifndef HAVE_GETXATTR
33037
+getxattr (const char *path __attribute__ ((unused)),
33038
+ const char *name __attribute__ ((unused)),
33039
+ void *value __attribute__ ((unused)),
33040
+ size_t size __attribute__ ((unused)))
33047
#ifndef HAVE_INOTIFY_ADD_WATCH
33049
inotify_add_watch (int fd __attribute__ ((unused)),
33050
@@ -151,6 +174,17 @@
33054
+#ifndef HAVE_LISTXATTR
33056
+listxattr (const char *path __attribute__ ((unused)),
33057
+ char *list __attribute__ ((unused)),
33058
+ size_t size __attribute__ ((unused)))
33065
#ifndef HAVE_MKDIRAT
33067
mkdirat (int dirfd __attribute__ ((unused)),
33068
@@ -196,6 +230,16 @@
33072
+#ifndef HAVE_REMOVEXATTR
33074
+removexattr (const char *path __attribute__ ((unused)),
33075
+ const char *name __attribute__ ((unused)))
33082
#ifndef HAVE_RENAMEAT
33084
renameat (int olddirfd __attribute__ ((unused)),
33085
@@ -208,6 +252,19 @@
33089
+#ifndef HAVE_SETXATTR
33091
+setxattr (const char *path __attribute__ ((unused)),
33092
+ const char *name __attribute__ ((unused)),
33093
+ const void *value __attribute__ ((unused)),
33094
+ size_t size __attribute__ ((unused)),
33095
+ int flags __attribute__ ((unused)))
33102
#ifndef HAVE_SPLICE
33104
splice (int fd __attribute__ ((unused)),
33105
Index: libgo/runtime/runtime.h
33106
===================================================================
33107
--- a/src/libgo/runtime/runtime.h (.../tags/gcc_4_8_2_release)
33108
+++ b/src/libgo/runtime/runtime.h (.../branches/gcc-4_8-branch)
33109
@@ -440,7 +440,7 @@
33111
void runtime_hashinit(void);
33113
-void runtime_traceback();
33114
+void runtime_traceback(void);
33115
void runtime_tracebackothers(G*);
33118
@@ -756,6 +756,7 @@
33119
extern _Bool __go_file_line(uintptr, String*, String*, intgo *);
33120
extern byte* runtime_progname();
33121
extern void runtime_main(void*);
33122
+extern uint32 runtime_in_callers;
33124
int32 getproccount(void);
33126
Index: libgo/runtime/proc.c
33127
===================================================================
33128
--- a/src/libgo/runtime/proc.c (.../tags/gcc_4_8_2_release)
33129
+++ b/src/libgo/runtime/proc.c (.../branches/gcc-4_8-branch)
33130
@@ -2239,6 +2239,14 @@
33131
if(prof.fn == nil || prof.hz == 0)
33134
+ if(runtime_atomicload(&runtime_in_callers) > 0) {
33135
+ // If SIGPROF arrived while already fetching runtime
33136
+ // callers we can have trouble on older systems
33137
+ // because the unwind library calls dl_iterate_phdr
33138
+ // which was not recursive in the past.
33142
runtime_lock(&prof);
33143
if(prof.fn == nil) {
33144
runtime_unlock(&prof);
33145
Index: libgo/runtime/mgc0.c
33146
===================================================================
33147
--- a/src/libgo/runtime/mgc0.c (.../tags/gcc_4_8_2_release)
33148
+++ b/src/libgo/runtime/mgc0.c (.../branches/gcc-4_8-branch)
33149
@@ -174,7 +174,7 @@
33154
+} work __attribute__((aligned(8)));
33157
GC_DEFAULT_PTR = GC_NUM_INSTR,
33158
@@ -239,8 +239,7 @@
33159
// (Manually inlined copy of MHeap_LookupMaybe.)
33160
k = (uintptr)obj>>PageShift;
33162
- if(sizeof(void*) == 8)
33163
- x -= (uintptr)runtime_mheap->arena_start>>PageShift;
33164
+ x -= (uintptr)runtime_mheap->arena_start>>PageShift;
33165
s = runtime_mheap->map[x];
33166
if(s == nil || k < s->start || k - s->start >= s->npages || s->state != MSpanInUse)
33168
@@ -418,8 +417,7 @@
33169
// (Manually inlined copy of MHeap_LookupMaybe.)
33170
k = (uintptr)obj>>PageShift;
33172
- if(sizeof(void*) == 8)
33173
- x -= (uintptr)arena_start>>PageShift;
33174
+ x -= (uintptr)arena_start>>PageShift;
33175
s = runtime_mheap->map[x];
33176
if(s == nil || k < s->start || k - s->start >= s->npages || s->state != MSpanInUse)
33178
@@ -466,8 +464,7 @@
33179
// Ask span about size class.
33180
// (Manually inlined copy of MHeap_Lookup.)
33181
x = (uintptr)obj >> PageShift;
33182
- if(sizeof(void*) == 8)
33183
- x -= (uintptr)arena_start>>PageShift;
33184
+ x -= (uintptr)arena_start>>PageShift;
33185
s = runtime_mheap->map[x];
33188
@@ -585,8 +582,7 @@
33191
x = (uintptr)obj >> PageShift;
33192
- if(sizeof(void*) == 8)
33193
- x -= (uintptr)(runtime_mheap->arena_start)>>PageShift;
33194
+ x -= (uintptr)(runtime_mheap->arena_start)>>PageShift;
33195
s = runtime_mheap->map[x];
33196
objstart = (byte*)((uintptr)s->start<<PageShift);
33197
if(s->sizeclass != 0) {
33198
Index: libgo/runtime/go-signal.c
33199
===================================================================
33200
--- a/src/libgo/runtime/go-signal.c (.../tags/gcc_4_8_2_release)
33201
+++ b/src/libgo/runtime/go-signal.c (.../branches/gcc-4_8-branch)
33202
@@ -234,7 +234,7 @@
33206
- runtime_traceback (g);
33207
+ runtime_traceback ();
33208
runtime_tracebackothers (g);
33210
/* The gc library calls runtime_dumpregs here, and provides
33211
@@ -399,6 +399,9 @@
33215
+#ifdef USING_SPLIT_STACK
33216
+ void *stack_context[10];
33219
/* We are now running on the stack registered via sigaltstack.
33220
(Actually there is a small span of time between runtime_siginit
33221
@@ -409,7 +412,7 @@
33224
#ifdef USING_SPLIT_STACK
33225
- __splitstack_getcontext (&gp->stack_context[0]);
33226
+ __splitstack_getcontext (&stack_context[0]);
33230
@@ -432,7 +435,7 @@
33233
#ifdef USING_SPLIT_STACK
33234
- __splitstack_setcontext (&gp->stack_context[0]);
33235
+ __splitstack_setcontext (&stack_context[0]);
33239
Index: libgo/runtime/go-callers.c
33240
===================================================================
33241
--- a/src/libgo/runtime/go-callers.c (.../tags/gcc_4_8_2_release)
33242
+++ b/src/libgo/runtime/go-callers.c (.../branches/gcc-4_8-branch)
33244
#include "runtime.h"
33247
+/* This is set to non-zero when calling backtrace_full. This is used
33248
+ to avoid getting hanging on a recursive lock in dl_iterate_phdr on
33249
+ older versions of glibc when a SIGPROF signal arrives while
33250
+ collecting a backtrace. */
33252
+uint32 runtime_in_callers;
33254
/* Argument passed to callback function. */
33256
struct callers_data
33257
@@ -111,8 +118,10 @@
33258
data.skip = skip + 1;
33261
+ runtime_xadd (&runtime_in_callers, 1);
33262
backtrace_full (__go_get_backtrace_state (), 0, callback, error_callback,
33264
+ runtime_xadd (&runtime_in_callers, -1);
33268
Index: libgo/runtime/go-cdiv.c
33269
===================================================================
33270
--- a/src/libgo/runtime/go-cdiv.c (.../tags/gcc_4_8_2_release)
33271
+++ b/src/libgo/runtime/go-cdiv.c (.../branches/gcc-4_8-branch)
33273
+/* go-cdiv.c -- complex division routines
33275
+ Copyright 2013 The Go Authors. All rights reserved.
33276
+ Use of this source code is governed by a BSD-style
33277
+ license that can be found in the LICENSE file. */
33279
+/* Calls to these functions are generated by the Go frontend for
33280
+ division of complex64 or complex128. We use these because Go's
33281
+ complex division expects slightly different results from the GCC
33282
+ default. When dividing NaN+1.0i / 0+0i, Go expects NaN+NaNi but
33283
+ GCC generates NaN+Infi. NaN+Infi seems wrong seems the rules of
33284
+ C99 Annex G specify that if either side of a complex number is Inf,
33285
+ the the whole number is Inf, but an operation involving NaN ought
33286
+ to result in NaN, not Inf. */
33289
+__go_complex64_div (__complex float a, __complex float b)
33291
+ if (__builtin_expect (b == 0+0i, 0))
33293
+ if (!__builtin_isinff (__real__ a)
33294
+ && !__builtin_isinff (__imag__ a)
33295
+ && (__builtin_isnanf (__real__ a) || __builtin_isnanf (__imag__ a)))
33297
+ /* Pass "1" to nanf to match math/bits.go. */
33298
+ return __builtin_nanf("1") + __builtin_nanf("1")*1i;
33305
+__go_complex128_div (__complex double a, __complex double b)
33307
+ if (__builtin_expect (b == 0+0i, 0))
33309
+ if (!__builtin_isinf (__real__ a)
33310
+ && !__builtin_isinf (__imag__ a)
33311
+ && (__builtin_isnan (__real__ a) || __builtin_isnan (__imag__ a)))
33313
+ /* Pass "1" to nan to match math/bits.go. */
33314
+ return __builtin_nan("1") + __builtin_nan("1")*1i;
33319
Index: libgo/runtime/go-reflect-call.c
33320
===================================================================
33321
--- a/src/libgo/runtime/go-reflect-call.c (.../tags/gcc_4_8_2_release)
33322
+++ b/src/libgo/runtime/go-reflect-call.c (.../branches/gcc-4_8-branch)
33324
const struct __go_struct_field *fields;
33327
+ field_count = descriptor->__fields.__count;
33328
+ if (field_count == 0) {
33329
+ return &ffi_type_void;
33331
ret = (ffi_type *) __go_alloc (sizeof (ffi_type));
33332
ret->type = FFI_TYPE_STRUCT;
33333
- field_count = descriptor->__fields.__count;
33334
fields = (const struct __go_struct_field *) descriptor->__fields.__values;
33335
ret->elements = (ffi_type **) __go_alloc ((field_count + 1)
33336
* sizeof (ffi_type *));
33337
Index: libgo/runtime/go-recover.c
33338
===================================================================
33339
--- a/src/libgo/runtime/go-recover.c (.../tags/gcc_4_8_2_release)
33340
+++ b/src/libgo/runtime/go-recover.c (.../branches/gcc-4_8-branch)
33341
@@ -16,12 +16,14 @@
33342
__go_can_recover--this is, the thunk. */
33345
-__go_can_recover (const void* retaddr)
33346
+__go_can_recover (const void *retaddr)
33349
struct __go_defer_stack *d;
33353
+ const byte *name;
33360
dret = (const char *) d->__retaddr;
33361
- return ret <= dret && ret + 16 >= dret;
33362
+ if (ret <= dret && ret + 16 >= dret)
33365
+ /* If the function calling recover was created by reflect.MakeFunc,
33366
+ then RETADDR will be somewhere in libffi. Our caller is
33367
+ permitted to recover if it was called from libffi. */
33368
+ if (!d->__makefunc_can_recover)
33371
+ if (runtime_callers (2, &loc, 1) < 1)
33374
+ /* If we have no function name, then we weren't called by Go code.
33375
+ Guess that we were called by libffi. */
33376
+ if (loc.function.len == 0)
33379
+ if (loc.function.len < 4)
33381
+ name = loc.function.str;
33382
+ if (*name == '_')
33384
+ if (loc.function.len < 5)
33389
+ if (name[0] == 'f' && name[1] == 'f' && name[2] == 'i' && name[3] == '_')
33392
+ /* We may also be called by reflect.makeFuncImpl.call, for a
33393
+ function created by reflect.MakeFunc. */
33394
+ if (__builtin_strstr ((const char *) name, "makeFuncImpl") != NULL)
33400
+/* This function is called when code is about to enter a function
33401
+ created by reflect.MakeFunc. It is called by the function stub
33402
+ used by MakeFunc. If the stub is permitted to call recover, then a
33403
+ real MakeFunc function is permitted to call recover. */
33406
+__go_makefunc_can_recover (const void *retaddr)
33408
+ struct __go_defer_stack *d;
33410
+ d = runtime_g ()->defer;
33412
+ && !d->__makefunc_can_recover
33413
+ && __go_can_recover (retaddr))
33414
+ d->__makefunc_can_recover = 1;
33417
+/* This function is called when code is about to exit a function
33418
+ created by reflect.MakeFunc. It is called by the function stub
33419
+ used by MakeFunc. It clears the __makefunc_can_recover field.
33420
+ It's OK to always clear this field, because __go_can_recover will
33421
+ only be called by a stub created for a function that calls recover.
33422
+ That stub will not call a function created by reflect.MakeFunc, so
33423
+ by the time we get here any caller higher up on the call stack no
33424
+ longer needs the information. */
33427
+__go_makefunc_returning (void)
33429
+ struct __go_defer_stack *d;
33431
+ d = runtime_g ()->defer;
33433
+ d->__makefunc_can_recover = 0;
33436
/* This is only called when it is valid for the caller to recover the
33437
value on top of the panic stack, if there is one. */
33439
Index: libgo/runtime/malloc.goc
33440
===================================================================
33441
--- a/src/libgo/runtime/malloc.goc (.../tags/gcc_4_8_2_release)
33442
+++ b/src/libgo/runtime/malloc.goc (.../branches/gcc-4_8-branch)
33443
@@ -541,8 +541,7 @@
33445
// (Manually inlined copy of runtime_MHeap_Lookup)
33446
p = (uintptr)v>>PageShift;
33447
- if(sizeof(void*) == 8)
33448
- p -= (uintptr)runtime_mheap->arena_start >> PageShift;
33449
+ p -= (uintptr)runtime_mheap->arena_start >> PageShift;
33450
s = runtime_mheap->map[p];
33452
if(s->sizeclass == 0) {
33453
Index: libgo/runtime/go-make-slice.c
33454
===================================================================
33455
--- a/src/libgo/runtime/go-make-slice.c (.../tags/gcc_4_8_2_release)
33456
+++ b/src/libgo/runtime/go-make-slice.c (.../branches/gcc-4_8-branch)
33458
std = (const struct __go_slice_type *) td;
33460
ilen = (intgo) len;
33461
- if (ilen < 0 || (uintptr_t) ilen != len)
33463
+ || (uintptr_t) ilen != len
33464
+ || (std->__element_type->__size > 0
33465
+ && len > MaxMem / std->__element_type->__size))
33466
runtime_panicstring ("makeslice: len out of range");
33468
icap = (intgo) cap;
33469
Index: libgo/runtime/mheap.c
33470
===================================================================
33471
--- a/src/libgo/runtime/mheap.c (.../tags/gcc_4_8_2_release)
33472
+++ b/src/libgo/runtime/mheap.c (.../branches/gcc-4_8-branch)
33473
@@ -150,8 +150,7 @@
33474
runtime_MSpan_Init(t, s->start + npage, s->npages - npage);
33477
- if(sizeof(void*) == 8)
33478
- p -= ((uintptr)h->arena_start>>PageShift);
33479
+ p -= ((uintptr)h->arena_start>>PageShift);
33483
@@ -169,8 +168,7 @@
33484
s->elemsize = (sizeclass==0 ? s->npages<<PageShift : (uintptr)runtime_class_to_size[sizeclass]);
33485
s->types.compression = MTypes_Empty;
33487
- if(sizeof(void*) == 8)
33488
- p -= ((uintptr)h->arena_start>>PageShift);
33489
+ p -= ((uintptr)h->arena_start>>PageShift);
33490
for(n=0; n<npage; n++)
33493
@@ -241,8 +239,7 @@
33494
mstats.mspan_sys = h->spanalloc.sys;
33495
runtime_MSpan_Init(s, (uintptr)v>>PageShift, ask>>PageShift);
33497
- if(sizeof(void*) == 8)
33498
- p -= ((uintptr)h->arena_start>>PageShift);
33499
+ p -= ((uintptr)h->arena_start>>PageShift);
33501
h->map[p + s->npages - 1] = s;
33502
s->state = MSpanInUse;
33503
@@ -259,8 +256,7 @@
33507
- if(sizeof(void*) == 8)
33508
- p -= (uintptr)h->arena_start;
33509
+ p -= (uintptr)h->arena_start;
33510
return h->map[p >> PageShift];
33513
@@ -281,8 +277,7 @@
33515
p = (uintptr)v>>PageShift;
33517
- if(sizeof(void*) == 8)
33518
- q -= (uintptr)h->arena_start >> PageShift;
33519
+ q -= (uintptr)h->arena_start >> PageShift;
33521
if(s == nil || p < s->start || p - s->start >= s->npages)
33523
@@ -332,8 +327,7 @@
33525
// Coalesce with earlier, later spans.
33527
- if(sizeof(void*) == 8)
33528
- p -= (uintptr)h->arena_start >> PageShift;
33529
+ p -= (uintptr)h->arena_start >> PageShift;
33530
if(p > 0 && (t = h->map[p-1]) != nil && t->state != MSpanInUse) {
33531
tp = (uintptr*)(t->start<<PageShift);
33532
*tp |= *sp; // propagate "needs zeroing" mark
33533
Index: libgo/mksysinfo.sh
33534
===================================================================
33535
--- a/src/libgo/mksysinfo.sh (.../tags/gcc_4_8_2_release)
33536
+++ b/src/libgo/mksysinfo.sh (.../branches/gcc-4_8-branch)
33537
@@ -1035,6 +1035,10 @@
33538
grep '^const _LOCK_' gen-sysinfo.go |
33539
sed -e 's/^\(const \)_\(LOCK_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
33541
+# The PRIO constants.
33542
+grep '^const _PRIO_' gen-sysinfo.go | \
33543
+ sed -e 's/^\(const \)_\(PRIO_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
33545
# The GNU/Linux LINUX_REBOOT flags.
33546
grep '^const _LINUX_REBOOT_' gen-sysinfo.go |
33547
sed -e 's/^\(const \)_\(LINUX_REBOOT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
33548
Index: libgo/config.h.in
33549
===================================================================
33550
--- a/src/libgo/config.h.in (.../tags/gcc_4_8_2_release)
33551
+++ b/src/libgo/config.h.in (.../branches/gcc-4_8-branch)
33553
/* Define to 1 if you have the `dl_iterate_phdr' function. */
33554
#undef HAVE_DL_ITERATE_PHDR
33556
+/* Define to 1 if you have the `dup3' function. */
33559
/* Define to 1 if you have the `epoll_create1' function. */
33560
#undef HAVE_EPOLL_CREATE1
33563
/* Define if _Unwind_GetIPInfo is available. */
33564
#undef HAVE_GETIPINFO
33566
+/* Define to 1 if you have the `getxattr' function. */
33567
+#undef HAVE_GETXATTR
33569
/* Define to 1 if you have the `inotify_add_watch' function. */
33570
#undef HAVE_INOTIFY_ADD_WATCH
33572
@@ -111,6 +117,9 @@
33573
/* Define to 1 if you have the <linux/rtnetlink.h> header file. */
33574
#undef HAVE_LINUX_RTNETLINK_H
33576
+/* Define to 1 if you have the `listxattr' function. */
33577
+#undef HAVE_LISTXATTR
33579
/* Define to 1 if the system has the type `loff_t'. */
33582
@@ -171,6 +180,9 @@
33583
/* Define to 1 if you have the `pipe2' function. */
33586
+/* Define to 1 if you have the `removexattr' function. */
33587
+#undef HAVE_REMOVEXATTR
33589
/* Define to 1 if you have the `renameat' function. */
33590
#undef HAVE_RENAMEAT
33592
@@ -180,6 +192,9 @@
33593
/* Define to 1 if you have the `setenv' function. */
33596
+/* Define to 1 if you have the `setxattr' function. */
33597
+#undef HAVE_SETXATTR
33599
/* Define to 1 if you have the `sinl' function. */
33602
Index: libgo/configure.ac
33603
===================================================================
33604
--- a/src/libgo/configure.ac (.../tags/gcc_4_8_2_release)
33605
+++ b/src/libgo/configure.ac (.../branches/gcc-4_8-branch)
33606
@@ -503,7 +503,7 @@
33607
AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
33608
AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
33610
-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)
33611
+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)
33613
AC_CHECK_TYPES([loff_t])
33615
Index: libgo/go/reflect/value.go
33616
===================================================================
33617
--- a/src/libgo/go/reflect/value.go (.../tags/gcc_4_8_2_release)
33618
+++ b/src/libgo/go/reflect/value.go (.../branches/gcc-4_8-branch)
33623
+ flagMethodFn // gccgo: first fn parameter is always pointer
33624
flagKindShift = iota
33625
flagKindWidth = 5 // there are 27 kinds
33626
flagKindMask flag = 1<<flagKindWidth - 1
33627
@@ -433,7 +434,7 @@
33628
if v.flag&flagMethod != 0 {
33631
- firstPointer := len(in) > 0 && t.In(0).Kind() != Ptr && v.flag&flagMethod == 0 && isMethod(v.typ)
33632
+ firstPointer := len(in) > 0 && t.In(0).Kind() != Ptr && v.flag&flagMethodFn != 0
33633
params := make([]unsafe.Pointer, nin)
33635
if v.flag&flagMethod != 0 {
33636
@@ -484,33 +485,6 @@
33640
-// gccgo specific test to see if typ is a method. We can tell by
33641
-// looking at the string to see if there is a receiver. We need this
33642
-// because for gccgo all methods take pointer receivers.
33643
-func isMethod(t *rtype) bool {
33644
- if Kind(t.kind) != Func {
33651
- for i, c := range s {
33657
- } else if c == ')' {
33659
- } else if parens == 0 && c == ' ' && s[i+1] != '(' && !sawRet {
33664
- return params > 2
33667
// methodReceiver returns information about the receiver
33668
// described by v. The Value v may or may not have the
33669
// flagMethod bit set, so the kind cached in v.flag should
33670
@@ -917,6 +891,16 @@
33671
v = makeMethodValue("Interface", v)
33674
+ if v.flag&flagMethodFn != 0 {
33675
+ if v.typ.Kind() != Func {
33676
+ panic("reflect: MethodFn of non-Func")
33678
+ ft := (*funcType)(unsafe.Pointer(v.typ))
33679
+ if ft.in[0].Kind() != Ptr {
33680
+ v = makeValueMethod(v)
33685
if k == Interface {
33686
// Special case: return the element inside the interface.
33687
@@ -1230,8 +1214,7 @@
33688
// created via reflect have the same underlying code pointer,
33689
// so their Pointers are equal. The function used here must
33690
// match the one used in makeMethodValue.
33691
- // This is not properly implemented for gccgo.
33693
+ f := makeFuncStub
33694
return **(**uintptr)(unsafe.Pointer(&f))
33697
Index: libgo/go/reflect/makefuncgo_386.go
33698
===================================================================
33699
--- a/src/libgo/go/reflect/makefuncgo_386.go (.../tags/gcc_4_8_2_release)
33700
+++ b/src/libgo/go/reflect/makefuncgo_386.go (.../branches/gcc-4_8-branch)
33702
// registers that might hold result values.
33703
type i386Regs struct {
33705
- eax uint32 // Value to return in %eax.
33706
- st0 uint64 // Value to return in %st(0).
33707
+ eax uint32 // Value to return in %eax.
33708
+ st0 float64 // Value to return in %st(0).
33709
+ sr bool // Set to true if hidden struct pointer.
33710
+ sf bool // Set to true if returning float
33713
// MakeFuncStubGo implements the 386 calling convention for MakeFunc.
33714
@@ -56,10 +58,13 @@
33715
in := make([]Value, 0, len(ftyp.in))
33716
ap := uintptr(regs.esp)
33720
var retPtr unsafe.Pointer
33722
retPtr = *(*unsafe.Pointer)(unsafe.Pointer(ap))
33727
for _, rt := range ftyp.in {
33730
// Call the real function.
33733
+ out := c.call(in)
33735
if len(out) != len(ftyp.out) {
33736
panic("reflect: wrong return count from function created by MakeFunc")
33737
@@ -123,13 +128,16 @@
33741
- if v.Kind() != Ptr && v.Kind() != UnsafePointer {
33742
- w = loadIword(unsafe.Pointer(w), v.typ.size)
33745
- case Float32, Float64:
33746
- regs.st0 = uint64(uintptr(w))
33747
+ case Ptr, UnsafePointer:
33748
+ regs.eax = uint32(uintptr(w))
33750
+ regs.st0 = float64(*(*float32)(unsafe.Pointer(w)))
33753
+ regs.st0 = *(*float64)(unsafe.Pointer(w))
33756
- regs.eax = uint32(uintptr(w))
33757
+ regs.eax = uint32(uintptr(loadIword(unsafe.Pointer(w), v.typ.size)))
33760
Index: libgo/go/reflect/makefunc_amd64.S
33761
===================================================================
33762
--- a/src/libgo/go/reflect/makefunc_amd64.S (.../tags/gcc_4_8_2_release)
33763
+++ b/src/libgo/go/reflect/makefunc_amd64.S (.../branches/gcc-4_8-branch)
33765
movdqa %xmm6, 0xa0(%rsp)
33766
movdqa %xmm7, 0xb0(%rsp)
33768
+ /* For MakeFunc functions that call recover. */
33769
+ movq 8(%rbp), %rdi
33771
+ call __go_makefunc_can_recover@PLT
33773
+ call __go_makefunc_can_recover
33776
# Get function type.
33778
call __go_get_closure@PLT
33780
call reflect.MakeFuncStubGo
33783
+ /* MakeFunc functions can no longer call recover. */
33785
+ call __go_makefunc_returning@PLT
33787
+ call __go_makefunc_returning
33790
# The structure will be updated with any return values. Load
33791
# all possible return registers before returning to the caller.
33793
Index: libgo/go/reflect/type.go
33794
===================================================================
33795
--- a/src/libgo/go/reflect/type.go (.../tags/gcc_4_8_2_release)
33796
+++ b/src/libgo/go/reflect/type.go (.../branches/gcc-4_8-branch)
33797
@@ -508,7 +508,7 @@
33798
m.Type = toType(mt)
33799
x := new(unsafe.Pointer)
33800
*x = unsafe.Pointer(&p.tfn)
33801
- m.Func = Value{mt, unsafe.Pointer(x), fl | flagIndir}
33802
+ m.Func = Value{mt, unsafe.Pointer(x), fl | flagIndir | flagMethodFn}
33806
Index: libgo/go/reflect/makefunc_386.S
33807
===================================================================
33808
--- a/src/libgo/go/reflect/makefunc_386.S (.../tags/gcc_4_8_2_release)
33809
+++ b/src/libgo/go/reflect/makefunc_386.S (.../branches/gcc-4_8-branch)
33814
- st0 uint64 // 0x8
33815
+ st0 float64 // 0x8
33820
+ The sr field is set by the function to a non-zero value if
33821
+ the function takes a struct hidden pointer that must be
33822
+ popped off the stack. */
33827
leal 8(%ebp), %eax /* Set esp field in struct. */
33828
movl %eax, -24(%ebp)
33830
+ /* For MakeFunc functions that call recover. */
33831
+ movl 4(%ebp), %eax
33832
+ movl %eax, (%esp)
33834
+ call __go_makefunc_can_recover@PLT
33836
+ call __go_makefunc_can_recover
33840
call __go_get_closure@PLT
33842
call __go_get_closure
33844
call reflect.MakeFuncStubGo
33847
+ /* MakeFunc functions can no longer call recover. */
33849
+ call __go_makefunc_returning@PLT
33851
+ call __go_makefunc_returning
33854
/* Set return registers. */
33856
movl -20(%ebp), %eax
33858
+ cmpb $0, -7(%ebp)
33864
@@ -73,12 +97,20 @@
33865
movsd -16(%ebp), %xmm0
33869
+ movb -8(%ebp), %dl
33884
.size reflect.makeFuncStub, . - reflect.makeFuncStub
33885
Index: libgo/go/reflect/all_test.go
33886
===================================================================
33887
--- a/src/libgo/go/reflect/all_test.go (.../tags/gcc_4_8_2_release)
33888
+++ b/src/libgo/go/reflect/all_test.go (.../branches/gcc-4_8-branch)
33889
@@ -1430,6 +1430,46 @@
33893
+type emptyStruct struct{}
33895
+type nonEmptyStruct struct {
33899
+func returnEmpty() emptyStruct {
33900
+ return emptyStruct{}
33903
+func takesEmpty(e emptyStruct) {
33906
+func returnNonEmpty(i int) nonEmptyStruct {
33907
+ return nonEmptyStruct{member: i}
33910
+func takesNonEmpty(n nonEmptyStruct) int {
33914
+func TestCallWithStruct(t *testing.T) {
33915
+ r := ValueOf(returnEmpty).Call([]Value{})
33916
+ if len(r) != 1 || r[0].Type() != TypeOf(emptyStruct{}) {
33917
+ t.Errorf("returning empty struct returned %s instead", r)
33919
+ r = ValueOf(takesEmpty).Call([]Value{ValueOf(emptyStruct{})})
33921
+ t.Errorf("takesEmpty returned values: %s", r)
33923
+ r = ValueOf(returnNonEmpty).Call([]Value{ValueOf(42)})
33924
+ if len(r) != 1 || r[0].Type() != TypeOf(nonEmptyStruct{}) || r[0].Field(0).Int() != 42 {
33925
+ t.Errorf("returnNonEmpty returned %s", r)
33927
+ r = ValueOf(takesNonEmpty).Call([]Value{ValueOf(nonEmptyStruct{member: 42})})
33928
+ if len(r) != 1 || r[0].Type() != TypeOf(1) || r[0].Int() != 42 {
33929
+ t.Errorf("takesNonEmpty returned %s", r)
33933
func TestMakeFunc(t *testing.T) {
33934
switch runtime.GOARCH {
33935
case "amd64", "386":
33936
@@ -1587,9 +1627,13 @@
33940
-/* Not yet implemented for gccgo
33941
+func TestMethodValue(t *testing.T) {
33942
+ switch runtime.GOARCH {
33943
+ case "amd64", "386":
33945
+ t.Skip("reflect method values not implemented for " + runtime.GOARCH)
33948
-func TestMethodValue(t *testing.T) {
33952
@@ -1658,8 +1702,6 @@
33958
// Reflect version of $GOROOT/test/method5.go
33960
// Concrete types implementing M method.
33961
@@ -1744,7 +1786,12 @@
33962
func (t4 Tm4) M(x int, b byte) (byte, int) { return b, x + 40 }
33964
func TestMethod5(t *testing.T) {
33965
- /* Not yet used for gccgo
33966
+ switch runtime.GOARCH {
33967
+ case "amd64", "386":
33969
+ t.Skip("reflect method values not implemented for " + runtime.GOARCH)
33972
CheckF := func(name string, f func(int, byte) (byte, int), inc int) {
33973
b, x := f(1000, 99)
33974
if b != 99 || x != 1000+inc {
33975
@@ -1751,7 +1798,6 @@
33976
t.Errorf("%s(1000, 99) = %v, %v, want 99, %v", name, b, x, 1000+inc)
33981
CheckV := func(name string, i Value, inc int) {
33982
bx := i.Method(0).Call([]Value{ValueOf(1000), ValueOf(byte(99))})
33983
@@ -1761,9 +1807,7 @@
33984
t.Errorf("direct %s.M(1000, 99) = %v, %v, want 99, %v", name, b, x, 1000+inc)
33987
- /* Not yet implemented for gccgo
33988
CheckF(name+".M", i.Method(0).Interface().(func(int, byte) (byte, int)), inc)
33992
var TinterType = TypeOf(new(Tinter)).Elem()
33993
Index: libgo/go/reflect/makefunc.go
33994
===================================================================
33995
--- a/src/libgo/go/reflect/makefunc.go (.../tags/gcc_4_8_2_release)
33996
+++ b/src/libgo/go/reflect/makefunc.go (.../branches/gcc-4_8-branch)
34000
fn func([]Value) []Value
34002
+ // For gccgo we use the same entry point for functions and for
34003
+ // method values.
34008
// MakeFunc returns a new function of the given Type
34010
dummy := makeFuncStub
34011
code := **(**uintptr)(unsafe.Pointer(&dummy))
34013
- impl := &makeFuncImpl{code: code, typ: ftyp, fn: fn}
34014
+ impl := &makeFuncImpl{code: code, typ: ftyp, fn: fn, method: -1}
34016
return Value{t, unsafe.Pointer(&impl), flag(Func<<flagKindShift) | flagIndir}
34018
@@ -85,15 +90,94 @@
34019
panic("reflect: internal error: invalid use of makePartialFunc")
34022
+ switch runtime.GOARCH {
34023
+ case "amd64", "386":
34025
+ panic("reflect.makeMethodValue not implemented for " + runtime.GOARCH)
34028
// Ignoring the flagMethod bit, v describes the receiver, not the method type.
34029
fl := v.flag & (flagRO | flagAddr | flagIndir)
34030
fl |= flag(v.typ.Kind()) << flagKindShift
34031
rcvr := Value{v.typ, v.val, fl}
34033
+ // v.Type returns the actual type of the method value.
34034
+ ft := v.Type().(*rtype)
34036
+ // Indirect Go func value (dummy) to obtain
34037
+ // actual code address. (A Go func value is a pointer
34038
+ // to a C function pointer. http://golang.org/s/go11func.)
34039
+ dummy := makeFuncStub
34040
+ code := **(**uintptr)(unsafe.Pointer(&dummy))
34042
// Cause panic if method is not appropriate.
34043
// The panic would still happen during the call if we omit this,
34044
// but we want Interface() and other operations to fail early.
34045
- methodReceiver(op, rcvr, int(v.flag)>>flagMethodShift)
34046
+ t, _, _ := methodReceiver(op, rcvr, int(v.flag)>>flagMethodShift)
34048
- panic("reflect makeMethodValue not implemented")
34049
+ fv := &makeFuncImpl{
34051
+ typ: (*funcType)(unsafe.Pointer(t)),
34052
+ method: int(v.flag) >> flagMethodShift,
34056
+ return Value{ft, unsafe.Pointer(&fv), v.flag&flagRO | flag(Func)<<flagKindShift | flagIndir}
34059
+// makeValueMethod takes a method function and returns a function that
34060
+// takes a value receiver and calls the real method with a pointer to
34062
+func makeValueMethod(v Value) Value {
34064
+ if typ.Kind() != Func {
34065
+ panic("reflect: call of makeValueMethod with non-Func type")
34067
+ if v.flag&flagMethodFn == 0 {
34068
+ panic("reflect: call of makeValueMethod with non-MethodFn")
34071
+ switch runtime.GOARCH {
34072
+ case "amd64", "386":
34074
+ panic("reflect.makeValueMethod not implemented for " + runtime.GOARCH)
34077
+ t := typ.common()
34078
+ ftyp := (*funcType)(unsafe.Pointer(t))
34080
+ // Indirect Go func value (dummy) to obtain
34081
+ // actual code address. (A Go func value is a pointer
34082
+ // to a C function pointer. http://golang.org/s/go11func.)
34083
+ dummy := makeFuncStub
34084
+ code := **(**uintptr)(unsafe.Pointer(&dummy))
34086
+ impl := &makeFuncImpl{
34093
+ return Value{t, unsafe.Pointer(&impl), flag(Func<<flagKindShift) | flagIndir}
34096
+// Call the function represented by a makeFuncImpl.
34097
+func (c *makeFuncImpl) call(in []Value) []Value {
34098
+ if c.method == -1 {
34100
+ } else if c.method == -2 {
34101
+ if c.typ.IsVariadic() {
34102
+ return c.rcvr.CallSlice(in)
34104
+ return c.rcvr.Call(in)
34107
+ m := c.rcvr.Method(c.method)
34108
+ if c.typ.IsVariadic() {
34109
+ return m.CallSlice(in)
34111
+ return m.Call(in)
34115
Index: libgo/go/reflect/makefuncgo_amd64.go
34116
===================================================================
34117
--- a/src/libgo/go/reflect/makefuncgo_amd64.go (.../tags/gcc_4_8_2_release)
34118
+++ b/src/libgo/go/reflect/makefuncgo_amd64.go (.../branches/gcc-4_8-branch)
34119
@@ -319,7 +319,7 @@
34120
// All the real arguments have been found and turned into
34121
// Value's. Call the real function.
34124
+ out := c.call(in)
34126
if len(out) != len(ftyp.out) {
34127
panic("reflect: wrong return count from function created by MakeFunc")
34128
Index: libgo/go/net/fd_unix.go
34129
===================================================================
34130
--- a/src/libgo/go/net/fd_unix.go (.../tags/gcc_4_8_2_release)
34131
+++ b/src/libgo/go/net/fd_unix.go (.../branches/gcc-4_8-branch)
34141
if err == nil || err == syscall.EISCONN {
34145
+ // On Solaris we can see EINVAL if the socket has
34146
+ // already been accepted and closed by the server.
34147
+ // Treat this as a successful connection--writes to
34148
+ // the socket will see EOF. For details and a test
34149
+ // case in C see http://golang.org/issue/6828.
34150
+ if runtime.GOOS == "solaris" && err == syscall.EINVAL {
34154
if err != syscall.EINPROGRESS && err != syscall.EALREADY && err != syscall.EINTR {
34157
Index: libgo/go/go/build/build.go
34158
===================================================================
34159
--- a/src/libgo/go/go/build/build.go (.../tags/gcc_4_8_2_release)
34160
+++ b/src/libgo/go/go/build/build.go (.../branches/gcc-4_8-branch)
34161
@@ -429,7 +429,7 @@
34162
switch ctxt.Compiler {
34164
dir, elem := pathpkg.Split(p.ImportPath)
34165
- pkga = "pkg/gccgo/" + dir + "lib" + elem + ".a"
34166
+ pkga = "pkg/gccgo_" + ctxt.GOOS + "_" + ctxt.GOARCH + "/" + dir + "lib" + elem + ".a"
34169
if ctxt.InstallSuffix != "" {
34170
Index: libgo/go/go/build/syslist.go
34171
===================================================================
34172
--- a/src/libgo/go/go/build/syslist.go (.../tags/gcc_4_8_2_release)
34173
+++ b/src/libgo/go/go/build/syslist.go (.../branches/gcc-4_8-branch)
34175
+// Copyright 2011 The Go Authors. All rights reserved.
34176
+// Use of this source code is governed by a BSD-style
34177
+// license that can be found in the LICENSE file.
34181
+const goosList = "darwin dragonfly freebsd linux netbsd openbsd plan9 windows solaris "
34182
+const goarchList = "386 amd64 arm alpha m68k mipso32 mipsn32 mipsn64 mipso64 ppc ppc64 sparc sparc64 "
34183
Index: libgo/go/syscall/libcall_linux.go
34184
===================================================================
34185
--- a/src/libgo/go/syscall/libcall_linux.go (.../tags/gcc_4_8_2_release)
34186
+++ b/src/libgo/go/syscall/libcall_linux.go (.../branches/gcc-4_8-branch)
34187
@@ -190,6 +190,9 @@
34188
//sys Adjtimex(buf *Timex) (state int, err error)
34189
//adjtimex(buf *Timex) _C_int
34191
+//sysnb Dup3(oldfd int, newfd int, flags int) (err error)
34192
+//dup3(oldfd _C_int, newfd _C_int, flags _C_int) _C_int
34194
//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
34195
//faccessat(dirfd _C_int, pathname *byte, mode _C_int, flags _C_int) _C_int
34197
@@ -268,6 +271,9 @@
34198
return origlen - len(buf), count, names
34201
+//sys Getxattr(path string, attr string, dest []byte) (sz int, err error)
34202
+//getxattr(path *byte, attr *byte, buf *byte, count Size_t) Ssize_t
34204
//sys InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error)
34205
//inotify_add_watch(fd _C_int, pathname *byte, mask uint32) _C_int
34207
@@ -283,6 +289,9 @@
34208
//sys Klogctl(typ int, buf []byte) (n int, err error)
34209
//klogctl(typ _C_int, bufp *byte, len _C_int) _C_int
34211
+//sys Listxattr(path string, dest []byte) (sz int, err error)
34212
+//listxattr(path *byte, list *byte, size Size_t) Ssize_t
34214
//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
34215
//mkdirat(dirfd _C_int, path *byte, mode Mode_t) _C_int
34217
@@ -305,6 +314,9 @@
34218
//sys PivotRoot(newroot string, putold string) (err error)
34219
//pivot_root(newroot *byte, putold *byte) _C_int
34221
+//sys Removexattr(path string, attr string) (err error)
34222
+//removexattr(path *byte, name *byte) _C_int
34224
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
34225
//renameat(olddirfd _C_int, oldpath *byte, newdirfd _C_int, newpath *byte) _C_int
34227
@@ -338,6 +350,9 @@
34228
//sysnb Setresuid(ruid int, eguid int, suid int) (err error)
34229
//setresuid(ruid Uid_t, euid Uid_t, suid Uid_t) _C_int
34231
+//sys Setxattr(path string, attr string, data []byte, flags int) (err error)
34232
+//setxattr(path *byte, name *byte, value *byte, size Size_t, flags _C_int) _C_int
34234
//sys splice(rfd int, roff *_loff_t, wfd int, woff *_loff_t, len int, flags int) (n int64, err error)
34235
//splice(rfd _C_int, roff *_loff_t, wfd _C_int, woff *_loff_t, len Size_t, flags _C_uint) Ssize_t
34236
func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
34237
Index: libgo/go/syscall/socket.go
34238
===================================================================
34239
--- a/src/libgo/go/syscall/socket.go (.../tags/gcc_4_8_2_release)
34240
+++ b/src/libgo/go/syscall/socket.go (.../branches/gcc-4_8-branch)
34245
-const SizeofSockaddrAny = 0x1c
34246
+const SizeofSockaddrAny = 0x6c
34248
type SockaddrInet4 struct {
34250
Index: libgo/go/syscall/libcall_posix.go
34251
===================================================================
34252
--- a/src/libgo/go/syscall/libcall_posix.go (.../tags/gcc_4_8_2_release)
34253
+++ b/src/libgo/go/syscall/libcall_posix.go (.../branches/gcc-4_8-branch)
34254
@@ -238,6 +238,9 @@
34255
//sysnb Getppid() (ppid int)
34258
+//sys Getpriority(which int, who int) (prio int, err error)
34259
+//getpriority(which _C_int, who _C_int) _C_int
34261
//sysnb Getrlimit(resource int, rlim *Rlimit) (err error)
34262
//getrlimit(resource _C_int, rlim *Rlimit) _C_int
34264
@@ -307,6 +310,9 @@
34265
//sysnb Setpgid(pid int, pgid int) (err error)
34266
//setpgid(pid Pid_t, pgid Pid_t) _C_int
34268
+//sys Setpriority(which int, who int, prio int) (err error)
34269
+//setpriority(which _C_int, who _C_int, prio _C_int) _C_int
34271
//sysnb Setreuid(ruid int, euid int) (err error)
34272
//setreuid(ruid Uid_t, euid Uid_t) _C_int
34274
Index: libgo/Makefile.am
34275
===================================================================
34276
--- a/src/libgo/Makefile.am (.../tags/gcc_4_8_2_release)
34277
+++ b/src/libgo/Makefile.am (.../branches/gcc-4_8-branch)
34278
@@ -424,6 +424,7 @@
34279
runtime/go-caller.c \
34280
runtime/go-callers.c \
34281
runtime/go-can-convert-interface.c \
34282
+ runtime/go-cdiv.c \
34284
runtime/go-check-interface.c \
34285
runtime/go-construct-map.c \
34286
@@ -1254,7 +1255,7 @@
34287
go/go/build/build.go \
34288
go/go/build/doc.go \
34289
go/go/build/read.go \
34291
+ go/go/build/syslist.go
34292
go_go_doc_files = \
34293
go/go/doc/comment.go \
34295
@@ -2712,15 +2713,6 @@
34297
.PHONY: go/build/check
34299
-syslist.go: s-syslist; @true
34300
-s-syslist: Makefile
34301
- echo '// Generated automatically by make.' >syslist.go.tmp
34302
- echo 'package build' >>syslist.go.tmp
34303
- echo 'const goosList = "$(GOOS)"' >>syslist.go.tmp
34304
- echo 'const goarchList = "$(GOARCH)"' >>syslist.go.tmp
34305
- $(SHELL) $(srcdir)/../move-if-change syslist.go.tmp syslist.go
34308
@go_include@ go/doc.lo.dep
34309
go/doc.lo.dep: $(go_go_doc_files)
34311
Index: libgfortran/ChangeLog
34312
===================================================================
34313
--- a/src/libgfortran/ChangeLog (.../tags/gcc_4_8_2_release)
34314
+++ b/src/libgfortran/ChangeLog (.../branches/gcc-4_8-branch)
34316
+2014-02-21 Jerry DeLisle <jvdelisle@gcc.gnu>
34317
+ Dominique d'Humieres <dominiq@lps.ens.fr>
34318
+ Steven G. Kargl <kargl@gcc.gnu.org>
34320
+ Backport from mainline
34321
+ PR libfortran/59700
34322
+ PR libfortran/59764
34323
+ * io/io.h (struct st_parameter_dt): Assign expanded_read flag to
34324
+ unused bit. Define new variable line_buffer_pos.
34325
+ * io/list_read.c (free_saved, next_char, l_push_char,
34326
+ read_logical, read_real): Replace use of item_count with
34327
+ line_buffer_pos for line_buffer look ahead.
34328
+ (read_logical, read_integer, parse_real, read_real, check_type):
34329
+ Adjust location of free_line to after generating error messages
34330
+ to retain the correct item count for the message.
34332
+2014-02-15 Jerry DeLisle <jvdelisle@gcc.gnu>
34333
+ Dominique d'Humieres <dominiq@lps.ens.fr>
34335
+ Backport from mainline
34336
+ PR libfortran/59771
34337
+ PR libfortran/59774
34338
+ PR libfortran/59836
34339
+ * io/write_float.def (output_float): Fix wrong handling of the
34341
+ (output_float_FMT_G_): Fixes rounding issues with -m32.
34343
2013-10-16 Release Manager
34345
* GCC 4.8.2 released.
34346
Index: libgfortran/io/list_read.c
34347
===================================================================
34348
--- a/src/libgfortran/io/list_read.c (.../tags/gcc_4_8_2_release)
34349
+++ b/src/libgfortran/io/list_read.c (.../branches/gcc-4_8-branch)
34350
@@ -118,7 +118,7 @@
34352
free_line (st_parameter_dt *dtp)
34354
- dtp->u.p.item_count = 0;
34355
+ dtp->u.p.line_buffer_pos = 0;
34356
dtp->u.p.line_buffer_enabled = 0;
34358
if (dtp->u.p.line_buffer == NULL)
34359
@@ -150,15 +150,15 @@
34361
dtp->u.p.at_eol = 0;
34363
- c = dtp->u.p.line_buffer[dtp->u.p.item_count];
34364
- if (c != '\0' && dtp->u.p.item_count < 64)
34365
+ c = dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos];
34366
+ if (c != '\0' && dtp->u.p.line_buffer_pos < 64)
34368
- dtp->u.p.line_buffer[dtp->u.p.item_count] = '\0';
34369
- dtp->u.p.item_count++;
34370
+ dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos] = '\0';
34371
+ dtp->u.p.line_buffer_pos++;
34375
- dtp->u.p.item_count = 0;
34376
+ dtp->u.p.line_buffer_pos = 0;
34377
dtp->u.p.line_buffer_enabled = 0;
34380
@@ -640,7 +640,7 @@
34381
if (dtp->u.p.line_buffer == NULL)
34382
dtp->u.p.line_buffer = xcalloc (SCRATCH_SIZE, 1);
34384
- dtp->u.p.line_buffer[dtp->u.p.item_count++] = c;
34385
+ dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos++] = c;
34389
@@ -750,7 +750,7 @@
34391
dtp->u.p.nml_read_error = 1;
34392
dtp->u.p.line_buffer_enabled = 1;
34393
- dtp->u.p.item_count = 0;
34394
+ dtp->u.p.line_buffer_pos = 0;
34398
@@ -758,14 +758,17 @@
34404
if (nml_bad_return (dtp, c))
34419
@@ -773,6 +776,7 @@
34421
snprintf (message, MSGLEN, "Bad logical value while reading item %d",
34422
dtp->u.p.item_count);
34424
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
34427
@@ -913,9 +917,9 @@
34428
else if (c != '\n')
34432
snprintf (message, MSGLEN, "Bad integer for item %d in list input",
34433
dtp->u.p.item_count);
34435
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
34438
@@ -1298,9 +1302,9 @@
34439
else if (c != '\n')
34443
snprintf (message, MSGLEN, "Bad floating point number for item %d",
34444
dtp->u.p.item_count);
34446
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
34449
@@ -1406,9 +1410,9 @@
34450
else if (c != '\n')
34454
snprintf (message, MSGLEN, "Bad complex value in item %d of list input",
34455
dtp->u.p.item_count);
34457
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
34460
@@ -1770,7 +1774,7 @@
34462
dtp->u.p.nml_read_error = 1;
34463
dtp->u.p.line_buffer_enabled = 1;
34464
- dtp->u.p.item_count = 0;
34465
+ dtp->u.p.line_buffer_pos = 0;
34469
@@ -1789,9 +1793,9 @@
34470
else if (c != '\n')
34474
snprintf (message, MSGLEN, "Bad real number in item %d of list input",
34475
dtp->u.p.item_count);
34477
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
34480
@@ -1806,11 +1810,10 @@
34482
if (dtp->u.p.saved_type != BT_UNKNOWN && dtp->u.p.saved_type != type)
34485
snprintf (message, MSGLEN, "Read type %s where %s was expected for item %d",
34486
type_name (dtp->u.p.saved_type), type_name (type),
34487
dtp->u.p.item_count);
34490
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
34493
@@ -1820,12 +1823,12 @@
34495
if (dtp->u.p.saved_length != len)
34498
snprintf (message, MSGLEN,
34499
"Read kind %d %s where kind %d is required for item %d",
34500
dtp->u.p.saved_length, type_name (dtp->u.p.saved_type), len,
34501
dtp->u.p.item_count);
34502
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
34507
Index: libgfortran/io/io.h
34508
===================================================================
34509
--- a/src/libgfortran/io/io.h (.../tags/gcc_4_8_2_release)
34510
+++ b/src/libgfortran/io/io.h (.../branches/gcc-4_8-branch)
34511
@@ -424,7 +424,10 @@
34512
unsigned g0_no_blanks : 1;
34513
/* Used to signal use of free_format_data. */
34514
unsigned format_not_saved : 1;
34515
- /* 14 unused bits. */
34516
+ /* A flag used to identify when a non-standard expanded namelist read
34518
+ unsigned expanded_read : 1;
34519
+ /* 13 unused bits. */
34521
/* Used for ungetc() style functionality. Possible values
34522
are an unsigned char, EOF, or EOF - 1 used to mark the
34523
@@ -441,9 +444,8 @@
34525
struct format_data *fmt;
34526
namelist_info *ionml;
34527
- /* A flag used to identify when a non-standard expanded namelist read
34529
- int expanded_read;
34530
+ /* Current position within the look-ahead line buffer. */
34531
+ int line_buffer_pos;
34532
/* Storage area for values except for strings. Must be
34533
large enough to hold a complex value (two reals) of the
34535
Index: libgfortran/io/write_float.def
34536
===================================================================
34537
--- a/src/libgfortran/io/write_float.def (.../tags/gcc_4_8_2_release)
34538
+++ b/src/libgfortran/io/write_float.def (.../branches/gcc-4_8-branch)
34539
@@ -373,7 +373,7 @@
34543
- if (w > 0 && d == 0 && p == 0)
34544
+ if (ft != FMT_F && w > 0 && d == 0 && p == 0)
34546
/* Scan for trailing zeros to see if we really need to round it. */
34547
for(i = nbefore + nafter; i < ndigits; i++)
34548
@@ -386,13 +386,14 @@
34551
if (nbefore + nafter == 0)
34552
+ /* Handle the case Fw.0 and value < 1.0 */
34555
- if (nzero_real == d && digits[0] >= rchar)
34556
+ if (digits[0] >= rchar)
34558
/* We rounded to zero but shouldn't have */
34566
@@ -990,7 +991,7 @@
34567
int d = f->u.real.d;\
34568
int w = f->u.real.w;\
34570
- GFC_REAL_ ## x rexp_d, r = 0.5;\
34571
+ GFC_REAL_ ## x exp_d, r = 0.5, r_sc;\
34572
int low, high, mid;\
34573
int ubound, lbound;\
34574
char *p, pad = ' ';\
34575
@@ -997,6 +998,7 @@
34576
int save_scale_factor, nb = 0;\
34578
int nprinted, precision;\
34579
+ volatile GFC_REAL_ ## x temp;\
34581
save_scale_factor = dtp->u.p.scale_factor;\
34583
@@ -1015,10 +1017,13 @@
34587
- rexp_d = calculate_exp_ ## x (-d);\
34588
- if ((m > 0.0 && ((m < 0.1 - 0.1 * r * rexp_d) || (rexp_d * (m + r) >= 1.0)))\
34589
+ exp_d = calculate_exp_ ## x (d);\
34590
+ r_sc = (1 - r / exp_d);\
34591
+ temp = 0.1 * r_sc;\
34592
+ if ((m > 0.0 && ((m < temp) || (r >= (exp_d - m))))\
34593
|| ((m == 0.0) && !(compile_options.allow_std\
34594
- & (GFC_STD_F2003 | GFC_STD_F2008))))\
34595
+ & (GFC_STD_F2003 | GFC_STD_F2008)))\
34598
newf.format = FMT_E;\
34599
newf.u.real.w = w;\
34600
@@ -1038,10 +1043,9 @@
34602
while (low <= high)\
34604
- volatile GFC_REAL_ ## x temp;\
34605
mid = (low + high) / 2;\
34607
- temp = (calculate_exp_ ## x (mid - 1) * (1 - r * rexp_d));\
34608
+ temp = (calculate_exp_ ## x (mid - 1) * r_sc);\
34612
Index: libcpp/macro.c
34613
===================================================================
34614
--- a/src/libcpp/macro.c (.../tags/gcc_4_8_2_release)
34615
+++ b/src/libcpp/macro.c (.../branches/gcc-4_8-branch)
34616
@@ -1108,21 +1108,22 @@
34618
if (macro->paramc == 0)
34620
+ unsigned tokens_count = macro_real_token_count (macro);
34621
if (CPP_OPTION (pfile, track_macro_expansion))
34623
- unsigned int i, count = macro->count;
34625
const cpp_token *src = macro->exp.tokens;
34626
const struct line_map *map;
34627
source_location *virt_locs = NULL;
34628
- _cpp_buff *macro_tokens =
34629
- tokens_buff_new (pfile, count, &virt_locs);
34630
+ _cpp_buff *macro_tokens
34631
+ = tokens_buff_new (pfile, tokens_count, &virt_locs);
34633
/* Create a macro map to record the locations of the
34634
tokens that are involved in the expansion. LOCATION
34635
is the location of the macro expansion point. */
34636
- map = linemap_enter_macro (pfile->line_table,
34637
- node, location, count);
34638
- for (i = 0; i < count; ++i)
34639
+ map = linemap_enter_macro (pfile->line_table,
34640
+ node, location, tokens_count);
34641
+ for (i = 0; i < tokens_count; ++i)
34643
tokens_buff_add_token (macro_tokens, virt_locs,
34645
@@ -1134,16 +1135,12 @@
34647
(const cpp_token **)
34648
macro_tokens->base,
34650
- num_macro_tokens_counter += count;
34655
- unsigned tokens_count = macro_real_token_count (macro);
34656
- _cpp_push_token_context (pfile, node, macro->exp.tokens,
34658
- num_macro_tokens_counter += tokens_count;
34660
+ _cpp_push_token_context (pfile, node, macro->exp.tokens,
34662
+ num_macro_tokens_counter += tokens_count;
34666
Index: libcpp/line-map.c
34667
===================================================================
34668
--- a/src/libcpp/line-map.c (.../tags/gcc_4_8_2_release)
34669
+++ b/src/libcpp/line-map.c (.../branches/gcc-4_8-branch)
34670
@@ -1024,6 +1024,11 @@
34671
bool pre_virtual_p, post_virtual_p;
34672
source_location l0 = pre, l1 = post;
34674
+ if (IS_ADHOC_LOC (l0))
34675
+ l0 = set->location_adhoc_data_map.data[l0 & MAX_SOURCE_LOCATION].locus;
34676
+ if (IS_ADHOC_LOC (l1))
34677
+ l1 = set->location_adhoc_data_map.data[l1 & MAX_SOURCE_LOCATION].locus;
34682
Index: libcpp/files.c
34683
===================================================================
34684
--- a/src/libcpp/files.c (.../tags/gcc_4_8_2_release)
34685
+++ b/src/libcpp/files.c (.../branches/gcc-4_8-branch)
34686
@@ -983,6 +983,7 @@
34688
struct cpp_dir *dir;
34692
dir = search_path_head (pfile, fname, angle_brackets, type);
34694
@@ -993,19 +994,26 @@
34695
if (type == IT_DEFAULT && file == NULL)
34698
- /* Compensate for the increment in linemap_add that occurs in
34699
- _cpp_stack_file. In the case of a normal #include, we're
34700
- currently at the start of the line *following* the #include. A
34701
- separate source_location for this location makes no sense (until
34702
- we do the LC_LEAVE), and complicates LAST_SOURCE_LINE_LOCATION.
34703
- This does not apply if we found a PCH file (in which case
34704
- linemap_add is not called) or we were included from the
34706
+ /* Compensate for the increment in linemap_add that occurs if
34707
+ _cpp_stack_file actually stacks the file. In the case of a
34708
+ normal #include, we're currently at the start of the line
34709
+ *following* the #include. A separate source_location for this
34710
+ location makes no sense (until we do the LC_LEAVE), and
34711
+ complicates LAST_SOURCE_LINE_LOCATION. This does not apply if we
34712
+ found a PCH file (in which case linemap_add is not called) or we
34713
+ were included from the command-line. */
34714
if (file->pchname == NULL && file->err_no == 0
34715
&& type != IT_CMDLINE && type != IT_DEFAULT)
34716
pfile->line_table->highest_location--;
34718
- return _cpp_stack_file (pfile, file, type == IT_IMPORT);
34719
+ stacked = _cpp_stack_file (pfile, file, type == IT_IMPORT);
34722
+ /* _cpp_stack_file didn't stack the file, so let's rollback the
34723
+ compensation dance we performed above. */
34724
+ pfile->line_table->highest_location++;
34729
/* Could not open FILE. The complication is dependency output. */
34730
Index: libcpp/ChangeLog
34731
===================================================================
34732
--- a/src/libcpp/ChangeLog (.../tags/gcc_4_8_2_release)
34733
+++ b/src/libcpp/ChangeLog (.../branches/gcc-4_8-branch)
34735
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
34737
+ Backport from mainline
34738
+ 2014-02-19 Jakub Jelinek <jakub@redhat.com>
34740
+ PR preprocessor/58844
34741
+ * macro.c (enter_macro_context): Only push
34742
+ macro_real_token_count (macro) tokens rather than
34743
+ macro->count tokens, regardless of
34744
+ CPP_OPTION (pfile, track-macro-expansion).
34746
+ 2014-02-07 Jakub Jelinek <jakub@redhat.com>
34748
+ PR preprocessor/56824
34749
+ * line-map.c (linemap_compare_locations): Look through adhoc locations
34750
+ for both l0 and l1.
34752
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
34754
+ PR preprocessor/60400
34755
+ Backport from mainline
34756
+ 2013-06-24 Dehao Chen <dehao@google.com>
34758
+ * files.c (_cpp_stack_include): Fix the highest_location when header
34759
+ file is guarded by #ifndef and is included twice.
34761
2013-10-16 Release Manager
34763
* GCC 4.8.2 released.
34764
Index: libcpp/po/pt_BR.po
34765
===================================================================
34766
--- a/src/libcpp/po/pt_BR.po (.../tags/gcc_4_8_2_release)
34767
+++ b/src/libcpp/po/pt_BR.po (.../branches/gcc-4_8-branch)
34769
+# Brazilian Portuguese translation for cpplib
34770
+# Copyright (C) 2013 Free Software Foundation, Inc.
34771
+# This file is distributed under the same license as the gcc package.
34772
+# Rafael Ferreira <rafael.f.f1@gmail.com>, 2013.
34776
+"Project-Id-Version: cpplib 4.8.0\n"
34777
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
34778
+"POT-Creation-Date: 2013-03-15 17:42+0000\n"
34779
+"PO-Revision-Date: 2013-12-18 03:12-0300\n"
34780
+"Last-Translator: Rafael Ferreira <rafael.f.f1@gmail.com>\n"
34781
+"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\n"
34782
+"Language: pt_BR\n"
34783
+"MIME-Version: 1.0\n"
34784
+"Content-Type: text/plain; charset=UTF-8\n"
34785
+"Content-Transfer-Encoding: 8bit\n"
34786
+"X-Generator: Poedit 1.5.7\n"
34787
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
34791
+msgid "conversion from %s to %s not supported by iconv"
34792
+msgstr "sem suporte a conversão de %s para %s por iconv"
34795
+msgid "iconv_open"
34796
+msgstr "iconv_open"
34800
+msgid "no iconv implementation, cannot convert from %s to %s"
34801
+msgstr "nenhuma implementação iconv, não foi possível converter de %s para %s"
34805
+msgid "character 0x%lx is not in the basic source character set\n"
34806
+msgstr "caractere 0x%lx não está no conjunto de caracteres fonte básico\n"
34808
+#: charset.c:797 charset.c:1443
34809
+msgid "converting to execution character set"
34810
+msgstr "convertendo para conjunto de caracteres da execução"
34814
+msgid "character 0x%lx is not unibyte in execution character set"
34815
+msgstr "caractere 0x%lx não é unibyte no conjunto de caracteres de execução"
34819
+msgid "Character %x might not be NFKC"
34820
+msgstr "Caractere %x pode não ser NFKC"
34823
+msgid "universal character names are only valid in C++ and C99"
34824
+msgstr "nomes de caractere universais são válidos apenas em C++ e C99"
34828
+msgid "the meaning of '\\%c' is different in traditional C"
34829
+msgstr "o significado de \"\\%c\" é diferente em C tradicional"
34832
+msgid "In _cpp_valid_ucn but not a UCN"
34833
+msgstr "Em _cpp_valid_ucn, mas não é um UCN"
34837
+msgid "incomplete universal character name %.*s"
34838
+msgstr "nome de caractere universal incompleto %.*s"
34842
+msgid "%.*s is not a valid universal character"
34843
+msgstr "%.*s não é um caractere universal válido"
34845
+#: charset.c:1055 lex.c:1117
34846
+msgid "'$' in identifier or number"
34847
+msgstr "\"$\" em identificador ou número"
34851
+msgid "universal character %.*s is not valid in an identifier"
34852
+msgstr "caractere universal %.*s não é válido em um identificador"
34856
+msgid "universal character %.*s is not valid at the start of an identifier"
34857
+msgstr "caractere universal %.*s não é válido no começo de um identificador"
34859
+#: charset.c:1101 charset.c:1673
34860
+msgid "converting UCN to source character set"
34861
+msgstr "convertendo UCN para conjunto de caracteres fonte"
34864
+msgid "converting UCN to execution character set"
34865
+msgstr "convertendo UCN para conjunto de caracteres de execução"
34868
+msgid "the meaning of '\\x' is different in traditional C"
34869
+msgstr "o significado de \"\\x\" é diferente em C tradicional"
34872
+msgid "\\x used with no following hex digits"
34873
+msgstr "\\x usado com nenhum dígito hexa"
34876
+msgid "hex escape sequence out of range"
34877
+msgstr "sequência de escape hexa fora de alcance"
34880
+msgid "octal escape sequence out of range"
34881
+msgstr "sequência de escape octal fora de alcance"
34884
+msgid "the meaning of '\\a' is different in traditional C"
34885
+msgstr "o significado de \"\\a\" é diferente em C tradicional"
34889
+msgid "non-ISO-standard escape sequence, '\\%c'"
34890
+msgstr "sequência de escape não padrão ISO, \"\\%c\""
34894
+msgid "unknown escape sequence: '\\%c'"
34895
+msgstr "sequência de escape desconhecida: \"\\%c\""
34899
+msgid "unknown escape sequence: '\\%s'"
34900
+msgstr "sequência de escape desconhecida: \"\\%s\""
34903
+msgid "converting escape sequence to execution character set"
34904
+msgstr "convertendo sequência de escape para conjunto de caracteres de execução"
34906
+#: charset.c:1508 charset.c:1572
34907
+msgid "character constant too long for its type"
34908
+msgstr "constante caractere muito longa para seu tipo"
34911
+msgid "multi-character character constant"
34912
+msgstr "constante de caractere multi-caractere"
34915
+msgid "empty character constant"
34916
+msgstr "constante caractere vazia"
34920
+msgid "failure to convert %s to %s"
34921
+msgstr "falha ao converter %s para %s"
34923
+#: directives.c:224 directives.c:250
34925
+msgid "extra tokens at end of #%s directive"
34926
+msgstr "tokens extras ao final da diretiva %#s"
34928
+#: directives.c:357
34930
+msgid "#%s is a GCC extension"
34931
+msgstr "#%s é uma extensão GCC"
34933
+#: directives.c:362
34935
+msgid "#%s is a deprecated GCC extension"
34936
+msgstr "#%s é uma extensão GCC obsoleta"
34938
+#: directives.c:375
34939
+msgid "suggest not using #elif in traditional C"
34940
+msgstr "sugere-se não usar #elif em C tradicional"
34942
+#: directives.c:378
34944
+msgid "traditional C ignores #%s with the # indented"
34945
+msgstr "C tradicional ignora #%s com o # com recuo"
34947
+#: directives.c:382
34949
+msgid "suggest hiding #%s from traditional C with an indented #"
34950
+msgstr "sugere-se ocultar #%s do C tradicional com um # com recuo"
34952
+#: directives.c:408
34953
+msgid "embedding a directive within macro arguments is not portable"
34954
+msgstr "embutir uma diretiva dentro de argumentos macro não é portátil"
34956
+#: directives.c:428
34957
+msgid "style of line directive is a GCC extension"
34958
+msgstr "estilo de diretiva de linha é uma extensão GCC"
34960
+#: directives.c:483
34962
+msgid "invalid preprocessing directive #%s"
34963
+msgstr "diretiva de preprocessamento inválida #%s"
34965
+#: directives.c:551
34966
+msgid "\"defined\" cannot be used as a macro name"
34967
+msgstr "\"defined\" não pode ser usado como um nome de macro"
34969
+#: directives.c:557
34971
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
34972
+msgstr "\"%s\" não pode ser usado como um nome de macro, pois é um operador em C++"
34974
+#: directives.c:560
34976
+msgid "no macro name given in #%s directive"
34977
+msgstr "nenhum nome de macro fornecido na diretiva #%s"
34979
+#: directives.c:563
34980
+msgid "macro names must be identifiers"
34981
+msgstr "nomes de macro devem ser identificadores"
34983
+#: directives.c:612
34985
+msgid "undefining \"%s\""
34986
+msgstr "removendo definição de \"%s\""
34988
+#: directives.c:667
34989
+msgid "missing terminating > character"
34990
+msgstr "faltando caractere terminador >"
34992
+#: directives.c:726
34994
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
34995
+msgstr "#%s espera \"NOME DE ARQUIVO\" OU <NOME DE ARQUIVO>"
34997
+#: directives.c:772
34999
+msgid "empty filename in #%s"
35000
+msgstr "nome de arquivo vazio em #%s"
35002
+#: directives.c:782
35003
+msgid "#include nested too deeply"
35004
+msgstr "#include aninhado profundo demais"
35006
+#: directives.c:823
35007
+msgid "#include_next in primary source file"
35008
+msgstr "#include_next no arquivo fonte primário"
35010
+#: directives.c:849
35012
+msgid "invalid flag \"%s\" in line directive"
35013
+msgstr "opção inválida \"%s\" na diretiva line"
35015
+#: directives.c:909
35016
+msgid "unexpected end of file after #line"
35017
+msgstr "fim de arquivo inesperado após #line"
35019
+#: directives.c:912
35021
+msgid "\"%s\" after #line is not a positive integer"
35022
+msgstr "\"%s\" após #line não é um inteiro positivo"
35024
+#: directives.c:918 directives.c:920
35025
+msgid "line number out of range"
35026
+msgstr "número da linha fora de alcance"
35028
+#: directives.c:933 directives.c:1013
35030
+msgid "\"%s\" is not a valid filename"
35031
+msgstr "\"%s\" não é um nome de arquivo válido"
35033
+#: directives.c:973
35035
+msgid "\"%s\" after # is not a positive integer"
35036
+msgstr "\"%s\" após # não é um inteiro positivo"
35038
+#: directives.c:1068 directives.c:1070 directives.c:1072 directives.c:1658
35043
+#: directives.c:1096
35045
+msgid "invalid #%s directive"
35046
+msgstr "diretiva inválida #%s"
35048
+#: directives.c:1159
35050
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
35051
+msgstr "registrando pragmas em espaço de nomes \"%s\" com expansão de nome incompatível"
35053
+#: directives.c:1168
35055
+msgid "registering pragma \"%s\" with name expansion and no namespace"
35056
+msgstr "registrando pragma \"%s\" com expansão de nome e nenhum espaço de nomes"
35058
+#: directives.c:1186
35060
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
35061
+msgstr "registrando \"%s\" como tanto um pragma e um espaço de nomes de pragma"
35063
+#: directives.c:1189
35065
+msgid "#pragma %s %s is already registered"
35066
+msgstr "#pragma %s %s já está registrado"
35068
+#: directives.c:1192
35070
+msgid "#pragma %s is already registered"
35071
+msgstr "#pragma %s já está registrado"
35073
+#: directives.c:1222
35074
+msgid "registering pragma with NULL handler"
35075
+msgstr "registrando pragma com manipulador NULO"
35077
+#: directives.c:1439
35078
+msgid "#pragma once in main file"
35079
+msgstr "#pragma ocorre uma vez no arquivo principal"
35081
+#: directives.c:1462
35082
+msgid "invalid #pragma push_macro directive"
35083
+msgstr "diretiva inválida #pragma push_macro"
35085
+#: directives.c:1517
35086
+msgid "invalid #pragma pop_macro directive"
35087
+msgstr "diretiva inválida #pragma pop_macro"
35089
+#: directives.c:1572
35090
+msgid "invalid #pragma GCC poison directive"
35091
+msgstr "diretiva inválida #pragma GCC poison"
35093
+#: directives.c:1581
35095
+msgid "poisoning existing macro \"%s\""
35096
+msgstr "envenenando macro existente \"%s\""
35098
+#: directives.c:1600
35099
+msgid "#pragma system_header ignored outside include file"
35100
+msgstr "#pragma system_header ignorado fora do arquivo include"
35102
+#: directives.c:1625
35104
+msgid "cannot find source file %s"
35105
+msgstr "não foi possível localizar o arquivo fonte %s"
35107
+#: directives.c:1629
35109
+msgid "current file is older than %s"
35110
+msgstr "arquivo atual é mais velho do que %s"
35112
+#: directives.c:1653
35114
+msgid "invalid \"#pragma GCC %s\" directive"
35115
+msgstr "diretiva inválida \"#pragma GCC %s\""
35117
+#: directives.c:1847
35118
+msgid "_Pragma takes a parenthesized string literal"
35119
+msgstr "_Pragma leva uma literal de string entre parenteses"
35121
+#: directives.c:1968
35122
+msgid "#else without #if"
35123
+msgstr "#else sem #if"
35125
+#: directives.c:1973
35126
+msgid "#else after #else"
35127
+msgstr "#else após #else"
35129
+#: directives.c:1975 directives.c:2008
35130
+msgid "the conditional began here"
35131
+msgstr "a condicional começou aqui"
35133
+#: directives.c:2001
35134
+msgid "#elif without #if"
35135
+msgstr "#elif sem #if"
35137
+#: directives.c:2006
35138
+msgid "#elif after #else"
35139
+msgstr "#elif após #else"
35141
+#: directives.c:2044
35142
+msgid "#endif without #if"
35143
+msgstr "#endif sem #if"
35145
+#: directives.c:2124
35146
+msgid "missing '(' after predicate"
35147
+msgstr "faltando \"(\" após predicado"
35149
+#: directives.c:2139
35150
+msgid "missing ')' to complete answer"
35151
+msgstr "faltando \")\" para uma resposta completa"
35153
+#: directives.c:2159
35154
+msgid "predicate's answer is empty"
35155
+msgstr "resposta do predicado está vazia"
35157
+#: directives.c:2186
35158
+msgid "assertion without predicate"
35159
+msgstr "asserção sem predicado"
35161
+#: directives.c:2189
35162
+msgid "predicate must be an identifier"
35163
+msgstr "predicado deve ser um identificador"
35165
+#: directives.c:2275
35167
+msgid "\"%s\" re-asserted"
35168
+msgstr "\"%s\" re-assertado"
35170
+#: directives.c:2567
35172
+msgid "unterminated #%s"
35173
+msgstr "#%s não terminado"
35175
+#: directives-only.c:221 lex.c:2234 traditional.c:162
35176
+msgid "unterminated comment"
35177
+msgstr "comentário não terminado"
35181
+msgstr "saída padrão"
35188
+#: expr.c:479 expr.c:577
35189
+msgid "fixed-point constants are a GCC extension"
35190
+msgstr "constantes de ponto fixo (fixed-point constants) é uma extensão GCC"
35193
+msgid "invalid prefix \"0b\" for floating constant"
35194
+msgstr "prefixo inválido \"0b\" para constante flutuante"
35197
+msgid "use of C99 hexadecimal floating constant"
35198
+msgstr "uso de constante flutuante hexadecimal de C99"
35202
+msgid "invalid suffix \"%.*s\" on floating constant"
35203
+msgstr "sufixo inválido \"%.*s\" na constante flutuante"
35205
+#: expr.c:556 expr.c:616
35207
+msgid "traditional C rejects the \"%.*s\" suffix"
35208
+msgstr "C tradicional rejeita o sufixo \"%.*s\""
35211
+msgid "suffix for double constant is a GCC extension"
35212
+msgstr "sufixo para constante dupla (suffix for double constant) é uma extensão GCC"
35216
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
35217
+msgstr "sufixo inválido \"%.*s\" com constante flutuante hexadecimal"
35220
+msgid "decimal float constants are a GCC extension"
35221
+msgstr "constantes flutuante decimais (decimal float constants) é uma extensão GCC"
35225
+msgid "invalid suffix \"%.*s\" on integer constant"
35226
+msgstr "sufixo inválido \"%.*s\" em constante inteiro"
35229
+msgid "use of C++0x long long integer constant"
35230
+msgstr "uso de constante longo longo inteiro de C++0x"
35233
+msgid "use of C99 long long integer constant"
35234
+msgstr "uso de constante longo longo inteiro de C99"
35237
+msgid "imaginary constants are a GCC extension"
35238
+msgstr "constantes imaginárias (imaginary constants) é uma extensão GCC"
35241
+msgid "binary constants are a GCC extension"
35242
+msgstr "constantes binárias (binary constants) é uma extensão GCC"
35245
+msgid "integer constant is too large for its type"
35246
+msgstr "constante inteira é muito grande para seu tipo"
35249
+msgid "integer constant is so large that it is unsigned"
35250
+msgstr "constante inteira é tão grande que não está assinada"
35253
+msgid "missing ')' after \"defined\""
35254
+msgstr "faltando \")\" após \"defined\""
35257
+msgid "operator \"defined\" requires an identifier"
35258
+msgstr "operador \"defined\" requer um identificador"
35262
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
35263
+msgstr "(\"%s\" é um token alternativo para \"%s\" em C++)"
35266
+msgid "this use of \"defined\" may not be portable"
35267
+msgstr "esse uso de \"defined\" pode não ser portátil"
35270
+msgid "user-defined literal in preprocessor expression"
35271
+msgstr "literal definida pelo usuário em expressão do preprocessador"
35274
+msgid "floating constant in preprocessor expression"
35275
+msgstr "constante flutuante em expressão do preprocessador"
35278
+msgid "imaginary number in preprocessor expression"
35279
+msgstr "número imaginário em expressão do preprocessador"
35283
+msgid "\"%s\" is not defined"
35284
+msgstr "\"%s\" não está definido"
35287
+msgid "assertions are a GCC extension"
35288
+msgstr "asserções (assertions) é uma extensão GCC"
35291
+msgid "assertions are a deprecated extension"
35292
+msgstr "asserções (assertions) é uma extensão obsoleta"
35296
+msgid "unbalanced stack in %s"
35297
+msgstr "pilha não balanceada em %s"
35301
+msgid "impossible operator '%u'"
35302
+msgstr "operador impossível \"%u\""
35305
+msgid "missing ')' in expression"
35306
+msgstr "faltando \")\" na expressão"
35309
+msgid "'?' without following ':'"
35310
+msgstr "\"?\" sem estar seguido por \":\""
35313
+msgid "integer overflow in preprocessor expression"
35314
+msgstr "estouro de inteiro em expressão do preprocessador"
35317
+msgid "missing '(' in expression"
35318
+msgstr "faltando \"(\" na expressão"
35322
+msgid "the left operand of \"%s\" changes sign when promoted"
35323
+msgstr "o operador à esquerda de \"%s\" altera o sinal quando promovido"
35327
+msgid "the right operand of \"%s\" changes sign when promoted"
35328
+msgstr "o operador à direita de \"%s\" altera o sinal quando promovido"
35331
+msgid "traditional C rejects the unary plus operator"
35332
+msgstr "C tradicional rejeita o operador unário mais"
35335
+msgid "comma operator in operand of #if"
35336
+msgstr "operador vírgula em operando de #if"
35339
+msgid "division by zero in #if"
35340
+msgstr "divisão por zero em #if"
35343
+msgid "NULL directory in find_file"
35344
+msgstr "diretório NULO em find_file"
35347
+msgid "one or more PCH files were found, but they were invalid"
35348
+msgstr "um ou mais arquivos PCH foram encontrados, mas são inválidos"
35351
+msgid "use -Winvalid-pch for more information"
35352
+msgstr "use -Winvalid-pch para mais informações"
35356
+msgid "%s is a block device"
35357
+msgstr "%s é um dispositivo de bloco"
35361
+msgid "%s is too large"
35362
+msgstr "%s é muito grande"
35366
+msgid "%s is shorter than expected"
35367
+msgstr "%s é muito menor do que esperado"
35371
+msgid "no include path in which to search for %s"
35372
+msgstr "não foi incluído nenhum caminho no qual se possa procurar por %s"
35375
+msgid "Multiple include guards may be useful for:\n"
35376
+msgstr "Múltiplos include guards podem ser úteis para:\n"
35379
+msgid "cppchar_t must be an unsigned type"
35380
+msgstr "cppchar_t deve ser um tipo não assinado"
35384
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
35385
+msgstr "aritmética do preprocessador possui uma precisão máxima de %lu bits; o alvo requer %lu bits"
35388
+msgid "CPP arithmetic must be at least as precise as a target int"
35389
+msgstr "aritmética do CPP deve ser pelo menos tão precisa quanto um int alvo"
35392
+msgid "target char is less than 8 bits wide"
35393
+msgstr "char alvo é menor do que 8 bits"
35396
+msgid "target wchar_t is narrower than target char"
35397
+msgstr "wchar_t alvo é mais estreito do que o char alvo"
35400
+msgid "target int is narrower than target char"
35401
+msgstr "int alvo é mais estreito do que o char alvo"
35404
+msgid "CPP half-integer narrower than CPP character"
35405
+msgstr "meio-inteiro do CPP é mais estreito do que o caractere do CPP"
35409
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
35410
+msgstr "CPP nesta máquina não consegue manipular constantes de wide character acima de %lu bits, mas o alvo requer %lu bits"
35413
+msgid "backslash and newline separated by space"
35414
+msgstr "barra invertida e nova linha separadas por espaço"
35417
+msgid "backslash-newline at end of file"
35418
+msgstr "barra invertida e nova linha no final do arquivo"
35422
+msgid "trigraph ??%c converted to %c"
35423
+msgstr "trígrafo ??%c convertido para %c"
35427
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
35428
+msgstr "trígrafo ??%c ignorado, use -trigraphs para habilitá-lo"
35431
+msgid "\"/*\" within comment"
35432
+msgstr "\"/*\" dentro de comentário"
35436
+msgid "%s in preprocessing directive"
35437
+msgstr "%s em diretiva de preprocessamento"
35440
+msgid "null character(s) ignored"
35441
+msgstr "um ou mais caracteres nulos ignorados"
35445
+msgid "`%.*s' is not in NFKC"
35446
+msgstr "\"%.*s\" não está em NFKC"
35450
+msgid "`%.*s' is not in NFC"
35451
+msgstr "\"%.*s\" não está em NFC"
35453
+#: lex.c:1164 lex.c:1241
35455
+msgid "attempt to use poisoned \"%s\""
35456
+msgstr "tentativa de usar \"%s\" envenenado"
35458
+#: lex.c:1172 lex.c:1249
35459
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
35460
+msgstr "__VA_ARGS__ pode aparecer apenas na expansão de uma macro variádica C99"
35462
+#: lex.c:1178 lex.c:1255
35464
+msgid "identifier \"%s\" is a special operator name in C++"
35465
+msgstr "identificador \"%s\" é o nome de um operador especial em C++"
35468
+msgid "raw string delimiter longer than 16 characters"
35469
+msgstr "delimitador de string não tratada (raw) maior do que 16 caracteres"
35473
+msgid "invalid character '%c' in raw string delimiter"
35474
+msgstr "caractere inválido \"%c\" em delimitador de string não tratada (raw)"
35476
+#: lex.c:1525 lex.c:1547
35477
+msgid "unterminated raw string"
35478
+msgstr "string não tratada (raw) não terminada"
35480
+#: lex.c:1573 lex.c:1706
35481
+msgid "invalid suffix on literal; C++11 requires a space between literal and identifier"
35482
+msgstr "sufixo inválido em literal; C++11 requer um espaço entre literal e identificador"
35485
+msgid "null character(s) preserved in literal"
35486
+msgstr "um ou mais caracteres nulos preservados em literal"
35490
+msgid "missing terminating %c character"
35491
+msgstr "faltando o caractere de terminação %c"
35494
+msgid "C++ style comments are not allowed in ISO C90"
35495
+msgstr "comentários no estilo C++ não são permitidos em ISO C90"
35498
+msgid "(this will be reported only once per input file)"
35499
+msgstr "(isso será relatado apenas uma vez por arquivo de entrada)"
35502
+msgid "multi-line comment"
35503
+msgstr "comentário multilinha"
35507
+msgid "unspellable token %s"
35508
+msgstr "token %s impronunciável"
35512
+msgid "macro \"%s\" is not used"
35513
+msgstr "macro \"%s\" não é usada"
35515
+#: macro.c:229 macro.c:426
35517
+msgid "invalid built-in macro \"%s\""
35518
+msgstr "macro interna inválida \"%s\""
35521
+msgid "could not determine file timestamp"
35522
+msgstr "não foi possível determinar o arquivo de marca de tempo"
35525
+msgid "could not determine date and time"
35526
+msgstr "não foi possível determinar a data e a hora"
35529
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
35530
+msgstr "__COUNTER__ expandido dentro diretiva com -fdirectives-only"
35533
+msgid "invalid string literal, ignoring final '\\'"
35534
+msgstr "literal de string inválida, ignorando final \"\\\""
35538
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
35539
+msgstr "colar \"%s\" em \"%s\" não resulta em nenhum token de preprocessamento válido"
35542
+msgid "ISO C99 requires rest arguments to be used"
35543
+msgstr "ISO C99 requer que argumentos restantes sejam usados"
35547
+msgid "macro \"%s\" requires %u arguments, but only %u given"
35548
+msgstr "macro \"%s\" requer %u argumentos, mas apenas %u foram fornecidos"
35552
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
35553
+msgstr "macro \"%s\" passou %u argumentos, mas usa apenas %u"
35555
+#: macro.c:923 traditional.c:680
35557
+msgid "unterminated argument list invoking macro \"%s\""
35558
+msgstr "lista de argumentos interminável chamando macro \"%s\""
35562
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
35563
+msgstr "macro \"%s\" do tipo função deve ser usada com argumento em C tradicional"
35565
+# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33305
35568
+msgid "invoking macro %s argument %d: empty macro arguments are undefined in ISO C90 and ISO C++98"
35569
+msgstr "chamando macro %s argumento %d: argumentos de macro vazios estão indefinidos em ISO C90 e ISO C++98"
35573
+msgid "duplicate macro parameter \"%s\""
35574
+msgstr "parâmetro de macro \"%s\" duplicado"
35578
+msgid "\"%s\" may not appear in macro parameter list"
35579
+msgstr "\"%s\" não pode aparecer na lista de parâmetros de macro"
35582
+msgid "macro parameters must be comma-separated"
35583
+msgstr "parâmetros de macro devem ser separados por vírgula"
35586
+msgid "parameter name missing"
35587
+msgstr "faltando nome de parâmetro"
35590
+msgid "anonymous variadic macros were introduced in C99"
35591
+msgstr "macros variádicas anônimas foram introduzidas em C99"
35594
+msgid "ISO C does not permit named variadic macros"
35595
+msgstr "ISO C não permite macros variádicas nomeadas"
35598
+msgid "missing ')' in macro parameter list"
35599
+msgstr "faltando \")\" na lista de parâmetros de macro"
35602
+msgid "'##' cannot appear at either end of a macro expansion"
35603
+msgstr "\"##\" não pode aparecer no final da expansão de macro"
35606
+msgid "ISO C99 requires whitespace after the macro name"
35607
+msgstr "ISO C99 requer espaço em branco após o nome de macro"
35610
+msgid "missing whitespace after the macro name"
35611
+msgstr "faltando espaço em branco após o nome de macro"
35614
+msgid "'#' is not followed by a macro parameter"
35615
+msgstr "\"#\" não está seguido por um parâmetro de macro"
35619
+msgid "\"%s\" redefined"
35620
+msgstr "\"%s\" re-definido"
35623
+msgid "this is the location of the previous definition"
35624
+msgstr "essa é a localização da definição anterior"
35628
+msgid "macro argument \"%s\" would be stringified in traditional C"
35629
+msgstr "argumento de macro \"%s\" estaria em uma string no C tradicional"
35633
+msgid "invalid hash type %d in cpp_macro_definition"
35634
+msgstr "tipo de hash inválido %d em cpp_macro_definition"
35636
+#: pch.c:87 pch.c:345 pch.c:359 pch.c:377 pch.c:383 pch.c:392 pch.c:399
35637
+msgid "while writing precompiled header"
35638
+msgstr "enquanto realizava escrita de header pré-compilado"
35642
+msgid "%s: not used because `%.*s' is poisoned"
35643
+msgstr "%s: não usado porque \"%.*s\" está envenenado"
35647
+msgid "%s: not used because `%.*s' not defined"
35648
+msgstr "%s: não usado porque \"%.*s\" não está definido"
35652
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
35653
+msgstr "%s: não usado porque \"%.*s\" está definido como \"%s\", e não \"%.*s\""
35657
+msgid "%s: not used because `%s' is defined"
35658
+msgstr "%s: não usado porque \"%s\" está definido"
35662
+msgid "%s: not used because `__COUNTER__' is invalid"
35663
+msgstr "%s: não usado porque \"__COUNTER__\" é inválido"
35665
+#: pch.c:723 pch.c:898
35666
+msgid "while reading precompiled header"
35667
+msgstr "enquanto realizava leitura de header pré-compilado"
35669
+#: traditional.c:750
35671
+msgid "detected recursion whilst expanding macro \"%s\""
35672
+msgstr "detectada recursão enquanto expandia macro \"%s\""
35674
+#: traditional.c:968
35675
+msgid "syntax error in macro parameter list"
35676
+msgstr "erro de sintaxe na lista de parâmetros de macro"
35677
Index: libcpp/po/ChangeLog
35678
===================================================================
35679
--- a/src/libcpp/po/ChangeLog (.../tags/gcc_4_8_2_release)
35680
+++ b/src/libcpp/po/ChangeLog (.../branches/gcc-4_8-branch)
35682
+2013-12-18 Joseph Myers <joseph@codesourcery.com>
35686
+2013-11-01 Joseph Myers <joseph@codesourcery.com>
35690
2013-10-16 Release Manager
35692
* GCC 4.8.2 released.
35693
Index: libcpp/po/tr.po
35694
===================================================================
35695
--- a/src/libcpp/po/tr.po (.../tags/gcc_4_8_2_release)
35696
+++ b/src/libcpp/po/tr.po (.../branches/gcc-4_8-branch)
35698
# Turkish translations for cpplib messages.
35699
# Copyright (C) 2007 Free Software Foundation, Inc.
35700
+# This file is distributed under the same license as the gcc package.
35702
# Nilgün Belma Bugüner <nilgun@buguner.name.tr>, 2001, ..., 2007.
35703
+# Volkan Gezer <vlkngzr@gmail.com>, 2013.
35706
-"Project-Id-Version: cpplib 4.2.0\n"
35707
+"Project-Id-Version: cpplib 4.8.0\n"
35708
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
35709
-"POT-Creation-Date: 2013-02-24 01:05+0000\n"
35710
-"PO-Revision-Date: 2007-05-23 01:17+0300\n"
35711
-"Last-Translator: Nilgün Belma Bugüner <nilgun@buguner.name.tr>\n"
35712
+"POT-Creation-Date: 2013-03-15 17:42+0000\n"
35713
+"PO-Revision-Date: 2013-11-01 22:29+0100\n"
35714
+"Last-Translator: Volkan Gezer <vlkngzr@gmail.com>\n"
35715
"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
35717
"MIME-Version: 1.0\n"
35718
"Content-Type: text/plain; charset=UTF-8\n"
35719
"Content-Transfer-Encoding: 8bit\n"
35720
-"X-Generator: KBabel 1.11.4\n"
35721
+"X-Generator: Lokalize 1.5\n"
35722
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
35725
@@ -121,10 +123,9 @@
35726
msgstr "ISO standardı olmayan önceleme dizgesi, '\\%c'"
35729
-#, fuzzy, c-format
35730
-#| msgid "unknown escape sequence '\\%c'"
35732
msgid "unknown escape sequence: '\\%c'"
35733
-msgstr "bilinmeyen önceleme dizgesi '\\%c'"
35734
+msgstr "bilinmeyen kaçış dizgesi: '\\%c'"
35738
@@ -163,10 +164,9 @@
35739
msgstr "#%s bir GCC uzantısıdır"
35741
#: directives.c:362
35742
-#, fuzzy, c-format
35743
-#| msgid "#%s is a GCC extension"
35745
msgid "#%s is a deprecated GCC extension"
35746
-msgstr "#%s bir GCC uzantısıdır"
35747
+msgstr "#%s eskimiş bir GCC uzantısıdır"
35749
#: directives.c:375
35750
msgid "suggest not using #elif in traditional C"
35751
@@ -247,7 +247,7 @@
35753
#: directives.c:909
35754
msgid "unexpected end of file after #line"
35756
+msgstr "#line satırından sonra beklenmeyen dosya sonu"
35758
#: directives.c:912
35760
@@ -271,7 +271,7 @@
35761
#: directives.c:1068 directives.c:1070 directives.c:1072 directives.c:1658
35767
#: directives.c:1096
35769
@@ -312,16 +312,12 @@
35770
msgstr "main dosyasında '#pragma once'"
35772
#: directives.c:1462
35774
-#| msgid "invalid #pragma GCC poison directive"
35775
msgid "invalid #pragma push_macro directive"
35776
-msgstr "geçersiz #pragma GCC poison yönergesi"
35777
+msgstr "geçersiz #pragma güdümlü_makro yönergesi"
35779
#: directives.c:1517
35781
-#| msgid "invalid #pragma GCC poison directive"
35782
msgid "invalid #pragma pop_macro directive"
35783
-msgstr "geçersiz #pragma GCC poison yönergesi"
35784
+msgstr "geçersiz #pragma güdümlü_makro yönergesi"
35786
#: directives.c:1572
35787
msgid "invalid #pragma GCC poison directive"
35788
@@ -347,10 +343,9 @@
35789
msgstr "mevcut dosya %s den daha eski"
35791
#: directives.c:1653
35792
-#, fuzzy, c-format
35793
-#| msgid "invalid #pragma GCC poison directive"
35795
msgid "invalid \"#pragma GCC %s\" directive"
35796
-msgstr "geçersiz #pragma GCC poison yönergesi"
35797
+msgstr "geçersiz \"#pragma GCC %s\" yönergesi"
35799
#: directives.c:1847
35800
msgid "_Pragma takes a parenthesized string literal"
35801
@@ -405,7 +400,7 @@
35802
msgid "\"%s\" re-asserted"
35803
msgstr "\"%s\" tekrar olumlanmış"
35805
-#: directives.c:2566
35806
+#: directives.c:2567
35808
msgid "unterminated #%s"
35809
msgstr "sonlandırılmamış #%s"
35810
@@ -424,16 +419,12 @@
35813
#: expr.c:479 expr.c:577
35815
-#| msgid "imaginary constants are a GCC extension"
35816
msgid "fixed-point constants are a GCC extension"
35817
-msgstr "sanal sabitler bir GCC genişletmesidir"
35818
+msgstr "sabit noktalı sabitler bir GCC uzantısıdır"
35822
-#| msgid "invalid suffix \"%.*s\" on floating constant"
35823
msgid "invalid prefix \"0b\" for floating constant"
35824
-msgstr "gerçel sabitin \"%.*s\" soneki geçersiz"
35825
+msgstr "kayan nokta için geçerisz \"0b\" öntakısı"
35828
msgid "use of C99 hexadecimal floating constant"
35829
@@ -450,10 +441,8 @@
35830
msgstr "geleneksel C \"%.*s\" sonekini kullanmaz"
35834
-#| msgid "imaginary constants are a GCC extension"
35835
msgid "suffix for double constant is a GCC extension"
35836
-msgstr "sanal sabitler bir GCC genişletmesidir"
35837
+msgstr "çift sabit için öntakı bir GCC uzantısıdır"
35841
@@ -461,10 +450,8 @@
35842
msgstr "onaltılık kayan sabitli \"%.*s\" soneki geçersiz"
35846
-#| msgid "imaginary constants are a GCC extension"
35847
msgid "decimal float constants are a GCC extension"
35848
-msgstr "sanal sabitler bir GCC genişletmesidir"
35849
+msgstr "onluk kayan sabitler bir GCC uzantısıdır"
35853
@@ -472,10 +459,8 @@
35854
msgstr "tamsayı sabitte sonek \"%.*s\" soneki geçersiz"
35858
-#| msgid "use of C99 long long integer constant"
35859
msgid "use of C++0x long long integer constant"
35860
-msgstr "ISO C99 long long tamsayı sabitleri yasaklar"
35861
+msgstr "ISO C++0x long long tamsayı sabitlerinin kullanımı"
35864
msgid "use of C99 long long integer constant"
35865
@@ -486,10 +471,8 @@
35866
msgstr "sanal sabitler bir GCC genişletmesidir"
35870
-#| msgid "imaginary constants are a GCC extension"
35871
msgid "binary constants are a GCC extension"
35872
-msgstr "sanal sabitler bir GCC genişletmesidir"
35873
+msgstr "ikili sabitler bir GCC uzantısıdır"
35876
msgid "integer constant is too large for its type"
35877
@@ -517,10 +500,8 @@
35878
msgstr "\"defined\" bu kullanımıyla uyarlanabilir olmayabilir"
35882
-#| msgid "integer overflow in preprocessor expression"
35883
msgid "user-defined literal in preprocessor expression"
35884
-msgstr "önişlemci ifadesinde tamsayı taşması"
35885
+msgstr "önişleyici ifadesinde kullanıcı tanımlı bağımlı"
35888
msgid "floating constant in preprocessor expression"
35889
@@ -536,20 +517,17 @@
35890
msgstr "\"%s\" tanımlı değil"
35894
-#| msgid "#%s is a GCC extension"
35895
msgid "assertions are a GCC extension"
35896
-msgstr "#%s bir GCC uzantısıdır"
35897
+msgstr "belirteçler bir GCC uzantısıdır"
35900
msgid "assertions are a deprecated extension"
35902
+msgstr "belirteçler artık kullanılmayan bir ifadedir"
35905
-#, fuzzy, c-format
35906
-#| msgid "unbalanced stack in #if"
35908
msgid "unbalanced stack in %s"
35909
-msgstr "#if ifadesinde karşılıksız yığın"
35910
+msgstr "%s içinde dengelenmemiş yığın"
35914
@@ -594,39 +572,39 @@
35915
msgid "division by zero in #if"
35916
msgstr "#if içinde sıfırla bölme"
35920
msgid "NULL directory in find_file"
35921
msgstr "find_file içinde boş dizin"
35925
msgid "one or more PCH files were found, but they were invalid"
35926
msgstr "bir veya daha fazla PCH dosyası bulundu ama bunlar geçersiz"
35930
msgid "use -Winvalid-pch for more information"
35931
msgstr "daha fazla bilgi almak için -Winvalid-pch kullanın"
35936
msgid "%s is a block device"
35937
msgstr "%s bir blok aygıtıdır"
35942
msgid "%s is too large"
35943
msgstr "%s çok büyük"
35948
msgid "%s is shorter than expected"
35949
msgstr "%s beklenenden daha kısa"
35954
msgid "no include path in which to search for %s"
35955
msgstr "%s için aranacaklar içinde başlık dosyaları yolu yok"
35959
msgid "Multiple include guards may be useful for:\n"
35960
msgstr "Çoklu include önlemleri aşağıdakiler için kullanışlı olabilir:\n"
35962
@@ -717,27 +695,24 @@
35963
#: lex.c:1178 lex.c:1255
35965
msgid "identifier \"%s\" is a special operator name in C++"
35967
+msgstr "\"%s\" belirteci, C++'da özel bir işleç adıdır"
35970
msgid "raw string delimiter longer than 16 characters"
35972
+msgstr "ham dizge ayracı 16 karakterden uzun"
35975
-#, fuzzy, c-format
35976
-#| msgid "universal character %.*s is not valid in an identifier"
35978
msgid "invalid character '%c' in raw string delimiter"
35979
-msgstr "evrensel karakter %.*s bir belirteç içinde geçerli değil"
35980
+msgstr "ham dizge ayracında geçersiz karakter '%c'"
35982
#: lex.c:1525 lex.c:1547
35984
-#| msgid "unterminated #%s"
35985
msgid "unterminated raw string"
35986
-msgstr "sonlandırılmamış #%s"
35987
+msgstr "bitirilmemiş ham dizge"
35989
#: lex.c:1573 lex.c:1706
35990
msgid "invalid suffix on literal; C++11 requires a space between literal and identifier"
35992
+msgstr "geçersiz ifade soneki; C++11 ifade ve tanımlayıcı arasında bir boşluk gerektirir"
35995
msgid "null character(s) preserved in literal"
35996
@@ -785,7 +760,7 @@
35999
msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
36001
+msgstr "__COUNTER__ -fdirectives-only ile talimat içerisinde genişletildi"
36004
msgid "invalid string literal, ignoring final '\\'"
36005
@@ -823,7 +798,7 @@
36008
msgid "invoking macro %s argument %d: empty macro arguments are undefined in ISO C90 and ISO C++98"
36010
+msgstr "%s makrosu %d argümanı uygulanıyor: ISO C90 ve ISO C++98 içerisinde boş makro argümanları tanımsızdır"
36014
@@ -890,38 +865,36 @@
36015
msgid "invalid hash type %d in cpp_macro_definition"
36016
msgstr "cpp_macro_definition içindeki isimli yapı türü %d geçersiz"
36018
-#: pch.c:87 pch.c:335 pch.c:347 pch.c:365 pch.c:371 pch.c:380 pch.c:387
36019
+#: pch.c:87 pch.c:345 pch.c:359 pch.c:377 pch.c:383 pch.c:392 pch.c:399
36020
msgid "while writing precompiled header"
36021
msgstr "önderlemeli başlık yazılırken"
36024
-#, fuzzy, c-format
36025
-#| msgid "%s: not used because `%s' is defined"
36028
msgid "%s: not used because `%.*s' is poisoned"
36029
-msgstr "%s: `%s' tanımlı olduğundan kullanılmadı"
36030
+msgstr "%s: `%.*s' zehirli olduğu için kullanılmadı"
36035
msgid "%s: not used because `%.*s' not defined"
36036
msgstr "%s: `%.*s' tanımlı olmadığından kullanılmadı"
36041
msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
36042
msgstr "%s: `%.*s' kullanılmadı çünkü `%s' olarak tanımlı, `%.*s' değil"
36047
msgid "%s: not used because `%s' is defined"
36048
msgstr "%s: `%s' tanımlı olduğundan kullanılmadı"
36051
-#, fuzzy, c-format
36052
-#| msgid "%s: not used because `%s' is defined"
36055
msgid "%s: not used because `__COUNTER__' is invalid"
36056
-msgstr "%s: `%s' tanımlı olduğundan kullanılmadı"
36057
+msgstr "%s: `__COUNTER__' geçersiz olduğundan kullanılmadı"
36059
-#: pch.c:711 pch.c:886
36060
+#: pch.c:723 pch.c:898
36061
msgid "while reading precompiled header"
36062
msgstr "önderlemeli başlık okunurken"
36065
===================================================================
36066
--- a/src/. (.../tags/gcc_4_8_2_release)
36067
+++ b/src/. (.../branches/gcc-4_8-branch)
36069
Property changes on: .
36070
___________________________________________________________________
36071
Modified: svn:mergeinfo
36072
Merged /trunk:r202766,204547,206123-206126,206395,206628,207387