1
# DP: updates from the 4.8 branch upto 20140320 (r208738).
5
cat > ${dir}LAST_UPDATED <<EOF
6
Thu Mar 20 23:36:56 CET 2014
7
Thu Mar 20 22:36:56 UTC 2014 (revision 208738)
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/src/c++11/thread.cc
172
===================================================================
173
--- a/src/libstdc++-v3/src/c++11/thread.cc (.../tags/gcc_4_8_2_release)
174
+++ b/src/libstdc++-v3/src/c++11/thread.cc (.../branches/gcc-4_8-branch)
179
- ::sleep(__s.count() + (__ns >= 1000000));
180
+ ::sleep(__s.count() + (__ns.count() >= 1000000));
182
#elif defined(_GLIBCXX_HAVE_WIN32_SLEEP)
183
unsigned long ms = __ns.count() / 1000000;
184
Index: libstdc++-v3/doc/xml/manual/abi.xml
185
===================================================================
186
--- a/src/libstdc++-v3/doc/xml/manual/abi.xml (.../tags/gcc_4_8_2_release)
187
+++ b/src/libstdc++-v3/doc/xml/manual/abi.xml (.../branches/gcc-4_8-branch)
189
<listitem><para>GCC 4.5.0: GCC_4.5.0</para></listitem>
190
<listitem><para>GCC 4.6.0: GCC_4.6.0</para></listitem>
191
<listitem><para>GCC 4.7.0: GCC_4.7.0</para></listitem>
192
+ <listitem><para>GCC 4.8.0: GCC_4.8.0</para></listitem>
197
<listitem><para>GCC 4.6.1: libstdc++.so.6.0.16</para></listitem>
198
<listitem><para>GCC 4.7.0: libstdc++.so.6.0.17</para></listitem>
199
<listitem><para>GCC 4.8.0: libstdc++.so.6.0.18</para></listitem>
200
+ <listitem><para>GCC 4.8.3: libstdc++.so.6.0.19</para></listitem>
203
Note 1: Error should be libstdc++.so.3.0.3.
205
<listitem><para>GCC 4.6.1: GLIBCXX_3.4.16, CXXABI_1.3.5</para></listitem>
206
<listitem><para>GCC 4.7.0: GLIBCXX_3.4.17, CXXABI_1.3.6</para></listitem>
207
<listitem><para>GCC 4.8.0: GLIBCXX_3.4.18, CXXABI_1.3.7</para></listitem>
208
+ <listitem><para>GCC 4.8.3: GLIBCXX_3.4.19, CXXABI_1.3.7</para></listitem>
212
Index: libstdc++-v3/doc/xml/manual/status_cxx2011.xml
213
===================================================================
214
--- a/src/libstdc++-v3/doc/xml/manual/status_cxx2011.xml (.../tags/gcc_4_8_2_release)
215
+++ b/src/libstdc++-v3/doc/xml/manual/status_cxx2011.xml (.../branches/gcc-4_8-branch)
216
@@ -877,10 +877,11 @@
220
+ <?dbhtml bgcolor="#B0B0B0" ?>
221
<entry>20.9.7.6</entry>
222
<entry>Other transformations</entry>
225
+ <entry>Partial</entry>
226
+ <entry>Missing <code>aligned_union</code>.</entry>
230
Index: libstdc++-v3/doc/xml/manual/spine.xml
231
===================================================================
232
--- a/src/libstdc++-v3/doc/xml/manual/spine.xml (.../tags/gcc_4_8_2_release)
233
+++ b/src/libstdc++-v3/doc/xml/manual/spine.xml (.../branches/gcc-4_8-branch)
240
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">FSF</link>
242
Index: libstdc++-v3/doc/html/bk02.html
243
===================================================================
244
--- a/src/libstdc++-v3/doc/html/bk02.html (.../tags/gcc_4_8_2_release)
245
+++ b/src/libstdc++-v3/doc/html/bk02.html (.../branches/gcc-4_8-branch)
247
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
248
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library" /><link rel="prev" href="manual/backwards.html" title="Backwards Compatibility" /><link rel="next" href="api.html" title="The GNU C++ Library API Reference" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="article"><a href="api.html">The GNU C++ Library API Reference</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Backwards Compatibility </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> The GNU C++ Library API Reference</td></tr></table></div></body></html>
249
\ No newline at end of file
250
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library" /><link rel="prev" href="manual/backwards.html" title="Backwards Compatibility" /><link rel="next" href="api.html" title="The GNU C++ Library API Reference" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="article"><a href="api.html">The GNU C++ Library API Reference</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Backwards Compatibility </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> The GNU C++ Library API Reference</td></tr></table></div></body></html>
251
\ No newline at end of file
252
Index: libstdc++-v3/doc/html/bk03.html
253
===================================================================
254
--- a/src/libstdc++-v3/doc/html/bk03.html (.../tags/gcc_4_8_2_release)
255
+++ b/src/libstdc++-v3/doc/html/bk03.html (.../branches/gcc-4_8-branch)
257
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
258
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library" /><link rel="prev" href="api.html" title="The GNU C++ Library API Reference" /><link rel="next" href="faq.html" title="Frequently Asked Questions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library API Reference </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Frequently Asked Questions</td></tr></table></div></body></html>
259
\ No newline at end of file
260
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library" /><link rel="prev" href="api.html" title="The GNU C++ Library API Reference" /><link rel="next" href="faq.html" title="Frequently Asked Questions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library API Reference </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Frequently Asked Questions</td></tr></table></div></body></html>
261
\ No newline at end of file
262
Index: libstdc++-v3/doc/html/faq.html
263
===================================================================
264
--- a/src/libstdc++-v3/doc/html/faq.html (.../tags/gcc_4_8_2_release)
265
+++ b/src/libstdc++-v3/doc/html/faq.html (.../branches/gcc-4_8-branch)
267
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
268
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Frequently Asked Questions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk03.html" title="" /><link rel="prev" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Frequently Asked Questions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> </td></tr></table><hr /></div><div class="article"><div class="titlepage"><div><div><h1 class="title"><a id="faq"></a>Frequently Asked Questions</h1></div><div><p class="copyright">Copyright ©
269
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Frequently Asked Questions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk03.html" title="" /><link rel="prev" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Frequently Asked Questions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> </td></tr></table><hr /></div><div class="article"><div class="titlepage"><div><div><h1 class="title"><a id="faq"></a>Frequently Asked Questions</h1></div><div><p class="copyright">Copyright ©
272
<a class="link" href="http://www.fsf.org" target="_top">FSF</a>
273
- </p></div></div><hr /></div><div class="qandaset"><a id="idp1581728"></a><dl><dt></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
274
+ </p></div></div><hr /></div><div class="qandaset"><a id="idm270011560848"></a><dl><dt></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
276
</a></dt><dt>1.2. <a href="faq.html#faq.why">
277
Why should I use libstdc++?
278
Index: libstdc++-v3/doc/html/index.html
279
===================================================================
280
--- a/src/libstdc++-v3/doc/html/index.html (.../tags/gcc_4_8_2_release)
281
+++ b/src/libstdc++-v3/doc/html/index.html (.../branches/gcc-4_8-branch)
283
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
284
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="description" content="Short Contents Copyright (C) 2008-2013 FSF Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. This is the top level of the libstdc++ documentation set. The documentation is divided into the following three sections. Manual Frequently Asked Questions API and Source Documentation" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="next" href="manual/index.html" title="The GNU C++ Library Manual" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="manual/index.html">Next</a></td></tr></table><hr /></div><div class="set" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="set-index"></a>The GNU C++ Library</h1></div><div><div class="abstract"><a id="contents"></a><p class="title"><strong>Short Contents</strong></p><p>
285
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="description" content="Short Contents Copyright (C) 2008-2013 FSF Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. This is the top level of the libstdc++ documentation set. The documentation is divided into the following three sections. Manual Frequently Asked Questions API and Source Documentation" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="next" href="manual/index.html" title="The GNU C++ Library Manual" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="manual/index.html">Next</a></td></tr></table><hr /></div><div class="set" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="set-index"></a>The GNU C++ Library</h1></div><div><div class="abstract"><a id="contents"></a><p class="title"><strong>Short Contents</strong></p><p>
286
Copyright (C) 2008-2013
287
<a class="link" href="http://www.fsf.org/" target="_top">FSF
290
</p></li><li class="listitem"><p>
291
<a class="link" href="api.html" title="The GNU C++ Library API Reference">API and Source Documentation</a>
292
</p></li></ul></div><p>
293
- </p></div></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="book"><a href="manual/index.html">The GNU C++ Library Manual</a></span></dt><dd><dl><dt><span class="part"><a href="manual/intro.html">I.
294
+ </p></div></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="book"><a href="manual/index.html">The GNU C++ Library Manual</a></span></dt><dd><dl><dt><span class="part"><a href="manual/intro.html">I.
297
</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="manual/status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="manual/license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="manual/setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/configure.html">Configure</a></span></dt><dt><span class="section"><a href="manual/make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="manual/using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="manual/std_contents.html">II.
299
</a></span></dt><dd><dl><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/concept_checking.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/utilities.html">6.
302
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="manual/pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="manual/memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idp13920976">Interface Design</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp13924528">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp13937824">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="manual/memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idp15512272">Class Hierarchy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15534784">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15542080">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15556704">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idp15573056">Examples</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15576640">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/strings.html">7.
303
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="manual/pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="manual/memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idm270001611968">Interface Design</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm270001608416">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm270001595120">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="manual/memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idm270000019344">Class Hierarchy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269999996832">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269999989536">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269999974912">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idm269999958496">Examples</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269999954912">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/strings.html">7.
306
</a></span></dt><dd><dl><dt><span class="section"><a href="manual/strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="manual/strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/localization.html">8.
309
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="manual/localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#idp15778336">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="manual/facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/containers.html">9.
310
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="manual/localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#idm269999753024">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="manual/facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/containers.html">9.
313
</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="manual/containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="manual/associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="manual/associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="manual/associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="manual/associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="manual/unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="manual/unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/iterators.html">10.
314
Index: libstdc++-v3/doc/html/api.html
315
===================================================================
316
--- a/src/libstdc++-v3/doc/html/api.html (.../tags/gcc_4_8_2_release)
317
+++ b/src/libstdc++-v3/doc/html/api.html (.../branches/gcc-4_8-branch)
319
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
320
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library API Reference</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk02.html" title="" /><link rel="prev" href="bk02.html" title="" /><link rel="next" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library API Reference</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr></table><hr /></div><div class="article"><div class="titlepage"><div><div><h1 class="title"><a id="api"></a>The GNU C++ Library API Reference</h1></div><div><p class="copyright">Copyright ©
321
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library API Reference</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk02.html" title="" /><link rel="prev" href="bk02.html" title="" /><link rel="next" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library API Reference</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr></table><hr /></div><div class="article"><div class="titlepage"><div><div><h1 class="title"><a id="api"></a>The GNU C++ Library API Reference</h1></div><div><p class="copyright">Copyright ©
327
<a class="link" href="http://www.fsf.org/" target="_top">FSF
329
- </p></div><div><div class="legalnotice"><a id="idp3706336"></a><p>
330
+ </p></div><div><div class="legalnotice"><a id="idm270006235696"></a><p>
331
<a class="link" href="manual/license.html" title="License">License
333
</p></div></div></div><hr /></div><p>
334
Index: libstdc++-v3/doc/html/manual/dynamic_memory.html
335
===================================================================
336
--- a/src/libstdc++-v3/doc/html/manual/dynamic_memory.html (.../tags/gcc_4_8_2_release)
337
+++ b/src/libstdc++-v3/doc/html/manual/dynamic_memory.html (.../branches/gcc-4_8-branch)
339
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
340
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Dynamic Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="support.html" title="Chapter 4. Support" /><link rel="prev" href="support.html" title="Chapter 4. Support" /><link rel="next" href="termination.html" title="Termination" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Dynamic Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="support.html">Prev</a> </td><th width="60%" align="center">Chapter 4.
341
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Dynamic Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="support.html" title="Chapter 4. Support" /><link rel="prev" href="support.html" title="Chapter 4. Support" /><link rel="next" href="termination.html" title="Termination" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Dynamic Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="support.html">Prev</a> </td><th width="60%" align="center">Chapter 4.
344
</th><td width="20%" align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.memory"></a>Dynamic Memory</h2></div></div></div><p>
345
Index: libstdc++-v3/doc/html/manual/iterators.html
346
===================================================================
347
--- a/src/libstdc++-v3/doc/html/manual/iterators.html (.../tags/gcc_4_8_2_release)
348
+++ b/src/libstdc++-v3/doc/html/manual/iterators.html (.../branches/gcc-4_8-branch)
350
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
351
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 10. Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="containers_and_c.html" title="Interacting with C" /><link rel="next" href="algorithms.html" title="Chapter 11. Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10.
352
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 10. Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="containers_and_c.html" title="Interacting with C" /><link rel="next" href="algorithms.html" title="Chapter 11. Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10.
355
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers_and_c.html">Prev</a> </td><th width="60%" align="center">Part II.
358
</th><td width="20%" align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.iterators"></a>Chapter 10.
360
- <a id="idp16156992" class="indexterm"></a>
361
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="section"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.iterators.predefined"></a>Predefined</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.vs_pointers"></a>Iterators vs. Pointers</h3></div></div></div><p>
362
+ <a id="idm269999374096" class="indexterm"></a>
363
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="section"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.iterators.predefined"></a>Predefined</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.vs_pointers"></a>Iterators vs. Pointers</h3></div></div></div><p>
365
FAQ <a class="link" href="../faq.html#faq.iterator_as_pod" title="7.1.">entry</a> points out that
366
iterators are not implemented as pointers. They are a generalization
367
Index: libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html
368
===================================================================
369
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html (.../tags/gcc_4_8_2_release)
370
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html (.../branches/gcc-4_8-branch)
372
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
373
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Single Thread Example</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_impl.html" title="Implementation" /><link rel="next" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Single Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_ex_multi.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_single"></a>Single Thread Example</h2></div></div></div><p>
374
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Single Thread Example</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_impl.html" title="Implementation" /><link rel="next" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Single Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_ex_multi.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_single"></a>Single Thread Example</h2></div></div></div><p>
375
Let's start by describing how the data on a freelist is laid out in memory.
376
This is the first two blocks in freelist for thread id 3 in bin 3 (8 bytes):
377
</p><pre class="programlisting">
378
Index: libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
379
===================================================================
380
--- a/src/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html (.../tags/gcc_4_8_2_release)
381
+++ b/src/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html (.../branches/gcc-4_8-branch)
383
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
384
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Generalized Operations</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="numerics.html" title="Chapter 12. Numerics" /><link rel="prev" href="numerics.html" title="Chapter 12. Numerics" /><link rel="next" href="numerics_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Generalized Operations</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><th width="60%" align="center">Chapter 12.
385
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Generalized Operations</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="numerics.html" title="Chapter 12. Numerics" /><link rel="prev" href="numerics.html" title="Chapter 12. Numerics" /><link rel="next" href="numerics_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Generalized Operations</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><th width="60%" align="center">Chapter 12.
388
</th><td width="20%" align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.generalized_ops"></a>Generalized Operations</h2></div></div></div><p>
389
Index: libstdc++-v3/doc/html/manual/mt_allocator.html
390
===================================================================
391
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator.html (.../tags/gcc_4_8_2_release)
392
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator.html (.../branches/gcc-4_8-branch)
394
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
395
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 20. The mt_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="profile_mode_diagnostics.html" title="Diagnostics" /><link rel="next" href="mt_allocator_design.html" title="Design Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 20. The mt_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_diagnostics.html">Prev</a> </td><th width="60%" align="center">Part III.
396
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 20. The mt_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="profile_mode_diagnostics.html" title="Diagnostics" /><link rel="next" href="mt_allocator_design.html" title="Design Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 20. The mt_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_diagnostics.html">Prev</a> </td><th width="60%" align="center">Part III.
399
-</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_design.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.mt"></a>Chapter 20. The mt_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></div><p>
400
+</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_design.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.mt"></a>Chapter 20. The mt_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></div><p>
401
</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.intro"></a>Intro</h2></div></div></div><p>
402
The mt allocator [hereinafter referred to simply as "the allocator"]
403
is a fixed size (power of two) allocator that was initially
404
Index: libstdc++-v3/doc/html/manual/unordered_associative.html
405
===================================================================
406
--- a/src/libstdc++-v3/doc/html/manual/unordered_associative.html (.../tags/gcc_4_8_2_release)
407
+++ b/src/libstdc++-v3/doc/html/manual/unordered_associative.html (.../branches/gcc-4_8-branch)
409
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
410
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Unordered Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9. Containers" /><link rel="prev" href="associative.html" title="Associative" /><link rel="next" href="containers_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Unordered Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9.
411
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Unordered Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9. Containers" /><link rel="prev" href="associative.html" title="Associative" /><link rel="next" href="containers_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Unordered Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9.
414
</th><td width="20%" align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.unordered"></a>Unordered Associative</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.unordered.hash"></a>Hash Code</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="containers.unordered.cache"></a>Hash Code Caching Policy</h4></div></div></div><p>
415
Index: libstdc++-v3/doc/html/manual/configure.html
416
===================================================================
417
--- a/src/libstdc++-v3/doc/html/manual/configure.html (.../tags/gcc_4_8_2_release)
418
+++ b/src/libstdc++-v3/doc/html/manual/configure.html (.../branches/gcc-4_8-branch)
420
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
421
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Configure</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, configure, options" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="setup.html" title="Chapter 2. Setup" /><link rel="next" href="make.html" title="Make" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Configure</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="setup.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="make.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.configure"></a>Configure</h2></div></div></div><p>
422
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Configure</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, configure, options" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="setup.html" title="Chapter 2. Setup" /><link rel="next" href="make.html" title="Make" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Configure</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="setup.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="make.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.configure"></a>Configure</h2></div></div></div><p>
423
When configuring libstdc++, you'll have to configure the entire
424
<span class="emphasis"><em>gccsrcdir</em></span> directory. Consider using the
425
toplevel gcc configuration option
426
Index: libstdc++-v3/doc/html/manual/status.html
427
===================================================================
428
--- a/src/libstdc++-v3/doc/html/manual/status.html (.../tags/gcc_4_8_2_release)
429
+++ b/src/libstdc++-v3/doc/html/manual/status.html (.../branches/gcc-4_8-branch)
431
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
432
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 1. Status</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I. Introduction" /><link rel="prev" href="intro.html" title="Part I. Introduction" /><link rel="next" href="license.html" title="License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 1. Status</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="intro.html">Prev</a> </td><th width="60%" align="center">Part I.
433
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 1. Status</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I. Introduction" /><link rel="prev" href="intro.html" title="Part I. Introduction" /><link rel="next" href="license.html" title="License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 1. Status</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="intro.html">Prev</a> </td><th width="60%" align="center">Part I.
436
-</th><td width="20%" align="right"> <a accesskey="n" href="license.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.status"></a>Chapter 1. Status</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.iso"></a>Implementation Status</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.1998"></a>C++ 1998/2003</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="iso.1998.status"></a>Implementation Status</h4></div></div></div><p>
437
+</th><td width="20%" align="right"> <a accesskey="n" href="license.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.status"></a>Chapter 1. Status</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.iso"></a>Implementation Status</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.1998"></a>C++ 1998/2003</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="iso.1998.status"></a>Implementation Status</h4></div></div></div><p>
438
This status table is based on the table of contents of ISO/IEC 14882:2003.
440
This page describes the C++ support in mainline GCC SVN, not in any
442
-</p><div class="table"><a id="idp452240"></a><p class="title"><strong>Table 1.1. C++ 1998/2003 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 1998/2003 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
443
+</p><div class="table"><a id="idm270008034928"></a><p class="title"><strong>Table 1.1. C++ 1998/2003 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 1998/2003 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
444
<span class="emphasis"><em>18</em></span>
445
</td><td colspan="3" align="left">
446
<span class="emphasis"><em>Language support</em></span>
449
This page describes the C++11 support in mainline GCC SVN, not in any
451
-</p><div class="table"><a id="idp8670848"></a><p class="title"><strong>Table 1.2. C++ 2011 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 2011 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
452
+</p><div class="table"><a id="idm270007982624"></a><p class="title"><strong>Table 1.2. C++ 2011 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 2011 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
453
<span class="emphasis"><em>18</em></span>
454
</td><td colspan="3" align="left">
455
<span class="emphasis"><em>Language support</em></span>
457
is_trivially_copy_constructible, is_trivially_move_constructible,
458
is_trivially_assignable, is_trivially_default_assignable,
459
is_trivially_copy_assignable, is_trivially_move_assignable
460
- </td></tr><tr><td align="left">20.9.5</td><td align="left">Type property queries</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7</td><td align="left">Transformations between types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.9.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.3</td><td align="left">Sign modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.4</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.5</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.6</td><td align="left">Other transformations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10</td><td align="left">Compile-time rational arithmetic</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.2</td><td align="left">Header <code class="code"><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">
461
+ </td></tr><tr><td align="left">20.9.5</td><td align="left">Type property queries</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7</td><td align="left">Transformations between types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.9.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.3</td><td align="left">Sign modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.4</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.5</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.9.7.6</td><td align="left">Other transformations</td><td align="left">Partial</td><td align="left">Missing <code class="code">aligned_union</code>.</td></tr><tr><td align="left">20.10</td><td align="left">Compile-time rational arithmetic</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.2</td><td align="left">Header <code class="code"><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">
462
<span class="emphasis"><em>21</em></span>
463
</td><td colspan="3" align="left">
464
<span class="emphasis"><em>Strings</em></span>
467
This page describes the TR1 support in mainline GCC SVN, not in any particular
469
-</p><div class="table"><a id="idp7483200"></a><p class="title"><strong>Table 1.3. C++ TR1 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code"><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">
470
+</p><div class="table"><a id="idm270006687472"></a><p class="title"><strong>Table 1.3. C++ TR1 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code"><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">
473
<a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">boost::shared_ptr</a>.
476
This page describes the TR 24733 support in mainline GCC SVN, not in any
478
-</p><div class="table"><a id="idp12559072"></a><p class="title"><strong>Table 1.4. C++ TR 24733 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR 24733 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
479
+</p><div class="table"><a id="idm270002960368"></a><p class="title"><strong>Table 1.4. C++ TR 24733 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR 24733 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
480
<span class="emphasis"><em>0</em></span>
481
</td><td colspan="3" align="left">
482
<span class="emphasis"><em>Introduction</em></span>
483
Index: libstdc++-v3/doc/html/manual/profile_mode_devel.html
484
===================================================================
485
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_devel.html (.../tags/gcc_4_8_2_release)
486
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_devel.html (.../branches/gcc-4_8-branch)
488
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
489
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Developer Information</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_impl.html" title="Implementation Issues" /><link rel="next" href="profile_mode_diagnostics.html" title="Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Developer Information</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_diagnostics.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.developer"></a>Developer Information</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.bigpic"></a>Big Picture</h3></div></div></div><p>The profile mode headers are included with
490
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Developer Information</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_impl.html" title="Implementation Issues" /><link rel="next" href="profile_mode_diagnostics.html" title="Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Developer Information</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_diagnostics.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.developer"></a>Developer Information</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.bigpic"></a>Big Picture</h3></div></div></div><p>The profile mode headers are included with
491
<code class="code">-D_GLIBCXX_PROFILE</code> through preprocessor directives in
492
<code class="code">include/std/*</code>.
493
</p><p>Instrumented implementations are provided in
494
Index: libstdc++-v3/doc/html/manual/debug_mode_design.html
495
===================================================================
496
--- a/src/libstdc++-v3/doc/html/manual/debug_mode_design.html (.../tags/gcc_4_8_2_release)
497
+++ b/src/libstdc++-v3/doc/html/manual/debug_mode_design.html (.../branches/gcc-4_8-branch)
499
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
500
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode_using.html" title="Using" /><link rel="next" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_using.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.design"></a>Design</h2></div></div></div><p>
501
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode_using.html" title="Using" /><link rel="next" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_using.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.design"></a>Design</h2></div></div></div><p>
502
</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.goals"></a>Goals</h3></div></div></div><p>
503
</p><p> The libstdc++ debug mode replaces unsafe (but efficient) standard
504
containers and iterators with semantically equivalent safe standard
506
</p><p> There are several existing implementations of debug modes for C++
507
standard library implementations, although none of them directly
508
supports debugging for programs using libstdc++. The existing
509
- implementations include:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><a class="link" href="http://www.mathcs.sjsu.edu/faculty/horstman/safestl.html" target="_top">SafeSTL</a>:
510
+ implementations include:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><a class="link" href="http://www.cs.sjsu.edu/faculty/horstman/safestl.html" target="_top">SafeSTL</a>:
511
SafeSTL was the original debugging version of the Standard Template
512
Library (STL), implemented by Cay S. Horstmann on top of the
513
Hewlett-Packard STL. Though it inspired much work in this area, it
514
Index: libstdc++-v3/doc/html/manual/policy_data_structures_design.html
515
===================================================================
516
--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures_design.html (.../tags/gcc_4_8_2_release)
517
+++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures_design.html (.../branches/gcc-4_8-branch)
519
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
520
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_using.html" title="Using" /><link rel="next" href="policy_based_data_structures_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_using.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_based_data_structures_test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.design"></a>Design</h2></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.design.concepts"></a>Concepts</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.null_type"></a>Null Policy Classes</h4></div></div></div><p>
521
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_using.html" title="Using" /><link rel="next" href="policy_based_data_structures_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_using.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_based_data_structures_test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.design"></a>Design</h2></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.design.concepts"></a>Concepts</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.null_type"></a>Null Policy Classes</h4></div></div></div><p>
522
Associative containers are typically parametrized by various
523
policies. For example, a hash-based associative container is
524
parametrized by a hash-functor, transforming each key into an
526
naturally; collision-chaining hash tables (label B) store
527
equivalent-key values in the same bucket, the bucket can be
528
arranged so that equivalent-key values are consecutive.
529
- </p><div class="figure"><a id="idp18000448"></a><p class="title"><strong>Figure 22.8. Non-unique Mapping Standard Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_1.png" align="middle" alt="Non-unique Mapping Standard Containers" /></div></div></div><br class="figure-break" /><p>
530
+ </p><div class="figure"><a id="idm269997530416"></a><p class="title"><strong>Figure 22.8. Non-unique Mapping Standard Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_1.png" align="middle" alt="Non-unique Mapping Standard Containers" /></div></div></div><br class="figure-break" /><p>
531
Put differently, the standards' non-unique mapping
532
associative-containers are associative containers that map
533
primary keys to linked lists that are embedded into the
535
first graphic above. Labels A and B, respectively. Each shaded
536
box represents some size-type or secondary
537
associative-container.
538
- </p><div class="figure"><a id="idp18023952"></a><p class="title"><strong>Figure 22.10. Non-unique Mapping Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_3.png" align="middle" alt="Non-unique Mapping Containers" /></div></div></div><br class="figure-break" /><p>
539
+ </p><div class="figure"><a id="idm269997506912"></a><p class="title"><strong>Figure 22.10. Non-unique Mapping Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_3.png" align="middle" alt="Non-unique Mapping Containers" /></div></div></div><br class="figure-break" /><p>
540
In the first example above, then, one would use an associative
541
container mapping each user to an associative container which
542
maps each application id to a start time (see
544
shows invariants for order-preserving containers: point-type
545
iterators are synonymous with range-type iterators.
546
Orthogonally, <span class="emphasis"><em>C</em></span>shows invariants for "set"
547
- containers: iterators are synonymous with const iterators.</p><div class="figure"><a id="idp18043824"></a><p class="title"><strong>Figure 22.11. Point Iterator Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterator_hierarchy.png" align="middle" alt="Point Iterator Hierarchy" /></div></div></div><br class="figure-break" /><p>Note that point-type iterators in self-organizing containers
548
+ containers: iterators are synonymous with const iterators.</p><div class="figure"><a id="idm269997487104"></a><p class="title"><strong>Figure 22.11. Point Iterator Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterator_hierarchy.png" align="middle" alt="Point Iterator Hierarchy" /></div></div></div><br class="figure-break" /><p>Note that point-type iterators in self-organizing containers
549
(hash-based associative containers) lack movement
550
operators, such as <code class="literal">operator++</code> - in fact, this
551
is the reason why this library differentiates from the standard C++ librarys
553
to the question of whether point-type iterators and range-type
554
iterators are valid. The graphic below shows tags corresponding to
555
different types of invalidation guarantees.
556
- </p><div class="figure"><a id="idp18057168"></a><p class="title"><strong>Figure 22.12. Invalidation Guarantee Tags Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_tag_hierarchy.png" align="middle" alt="Invalidation Guarantee Tags Hierarchy" /></div></div></div><br class="figure-break" /><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
557
+ </p><div class="figure"><a id="idm269997473760"></a><p class="title"><strong>Figure 22.12. Invalidation Guarantee Tags Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_tag_hierarchy.png" align="middle" alt="Invalidation Guarantee Tags Hierarchy" /></div></div></div><br class="figure-break" /><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
558
<code class="classname">basic_invalidation_guarantee</code>
559
corresponds to a basic guarantee that a point-type iterator,
560
a found pointer, or a found reference, remains valid as long
563
This library contains a container tag hierarchy corresponding to the
565
- </p><div class="figure"><a id="idp18087392"></a><p class="title"><strong>Figure 22.13. Container Tag Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_container_tag_hierarchy.png" align="middle" alt="Container Tag Hierarchy" /></div></div></div><br class="figure-break" /><p>
566
+ </p><div class="figure"><a id="idm269997443664"></a><p class="title"><strong>Figure 22.13. Container Tag Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_container_tag_hierarchy.png" align="middle" alt="Container Tag Hierarchy" /></div></div></div><br class="figure-break" /><p>
567
Given any container <span class="type">Cntnr</span>, the tag of
568
the underlying data structure can be found via <code class="literal">typename
569
Cntnr::container_category</code>.
571
collision-chaining container, except for the following.</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">Comb_Probe_Fn</code> describes how to transform a probe
572
sequence into a sequence of positions within the table.</p></li><li class="listitem"><p><code class="classname">Probe_Fn</code> describes a probe sequence policy.</p></li></ol></div><p>Some of the default template values depend on the values of
573
other parameters, and are explained below.</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.hash.details"></a>Details</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.hash_policies"></a>Hash Policies</h6></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.general"></a>General</h6></div></div></div><p>Following is an explanation of some functions which hashing
574
- involves. The graphic below illustrates the discussion.</p><div class="figure"><a id="idp18127536"></a><p class="title"><strong>Figure 22.14. Hash functions, ranged-hash functions, and
575
+ involves. The graphic below illustrates the discussion.</p><div class="figure"><a id="idm269997403584"></a><p class="title"><strong>Figure 22.14. Hash functions, ranged-hash functions, and
576
range-hashing functions</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_ranged_hash_range_hashing_fns.png" align="middle" alt="Hash functions, ranged-hash functions, and range-hashing functions" /></div></div></div><br class="figure-break" /><p>Let U be a domain (e.g., the integers, or the
577
strings of 3 characters). A hash-table algorithm needs to map
578
elements of U "uniformly" into the range [0,..., m -
580
Z<sub>+</sub>,</p><p>which maps a non-negative hash value, and a non-negative
581
range upper-bound into a non-negative integral in the range
582
between 0 (inclusive) and the range upper bound (exclusive),
583
- i.e., for any r in Z<sub>+</sub>,</p><p>0 ≤ g(r, m) ≤ m - 1</p><p>The resulting ranged-hash function, is</p><div class="equation"><a id="idp18141344"></a><p class="title"><strong>Equation 22.1. Ranged Hash Function</strong></p><div class="equation-contents"><span class="mathphrase">
584
+ i.e., for any r in Z<sub>+</sub>,</p><p>0 ≤ g(r, m) ≤ m - 1</p><p>The resulting ranged-hash function, is</p><div class="equation"><a id="idm269997389776"></a><p class="title"><strong>Equation 22.1. Ranged Hash Function</strong></p><div class="equation-contents"><span class="mathphrase">
585
f(u , m) = g(h(u), m)
586
</span></div></div><br class="equation-break" /><p>From the above, it is obvious that given g and
587
h, f can always be composed (however the converse
589
transforming the sequence of hash values into a sequence of
590
positions.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.range"></a>Range Hashing</h6></div></div></div><p>Some common choices for range-hashing functions are the
591
division, multiplication, and middle-square methods (<a class="xref" href="policy_data_structures.html#biblio.knuth98sorting" title="The Art of Computer Programming - Sorting and Searching">[biblio.knuth98sorting]</a>), defined
592
- as</p><div class="equation"><a id="idp18147232"></a><p class="title"><strong>Equation 22.2. Range-Hashing, Division Method</strong></p><div class="equation-contents"><span class="mathphrase">
593
+ as</p><div class="equation"><a id="idm269997383888"></a><p class="title"><strong>Equation 22.2. Range-Hashing, Division Method</strong></p><div class="equation-contents"><span class="mathphrase">
595
</span></div></div><br class="equation-break" /><p>g(r, m) = ⌈ u/v ( a r mod v ) ⌉</p><p>and</p><p>g(r, m) = ⌈ u/v ( r<sup>2</sup> mod v ) ⌉</p><p>respectively, for some positive integrals u and
596
v (typically powers of 2), and some a. Each of
598
implement using the low
599
level % (modulo) operation (for any m), or the
600
low level & (bit-mask) operation (for the case where
601
- m is a power of 2), i.e.,</p><div class="equation"><a id="idp18151744"></a><p class="title"><strong>Equation 22.3. Division via Prime Modulo</strong></p><div class="equation-contents"><span class="mathphrase">
602
+ m is a power of 2), i.e.,</p><div class="equation"><a id="idm269997379376"></a><p class="title"><strong>Equation 22.3. Division via Prime Modulo</strong></p><div class="equation-contents"><span class="mathphrase">
604
- </span></div></div><br class="equation-break" /><p>and</p><div class="equation"><a id="idp18153568"></a><p class="title"><strong>Equation 22.4. Division via Bit Mask</strong></p><div class="equation-contents"><span class="mathphrase">
605
+ </span></div></div><br class="equation-break" /><p>and</p><div class="equation"><a id="idm269997377552"></a><p class="title"><strong>Equation 22.4. Division via Bit Mask</strong></p><div class="equation-contents"><span class="mathphrase">
606
g(r, m) = r & m - 1, (with m =
607
2<sup>k</sup> for some k)
608
</span></div></div><br class="equation-break" /><p>respectively.</p><p>The % (modulo) implementation has the advantage that for
610
s = [ s<sub>0</sub>,..., s<sub>t - 1</sub>]
611
</p><p>be a string of t characters, each of which is from
612
domain S. Consider the following ranged-hash
613
- function:</p><div class="equation"><a id="idp18163200"></a><p class="title"><strong>Equation 22.5.
614
+ function:</p><div class="equation"><a id="idm269997367984"></a><p class="title"><strong>Equation 22.5.
615
A Standard String Hash Function
616
</strong></p><div class="equation-contents"><span class="mathphrase">
617
f<sub>1</sub>(s, m) = ∑ <sub>i =
619
of a long DNA sequence (and so S = {'A', 'C', 'G',
620
'T'}). In this case, scanning the entire string might be
621
prohibitively expensive. A possible alternative might be to use
622
- only the first k characters of the string, where</p><p>|S|<sup>k</sup> ≥ m ,</p><p>i.e., using the hash function</p><div class="equation"><a id="idp18169344"></a><p class="title"><strong>Equation 22.6.
623
+ only the first k characters of the string, where</p><p>|S|<sup>k</sup> ≥ m ,</p><p>i.e., using the hash function</p><div class="equation"><a id="idm269997361840"></a><p class="title"><strong>Equation 22.6.
624
Only k String DNA Hash
625
</strong></p><div class="equation-contents"><span class="mathphrase">
626
f<sub>2</sub>(s, m) = ∑ <sub>i
627
@@ -606,12 +606,12 @@
628
the container transforms the key into a non-negative integral
629
using the hash functor (points B and C), and transforms the
630
result into a position using the combining functor (points D
631
- and E).</p><div class="figure"><a id="idp18191968"></a><p class="title"><strong>Figure 22.15. Insert hash sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram.png" align="middle" alt="Insert hash sequence diagram" /></div></div></div><br class="figure-break" /><p>If <code class="classname">cc_hash_table</code>'s
632
+ and E).</p><div class="figure"><a id="idm269997339216"></a><p class="title"><strong>Figure 22.15. Insert hash sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram.png" align="middle" alt="Insert hash sequence diagram" /></div></div></div><br class="figure-break" /><p>If <code class="classname">cc_hash_table</code>'s
633
hash-functor, <code class="classname">Hash_Fn</code> is instantiated by <code class="classname">null_type</code> , then <code class="classname">Comb_Hash_Fn</code> is taken to be
634
a ranged-hash function. The graphic below shows an <code class="function">insert</code> sequence
635
diagram. The user inserts an element (point A), the container
636
transforms the key into a position using the combining functor
637
- (points B and C).</p><div class="figure"><a id="idp18199024"></a><p class="title"><strong>Figure 22.16. Insert hash sequence diagram with a null policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram2.png" align="middle" alt="Insert hash sequence diagram with a null policy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.probe"></a>
638
+ (points B and C).</p><div class="figure"><a id="idm269997332160"></a><p class="title"><strong>Figure 22.16. Insert hash sequence diagram with a null policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram2.png" align="middle" alt="Insert hash sequence diagram with a null policy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.probe"></a>
640
</h6></div></div></div><p><code class="classname">gp_hash_table</code> is parametrized by
641
<code class="classname">Hash_Fn</code>, <code class="classname">Probe_Fn</code>,
643
a linear probe and a quadratic probe function,
644
respectively.</p></li></ol></div><p>
645
The graphic below shows the relationships.
646
- </p><div class="figure"><a id="idp18215840"></a><p class="title"><strong>Figure 22.17. Hash policy class diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_policy_cd.png" align="middle" alt="Hash policy class diagram" /></div></div></div><br class="figure-break" /></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.resize_policies"></a>Resize Policies</h6></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.general"></a>General</h6></div></div></div><p>Hash-tables, as opposed to trees, do not naturally grow or
647
+ </p><div class="figure"><a id="idm269997315408"></a><p class="title"><strong>Figure 22.17. Hash policy class diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_policy_cd.png" align="middle" alt="Hash policy class diagram" /></div></div></div><br class="figure-break" /></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.resize_policies"></a>Resize Policies</h6></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.general"></a>General</h6></div></div></div><p>Hash-tables, as opposed to trees, do not naturally grow or
648
shrink. It is necessary to specify policies to determine how
649
and when a hash table should change its size. Usually, resize
650
policies can be decomposed into orthogonal policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>A size policy indicating how a hash table
651
@@ -667,10 +667,10 @@
652
and some load factor be denoted by Α. We would like to
653
calculate the minimal length of k, such that if there were Α
654
m elements in the hash table, a probe sequence of length k would
655
- be found with probability at most 1/m.</p><div class="figure"><a id="idp18234944"></a><p class="title"><strong>Figure 22.18. Balls and bins</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_balls_and_bins.png" align="middle" alt="Balls and bins" /></div></div></div><br class="figure-break" /><p>Denote the probability that a probe sequence of length
656
+ be found with probability at most 1/m.</p><div class="figure"><a id="idm269997296368"></a><p class="title"><strong>Figure 22.18. Balls and bins</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_balls_and_bins.png" align="middle" alt="Balls and bins" /></div></div></div><br class="figure-break" /><p>Denote the probability that a probe sequence of length
657
k appears in bin i by p<sub>i</sub>, the
658
length of the probe sequence of bin i by
659
- l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idp18240448"></a><p class="title"><strong>Equation 22.7.
660
+ l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idm269997290864"></a><p class="title"><strong>Equation 22.7.
661
Probability of Probe Sequence of Length k
662
</strong></p><div class="equation-contents"><span class="mathphrase">
665
l<sub>i</sub> are negatively-dependent
666
(<a class="xref" href="policy_data_structures.html#biblio.dubhashi98neg" title="Balls and bins: A study in negative dependence">[biblio.dubhashi98neg]</a>)
668
- I(.) denote the indicator function. Then</p><div class="equation"><a id="idp18247216"></a><p class="title"><strong>Equation 22.8.
669
+ I(.) denote the indicator function. Then</p><div class="equation"><a id="idm269997284096"></a><p class="title"><strong>Equation 22.8.
670
Probability Probe Sequence in Some Bin
671
</strong></p><div class="equation-contents"><span class="mathphrase">
672
P( exists<sub>i</sub> l<sub>i</sub> ≥ k ) =
674
a resize is needed, and if so, what is the new size (points D
675
to G); following the resize, it notifies the policy that a
676
resize has completed (point H); finally, the element is
677
- inserted, and the policy notified (point I).</p><div class="figure"><a id="idp18265728"></a><p class="title"><strong>Figure 22.19. Insert resize sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram1.png" align="middle" alt="Insert resize sequence diagram" /></div></div></div><br class="figure-break" /><p>In practice, a resize policy can be usually orthogonally
678
+ inserted, and the policy notified (point I).</p><div class="figure"><a id="idm269997265648"></a><p class="title"><strong>Figure 22.19. Insert resize sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram1.png" align="middle" alt="Insert resize sequence diagram" /></div></div></div><br class="figure-break" /><p>In practice, a resize policy can be usually orthogonally
679
decomposed to a size policy and a trigger policy. Consequently,
680
the library contains a single class for instantiating a resize
681
policy: <code class="classname">hash_standard_resize_policy</code>
683
both, and acts as a standard delegate (<a class="xref" href="policy_data_structures.html#biblio.gof" title="Design Patterns - Elements of Reusable Object-Oriented Software">[biblio.gof]</a>)
684
to these policies.</p><p>The two graphics immediately below show sequence diagrams
685
illustrating the interaction between the standard resize policy
686
- and its trigger and size policies, respectively.</p><div class="figure"><a id="idp18273504"></a><p class="title"><strong>Figure 22.20. Standard resize policy trigger sequence
687
- diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram2.png" align="middle" alt="Standard resize policy trigger sequence diagram" /></div></div></div><br class="figure-break" /><div class="figure"><a id="idp18277664"></a><p class="title"><strong>Figure 22.21. Standard resize policy size sequence
688
+ and its trigger and size policies, respectively.</p><div class="figure"><a id="idm269997257872"></a><p class="title"><strong>Figure 22.20. Standard resize policy trigger sequence
689
+ diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram2.png" align="middle" alt="Standard resize policy trigger sequence diagram" /></div></div></div><br class="figure-break" /><div class="figure"><a id="idm269997253712"></a><p class="title"><strong>Figure 22.21. Standard resize policy size sequence
690
diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram3.png" align="middle" alt="Standard resize policy size sequence diagram" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl.predefined"></a>Predefined Policies</h6></div></div></div><p>The library includes the following
691
instantiations of size and trigger policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">hash_load_check_resize_trigger</code>
692
implements a load check trigger policy.</p></li><li class="listitem"><p><code class="classname">cc_hash_max_collision_check_resize_trigger</code>
694
each node, and maintains node invariants (see <a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>.) The first stores in
695
each node the size of the sub-tree rooted at the node; the
696
second stores at each node the maximal endpoint of the
697
- intervals at the sub-tree rooted at the node.</p><div class="figure"><a id="idp18355696"></a><p class="title"><strong>Figure 22.22. Tree node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invariants.png" align="middle" alt="Tree node invariants" /></div></div></div><br class="figure-break" /><p>Supporting such trees is difficult for a number of
698
+ intervals at the sub-tree rooted at the node.</p><div class="figure"><a id="idm269997175616"></a><p class="title"><strong>Figure 22.22. Tree node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invariants.png" align="middle" alt="Tree node invariants" /></div></div></div><br class="figure-break" /><p>Supporting such trees is difficult for a number of
699
reasons:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>There must be a way to specify what a node's metadata
700
should be (if any).</p></li><li class="listitem"><p>Various operations can invalidate node
701
invariants. The graphic below shows how a right rotation,
703
metadata.</p></li><li class="listitem"><p>It is not feasible to know in advance which methods trees
704
can support. Besides the usual <code class="classname">find</code> method, the
705
first tree can support a <code class="classname">find_by_order</code> method, while
706
- the second can support an <code class="classname">overlaps</code> method.</p></li></ol></div><div class="figure"><a id="idp18365136"></a><p class="title"><strong>Figure 22.23. Tree node invalidation</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invalidations.png" align="middle" alt="Tree node invalidation" /></div></div></div><br class="figure-break" /><p>These problems are solved by a combination of two means:
707
+ the second can support an <code class="classname">overlaps</code> method.</p></li></ol></div><div class="figure"><a id="idm269997166176"></a><p class="title"><strong>Figure 22.23. Tree node invalidation</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invalidations.png" align="middle" alt="Tree node invalidation" /></div></div></div><br class="figure-break" /><p>These problems are solved by a combination of two means:
708
node iterators, and template-template node updater
709
parameters.</p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.node.iterators"></a>Node Iterators</h6></div></div></div><p>Each tree-based container defines two additional iterator
710
types, <code class="classname">const_node_iterator</code>
712
<code class="classname">node_update</code> class, and publicly subclasses
713
<code class="classname">node_update</code>. The graphic below shows this
714
scheme, as well as some predefined policies (which are explained
715
- below).</p><div class="figure"><a id="idp18378304"></a><p class="title"><strong>Figure 22.24. A tree and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_updator_policy_cd.png" align="middle" alt="A tree and its update policy" /></div></div></div><br class="figure-break" /><p><code class="classname">node_update</code> (an instantiation of
716
+ below).</p><div class="figure"><a id="idm269997153072"></a><p class="title"><strong>Figure 22.24. A tree and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_updator_policy_cd.png" align="middle" alt="A tree and its update policy" /></div></div></div><br class="figure-break" /><p><code class="classname">node_update</code> (an instantiation of
717
<code class="classname">Node_Update</code>) must define <code class="classname">metadata_type</code> as
718
the type of metadata it requires. For order statistics,
719
e.g., <code class="classname">metadata_type</code> might be <code class="classname">size_t</code>.
721
<code class="classname">nd_it</code>. For example, say node x in the
722
graphic below label A has an invalid invariant, but its' children,
723
y and z have valid invariants. After the invocation, all three
724
- nodes should have valid invariants, as in label B.</p><div class="figure"><a id="idp18389968"></a><p class="title"><strong>Figure 22.25. Restoring node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_restoring_node_invariants.png" align="middle" alt="Restoring node invariants" /></div></div></div><br class="figure-break" /><p>When a tree operation might invalidate some node invariant,
725
+ nodes should have valid invariants, as in label B.</p><div class="figure"><a id="idm269997141408"></a><p class="title"><strong>Figure 22.25. Restoring node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_restoring_node_invariants.png" align="middle" alt="Restoring node invariants" /></div></div></div><br class="figure-break" /><p>When a tree operation might invalidate some node invariant,
726
it invokes this method in its <code class="classname">node_update</code> base to
727
restore the invariant. For example, the graphic below shows
728
an <code class="function">insert</code> operation (point A); the tree performs some
730
C, and D). (It is well known that any <code class="function">insert</code>,
731
<code class="function">erase</code>, <code class="function">split</code> or <code class="function">join</code>, can restore
732
all node invariants by a small number of node invariant updates (<a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>)
733
- .</p><div class="figure"><a id="idp18398144"></a><p class="title"><strong>Figure 22.26. Insert update sequence</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_update_seq_diagram.png" align="middle" alt="Insert update sequence" /></div></div></div><br class="figure-break" /><p>To complete the description of the scheme, three questions
734
+ .</p><div class="figure"><a id="idm269997133232"></a><p class="title"><strong>Figure 22.26. Insert update sequence</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_update_seq_diagram.png" align="middle" alt="Insert update sequence" /></div></div></div><br class="figure-break" /><p>To complete the description of the scheme, three questions
735
need to be answered:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>How can a tree which supports order statistics define a
736
method such as <code class="classname">find_by_order</code>?</p></li><li class="listitem"><p>How can the node updater base access methods of the
737
tree?</p></li><li class="listitem"><p>How can the following cyclic dependency be resolved?
739
node's metadata (this is halting reducible). In the graphic
740
below, assume the shaded node is inserted. The tree would have
741
to traverse the useless path shown to the root, applying
742
- redundant updates all the way.</p></li></ol></div><div class="figure"><a id="idp18420400"></a><p class="title"><strong>Figure 22.27. Useless update path</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_rationale_null_node_updator.png" align="middle" alt="Useless update path" /></div></div></div><br class="figure-break" /><p>A null policy class, <code class="classname">null_node_update</code>
743
+ redundant updates all the way.</p></li></ol></div><div class="figure"><a id="idm269997110976"></a><p class="title"><strong>Figure 22.27. Useless update path</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_rationale_null_node_updator.png" align="middle" alt="Useless update path" /></div></div></div><br class="figure-break" /><p>A null policy class, <code class="classname">null_node_update</code>
744
solves both these problems. The tree detects that node
745
invariants are irrelevant, and defines all accordingly.</p></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.details.split"></a>Split and Join</h6></div></div></div><p>Tree-based containers support split and join methods.
746
It is possible to split a tree so that it passes
747
@@ -1071,7 +1071,7 @@
748
sub-tree with leafs "a" and "as". The maximal common prefix is
749
"a". The internal node contains, consequently, to const
750
iterators, one pointing to <code class="varname">'a'</code>, and the other to
751
- <code class="varname">'s'</code>.</p><div class="figure"><a id="idp18465088"></a><p class="title"><strong>Figure 22.28. A PATRICIA trie</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_pat_trie.png" align="middle" alt="A PATRICIA trie" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.node"></a>Node Invariants</h6></div></div></div><p>Trie-based containers support node invariants, as do
752
+ <code class="varname">'s'</code>.</p><div class="figure"><a id="idm269997066288"></a><p class="title"><strong>Figure 22.28. A PATRICIA trie</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_pat_trie.png" align="middle" alt="A PATRICIA trie" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.node"></a>Node Invariants</h6></div></div></div><p>Trie-based containers support node invariants, as do
753
tree-based containers. There are two minor
754
differences, though, which, unfortunately, thwart sharing them
755
sharing the same node-updating policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>A trie's <code class="classname">Node_Update</code> template-template
756
@@ -1080,7 +1080,7 @@
757
parametrized by <code class="classname">Cmp_Fn</code>.</p></li><li class="listitem"><p>Tree-based containers store values in all nodes, while
758
trie-based containers (at least in this implementation) store
759
values in leafs.</p></li></ol></div><p>The graphic below shows the scheme, as well as some predefined
760
- policies (which are explained below).</p><div class="figure"><a id="idp18475584"></a><p class="title"><strong>Figure 22.29. A trie and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_trie_node_updator_policy_cd.png" align="middle" alt="A trie and its update policy" /></div></div></div><br class="figure-break" /><p>This library offers the following pre-defined trie node
761
+ policies (which are explained below).</p><div class="figure"><a id="idm269997055856"></a><p class="title"><strong>Figure 22.29. A trie and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_trie_node_updator_policy_cd.png" align="middle" alt="A trie and its update policy" /></div></div></div><br class="figure-break" /><p>This library offers the following pre-defined trie node
762
updating policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
763
<code class="classname">trie_order_statistics_node_update</code>
764
supports order statistics.
765
@@ -1128,7 +1128,7 @@
766
simple list of integer keys. If we search for the integer 6, we
767
are paying an overhead: the link with key 6 is only the fifth
768
link; if it were the first link, it could be accessed
769
- faster.</p><div class="figure"><a id="idp18506160"></a><p class="title"><strong>Figure 22.30. A simple list</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_simple_list.png" align="middle" alt="A simple list" /></div></div></div><br class="figure-break" /><p>List-update algorithms reorder lists as elements are
770
+ faster.</p><div class="figure"><a id="idm269997025344"></a><p class="title"><strong>Figure 22.30. A simple list</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_simple_list.png" align="middle" alt="A simple list" /></div></div></div><br class="figure-break" /><p>List-update algorithms reorder lists as elements are
771
accessed. They try to determine, by the access history, which
772
keys to move to the front of the list. Some of these algorithms
773
require adding some metadata alongside each entry.</p><p>For example, in the graphic below label A shows the counter
774
@@ -1138,7 +1138,7 @@
775
predetermined value, say 10, as shown in label C, the count is set
776
to 0 and the node is moved to the front of the list, as in label
778
- </p><div class="figure"><a id="idp18511744"></a><p class="title"><strong>Figure 22.31. The counter algorithm</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_list_update.png" align="middle" alt="The counter algorithm" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.policies"></a>Policies</h6></div></div></div><p>this library allows instantiating lists with policies
779
+ </p><div class="figure"><a id="idm269997019760"></a><p class="title"><strong>Figure 22.31. The counter algorithm</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_list_update.png" align="middle" alt="The counter algorithm" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.policies"></a>Policies</h6></div></div></div><p>this library allows instantiating lists with policies
780
implementing any algorithm moving nodes to the front of the
781
list (policies implementing algorithms interchanging nodes are
782
unsupported).</p><p>Associative containers based on lists are parametrized by a
783
@@ -1310,7 +1310,7 @@
784
sequence; the second uses a tree (or forest of trees), which is
785
typically less structured than an associative container's tree;
786
the third simply uses an associative container. These are
787
- shown in the graphic below, in labels A1 and A2, label B, and label C.</p><div class="figure"><a id="idp18575568"></a><p class="title"><strong>Figure 22.32. Underlying Priority-Queue Data-Structures.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_different_underlying_dss.png" align="middle" alt="Underlying Priority-Queue Data-Structures." /></div></div></div><br class="figure-break" /><p>Roughly speaking, any value that is both pushed and popped
788
+ shown in the graphic below, in labels A1 and A2, label B, and label C.</p><div class="figure"><a id="idm269996955920"></a><p class="title"><strong>Figure 22.32. Underlying Priority-Queue Data-Structures.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_different_underlying_dss.png" align="middle" alt="Underlying Priority-Queue Data-Structures." /></div></div></div><br class="figure-break" /><p>Roughly speaking, any value that is both pushed and popped
789
from a priority queue must incur a logarithmic expense (in the
790
amortized sense). Any priority queue implementation that would
791
avoid this, would violate known bounds on comparison-based
792
@@ -1390,7 +1390,7 @@
793
container <code class="classname">Cntnr</code>, the tag of the underlying
794
data structure can be found via <code class="classname">typename
795
Cntnr::container_category</code>; this is one of the possible tags shown in the graphic below.
796
- </p><div class="figure"><a id="idp18610544"></a><p class="title"><strong>Figure 22.33. Priority-Queue Data-Structure Tags.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_tag_hierarchy.png" align="middle" alt="Priority-Queue Data-Structure Tags." /></div></div></div><br class="figure-break" /><p>Additionally, a traits mechanism can be used to query a
797
+ </p><div class="figure"><a id="idm269996920880"></a><p class="title"><strong>Figure 22.33. Priority-Queue Data-Structure Tags.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_tag_hierarchy.png" align="middle" alt="Priority-Queue Data-Structure Tags." /></div></div></div><br class="figure-break" /><p>Additionally, a traits mechanism can be used to query a
798
container type for its attributes. Given any container
799
<code class="classname">Cntnr</code>, then </p><pre class="programlisting">__gnu_pbds::container_traits<Cntnr></pre><p>
800
is a traits class identifying the properties of the
801
Index: libstdc++-v3/doc/html/manual/using.html
802
===================================================================
803
--- a/src/libstdc++-v3/doc/html/manual/using.html (.../tags/gcc_4_8_2_release)
804
+++ b/src/libstdc++-v3/doc/html/manual/using.html (.../branches/gcc-4_8-branch)
806
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
807
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 3. Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I. Introduction" /><link rel="prev" href="make.html" title="Make" /><link rel="next" href="using_headers.html" title="Headers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><th width="60%" align="center">Part I.
808
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 3. Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I. Introduction" /><link rel="prev" href="make.html" title="Make" /><link rel="next" href="using_headers.html" title="Headers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><th width="60%" align="center">Part I.
811
-</th><td width="20%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"></a>Chapter 3. Using</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.flags"></a>Command Options</h2></div></div></div><p>
812
+</th><td width="20%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"></a>Chapter 3. Using</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.flags"></a>Command Options</h2></div></div></div><p>
813
The set of features available in the GNU C++ library is shaped
815
several <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Invoking-GCC.html" target="_top">GCC
817
enumerated and detailed in the table below.
819
By default, <span class="command"><strong>g++</strong></span> is equivalent to <span class="command"><strong>g++ -std=gnu++98</strong></span>. The standard library also defaults to this dialect.
820
- </p><div class="table"><a id="idp13051936"></a><p class="title"><strong>Table 3.1. C++ Command Options</strong></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code></td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++11</code></td><td align="left">Use the 2011 ISO C++ standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++11</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-fexceptions</code></td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left"><code class="literal">-frtti</code></td><td align="left">As above, but RTTI-free dialect.</td></tr><tr><td align="left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td align="left">For ISO C++11 <thread>, <future>,
821
+ </p><div class="table"><a id="idm270002481088"></a><p class="title"><strong>Table 3.1. C++ Command Options</strong></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code></td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++11</code></td><td align="left">Use the 2011 ISO C++ standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++11</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-fexceptions</code></td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left"><code class="literal">-frtti</code></td><td align="left">As above, but RTTI-free dialect.</td></tr><tr><td align="left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td align="left">For ISO C++11 <thread>, <future>,
822
<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>
823
\ No newline at end of file
824
Index: libstdc++-v3/doc/html/manual/profile_mode_impl.html
825
===================================================================
826
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_impl.html (.../tags/gcc_4_8_2_release)
827
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_impl.html (.../branches/gcc-4_8-branch)
829
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
830
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_cost_model.html" title="Empirical Cost Model" /><link rel="next" href="profile_mode_devel.html" title="Developer Information" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_cost_model.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_devel.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.implementation"></a>Implementation Issues</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stack"></a>Stack Traces</h3></div></div></div><p>
831
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_cost_model.html" title="Empirical Cost Model" /><link rel="next" href="profile_mode_devel.html" title="Developer Information" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_cost_model.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_devel.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.implementation"></a>Implementation Issues</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stack"></a>Stack Traces</h3></div></div></div><p>
832
Accurate stack traces are needed during profiling since we group events by
833
call context and dynamic instance. Without accurate traces, diagnostics
834
may be hard to interpret. For instance, when giving advice to the user
835
Index: libstdc++-v3/doc/html/manual/ext_containers.html
836
===================================================================
837
--- a/src/libstdc++-v3/doc/html/manual/ext_containers.html (.../tags/gcc_4_8_2_release)
838
+++ b/src/libstdc++-v3/doc/html/manual/ext_containers.html (.../branches/gcc-4_8-branch)
840
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
841
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 23. HP/SGI Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="policy_data_structures_ack.html" title="Acknowledgments" /><link rel="next" href="ext_sgi.html" title="Deprecated" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 23. HP/SGI Extensions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_ack.html">Prev</a> </td><th width="60%" align="center">Part III.
842
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 23. HP/SGI Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="policy_data_structures_ack.html" title="Acknowledgments" /><link rel="next" href="ext_sgi.html" title="Deprecated" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 23. HP/SGI Extensions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_ack.html">Prev</a> </td><th width="60%" align="center">Part III.
845
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_sgi.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers"></a>Chapter 23. HP/SGI Extensions</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="ext_sgi.html">Deprecated</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.sgi"></a>Backwards Compatibility</h2></div></div></div><p>A few extensions and nods to backwards-compatibility have
846
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_sgi.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers"></a>Chapter 23. HP/SGI Extensions</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="ext_sgi.html">Deprecated</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.sgi"></a>Backwards Compatibility</h2></div></div></div><p>A few extensions and nods to backwards-compatibility have
847
been made with containers. Those dealing with older SGI-style
848
allocators are dealt with elsewhere. The remaining ones all deal
850
Index: libstdc++-v3/doc/html/manual/ext_concurrency_use.html
851
===================================================================
852
--- a/src/libstdc++-v3/doc/html/manual/ext_concurrency_use.html (.../tags/gcc_4_8_2_release)
853
+++ b/src/libstdc++-v3/doc/html/manual/ext_concurrency_use.html (.../branches/gcc-4_8-branch)
855
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
856
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Use</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="prev" href="ext_concurrency_impl.html" title="Implementation" /><link rel="next" href="appendix.html" title="Part IV. Appendices" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Use</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="appendix.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.use"></a>Use</h2></div></div></div><p>Typical usage of the last two constructs is demonstrated as follows:
857
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Use</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="prev" href="ext_concurrency_impl.html" title="Implementation" /><link rel="next" href="appendix.html" title="Part IV. Appendices" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Use</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="appendix.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.use"></a>Use</h2></div></div></div><p>Typical usage of the last two constructs is demonstrated as follows:
858
</p><pre class="programlisting">
859
#include <ext/concurrence.h>
861
Index: libstdc++-v3/doc/html/manual/ext_io.html
862
===================================================================
863
--- a/src/libstdc++-v3/doc/html/manual/ext_io.html (.../tags/gcc_4_8_2_release)
864
+++ b/src/libstdc++-v3/doc/html/manual/ext_io.html (.../branches/gcc-4_8-branch)
866
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
867
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 28. Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_iterators.html" title="Chapter 27. Iterators" /><link rel="next" href="ext_demangling.html" title="Chapter 29. Demangling" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 28. Input and Output</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><th width="60%" align="center">Part III.
868
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 28. Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_iterators.html" title="Chapter 27. Iterators" /><link rel="next" href="ext_demangling.html" title="Chapter 29. Demangling" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 28. Input and Output</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><th width="60%" align="center">Part III.
871
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.io"></a>Chapter 28. Input and Output</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></div><p>
872
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.io"></a>Chapter 28. Input and Output</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></div><p>
873
Extensions allowing <code class="code">filebuf</code>s to be constructed from
874
"C" types like FILE*s and file descriptors.
875
</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.io.filebuf_derived"></a>Derived filebufs</h2></div></div></div><p>The v2 library included non-standard extensions to construct
876
Index: libstdc++-v3/doc/html/manual/termination.html
877
===================================================================
878
--- a/src/libstdc++-v3/doc/html/manual/termination.html (.../tags/gcc_4_8_2_release)
879
+++ b/src/libstdc++-v3/doc/html/manual/termination.html (.../branches/gcc-4_8-branch)
881
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
882
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Termination</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="support.html" title="Chapter 4. Support" /><link rel="prev" href="dynamic_memory.html" title="Dynamic Memory" /><link rel="next" href="diagnostics.html" title="Chapter 5. Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Termination</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><th width="60%" align="center">Chapter 4.
883
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Termination</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="support.html" title="Chapter 4. Support" /><link rel="prev" href="dynamic_memory.html" title="Dynamic Memory" /><link rel="next" href="diagnostics.html" title="Chapter 5. Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Termination</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><th width="60%" align="center">Chapter 4.
886
</th><td width="20%" align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.termination"></a>Termination</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.handlers"></a>Termination Handlers</h3></div></div></div><p>
887
Index: libstdc++-v3/doc/html/manual/using_macros.html
888
===================================================================
889
--- a/src/libstdc++-v3/doc/html/manual/using_macros.html (.../tags/gcc_4_8_2_release)
890
+++ b/src/libstdc++-v3/doc/html/manual/using_macros.html (.../branches/gcc-4_8-branch)
892
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
893
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Macros</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_headers.html" title="Headers" /><link rel="next" href="using_namespaces.html" title="Namespaces" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Macros</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.macros"></a>Macros</h2></div></div></div><p>
894
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Macros</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_headers.html" title="Headers" /><link rel="next" href="using_namespaces.html" title="Namespaces" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Macros</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.macros"></a>Macros</h2></div></div></div><p>
895
All library macros begin with <code class="code">_GLIBCXX_</code>.
897
Furthermore, all pre-processor macros, switches, and
898
Index: libstdc++-v3/doc/html/manual/concurrency.html
899
===================================================================
900
--- a/src/libstdc++-v3/doc/html/manual/concurrency.html (.../tags/gcc_4_8_2_release)
901
+++ b/src/libstdc++-v3/doc/html/manual/concurrency.html (.../branches/gcc-4_8-branch)
903
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
904
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 15. Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library, mutex, thread, future, condition_variable" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="atomics.html" title="Chapter 14. Atomics" /><link rel="next" href="extensions.html" title="Part III. Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15.
905
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 15. Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library, mutex, thread, future, condition_variable" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="atomics.html" title="Chapter 14. Atomics" /><link rel="next" href="extensions.html" title="Part III. Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15.
908
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="atomics.html">Prev</a> </td><th width="60%" align="center">Part II.
911
</th><td width="20%" align="right"> <a accesskey="n" href="extensions.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.concurrency"></a>Chapter 15.
913
- <a id="idp16404464" class="indexterm"></a>
914
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></div><p>
915
+ <a id="idm269999126816" class="indexterm"></a>
916
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></div><p>
917
Facilities for concurrent operation, and control thereof.
918
</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.concurrency.api"></a>API Reference</h2></div></div></div><p>
919
All items are declared in one of four standard header files.
920
Index: libstdc++-v3/doc/html/manual/ext_utilities.html
921
===================================================================
922
--- a/src/libstdc++-v3/doc/html/manual/ext_utilities.html (.../tags/gcc_4_8_2_release)
923
+++ b/src/libstdc++-v3/doc/html/manual/ext_utilities.html (.../branches/gcc-4_8-branch)
925
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
926
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 24. Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_sgi.html" title="Deprecated" /><link rel="next" href="ext_algorithms.html" title="Chapter 25. Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 24. Utilities</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_sgi.html">Prev</a> </td><th width="60%" align="center">Part III.
927
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 24. Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_sgi.html" title="Deprecated" /><link rel="next" href="ext_algorithms.html" title="Chapter 25. Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 24. Utilities</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_sgi.html">Prev</a> </td><th width="60%" align="center">Part III.
930
</th><td width="20%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.util"></a>Chapter 24. Utilities</h2></div></div></div><p>
931
Index: libstdc++-v3/doc/html/manual/policy_data_structures.html
932
===================================================================
933
--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures.html (.../tags/gcc_4_8_2_release)
934
+++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures.html (.../branches/gcc-4_8-branch)
936
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
937
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 22. Policy-Based Data Structures</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="bitmap_allocator_impl.html" title="Implementation" /><link rel="next" href="policy_data_structures_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 22. Policy-Based Data Structures</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator_impl.html">Prev</a> </td><th width="60%" align="center">Part III.
938
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 22. Policy-Based Data Structures</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="bitmap_allocator_impl.html" title="Implementation" /><link rel="next" href="policy_data_structures_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 22. Policy-Based Data Structures</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator_impl.html">Prev</a> </td><th width="60%" align="center">Part III.
941
-</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_using.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers.pbds"></a>Chapter 22. Policy-Based Data Structures</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring">
942
+</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_using.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers.pbds"></a>Chapter 22. Policy-Based Data Structures</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring">
943
Configuring via Template Parameters
944
</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
945
Querying Container Attributes
947
these invariants, one must supply some policy that is aware
948
of these changes. Without this, it would be better to use a
949
linked list (in itself very efficient for these purposes).
950
- </p></li></ol></div><div class="figure"><a id="idp17613296"></a><p class="title"><strong>Figure 22.1. Node Invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_node_invariants.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
951
+ </p></li></ol></div><div class="figure"><a id="idm269997917584"></a><p class="title"><strong>Figure 22.1. Node Invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_node_invariants.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
952
The standard C++ library contains associative containers based on
953
red-black trees and collision-chaining hash tables. These are
954
very useful, but they are not ideal for all types of
957
The figure below shows the different underlying data structures
958
currently supported in this library.
959
- </p><div class="figure"><a id="idp17619952"></a><p class="title"><strong>Figure 22.2. Underlying Associative Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_1.png" align="middle" alt="Underlying Associative Data Structures" /></div></div></div><br class="figure-break" /><p>
960
+ </p><div class="figure"><a id="idm269997910864"></a><p class="title"><strong>Figure 22.2. Underlying Associative Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_1.png" align="middle" alt="Underlying Associative Data Structures" /></div></div></div><br class="figure-break" /><p>
961
A shows a collision-chaining hash-table, B shows a probing
962
hash-table, C shows a red-black tree, D shows a splay tree, E shows
963
a tree based on an ordered vector(implicit in the order of the
965
no guarantee that the elements traversed will coincide with the
966
<span class="emphasis"><em>logical</em></span> elements between 1 and 5, as in
968
- </p><div class="figure"><a id="idp17651648"></a><p class="title"><strong>Figure 22.3. Range Iteration in Different Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_1.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /><p>
969
+ </p><div class="figure"><a id="idm269997879168"></a><p class="title"><strong>Figure 22.3. Range Iteration in Different Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_1.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /><p>
970
In our opinion, this problem is not caused just because
971
red-black trees are order preserving while
972
collision-chaining hash tables are (generally) not - it
974
list, as in the graphic below, label B. Here the iterators are as
975
light as can be, but the hash-table's operations are more
977
- </p><div class="figure"><a id="idp17666528"></a><p class="title"><strong>Figure 22.4. Point Iteration in Hash Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_2.png" align="middle" alt="Point Iteration in Hash Data Structures" /></div></div></div><br class="figure-break" /><p>
978
+ </p><div class="figure"><a id="idm269997864256"></a><p class="title"><strong>Figure 22.4. Point Iteration in Hash Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_2.png" align="middle" alt="Point Iteration in Hash Data Structures" /></div></div></div><br class="figure-break" /><p>
979
It should be noted that containers based on collision-chaining
980
hash-tables are not the only ones with this type of behavior;
981
many other self-organizing data structures display it as well.
983
container. The graphic below shows three cases: A1 and A2 show
984
a red-black tree; B1 and B2 show a probing hash-table; C1 and C2
985
show a collision-chaining hash table.
986
- </p><div class="figure"><a id="idp17675840"></a><p class="title"><strong>Figure 22.5. Effect of erase in different underlying data structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_guarantee_erase.png" align="middle" alt="Effect of erase in different underlying data structures" /></div></div></div><br class="figure-break" /><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
987
+ </p><div class="figure"><a id="idm269997855056"></a><p class="title"><strong>Figure 22.5. Effect of erase in different underlying data structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_guarantee_erase.png" align="middle" alt="Effect of erase in different underlying data structures" /></div></div></div><br class="figure-break" /><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
988
Erasing 5 from A1 yields A2. Clearly, an iterator to 3 can
989
be de-referenced and incremented. The sequence of iterators
990
changed, but in a way that is well-defined by the interface.
992
typically less structured than an associative container's tree;
993
the third simply uses an associative container. These are
994
shown in the figure below with labels A1 and A2, B, and C.
995
- </p><div class="figure"><a id="idp17743424"></a><p class="title"><strong>Figure 22.6. Underlying Priority Queue Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_2.png" align="middle" alt="Underlying Priority Queue Data Structures" /></div></div></div><br class="figure-break" /><p>
996
+ </p><div class="figure"><a id="idm269997787392"></a><p class="title"><strong>Figure 22.6. Underlying Priority Queue Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_2.png" align="middle" alt="Underlying Priority Queue Data Structures" /></div></div></div><br class="figure-break" /><p>
997
No single implementation can completely replace any of the
998
others. Some have better <code class="function">push</code>
999
and <code class="function">pop</code> amortized performance, some have
1000
@@ -1098,7 +1098,7 @@
1001
</span>. </span><span class="publisher"><span class="publishername">
1002
Proceedings of International Conference on Very Large Data Bases
1003
. </span></span></p></div><div class="biblioentry"><a id="biblio.maverik_lowerbounds"></a><p>[biblio.maverik_lowerbounds] <span class="title"><em>
1004
- <a class="link" href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps" target="_top">
1005
+ <a class="link" href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps/" target="_top">
1006
Deamortization - Part 2: Binomial Heaps
1008
</em>. </span><span class="date">
1009
@@ -1190,7 +1190,7 @@
1010
</span>. </span><span class="publisher"><span class="publishername">
1011
Addison-Wesley Publishing Company
1012
. </span></span></p></div><div class="biblioentry"><a id="biblio.nelson96stlpq"></a><p>[biblio.nelson96stlpq] <span class="title"><em>
1013
- <a class="link" href="http://www.dogma.net/markn/articles/pq_stl/priority.htm" target="_top">Priority Queues and the STL
1014
+ <a class="link" href="http://marknelson.us/1996/01/01/priority-queues/" target="_top">Priority Queues and the STL
1016
</em>. </span><span class="date">
1018
Index: libstdc++-v3/doc/html/manual/ext_iterators.html
1019
===================================================================
1020
--- a/src/libstdc++-v3/doc/html/manual/ext_iterators.html (.../tags/gcc_4_8_2_release)
1021
+++ b/src/libstdc++-v3/doc/html/manual/ext_iterators.html (.../branches/gcc-4_8-branch)
1023
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1024
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 27. Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_numerics.html" title="Chapter 26. Numerics" /><link rel="next" href="ext_io.html" title="Chapter 28. Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 27. Iterators</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><th width="60%" align="center">Part III.
1025
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 27. Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_numerics.html" title="Chapter 26. Numerics" /><link rel="next" href="ext_io.html" title="Chapter 28. Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 27. Iterators</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><th width="60%" align="center">Part III.
1028
</th><td width="20%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.iterators"></a>Chapter 27. Iterators</h2></div></div></div><p>24.3.2 describes <code class="code">struct iterator</code>, which didn't exist in the
1029
Index: libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html
1030
===================================================================
1031
--- a/src/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html (.../tags/gcc_4_8_2_release)
1032
+++ b/src/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html (.../branches/gcc-4_8-branch)
1034
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1035
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /><link rel="prev" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /><link rel="next" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><th width="60%" align="center">Chapter 21. The bitmap_allocator</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.free_list_store"></a>Free List Store</h3></div></div></div><p>
1036
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /><link rel="prev" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /><link rel="next" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><th width="60%" align="center">Chapter 21. The bitmap_allocator</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.free_list_store"></a>Free List Store</h3></div></div></div><p>
1037
The Free List Store (referred to as FLS for the remaining part of this
1038
document) is the Global memory pool that is shared by all instances of
1039
the bitmapped allocator instantiated for any type. This maintains a
1042
Consider a block of size 64 ints. In memory, it would look like this:
1043
(assume a 32-bit system where, size_t is a 32-bit entity).
1044
- </p><div class="table"><a id="idp17500848"></a><p class="title"><strong>Table 21.1. Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -> Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p>
1045
+ </p><div class="table"><a id="idm269998030352"></a><p class="title"><strong>Table 21.1. Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -> Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p>
1046
The first Column(268) represents the size of the Block in bytes as
1047
seen by the Bitmap Allocator. Internally, a global free list is
1048
used to keep track of the free blocks used and given back by the
1049
Index: libstdc++-v3/doc/html/manual/appendix_contributing.html
1050
===================================================================
1051
--- a/src/libstdc++-v3/doc/html/manual/appendix_contributing.html (.../tags/gcc_4_8_2_release)
1052
+++ b/src/libstdc++-v3/doc/html/manual/appendix_contributing.html (.../branches/gcc-4_8-branch)
1054
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1055
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix A. Contributing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV. Appendices" /><link rel="prev" href="appendix.html" title="Part IV. Appendices" /><link rel="next" href="source_organization.html" title="Directory Layout and Source Conventions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A.
1056
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix A. Contributing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV. Appendices" /><link rel="prev" href="appendix.html" title="Part IV. Appendices" /><link rel="next" href="source_organization.html" title="Directory Layout and Source Conventions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A.
1059
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix.html">Prev</a> </td><th width="60%" align="center">Part IV.
1062
</th><td width="20%" align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.contrib"></a>
1064
- <a id="idp21875168" class="indexterm"></a>
1065
-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></div><p>
1066
+ <a id="idm269993657472" class="indexterm"></a>
1067
+</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></div><p>
1068
The GNU C++ Library follows an open development model. Active
1069
contributors are assigned maintainer-ship responsibility, and given
1070
write access to the source repository. First time contributors
1072
for this group is quite useful.
1073
</p></li><li class="listitem"><p>
1075
- the <a class="link" href="http://www.gnu.org/prep/standards" target="_top">GNU
1076
+ the <a class="link" href="http://www.gnu.org/prep/standards/" target="_top">GNU
1077
Coding Standards</a>, and chuckle when you hit the part
1078
about <span class="quote">“<span class="quote">Using Languages Other Than C</span>”</span>.
1079
</p></li><li class="listitem"><p>
1080
Index: libstdc++-v3/doc/html/manual/parallel_mode_test.html
1081
===================================================================
1082
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode_test.html (.../tags/gcc_4_8_2_release)
1083
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode_test.html (.../branches/gcc-4_8-branch)
1085
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1086
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_design.html" title="Design" /><link rel="next" href="profile_mode.html" title="Chapter 19. Profile Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_design.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.test"></a>Testing</h2></div></div></div><p>
1087
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_design.html" title="Design" /><link rel="next" href="profile_mode.html" title="Chapter 19. Profile Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_design.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.test"></a>Testing</h2></div></div></div><p>
1088
Both the normal conformance and regression tests and the
1089
supplemental performance tests work.
1091
Index: libstdc++-v3/doc/html/manual/profile_mode.html
1092
===================================================================
1093
--- a/src/libstdc++-v3/doc/html/manual/profile_mode.html (.../tags/gcc_4_8_2_release)
1094
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode.html (.../branches/gcc-4_8-branch)
1096
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1097
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 19. Profile Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="parallel_mode_test.html" title="Testing" /><link rel="next" href="profile_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 19. Profile Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_test.html">Prev</a> </td><th width="60%" align="center">Part III.
1098
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 19. Profile Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="parallel_mode_test.html" title="Testing" /><link rel="next" href="profile_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 19. Profile Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_test.html">Prev</a> </td><th width="60%" align="center">Part III.
1101
-</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_design.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode"></a>Chapter 19. Profile Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_api.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="profile_mode_cost_model.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_devel.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.intro"></a>Intro</h2></div></div></div><p>
1102
+</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_design.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode"></a>Chapter 19. Profile Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_api.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="profile_mode_cost_model.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_devel.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.intro"></a>Intro</h2></div></div></div><p>
1103
<span class="emphasis"><em>Goal: </em></span>Give performance improvement advice based on
1104
recognition of suboptimal usage patterns of the standard library.
1108
(Environment variable not supported.)
1109
</p></li></ul></div><p>
1110
- </p></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="profile_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idp17395456"></a><p><span class="citetitle"><em class="citetitle">
1111
+ </p></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="profile_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idm269998135936"></a><p><span class="citetitle"><em class="citetitle">
1112
Perflint: A Context Sensitive Performance Advisor for C++ Programs
1113
</em>. </span><span class="author"><span class="firstname">Lixia</span> <span class="surname">Liu</span>. </span><span class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span>. </span><span class="copyright">Copyright © 2009 . </span><span class="publisher"><span class="publishername">
1114
Proceedings of the 2009 International Symposium on Code Generation
1115
Index: libstdc++-v3/doc/html/manual/stringstreams.html
1116
===================================================================
1117
--- a/src/libstdc++-v3/doc/html/manual/stringstreams.html (.../tags/gcc_4_8_2_release)
1118
+++ b/src/libstdc++-v3/doc/html/manual/stringstreams.html (.../branches/gcc-4_8-branch)
1120
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1121
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13. Input and Output" /><link rel="prev" href="streambufs.html" title="Stream Buffers" /><link rel="next" href="fstreams.html" title="File Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><th width="60%" align="center">Chapter 13.
1122
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13. Input and Output" /><link rel="prev" href="streambufs.html" title="Stream Buffers" /><link rel="next" href="fstreams.html" title="File Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><th width="60%" align="center">Chapter 13.
1125
</th><td width="20%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.memstreams"></a>Memory Based Streams</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.memstreams.compat"></a>Compatibility With strstream</h3></div></div></div><p>
1126
Index: libstdc++-v3/doc/html/manual/traits.html
1127
===================================================================
1128
--- a/src/libstdc++-v3/doc/html/manual/traits.html (.../tags/gcc_4_8_2_release)
1129
+++ b/src/libstdc++-v3/doc/html/manual/traits.html (.../branches/gcc-4_8-branch)
1131
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1132
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Traits</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6. Utilities" /><link rel="prev" href="memory.html" title="Memory" /><link rel="next" href="strings.html" title="Chapter 7. Strings" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Traits</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="memory.html">Prev</a> </td><th width="60%" align="center">Chapter 6.
1133
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Traits</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6. Utilities" /><link rel="prev" href="memory.html" title="Memory" /><link rel="next" href="strings.html" title="Chapter 7. Strings" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Traits</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="memory.html">Prev</a> </td><th width="60%" align="center">Chapter 6.
1136
</th><td width="20%" align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.traits"></a>Traits</h2></div></div></div><p>
1137
Index: libstdc++-v3/doc/html/manual/policy_data_structures_ack.html
1138
===================================================================
1139
--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html (.../tags/gcc_4_8_2_release)
1140
+++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html (.../branches/gcc-4_8-branch)
1142
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1143
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Acknowledgments</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_based_data_structures_test.html" title="Testing" /><link rel="next" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Acknowledgments</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_based_data_structures_test.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.ack"></a>Acknowledgments</h2></div></div></div><p>
1144
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Acknowledgments</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_based_data_structures_test.html" title="Testing" /><link rel="next" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Acknowledgments</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_based_data_structures_test.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.ack"></a>Acknowledgments</h2></div></div></div><p>
1145
Written by Ami Tavory and Vladimir Dreizin (IBM Haifa Research
1146
Laboratories), and Benjamin Kosnik (Red Hat).
1148
- This library was partially written at
1149
- <a class="link" href="http://www.haifa.il.ibm.com/" target="_top">IBM's Haifa Research Labs</a>.
1150
+ This library was partially written at IBM's Haifa Research Labs.
1151
It is based heavily on policy-based design and uses many useful
1152
techniques from Modern C++ Design: Generic Programming and Design
1153
Patterns Applied by Andrei Alexandrescu.
1154
Index: libstdc++-v3/doc/html/manual/associative.html
1155
===================================================================
1156
--- a/src/libstdc++-v3/doc/html/manual/associative.html (.../tags/gcc_4_8_2_release)
1157
+++ b/src/libstdc++-v3/doc/html/manual/associative.html (.../branches/gcc-4_8-branch)
1159
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1160
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9. Containers" /><link rel="prev" href="containers.html" title="Chapter 9. Containers" /><link rel="next" href="unordered_associative.html" title="Unordered Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers.html">Prev</a> </td><th width="60%" align="center">Chapter 9.
1161
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9. Containers" /><link rel="prev" href="containers.html" title="Chapter 9. Containers" /><link rel="next" href="unordered_associative.html" title="Unordered Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers.html">Prev</a> </td><th width="60%" align="center">Chapter 9.
1164
</th><td width="20%" align="right"> <a accesskey="n" href="unordered_associative.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.associative"></a>Associative</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.insert_hints"></a>Insertion Hints</h3></div></div></div><p>
1165
Index: libstdc++-v3/doc/html/manual/ext_concurrency.html
1166
===================================================================
1167
--- a/src/libstdc++-v3/doc/html/manual/ext_concurrency.html (.../tags/gcc_4_8_2_release)
1168
+++ b/src/libstdc++-v3/doc/html/manual/ext_concurrency.html (.../branches/gcc-4_8-branch)
1170
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1171
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 30. Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_demangling.html" title="Chapter 29. Demangling" /><link rel="next" href="ext_concurrency_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 30. Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><th width="60%" align="center">Part III.
1172
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 30. Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_demangling.html" title="Chapter 29. Demangling" /><link rel="next" href="ext_concurrency_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 30. Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><th width="60%" align="center">Part III.
1175
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency"></a>Chapter 30. Concurrency</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_use.html">Use</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.design"></a>Design</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"></a>Interface to Locks and Mutexes</h3></div></div></div><p>The file <code class="filename"><ext/concurrence.h></code>
1176
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency"></a>Chapter 30. Concurrency</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_use.html">Use</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.design"></a>Design</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"></a>Interface to Locks and Mutexes</h3></div></div></div><p>The file <code class="filename"><ext/concurrence.h></code>
1177
contains all the higher-level
1178
constructs for playing with threads. In contrast to the atomics layer,
1179
the concurrence layer consists largely of types. All types are defined within <code class="code">namespace __gnu_cxx</code>.
1180
Index: libstdc++-v3/doc/html/manual/support.html
1181
===================================================================
1182
--- a/src/libstdc++-v3/doc/html/manual/support.html (.../tags/gcc_4_8_2_release)
1183
+++ b/src/libstdc++-v3/doc/html/manual/support.html (.../branches/gcc-4_8-branch)
1185
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1186
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 4. Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="std_contents.html" title="Part II. Standard Contents" /><link rel="next" href="dynamic_memory.html" title="Dynamic Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4.
1187
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 4. Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="std_contents.html" title="Part II. Standard Contents" /><link rel="next" href="dynamic_memory.html" title="Dynamic Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4.
1190
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="std_contents.html">Prev</a> </td><th width="60%" align="center">Part II.
1193
</th><td width="20%" align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.support"></a>Chapter 4.
1195
- <a id="idp13745936" class="indexterm"></a>
1196
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></div><p>
1197
+ <a id="idm270001786944" class="indexterm"></a>
1198
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></div><p>
1199
This part deals with the functions called and objects created
1200
automatically during the course of a program's existence.
1202
Index: libstdc++-v3/doc/html/manual/bitmap_allocator.html
1203
===================================================================
1204
--- a/src/libstdc++-v3/doc/html/manual/bitmap_allocator.html (.../tags/gcc_4_8_2_release)
1205
+++ b/src/libstdc++-v3/doc/html/manual/bitmap_allocator.html (.../branches/gcc-4_8-branch)
1207
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1208
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 21. The bitmap_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /><link rel="next" href="bitmap_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 21. The bitmap_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_multi.html">Prev</a> </td><th width="60%" align="center">Part III.
1209
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 21. The bitmap_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /><link rel="next" href="bitmap_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 21. The bitmap_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_multi.html">Prev</a> </td><th width="60%" align="center">Part III.
1212
-</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.bitmap"></a>Chapter 21. The bitmap_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></div><p>
1213
+</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.bitmap"></a>Chapter 21. The bitmap_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></div><p>
1214
</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.design"></a>Design</h2></div></div></div><p>
1215
As this name suggests, this allocator uses a bit-map to keep track
1216
of the used and unused memory locations for its book-keeping
1217
Index: libstdc++-v3/doc/html/manual/license.html
1218
===================================================================
1219
--- a/src/libstdc++-v3/doc/html/manual/license.html (.../tags/gcc_4_8_2_release)
1220
+++ b/src/libstdc++-v3/doc/html/manual/license.html (.../branches/gcc-4_8-branch)
1222
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1223
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="status.html" title="Chapter 1. Status" /><link rel="prev" href="status.html" title="Chapter 1. Status" /><link rel="next" href="bugs.html" title="Bugs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="status.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td width="20%" align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.license"></a>License</h2></div></div></div><p>
1224
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="status.html" title="Chapter 1. Status" /><link rel="prev" href="status.html" title="Chapter 1. Status" /><link rel="next" href="bugs.html" title="Bugs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="status.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td width="20%" align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.license"></a>License</h2></div></div></div><p>
1225
There are two licenses affecting GNU libstdc++: one for the code,
1226
and one for the documentation.
1228
Index: libstdc++-v3/doc/html/manual/numerics.html
1229
===================================================================
1230
--- a/src/libstdc++-v3/doc/html/manual/numerics.html (.../tags/gcc_4_8_2_release)
1231
+++ b/src/libstdc++-v3/doc/html/manual/numerics.html (.../branches/gcc-4_8-branch)
1233
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1234
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 12. Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="algorithms.html" title="Chapter 11. Algorithms" /><link rel="next" href="generalized_numeric_operations.html" title="Generalized Operations" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 12.
1235
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 12. Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="algorithms.html" title="Chapter 11. Algorithms" /><link rel="next" href="generalized_numeric_operations.html" title="Generalized Operations" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 12.
1238
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><th width="60%" align="center">Part II.
1241
</th><td width="20%" align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.numerics"></a>Chapter 12.
1243
- <a id="idp16214640" class="indexterm"></a>
1244
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="section"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="section"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="section"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.complex"></a>Complex</h2></div></div></div><p>
1245
+ <a id="idm269999316576" class="indexterm"></a>
1246
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="section"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="section"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="section"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.complex"></a>Complex</h2></div></div></div><p>
1247
</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.complex.processing"></a>complex Processing</h3></div></div></div><p>
1248
</p><p>Using <code class="code">complex<></code> becomes even more comple- er, sorry,
1249
<span class="emphasis"><em>complicated</em></span>, with the not-quite-gratuitously-incompatible
1250
Index: libstdc++-v3/doc/html/manual/using_exceptions.html
1251
===================================================================
1252
--- a/src/libstdc++-v3/doc/html/manual/using_exceptions.html (.../tags/gcc_4_8_2_release)
1253
+++ b/src/libstdc++-v3/doc/html/manual/using_exceptions.html (.../branches/gcc-4_8-branch)
1255
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1256
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Exceptions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, exception, error, exception neutrality, exception safety, exception propagation, -fno-exceptions" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_concurrency.html" title="Concurrency" /><link rel="next" href="debug.html" title="Debugging Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Exceptions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.exceptions"></a>Exceptions</h2></div></div></div><p>
1257
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Exceptions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, exception, error, exception neutrality, exception safety, exception propagation, -fno-exceptions" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_concurrency.html" title="Concurrency" /><link rel="next" href="debug.html" title="Debugging Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Exceptions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.exceptions"></a>Exceptions</h2></div></div></div><p>
1258
The C++ language provides language support for stack unwinding
1259
with <code class="literal">try</code> and <code class="literal">catch</code> blocks and
1260
the <code class="literal">throw</code> keyword.
1264
{ this->_M_setstate(ios_base::badbit); }
1265
-</pre></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idp13644000"></a><p><span class="title"><em>
1266
+</pre></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idm270001889024"></a><p><span class="title"><em>
1267
<a class="link" href="http://www.opengroup.org/austin/" target="_top">
1268
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
1270
@@ -274,39 +274,39 @@
1271
. </span><span class="copyright">Copyright © 2008
1272
The Open Group/The Institute of Electrical and Electronics
1274
- . </span></p></div><div class="biblioentry"><a id="idp13647696"></a><p><span class="title"><em>
1275
+ . </span></p></div><div class="biblioentry"><a id="idm270001885328"></a><p><span class="title"><em>
1276
<a class="link" href="http://www.boost.org/community/error_handling.html" target="_top">
1277
Error and Exception Handling
1279
</em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams </span>. </span><span class="publisher"><span class="publishername">
1281
- . </span></span></p></div><div class="biblioentry"><a id="idp13651392"></a><p><span class="title"><em>
1282
+ . </span></span></p></div><div class="biblioentry"><a id="idm270001881632"></a><p><span class="title"><em>
1283
<a class="link" href="http://www.boost.org/community/exception_safety.html" target="_top">
1284
Exception-Safety in Generic Components
1286
</em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams</span>. </span><span class="publisher"><span class="publishername">
1288
- . </span></span></p></div><div class="biblioentry"><a id="idp13655104"></a><p><span class="title"><em>
1289
+ . </span></span></p></div><div class="biblioentry"><a id="idm270001877920"></a><p><span class="title"><em>
1290
<a class="link" href="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf" target="_top">
1291
Standard Library Exception Policy
1293
</em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
1295
- . </span></span></p></div><div class="biblioentry"><a id="idp13658816"></a><p><span class="title"><em>
1296
+ . </span></span></p></div><div class="biblioentry"><a id="idm270001874208"></a><p><span class="title"><em>
1297
<a class="link" href="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html" target="_top">
1298
ia64 c++ abi exception handling
1300
</em>. </span><span class="author"><span class="firstname">Richard</span> <span class="surname">Henderson</span>. </span><span class="publisher"><span class="publishername">
1302
- . </span></span></p></div><div class="biblioentry"><a id="idp13662512"></a><p><span class="title"><em>
1303
+ . </span></span></p></div><div class="biblioentry"><a id="idm270001870512"></a><p><span class="title"><em>
1304
<a class="link" href="http://www.research.att.com/~bs/3rd_safe.pdf" target="_top">
1305
Appendix E: Standard-Library Exception Safety
1307
- </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry"><a id="idp13665328"></a><p><span class="citetitle"><em class="citetitle">
1308
+ </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry"><a id="idm270001867696"></a><p><span class="citetitle"><em class="citetitle">
1310
</em>. </span><span class="pagenums">
1311
Exception-Safety Issues and Techniques
1312
- . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry"><a id="idp13667712"></a><p><span class="title"><em>
1313
+ . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry"><a id="idm270001865312"></a><p><span class="title"><em>
1314
<a class="link" href="http://gcc.gnu.org/PR25191" target="_top">
1315
GCC Bug 25191: exception_defines.h #defines try/catch
1317
Index: libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
1318
===================================================================
1319
--- a/src/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html (.../tags/gcc_4_8_2_release)
1320
+++ b/src/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html (.../branches/gcc-4_8-branch)
1322
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1323
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_design.html" title="Design" /><link rel="next" href="policy_data_structures_ack.html" title="Acknowledgments" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_design.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_ack.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.test"></a>Testing</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.test.regression"></a>Regression</h3></div></div></div><p>The library contains a single comprehensive regression test.
1324
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_design.html" title="Design" /><link rel="next" href="policy_data_structures_ack.html" title="Acknowledgments" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_design.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_ack.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.test"></a>Testing</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.test.regression"></a>Regression</h3></div></div></div><p>The library contains a single comprehensive regression test.
1325
For a given container type in this library, the test creates
1326
an object of the container type and an object of the
1327
corresponding standard type (e.g., <code class="classname">std::set</code>). It
1328
Index: libstdc++-v3/doc/html/manual/parallel_mode_design.html
1329
===================================================================
1330
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode_design.html (.../tags/gcc_4_8_2_release)
1331
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode_design.html (.../branches/gcc-4_8-branch)
1333
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1334
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_using.html" title="Using" /><link rel="next" href="parallel_mode_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_using.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.design"></a>Design</h2></div></div></div><p>
1335
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_using.html" title="Using" /><link rel="next" href="parallel_mode_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_using.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.design"></a>Design</h2></div></div></div><p>
1336
</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.intro"></a>Interface Basics</h3></div></div></div><p>
1337
All parallel algorithms are intended to have signatures that are
1338
equivalent to the ISO C++ algorithms replaced. For instance, the
1339
Index: libstdc++-v3/doc/html/manual/abi.html
1340
===================================================================
1341
--- a/src/libstdc++-v3/doc/html/manual/abi.html (.../tags/gcc_4_8_2_release)
1342
+++ b/src/libstdc++-v3/doc/html/manual/abi.html (.../branches/gcc-4_8-branch)
1344
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1345
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ABI Policy and Guidelines</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, ABI, version, dynamic, shared, compatibility" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="test.html" title="Test" /><link rel="next" href="api.html" title="API Evolution and Deprecation History" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ABI Policy and Guidelines</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><th width="60%" align="center">Appendix B.
1346
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ABI Policy and Guidelines</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, ABI, version, dynamic, shared, compatibility" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="test.html" title="Test" /><link rel="next" href="api.html" title="API Evolution and Deprecation History" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ABI Policy and Guidelines</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><th width="60%" align="center">Appendix B.
1347
Porting and Maintenance
1349
</th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.abi"></a>ABI Policy and Guidelines</h2></div></div></div><p>
1350
@@ -493,39 +493,39 @@
1351
<a class="link" href="http://www.codesourcery.com/cxx-abi/" target="_top">
1354
- </em>. </span></p></div><div class="biblioentry"><a id="idp22945936"></a><p><span class="title"><em>
1355
+ </em>. </span></p></div><div class="biblioentry"><a id="idm269992586624"></a><p><span class="title"><em>
1356
<a class="link" href="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm" target="_top">
1357
Intel Compilers for Linux Compatibility with the GNU Compilers
1359
- </em>. </span></p></div><div class="biblioentry"><a id="idp22947792"></a><p><span class="title"><em>
1360
+ </em>. </span></p></div><div class="biblioentry"><a id="idm269992584768"></a><p><span class="title"><em>
1361
<a class="link" href="http://download.oracle.com/docs/cd/E19963-01/html/819-0690/index.html" target="_top">
1362
Linker and Libraries Guide (document 819-0690)
1364
- </em>. </span></p></div><div class="biblioentry"><a id="idp22949632"></a><p><span class="title"><em>
1365
+ </em>. </span></p></div><div class="biblioentry"><a id="idm269992582928"></a><p><span class="title"><em>
1366
<a class="link" href="http://download.oracle.com/docs/cd/E19422-01/819-3689/index.html" target="_top">
1367
Sun Studio 11: C++ Migration Guide (document 819-3689)
1369
- </em>. </span></p></div><div class="biblioentry"><a id="idp22951488"></a><p><span class="title"><em>
1370
+ </em>. </span></p></div><div class="biblioentry"><a id="idm269992581072"></a><p><span class="title"><em>
1371
<a class="link" href="http://www.akkadia.org/drepper/dsohowto.pdf" target="_top">
1372
How to Write Shared Libraries
1374
- </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry"><a id="idp22954928"></a><p><span class="title"><em>
1375
+ </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry"><a id="idm269992577632"></a><p><span class="title"><em>
1376
<a class="link" href="http://www.arm.com/miscPDFs/8033.pdf" target="_top">
1377
C++ ABI for the ARM Architecture
1379
- </em>. </span></p></div><div class="biblioentry"><a id="idp22956736"></a><p><span class="title"><em>
1380
+ </em>. </span></p></div><div class="biblioentry"><a id="idm269992575824"></a><p><span class="title"><em>
1381
<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html" target="_top">
1382
Dynamic Shared Objects: Survey and Issues
1384
</em>. </span><span class="subtitle">
1386
- . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idp22960032"></a><p><span class="title"><em>
1387
+ . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idm269992572528"></a><p><span class="title"><em>
1388
<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html" target="_top">
1389
Versioning With Namespaces
1391
</em>. </span><span class="subtitle">
1393
- . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idp22963312"></a><p><span class="title"><em>
1394
+ . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idm269992569248"></a><p><span class="title"><em>
1395
<a class="link" href="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf" target="_top">
1396
Binary Compatibility of Shared Libraries Implemented in C++
1397
on GNU/Linux Systems
1398
Index: libstdc++-v3/doc/html/manual/intro.html
1399
===================================================================
1400
--- a/src/libstdc++-v3/doc/html/manual/intro.html (.../tags/gcc_4_8_2_release)
1401
+++ b/src/libstdc++-v3/doc/html/manual/intro.html (.../branches/gcc-4_8-branch)
1403
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1404
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part I. Introduction</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="index.html" title="The GNU C++ Library Manual" /><link rel="next" href="status.html" title="Chapter 1. Status" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part I.
1405
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part I. Introduction</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="index.html" title="The GNU C++ Library Manual" /><link rel="next" href="status.html" title="Chapter 1. Status" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part I.
1408
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="manual.intro"></a>Part I.
1410
- <a id="idp9040416" class="indexterm"></a>
1411
-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library Manual </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. Status</td></tr></table></div></body></html>
1412
\ No newline at end of file
1413
+ <a id="idm270013458800" class="indexterm"></a>
1414
+</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library Manual </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. Status</td></tr></table></div></body></html>
1415
\ No newline at end of file
1416
Index: libstdc++-v3/doc/html/manual/profile_mode_api.html
1417
===================================================================
1418
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_api.html (.../tags/gcc_4_8_2_release)
1419
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_api.html (.../branches/gcc-4_8-branch)
1421
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1422
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Extensions for Custom Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_design.html" title="Design" /><link rel="next" href="profile_mode_cost_model.html" title="Empirical Cost Model" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Extensions for Custom Containers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_design.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_cost_model.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.api"></a>Extensions for Custom Containers</h2></div></div></div><p>
1423
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Extensions for Custom Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_design.html" title="Design" /><link rel="next" href="profile_mode_cost_model.html" title="Empirical Cost Model" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Extensions for Custom Containers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_design.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_cost_model.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.api"></a>Extensions for Custom Containers</h2></div></div></div><p>
1424
Many large projects use their own data structures instead of the ones in the
1425
standard library. If these data structures are similar in functionality
1426
to the standard library, they can be instrumented with the same hooks
1427
Index: libstdc++-v3/doc/html/manual/atomics.html
1428
===================================================================
1429
--- a/src/libstdc++-v3/doc/html/manual/atomics.html (.../tags/gcc_4_8_2_release)
1430
+++ b/src/libstdc++-v3/doc/html/manual/atomics.html (.../branches/gcc-4_8-branch)
1432
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1433
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 14. Atomics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library, atomic" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="concurrency.html" title="Chapter 15. Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14.
1434
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 14. Atomics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library, atomic" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="concurrency.html" title="Chapter 15. Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14.
1437
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><th width="60%" align="center">Part II.
1440
</th><td width="20%" align="right"> <a accesskey="n" href="concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.atomics"></a>Chapter 14.
1442
- <a id="idp16390640" class="indexterm"></a>
1443
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></div><p>
1444
+ <a id="idm269999140704" class="indexterm"></a>
1445
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></div><p>
1446
Facilities for atomic operations.
1447
</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.atomics.api"></a>API Reference</h2></div></div></div><p>
1448
All items are declared in the standard header
1449
Index: libstdc++-v3/doc/html/manual/internals.html
1450
===================================================================
1451
--- a/src/libstdc++-v3/doc/html/manual/internals.html (.../tags/gcc_4_8_2_release)
1452
+++ b/src/libstdc++-v3/doc/html/manual/internals.html (.../branches/gcc-4_8-branch)
1454
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1455
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Porting to New Hardware or Operating Systems</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, internals" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="documentation_hacking.html" title="Writing and Generating Documentation" /><link rel="next" href="test.html" title="Test" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Porting to New Hardware or Operating Systems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="documentation_hacking.html">Prev</a> </td><th width="60%" align="center">Appendix B.
1456
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Porting to New Hardware or Operating Systems</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, internals" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="documentation_hacking.html" title="Writing and Generating Documentation" /><link rel="next" href="test.html" title="Test" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Porting to New Hardware or Operating Systems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="documentation_hacking.html">Prev</a> </td><th width="60%" align="center">Appendix B.
1457
Porting and Maintenance
1459
</th><td width="20%" align="right"> <a accesskey="n" href="test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.internals"></a>Porting to New Hardware or Operating Systems</h2></div></div></div><p>
1460
Index: libstdc++-v3/doc/html/manual/policy_data_structures_using.html
1461
===================================================================
1462
--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures_using.html (.../tags/gcc_4_8_2_release)
1463
+++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures_using.html (.../branches/gcc-4_8-branch)
1465
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1466
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="next" href="policy_data_structures_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.using"></a>Using</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.prereq"></a>Prerequisites</h3></div></div></div><p>The library contains only header files, and does not require any
1467
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="next" href="policy_data_structures_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.using"></a>Using</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.prereq"></a>Prerequisites</h3></div></div></div><p>The library contains only header files, and does not require any
1468
other libraries except the standard C++ library . All classes are
1469
defined in namespace <code class="code">__gnu_pbds</code>. The library internally
1470
uses macros beginning with <code class="code">PB_DS</code>, but
1472
In addition, there are the following diagnostics classes,
1473
used to report errors specific to this library's data
1475
- </p><div class="figure"><a id="idp17806128"></a><p class="title"><strong>Figure 22.7. Exception Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_exception_hierarchy.png" align="middle" alt="Exception Hierarchy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.tutorial"></a>Tutorial</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.basic"></a>Basic Use</h4></div></div></div><p>
1476
+ </p><div class="figure"><a id="idm269997724688"></a><p class="title"><strong>Figure 22.7. Exception Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_exception_hierarchy.png" align="middle" alt="Exception Hierarchy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.tutorial"></a>Tutorial</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.basic"></a>Basic Use</h4></div></div></div><p>
1477
For the most part, the policy-based containers containers in
1478
namespace <code class="literal">__gnu_pbds</code> have the same interface as
1479
the equivalent containers in the standard C++ library, except for
1480
Index: libstdc++-v3/doc/html/manual/bugs.html
1481
===================================================================
1482
--- a/src/libstdc++-v3/doc/html/manual/bugs.html (.../tags/gcc_4_8_2_release)
1483
+++ b/src/libstdc++-v3/doc/html/manual/bugs.html (.../branches/gcc-4_8-branch)
1485
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1486
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Bugs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="status.html" title="Chapter 1. Status" /><link rel="prev" href="license.html" title="License" /><link rel="next" href="setup.html" title="Chapter 2. Setup" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Bugs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="license.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td width="20%" align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.bugs"></a>Bugs</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.impl"></a>Implementation Bugs</h3></div></div></div><p>
1487
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Bugs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="status.html" title="Chapter 1. Status" /><link rel="prev" href="license.html" title="License" /><link rel="next" href="setup.html" title="Chapter 2. Setup" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Bugs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="license.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td width="20%" align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.bugs"></a>Bugs</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.impl"></a>Implementation Bugs</h3></div></div></div><p>
1488
Information on known bugs, details on efforts to fix them, and
1489
fixed bugs are all available as part of the <a class="link" href="http://gcc.gnu.org/bugs/" target="_top">GCC bug tracking system</a>,
1490
with the category set to <code class="literal">libstdc++</code>.
1491
Index: libstdc++-v3/doc/html/manual/parallel_mode_using.html
1492
===================================================================
1493
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode_using.html (.../tags/gcc_4_8_2_release)
1494
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode_using.html (.../branches/gcc-4_8-branch)
1496
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1497
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_semantics.html" title="Semantics" /><link rel="next" href="parallel_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_semantics.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.using"></a>Using</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.prereq_flags"></a>Prerequisite Compiler Flags</h3></div></div></div><p>
1498
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_semantics.html" title="Semantics" /><link rel="next" href="parallel_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_semantics.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.using"></a>Using</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.prereq_flags"></a>Prerequisite Compiler Flags</h3></div></div></div><p>
1499
Any use of parallel functionality requires additional compiler
1500
and runtime support, in particular support for OpenMP. Adding this support is
1501
not difficult: just compile your application with the compiler
1503
flags for atomic operations.)
1504
</p><p> The following table provides the names and headers of all the
1505
parallel algorithms that can be used in a similar manner:
1506
-</p><div class="table"><a id="idp16725920"></a><p class="title"><strong>Table 18.1. Parallel Algorithms</strong></p><div class="table-contents"><table summary="Parallel Algorithms" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Algorithm</th><th align="left">Header</th><th align="left">Parallel algorithm</th><th align="left">Parallel header</th></tr></thead><tbody><tr><td align="left"><code class="function">std::accumulate</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::accumulate</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_difference</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_difference</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::inner_product</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::inner_product</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::partial_sum</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::partial_sum</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::equal</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::equal</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_first_of</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_first_of</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::for_each</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::for_each</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::lexicographical_compare</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::lexicographical_compare</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::mismatch</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::mismatch</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::transform</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::transform</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::max_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::max_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::merge</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::merge</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::min_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::min_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::nth_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::nth_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partial_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partial_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partition</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partition</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::random_shuffle</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::random_shuffle</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_union</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_union</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_intersection</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_intersection</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_symmetric_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_symmetric_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::stable_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::stable_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::unique_copy</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::unique_copy</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode_semantics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="parallel_mode_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
1507
\ No newline at end of file
1508
+</p><div class="table"><a id="idm269998805216"></a><p class="title"><strong>Table 18.1. Parallel Algorithms</strong></p><div class="table-contents"><table summary="Parallel Algorithms" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Algorithm</th><th align="left">Header</th><th align="left">Parallel algorithm</th><th align="left">Parallel header</th></tr></thead><tbody><tr><td align="left"><code class="function">std::accumulate</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::accumulate</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_difference</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_difference</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::inner_product</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::inner_product</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::partial_sum</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::partial_sum</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::equal</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::equal</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_first_of</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_first_of</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::for_each</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::for_each</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::lexicographical_compare</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::lexicographical_compare</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::mismatch</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::mismatch</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::transform</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::transform</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::max_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::max_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::merge</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::merge</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::min_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::min_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::nth_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::nth_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partial_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partial_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partition</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partition</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::random_shuffle</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::random_shuffle</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_union</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_union</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_intersection</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_intersection</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_symmetric_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_symmetric_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::stable_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::stable_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::unique_copy</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::unique_copy</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode_semantics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="parallel_mode_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
1509
\ No newline at end of file
1510
Index: libstdc++-v3/doc/html/manual/ext_numerics.html
1511
===================================================================
1512
--- a/src/libstdc++-v3/doc/html/manual/ext_numerics.html (.../tags/gcc_4_8_2_release)
1513
+++ b/src/libstdc++-v3/doc/html/manual/ext_numerics.html (.../branches/gcc-4_8-branch)
1515
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1516
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 26. Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_algorithms.html" title="Chapter 25. Algorithms" /><link rel="next" href="ext_iterators.html" title="Chapter 27. Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 26. Numerics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><th width="60%" align="center">Part III.
1517
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 26. Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_algorithms.html" title="Chapter 25. Algorithms" /><link rel="next" href="ext_iterators.html" title="Chapter 27. Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 26. Numerics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><th width="60%" align="center">Part III.
1520
</th><td width="20%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.numerics"></a>Chapter 26. Numerics</h2></div></div></div><p>26.4, the generalized numeric operations such as <code class="code">accumulate</code>,
1521
Index: libstdc++-v3/doc/html/manual/parallel_mode_semantics.html
1522
===================================================================
1523
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html (.../tags/gcc_4_8_2_release)
1524
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html (.../branches/gcc-4_8-branch)
1526
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1527
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="next" href="parallel_mode_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.semantics"></a>Semantics</h2></div></div></div><p> The parallel mode STL algorithms are currently not exception-safe,
1528
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="next" href="parallel_mode_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.semantics"></a>Semantics</h2></div></div></div><p> The parallel mode STL algorithms are currently not exception-safe,
1529
i.e. user-defined functors must not throw exceptions.
1530
Also, the order of execution is not guaranteed for some functions, of course.
1531
Therefore, user-defined functors should not have any concurrent side effects.
1532
Index: libstdc++-v3/doc/html/manual/std_contents.html
1533
===================================================================
1534
--- a/src/libstdc++-v3/doc/html/manual/std_contents.html (.../tags/gcc_4_8_2_release)
1535
+++ b/src/libstdc++-v3/doc/html/manual/std_contents.html (.../branches/gcc-4_8-branch)
1537
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1538
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part II. Standard Contents</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="debug.html" title="Debugging Support" /><link rel="next" href="support.html" title="Chapter 4. Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part II.
1539
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part II. Standard Contents</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="debug.html" title="Debugging Support" /><link rel="next" href="support.html" title="Chapter 4. Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part II.
1541
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="support.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="manual.std"></a>Part II.
1543
- </h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="chapter"><a href="support.html">4.
1544
+ </h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="support.html">4.
1547
</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="diagnostics.html">5.
1549
</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6.
1552
-</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp13920976">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13924528">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13937824">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15512272">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15534784">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15542080">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15556704">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15573056">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15576640">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7.
1553
+</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270001611968">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm270001608416">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm270001595120">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270000019344">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999996832">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269999989536">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999974912">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269999958496">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269999954912">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7.
1556
</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="localization.html">8.
1559
-</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idp15778336">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9.
1560
+</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm269999753024">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9.
1563
</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="iterators.html">10.
1564
Index: libstdc++-v3/doc/html/manual/appendix.html
1565
===================================================================
1566
--- a/src/libstdc++-v3/doc/html/manual/appendix.html (.../tags/gcc_4_8_2_release)
1567
+++ b/src/libstdc++-v3/doc/html/manual/appendix.html (.../branches/gcc-4_8-branch)
1569
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1570
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part IV. Appendices</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="ext_concurrency_use.html" title="Use" /><link rel="next" href="appendix_contributing.html" title="Appendix A. Contributing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part IV.
1571
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part IV. Appendices</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="ext_concurrency_use.html" title="Use" /><link rel="next" href="appendix_contributing.html" title="Appendix A. Contributing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part IV.
1573
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency_use.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="appendix_contributing.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="appendix"></a>Part IV.
1575
-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="appendix"><a href="appendix_contributing.html">A.
1576
+</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="appendix"><a href="appendix_contributing.html">A.
1579
</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="appendix_porting.html">B.
1580
Index: libstdc++-v3/doc/html/manual/memory.html
1581
===================================================================
1582
--- a/src/libstdc++-v3/doc/html/manual/memory.html (.../tags/gcc_4_8_2_release)
1583
+++ b/src/libstdc++-v3/doc/html/manual/memory.html (.../branches/gcc-4_8-branch)
1585
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1586
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6. Utilities" /><link rel="prev" href="pairs.html" title="Pairs" /><link rel="next" href="traits.html" title="Traits" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><th width="60%" align="center">Chapter 6.
1587
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6. Utilities" /><link rel="prev" href="pairs.html" title="Pairs" /><link rel="next" href="traits.html" title="Traits" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><th width="60%" align="center">Chapter 6.
1590
</th><td width="20%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.memory"></a>Memory</h2></div></div></div><p>
1592
or loading and unloading shared objects in memory. As such, using
1593
caching allocators on systems that do not support
1594
<code class="function">abi::__cxa_atexit</code> is not recommended.
1595
- </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp13920976"></a>Interface Design</h5></div></div></div><p>
1596
+ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270001611968"></a>Interface Design</h5></div></div></div><p>
1597
The only allocator interface that
1598
is supported is the standard C++ interface. As such, all STL
1599
containers have been adjusted, and all external allocators have
1602
The base class that <code class="classname">allocator</code> is derived from
1603
may not be user-configurable.
1604
-</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp13924528"></a>Selecting Default Allocation Policy</h5></div></div></div><p>
1605
+</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270001608416"></a>Selecting Default Allocation Policy</h5></div></div></div><p>
1606
It's difficult to pick an allocation strategy that will provide
1607
maximum utility, without excessively penalizing some behavior. In
1608
fact, it's difficult just deciding which typical actions to measure
1610
The current default choice for
1611
<code class="classname">allocator</code> is
1612
<code class="classname">__gnu_cxx::new_allocator</code>.
1613
- </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp13937824"></a>Disabling Memory Caching</h5></div></div></div><p>
1614
+ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270001595120"></a>Disabling Memory Caching</h5></div></div></div><p>
1615
In use, <code class="classname">allocator</code> may allocate and
1616
deallocate using implementation-specific strategies and
1617
heuristics. Because of this, a given call to an allocator object's
1618
@@ -309,33 +309,33 @@
1619
of the used and unused memory locations. It has its own
1620
<a class="link" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator">chapter</a>
1621
in the documentation.
1622
- </p></li></ol></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp13992848"></a><p><span class="citetitle"><em class="citetitle">
1623
+ </p></li></ol></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm270000084224"></a><p><span class="citetitle"><em class="citetitle">
1624
ISO/IEC 14882:1998 Programming languages - C++
1627
- <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="idp13994688"></a><p><span class="title"><em>
1628
- <a class="link" href="http://www.drdobbs.com/cpp/184403759" target="_top">
1629
+ <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="idm270000082384"></a><p><span class="title"><em>
1630
+ <a class="link" href="http://www.drdobbs.com/the-standard-librarian-what-are-allocato/184403759" target="_top">
1631
The Standard Librarian: What Are Allocators Good For?
1633
</em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
1635
- . </span></span></p></div><div class="biblioentry"><a id="idp13998416"></a><p><span class="title"><em>
1636
+ . </span></span></p></div><div class="biblioentry"><a id="idm270000078608"></a><p><span class="title"><em>
1637
<a class="link" href="http://www.hoard.org/" target="_top">
1638
The Hoard Memory Allocator
1640
- </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry"><a id="idp14001184"></a><p><span class="title"><em>
1641
+ </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry"><a id="idm270000075840"></a><p><span class="title"><em>
1642
<a class="link" href="http://people.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf" target="_top">
1643
Reconsidering Custom Memory Allocation
1645
- </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="author"><span class="firstname">Ben</span> <span class="surname">Zorn</span>. </span><span class="author"><span class="firstname">Kathryn</span> <span class="surname">McKinley</span>. </span><span class="copyright">Copyright © 2002 OOPSLA. </span></p></div><div class="biblioentry"><a id="idp14007344"></a><p><span class="title"><em>
1646
+ </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="author"><span class="firstname">Ben</span> <span class="surname">Zorn</span>. </span><span class="author"><span class="firstname">Kathryn</span> <span class="surname">McKinley</span>. </span><span class="copyright">Copyright © 2002 OOPSLA. </span></p></div><div class="biblioentry"><a id="idm270000069680"></a><p><span class="title"><em>
1647
<a class="link" href="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html" target="_top">
1650
</em>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="publisher"><span class="publishername">
1652
- . </span></span></p></div><div class="biblioentry"><a id="idp14012080"></a><p><span class="citetitle"><em class="citetitle">The C++ Programming Language</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 . </span><span class="pagenums">19.4 Allocators. </span><span class="publisher"><span class="publishername">
1653
+ . </span></span></p></div><div class="biblioentry"><a id="idm270000064944"></a><p><span class="citetitle"><em class="citetitle">The C++ Programming Language</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 . </span><span class="pagenums">19.4 Allocators. </span><span class="publisher"><span class="publishername">
1655
- . </span></span></p></div><div class="biblioentry"><a id="idp14016512"></a><p><span class="citetitle"><em class="citetitle">Yalloc: A Recycling C++ Allocator</em>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Yen</span>. </span></p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.auto_ptr"></a>auto_ptr</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.limitations"></a>Limitations</h4></div></div></div><p>Explaining all of the fun and delicious things that can
1656
+ . </span></span></p></div><div class="biblioentry"><a id="idm270000060512"></a><p><span class="citetitle"><em class="citetitle">Yalloc: A Recycling C++ Allocator</em>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Yen</span>. </span></p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.auto_ptr"></a>auto_ptr</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.limitations"></a>Limitations</h4></div></div></div><p>Explaining all of the fun and delicious things that can
1657
happen with misuse of the <code class="classname">auto_ptr</code> class
1658
template (called <acronym class="acronym">AP</acronym> here) would take some
1659
time. Suffice it to say that the use of <acronym class="acronym">AP</acronym>
1661
Derived classes override those functions to destroy resources in a context
1662
where the correct dynamic type is known. This is an application of the
1663
technique known as type erasure.
1664
- </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15512272"></a>Class Hierarchy</h5></div></div></div><p>
1665
+ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270000019344"></a>Class Hierarchy</h5></div></div></div><p>
1666
A <code class="classname">shared_ptr<T></code> contains a pointer of
1667
type <span class="type">T*</span> and an object of type
1668
<code class="classname">__shared_count</code>. The shared_count contains a
1670
aliasing constructor, make_shared & allocate_shared. Additionally,
1671
the constructors taking <code class="classname">auto_ptr</code> parameters are
1672
deprecated in C++11 mode.
1673
- </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15534784"></a>Thread Safety</h5></div></div></div><p>
1674
+ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999996832"></a>Thread Safety</h5></div></div></div><p>
1676
-<a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
1677
+<a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
1678
Safety</a> section of the Boost shared_ptr documentation says "shared_ptr
1679
objects offer the same level of thread safety as built-in types."
1680
The implementation must ensure that concurrent updates to separate shared_ptr
1682
shared_ptr in libstdc++ the compiler and library are fixed, which
1683
makes things much simpler: we have an atomic CAS or we don't, see Lock
1684
Policy below for details.
1685
-</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15542080"></a>Selecting Lock Policy</h5></div></div></div><p>
1686
+</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999989536"></a>Selecting Lock Policy</h5></div></div></div><p>
1688
There is a single <code class="classname">_Sp_counted_base</code> class,
1689
which is a template parameterized on the enum
1691
<code class="filename">ext/atomicity.h</code>, which detect if the program
1692
is multi-threaded. If only one thread of execution exists in
1693
the program then less expensive non-atomic operations are used.
1694
- </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15556704"></a>Related functions and classes</h5></div></div></div><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>,
1695
+ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999974912"></a>Related functions and classes</h5></div></div></div><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>,
1696
<code class="code">const_pointer_cast</code></span></dt><dd><p>
1697
As noted in N2351, these functions can be implemented non-intrusively using
1698
the alias constructor. However the aliasing constructor is only available
1699
@@ -611,13 +611,13 @@
1700
As well as the extra constructors, this implementation also needs some
1701
members of _Sp_counted_deleter to be protected where they could otherwise
1703
- </p></dd></dl></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.using"></a>Use</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15573056"></a>Examples</h5></div></div></div><p>
1704
+ </p></dd></dl></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.using"></a>Use</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999958496"></a>Examples</h5></div></div></div><p>
1705
Examples of use can be found in the testsuite, under
1706
<code class="filename">testsuite/tr1/2_general_utilities/shared_ptr</code>,
1707
<code class="filename">testsuite/20_util/shared_ptr</code>
1709
<code class="filename">testsuite/20_util/weak_ptr</code>.
1710
- </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15576640"></a>Unresolved Issues</h5></div></div></div><p>
1711
+ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999954912"></a>Unresolved Issues</h5></div></div></div><p>
1712
The <span class="emphasis"><em><code class="classname">shared_ptr</code> atomic access</em></span>
1713
clause in the C++11 standard is not implemented in GCC.
1715
@@ -658,25 +658,25 @@
1716
code to work with, Peter Dimov in particular for his help and
1717
invaluable advice on thread safety. Phillip Jordan and Paolo
1718
Carlini for the lock policy implementation.
1719
- </p></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15587936"></a><p><span class="title"><em>
1720
+ </p></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999943680"></a><p><span class="title"><em>
1721
<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm" target="_top">
1722
Improving shared_ptr for C++0x, Revision 2
1724
</em>. </span><span class="subtitle">
1726
- . </span></p></div><div class="biblioentry"><a id="idp15590224"></a><p><span class="title"><em>
1727
+ . </span></p></div><div class="biblioentry"><a id="idm269999941392"></a><p><span class="title"><em>
1728
<a class="link" href="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html" target="_top">
1729
C++ Standard Library Active Issues List
1731
</em>. </span><span class="subtitle">
1733
- . </span></p></div><div class="biblioentry"><a id="idp15592512"></a><p><span class="title"><em>
1734
+ . </span></p></div><div class="biblioentry"><a id="idm269999939104"></a><p><span class="title"><em>
1735
<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf" target="_top">
1736
Working Draft, Standard for Programming Language C++
1738
</em>. </span><span class="subtitle">
1740
- . </span></p></div><div class="biblioentry"><a id="idp15594816"></a><p><span class="title"><em>
1741
+ . </span></p></div><div class="biblioentry"><a id="idm269999936800"></a><p><span class="title"><em>
1742
<a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">
1743
Boost C++ Libraries documentation, shared_ptr
1745
Index: libstdc++-v3/doc/html/manual/api.html
1746
===================================================================
1747
--- a/src/libstdc++-v3/doc/html/manual/api.html (.../tags/gcc_4_8_2_release)
1748
+++ b/src/libstdc++-v3/doc/html/manual/api.html (.../branches/gcc-4_8-branch)
1750
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1751
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>API Evolution and Deprecation History</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, api, evolution, deprecation, history" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="abi.html" title="ABI Policy and Guidelines" /><link rel="next" href="backwards.html" title="Backwards Compatibility" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">API Evolution and Deprecation History</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><th width="60%" align="center">Appendix B.
1752
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>API Evolution and Deprecation History</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, api, evolution, deprecation, history" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="abi.html" title="ABI Policy and Guidelines" /><link rel="next" href="backwards.html" title="Backwards Compatibility" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">API Evolution and Deprecation History</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><th width="60%" align="center">Appendix B.
1753
Porting and Maintenance
1755
</th><td width="20%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.api"></a>API Evolution and Deprecation History</h2></div></div></div><p>
1757
<span class="type">__alloc</span> to select an underlying allocator that
1758
satisfied memory allocation requests. The selection of this
1759
underlying allocator was not user-configurable.
1760
- </p><div class="table"><a id="idp23030528"></a><p class="title"><strong>Table B.6. Extension Allocators</strong></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator<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
1761
+ </p><div class="table"><a id="idm269992502096"></a><p class="title"><strong>Table B.6. Extension Allocators</strong></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator<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
1762
of available allocators. All of these new allocators are
1763
standard-style. The following table includes details, along with
1764
the first released version of GCC that included the extension allocator.
1765
- </p><div class="table"><a id="idp23058160"></a><p class="title"><strong>Table B.7. Extension Allocators Continued</strong></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator<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>
1766
+ </p><div class="table"><a id="idm269992474464"></a><p class="title"><strong>Table B.7. Extension Allocators Continued</strong></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator<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>
1767
Debug mode first appears.
1769
Precompiled header support <acronym class="acronym">PCH</acronym> support.
1770
Index: libstdc++-v3/doc/html/manual/source_organization.html
1771
===================================================================
1772
--- a/src/libstdc++-v3/doc/html/manual/source_organization.html (.../tags/gcc_4_8_2_release)
1773
+++ b/src/libstdc++-v3/doc/html/manual/source_organization.html (.../branches/gcc-4_8-branch)
1775
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1776
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Directory Layout and Source Conventions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A. Contributing" /><link rel="prev" href="appendix_contributing.html" title="Appendix A. Contributing" /><link rel="next" href="source_code_style.html" title="Coding Style" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Directory Layout and Source Conventions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a> </td><th width="60%" align="center">Appendix A.
1777
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Directory Layout and Source Conventions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A. Contributing" /><link rel="prev" href="appendix_contributing.html" title="Appendix A. Contributing" /><link rel="next" href="source_code_style.html" title="Coding Style" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Directory Layout and Source Conventions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a> </td><th width="60%" align="center">Appendix A.
1780
</th><td width="20%" align="right"> <a accesskey="n" href="source_code_style.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.organization"></a>Directory Layout and Source Conventions</h2></div></div></div><p>
1781
Index: libstdc++-v3/doc/html/manual/fstreams.html
1782
===================================================================
1783
--- a/src/libstdc++-v3/doc/html/manual/fstreams.html (.../tags/gcc_4_8_2_release)
1784
+++ b/src/libstdc++-v3/doc/html/manual/fstreams.html (.../branches/gcc-4_8-branch)
1786
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1787
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>File Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13. Input and Output" /><link rel="prev" href="stringstreams.html" title="Memory Based Streams" /><link rel="next" href="io_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">File Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13.
1788
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>File Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13. Input and Output" /><link rel="prev" href="stringstreams.html" title="Memory Based Streams" /><link rel="next" href="io_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">File Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13.
1791
</th><td width="20%" align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.filestreams"></a>File Based Streams</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.filestreams.copying_a_file"></a>Copying a File</h3></div></div></div><p>
1792
Index: libstdc++-v3/doc/html/manual/ext_demangling.html
1793
===================================================================
1794
--- a/src/libstdc++-v3/doc/html/manual/ext_demangling.html (.../tags/gcc_4_8_2_release)
1795
+++ b/src/libstdc++-v3/doc/html/manual/ext_demangling.html (.../branches/gcc-4_8-branch)
1797
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1798
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 29. Demangling</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_io.html" title="Chapter 28. Input and Output" /><link rel="next" href="ext_concurrency.html" title="Chapter 30. Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 29. Demangling</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><th width="60%" align="center">Part III.
1799
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 29. Demangling</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_io.html" title="Chapter 28. Input and Output" /><link rel="next" href="ext_concurrency.html" title="Chapter 30. Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 29. Demangling</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><th width="60%" align="center">Part III.
1802
</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.demangle"></a>Chapter 29. Demangling</h2></div></div></div><p>
1803
Index: libstdc++-v3/doc/html/manual/ext_preface.html
1804
===================================================================
1805
--- a/src/libstdc++-v3/doc/html/manual/ext_preface.html (.../tags/gcc_4_8_2_release)
1806
+++ b/src/libstdc++-v3/doc/html/manual/ext_preface.html (.../branches/gcc-4_8-branch)
1808
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1809
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="extensions.html" title="Part III. Extensions" /><link rel="next" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><th width="60%" align="center">Part III.
1810
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="extensions.html" title="Part III. Extensions" /><link rel="next" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><th width="60%" align="center">Part III.
1813
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr></table><hr /></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a id="idp16425920"></a></h1></div></div></div><p>
1814
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr></table><hr /></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a id="idm269999105296"></a></h1></div></div></div><p>
1815
Here we will make an attempt at describing the non-Standard
1816
extensions to the library. Some of these are from older versions of
1817
standard library components, namely SGI's STL, and some of these are
1818
Index: libstdc++-v3/doc/html/manual/concept_checking.html
1819
===================================================================
1820
--- a/src/libstdc++-v3/doc/html/manual/concept_checking.html (.../tags/gcc_4_8_2_release)
1821
+++ b/src/libstdc++-v3/doc/html/manual/concept_checking.html (.../branches/gcc-4_8-branch)
1823
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1824
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concept Checking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="diagnostics.html" title="Chapter 5. Diagnostics" /><link rel="prev" href="diagnostics.html" title="Chapter 5. Diagnostics" /><link rel="next" href="utilities.html" title="Chapter 6. Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concept Checking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><th width="60%" align="center">Chapter 5.
1825
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concept Checking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="diagnostics.html" title="Chapter 5. Diagnostics" /><link rel="prev" href="diagnostics.html" title="Chapter 5. Diagnostics" /><link rel="next" href="utilities.html" title="Chapter 6. Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concept Checking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><th width="60%" align="center">Chapter 5.
1828
</th><td width="20%" align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.concept_checking"></a>Concept Checking</h2></div></div></div><p>
1829
Index: libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html
1830
===================================================================
1831
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html (.../tags/gcc_4_8_2_release)
1832
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html (.../branches/gcc-4_8-branch)
1834
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1835
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Multiple Thread Example</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_ex_single.html" title="Single Thread Example" /><link rel="next" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Multiple Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_single.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_multi"></a>Multiple Thread Example</h2></div></div></div><p>
1836
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Multiple Thread Example</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_ex_single.html" title="Single Thread Example" /><link rel="next" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Multiple Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_single.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_multi"></a>Multiple Thread Example</h2></div></div></div><p>
1837
In the ST example we never used the thread_id variable present in each block.
1838
Let's start by explaining the purpose of this in a MT application.
1840
Index: libstdc++-v3/doc/html/manual/ext_compile_checks.html
1841
===================================================================
1842
--- a/src/libstdc++-v3/doc/html/manual/ext_compile_checks.html (.../tags/gcc_4_8_2_release)
1843
+++ b/src/libstdc++-v3/doc/html/manual/ext_compile_checks.html (.../branches/gcc-4_8-branch)
1845
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1846
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 16. Compile Time Checks</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_preface.html" title="" /><link rel="next" href="debug_mode.html" title="Chapter 17. Debug Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. Compile Time Checks</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_preface.html">Prev</a> </td><th width="60%" align="center">Part III.
1847
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 16. Compile Time Checks</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_preface.html" title="" /><link rel="next" href="debug_mode.html" title="Chapter 17. Debug Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. Compile Time Checks</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_preface.html">Prev</a> </td><th width="60%" align="center">Part III.
1850
</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.compile_checks"></a>Chapter 16. Compile Time Checks</h2></div></div></div><p>
1851
Index: libstdc++-v3/doc/html/manual/strings.html
1852
===================================================================
1853
--- a/src/libstdc++-v3/doc/html/manual/strings.html (.../tags/gcc_4_8_2_release)
1854
+++ b/src/libstdc++-v3/doc/html/manual/strings.html (.../branches/gcc-4_8-branch)
1856
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1857
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 7. Strings</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="traits.html" title="Traits" /><link rel="next" href="localization.html" title="Chapter 8. Localization" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7.
1858
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 7. Strings</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="traits.html" title="Traits" /><link rel="next" href="localization.html" title="Chapter 8. Localization" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7.
1861
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="traits.html">Prev</a> </td><th width="60%" align="center">Part II.
1864
</th><td width="20%" align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.strings"></a>Chapter 7.
1866
- <a id="idp15603440" class="indexterm"></a>
1867
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.strings.string"></a>String Classes</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.simple"></a>Simple Transformations</h3></div></div></div><p>
1868
+ <a id="idm269999928112" class="indexterm"></a>
1869
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.strings.string"></a>String Classes</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.simple"></a>Simple Transformations</h3></div></div></div><p>
1870
Here are Standard, simple, and portable ways to perform common
1871
transformations on a <code class="code">string</code> instance, such as
1872
"convert to all upper case." The word transformations
1873
Index: libstdc++-v3/doc/html/manual/containers_and_c.html
1874
===================================================================
1875
--- a/src/libstdc++-v3/doc/html/manual/containers_and_c.html (.../tags/gcc_4_8_2_release)
1876
+++ b/src/libstdc++-v3/doc/html/manual/containers_and_c.html (.../branches/gcc-4_8-branch)
1878
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1879
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9. Containers" /><link rel="prev" href="unordered_associative.html" title="Unordered Associative" /><link rel="next" href="iterators.html" title="Chapter 10. Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unordered_associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9.
1880
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9. Containers" /><link rel="prev" href="unordered_associative.html" title="Unordered Associative" /><link rel="next" href="iterators.html" title="Chapter 10. Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unordered_associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9.
1883
</th><td width="20%" align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.c"></a>Interacting with C</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.c.vs_array"></a>Containers vs. Arrays</h3></div></div></div><p>
1884
Index: libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html
1885
===================================================================
1886
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html (.../tags/gcc_4_8_2_release)
1887
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html (.../branches/gcc-4_8-branch)
1889
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1890
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_devel.html" title="Developer Information" /><link rel="next" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Diagnostics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_devel.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.diagnostics"></a>Diagnostics</h2></div></div></div><p>
1891
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_devel.html" title="Developer Information" /><link rel="next" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Diagnostics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_devel.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.diagnostics"></a>Diagnostics</h2></div></div></div><p>
1892
The table below presents all the diagnostics we intend to implement.
1893
Each diagnostic has a corresponding compile time switch
1894
<code class="code">-D_GLIBCXX_PROFILE_<diagnostic></code>.
1896
A high accuracy means that the diagnostic is unlikely to be wrong.
1897
These grades are not perfect. They are just meant to guide users with
1898
specific needs or time budgets.
1899
- </p><div class="table"><a id="idp17088912"></a><p class="title"><strong>Table 19.2. Profile Diagnostics</strong></p><div class="table-contents"><table summary="Profile Diagnostics" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left">Group</th><th align="left">Flag</th><th align="left">Benefit</th><th align="left">Cost</th><th align="left">Freq.</th><th align="left">Implemented</th><td class="auto-generated"> </td></tr></thead><tbody><tr><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers" title="Containers">
1900
+ </p><div class="table"><a id="idm269998442544"></a><p class="title"><strong>Table 19.2. Profile Diagnostics</strong></p><div class="table-contents"><table summary="Profile Diagnostics" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left">Group</th><th align="left">Flag</th><th align="left">Benefit</th><th align="left">Cost</th><th align="left">Freq.</th><th align="left">Implemented</th><td class="auto-generated"> </td></tr></thead><tbody><tr><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers" title="Containers">
1901
CONTAINERS</a></td><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small" title="Hashtable Too Small">
1902
HASHTABLE_TOO_SMALL</a></td><td align="left">10</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large" title="Hashtable Too Large">
1903
HASHTABLE_TOO_LARGE</a></td><td align="left">5</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash" title="Inefficient Hash">
1905
Quick Sort for a particular call context.
1906
</p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
1908
- <a class="link" href="http://portal.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
1909
+ <a class="link" href="https://dl.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
1910
A framework for adaptive algorithm selection in STAPL</a> and
1911
<a class="link" href="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4228227" target="_top">
1912
Optimizing Sorting with Machine Learning Algorithms</a>.
1914
Keep a shadow for each container. Record iterator dereferences and
1915
container member accesses. Issue advice for elements referenced by
1917
- See paper: <a class="link" href="http://portal.acm.org/citation.cfm?id=207110.207148" target="_top">
1918
+ See paper: <a class="link" href="https://dl.acm.org/citation.cfm?id=207110.207148" target="_top">
1919
The LRPD test: speculative run-time parallelization of loops with
1920
privatization and reduction parallelization</a>.
1921
</p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
1922
Index: libstdc++-v3/doc/html/manual/ext_concurrency_impl.html
1923
===================================================================
1924
--- a/src/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html (.../tags/gcc_4_8_2_release)
1925
+++ b/src/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html (.../branches/gcc-4_8-branch)
1927
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1928
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="prev" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="next" href="ext_concurrency_use.html" title="Use" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency_use.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.atomic_fallbacks"></a>Using Builtin Atomic Functions</h3></div></div></div><p>The functions for atomic operations described above are either
1929
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="prev" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="next" href="ext_concurrency_use.html" title="Use" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency_use.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.atomic_fallbacks"></a>Using Builtin Atomic Functions</h3></div></div></div><p>The functions for atomic operations described above are either
1930
implemented via compiler intrinsics (if the underlying host is
1931
capable) or by library fallbacks.</p><p>Compiler intrinsics (builtins) are always preferred. However, as
1932
the compiler builtins for atomics are not universally implemented,
1933
Index: libstdc++-v3/doc/html/manual/io_and_c.html
1934
===================================================================
1935
--- a/src/libstdc++-v3/doc/html/manual/io_and_c.html (.../tags/gcc_4_8_2_release)
1936
+++ b/src/libstdc++-v3/doc/html/manual/io_and_c.html (.../branches/gcc-4_8-branch)
1938
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1939
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13. Input and Output" /><link rel="prev" href="fstreams.html" title="File Based Streams" /><link rel="next" href="atomics.html" title="Chapter 14. Atomics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13.
1940
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13. Input and Output" /><link rel="prev" href="fstreams.html" title="File Based Streams" /><link rel="next" href="atomics.html" title="Chapter 14. Atomics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13.
1943
</th><td width="20%" align="right"> <a accesskey="n" href="atomics.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.c"></a>Interacting with C</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.FILE"></a>Using FILE* and file descriptors</h3></div></div></div><p>
1944
Index: libstdc++-v3/doc/html/manual/documentation_hacking.html
1945
===================================================================
1946
--- a/src/libstdc++-v3/doc/html/manual/documentation_hacking.html (.../tags/gcc_4_8_2_release)
1947
+++ b/src/libstdc++-v3/doc/html/manual/documentation_hacking.html (.../branches/gcc-4_8-branch)
1949
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1950
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Writing and Generating Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, documentation, style, docbook, doxygen" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="next" href="internals.html" title="Porting to New Hardware or Operating Systems" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Writing and Generating Documentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><th width="60%" align="center">Appendix B.
1951
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Writing and Generating Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, documentation, style, docbook, doxygen" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="next" href="internals.html" title="Porting to New Hardware or Operating Systems" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Writing and Generating Documentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><th width="60%" align="center">Appendix B.
1952
Porting and Maintenance
1954
</th><td width="20%" align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.doc"></a>Writing and Generating Documentation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.intro"></a>Introduction</h3></div></div></div><p>
1956
supported, and are always aliased to dummy rules. These
1957
unsupported formats are: <span class="emphasis"><em>info</em></span>,
1958
<span class="emphasis"><em>ps</em></span>, and <span class="emphasis"><em>dvi</em></span>.
1959
- </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.doxygen"></a>Doxygen</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idp22162432"></a><p class="title"><strong>Table B.1. Doxygen Prerequisites</strong></p><div class="table-contents"><table summary="Doxygen Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">coreutils</td><td align="center">8.5</td><td align="center">all</td></tr><tr><td align="center">bash</td><td align="center">4.1</td><td align="center">all</td></tr><tr><td align="center">doxygen</td><td align="center">1.7.6.1</td><td align="center">all</td></tr><tr><td align="center">graphviz</td><td align="center">2.26</td><td align="center">graphical hierarchies</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr></tbody></table></div></div><br class="table-break" /><p>
1960
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.doxygen"></a>Doxygen</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idm269993370272"></a><p class="title"><strong>Table B.1. Doxygen Prerequisites</strong></p><div class="table-contents"><table summary="Doxygen Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">coreutils</td><td align="center">8.5</td><td align="center">all</td></tr><tr><td align="center">bash</td><td align="center">4.1</td><td align="center">all</td></tr><tr><td align="center">doxygen</td><td align="center">1.7.6.1</td><td align="center">all</td></tr><tr><td align="center">graphviz</td><td align="center">2.26</td><td align="center">graphical hierarchies</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr></tbody></table></div></div><br class="table-break" /><p>
1961
Prerequisite tools are Bash 2.0 or later,
1962
<a class="link" href="http://www.doxygen.org/" target="_top">Doxygen</a>, and
1963
the <a class="link" href="http://www.gnu.org/software/coreutils/" target="_top">GNU
1967
Some commentary to accompany
1968
- the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/docblocks.html" target="_top">Special
1969
- Documentation Blocks</a> section of
1970
- the Doxygen manual:
1971
+ the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html" target="_top">Special
1972
+ Documentation Blocks</a> section of the Doxygen manual:
1973
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>For longer comments, use the Javadoc style...</p></li><li class="listitem"><p>
1974
...not the Qt style. The intermediate *'s are preferred.
1975
</p></li><li class="listitem"><p>
1977
writing Doxygen comments. Single and double quotes, and
1978
separators in filenames are two common trouble spots. When in
1979
doubt, consult the following table.
1980
- </p><div class="table"><a id="idp22238096"></a><p class="title"><strong>Table B.2. HTML to Doxygen Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Doxygen</th></tr></thead><tbody><tr><td align="left">\</td><td align="left">\\</td></tr><tr><td align="left">"</td><td align="left">\"</td></tr><tr><td align="left">'</td><td align="left">\'</td></tr><tr><td align="left"><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>
1981
+ </p><div class="table"><a id="idm269993294592"></a><p class="title"><strong>Table B.2. HTML to Doxygen Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Doxygen</th></tr></thead><tbody><tr><td align="left">\</td><td align="left">\\</td></tr><tr><td align="left">"</td><td align="left">\"</td></tr><tr><td align="left">'</td><td align="left">\'</td></tr><tr><td align="left"><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>
1982
Editing the DocBook sources requires an XML editor. Many
1983
exist: some notable options
1984
include <span class="command"><strong>emacs</strong></span>, <span class="application">Kate</span>,
1985
@@ -520,11 +519,11 @@
1986
<a class="link" href="http://www.docbook.org/tdg/en/html/part2.html" target="_top">online</a>.
1987
An incomplete reference for HTML to Docbook conversion is
1988
detailed in the table below.
1989
- </p><div class="table"><a id="idp22335040"></a><p class="title"><strong>Table B.4. HTML to Docbook XML Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Docbook</th></tr></thead><tbody><tr><td align="left"><p></td><td align="left"><para></td></tr><tr><td align="left"><pre></td><td align="left"><computeroutput>, <programlisting>,
1990
+ </p><div class="table"><a id="idm269993197520"></a><p class="title"><strong>Table B.4. HTML to Docbook XML Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Docbook</th></tr></thead><tbody><tr><td align="left"><p></td><td align="left"><para></td></tr><tr><td align="left"><pre></td><td align="left"><computeroutput>, <programlisting>,
1991
<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>
1992
And examples of detailed markup for which there are no real HTML
1993
equivalents are listed in the table below.
1994
-</p><div class="table"><a id="idp22359184"></a><p class="title"><strong>Table B.5. Docbook XML Element Use</strong></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><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">
1995
+</p><div class="table"><a id="idm269993173376"></a><p class="title"><strong>Table B.5. Docbook XML Element Use</strong></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><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">
1996
<p><function>clear()</function></p>
1997
<p><function>fs.clear()</function></p>
1998
</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">
1999
Index: libstdc++-v3/doc/html/manual/extensions.html
2000
===================================================================
2001
--- a/src/libstdc++-v3/doc/html/manual/extensions.html (.../tags/gcc_4_8_2_release)
2002
+++ b/src/libstdc++-v3/doc/html/manual/extensions.html (.../branches/gcc-4_8-branch)
2004
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2005
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part III. Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="ext_preface.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III.
2006
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part III. Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="ext_preface.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III.
2009
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="ext_preface.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="manual.ext"></a>Part III.
2011
- <a id="idp16423680" class="indexterm"></a>
2012
-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="preface"><a href="ext_preface.html"></a></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and
2013
+ <a id="idm269999107536" class="indexterm"></a>
2014
+</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="preface"><a href="ext_preface.html"></a></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and
2015
debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="profile_mode.html">19. Profile Mode</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_api.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="profile_mode_cost_model.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_devel.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="mt_allocator.html">20. The mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="chapter"><a href="bitmap_allocator.html">21. The bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="policy_data_structures.html">22. Policy-Based Data Structures</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring">
2016
Configuring via Template Parameters
2017
</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
2018
Index: libstdc++-v3/doc/html/manual/debug_mode_using.html
2019
===================================================================
2020
--- a/src/libstdc++-v3/doc/html/manual/debug_mode_using.html (.../tags/gcc_4_8_2_release)
2021
+++ b/src/libstdc++-v3/doc/html/manual/debug_mode_using.html (.../branches/gcc-4_8-branch)
2023
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2024
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode_semantics.html" title="Semantics" /><link rel="next" href="debug_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_semantics.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.using"></a>Using</h2></div></div></div><p>
2025
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode_semantics.html" title="Semantics" /><link rel="next" href="debug_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_semantics.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.using"></a>Using</h2></div></div></div><p>
2026
</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.mode"></a>Using the Debug Mode</h3></div></div></div><p>To use the libstdc++ debug mode, compile your application with the
2027
compiler flag <code class="code">-D_GLIBCXX_DEBUG</code>. Note that this flag
2028
changes the sizes and behavior of standard class templates such
2030
mode or with debug mode. The
2031
following table provides the names and headers of the debugging
2033
-</p><div class="table"><a id="idp16490400"></a><p class="title"><strong>Table 17.1. Debugging Containers</strong></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename"><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
2034
+</p><div class="table"><a id="idm269999040896"></a><p class="title"><strong>Table 17.1. Debugging Containers</strong></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename"><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
2035
containers have additional debug capability.
2036
-</p><div class="table"><a id="idp16535296"></a><p class="title"><strong>Table 17.2. Debugging Containers C++11</strong></p><div class="table-contents"><table summary="Debugging Containers C++11" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename"><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>
2037
\ No newline at end of file
2038
+</p><div class="table"><a id="idm269998996000"></a><p class="title"><strong>Table 17.2. Debugging Containers C++11</strong></p><div class="table-contents"><table summary="Debugging Containers C++11" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename"><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>
2039
\ No newline at end of file
2040
Index: libstdc++-v3/doc/html/manual/parallel_mode.html
2041
===================================================================
2042
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode.html (.../tags/gcc_4_8_2_release)
2043
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode.html (.../branches/gcc-4_8-branch)
2045
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2046
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 18. Parallel Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="debug_mode_design.html" title="Design" /><link rel="next" href="parallel_mode_semantics.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 18. Parallel Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_design.html">Prev</a> </td><th width="60%" align="center">Part III.
2047
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 18. Parallel Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="debug_mode_design.html" title="Design" /><link rel="next" href="parallel_mode_semantics.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 18. Parallel Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_design.html">Prev</a> </td><th width="60%" align="center">Part III.
2050
-</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_semantics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode"></a>Chapter 18. Parallel Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></div><p> The libstdc++ parallel mode is an experimental parallel
2051
+</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_semantics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode"></a>Chapter 18. Parallel Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></div><p> The libstdc++ parallel mode is an experimental parallel
2052
implementation of many algorithms the C++ Standard Library.
2054
Several of the standard algorithms, for instance
2056
specific compiler flag.
2057
</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.intro"></a>Intro</h2></div></div></div><p>The following library components in the include
2058
<code class="filename">numeric</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="function">std::accumulate</code></p></li><li class="listitem"><p><code class="function">std::adjacent_difference</code></p></li><li class="listitem"><p><code class="function">std::inner_product</code></p></li><li class="listitem"><p><code class="function">std::partial_sum</code></p></li></ul></div><p>The following library components in the include
2059
-<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="function">std::adjacent_find</code></p></li><li class="listitem"><p><code class="function">std::count</code></p></li><li class="listitem"><p><code class="function">std::count_if</code></p></li><li class="listitem"><p><code class="function">std::equal</code></p></li><li class="listitem"><p><code class="function">std::find</code></p></li><li class="listitem"><p><code class="function">std::find_if</code></p></li><li class="listitem"><p><code class="function">std::find_first_of</code></p></li><li class="listitem"><p><code class="function">std::for_each</code></p></li><li class="listitem"><p><code class="function">std::generate</code></p></li><li class="listitem"><p><code class="function">std::generate_n</code></p></li><li class="listitem"><p><code class="function">std::lexicographical_compare</code></p></li><li class="listitem"><p><code class="function">std::mismatch</code></p></li><li class="listitem"><p><code class="function">std::search</code></p></li><li class="listitem"><p><code class="function">std::search_n</code></p></li><li class="listitem"><p><code class="function">std::transform</code></p></li><li class="listitem"><p><code class="function">std::replace</code></p></li><li class="listitem"><p><code class="function">std::replace_if</code></p></li><li class="listitem"><p><code class="function">std::max_element</code></p></li><li class="listitem"><p><code class="function">std::merge</code></p></li><li class="listitem"><p><code class="function">std::min_element</code></p></li><li class="listitem"><p><code class="function">std::nth_element</code></p></li><li class="listitem"><p><code class="function">std::partial_sort</code></p></li><li class="listitem"><p><code class="function">std::partition</code></p></li><li class="listitem"><p><code class="function">std::random_shuffle</code></p></li><li class="listitem"><p><code class="function">std::set_union</code></p></li><li class="listitem"><p><code class="function">std::set_intersection</code></p></li><li class="listitem"><p><code class="function">std::set_symmetric_difference</code></p></li><li class="listitem"><p><code class="function">std::set_difference</code></p></li><li class="listitem"><p><code class="function">std::sort</code></p></li><li class="listitem"><p><code class="function">std::stable_sort</code></p></li><li class="listitem"><p><code class="function">std::unique_copy</code></p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="parallel_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idp16926864"></a><p><span class="citetitle"><em class="citetitle">
2060
+<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="function">std::adjacent_find</code></p></li><li class="listitem"><p><code class="function">std::count</code></p></li><li class="listitem"><p><code class="function">std::count_if</code></p></li><li class="listitem"><p><code class="function">std::equal</code></p></li><li class="listitem"><p><code class="function">std::find</code></p></li><li class="listitem"><p><code class="function">std::find_if</code></p></li><li class="listitem"><p><code class="function">std::find_first_of</code></p></li><li class="listitem"><p><code class="function">std::for_each</code></p></li><li class="listitem"><p><code class="function">std::generate</code></p></li><li class="listitem"><p><code class="function">std::generate_n</code></p></li><li class="listitem"><p><code class="function">std::lexicographical_compare</code></p></li><li class="listitem"><p><code class="function">std::mismatch</code></p></li><li class="listitem"><p><code class="function">std::search</code></p></li><li class="listitem"><p><code class="function">std::search_n</code></p></li><li class="listitem"><p><code class="function">std::transform</code></p></li><li class="listitem"><p><code class="function">std::replace</code></p></li><li class="listitem"><p><code class="function">std::replace_if</code></p></li><li class="listitem"><p><code class="function">std::max_element</code></p></li><li class="listitem"><p><code class="function">std::merge</code></p></li><li class="listitem"><p><code class="function">std::min_element</code></p></li><li class="listitem"><p><code class="function">std::nth_element</code></p></li><li class="listitem"><p><code class="function">std::partial_sort</code></p></li><li class="listitem"><p><code class="function">std::partition</code></p></li><li class="listitem"><p><code class="function">std::random_shuffle</code></p></li><li class="listitem"><p><code class="function">std::set_union</code></p></li><li class="listitem"><p><code class="function">std::set_intersection</code></p></li><li class="listitem"><p><code class="function">std::set_symmetric_difference</code></p></li><li class="listitem"><p><code class="function">std::set_difference</code></p></li><li class="listitem"><p><code class="function">std::sort</code></p></li><li class="listitem"><p><code class="function">std::stable_sort</code></p></li><li class="listitem"><p><code class="function">std::unique_copy</code></p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="parallel_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idm269998604464"></a><p><span class="citetitle"><em class="citetitle">
2061
Parallelization of Bulk Operations for STL Dictionaries
2062
</em>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Leonor</span> <span class="surname">Frias</span>. </span><span class="copyright">Copyright © 2007 . </span><span class="publisher"><span class="publishername">
2063
Workshop on Highly Parallel Processing on a Chip (HPPC) 2007. (LNCS)
2064
- . </span></span></p></div><div class="biblioentry"><a id="idp16931936"></a><p><span class="citetitle"><em class="citetitle">
2065
+ . </span></span></p></div><div class="biblioentry"><a id="idm269998599392"></a><p><span class="citetitle"><em class="citetitle">
2066
The Multi-Core Standard Template Library
2067
</em>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Peter</span> <span class="surname">Sanders</span>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Putze</span>. </span><span class="copyright">Copyright © 2007 . </span><span class="publisher"><span class="publishername">
2068
Euro-Par 2007: Parallel Processing. (LNCS 4641)
2069
Index: libstdc++-v3/doc/html/manual/debug_mode_semantics.html
2070
===================================================================
2071
--- a/src/libstdc++-v3/doc/html/manual/debug_mode_semantics.html (.../tags/gcc_4_8_2_release)
2072
+++ b/src/libstdc++-v3/doc/html/manual/debug_mode_semantics.html (.../branches/gcc-4_8-branch)
2074
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2075
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="next" href="debug_mode_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode_using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.semantics"></a>Semantics</h2></div></div></div><p>
2076
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="next" href="debug_mode_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode_using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.semantics"></a>Semantics</h2></div></div></div><p>
2077
</p><p>A program that uses the C++ standard library correctly
2078
will maintain the same semantics under debug mode as it had with
2079
the normal (release) library. All functional and exception-handling
2080
Index: libstdc++-v3/doc/html/manual/setup.html
2081
===================================================================
2082
--- a/src/libstdc++-v3/doc/html/manual/setup.html (.../tags/gcc_4_8_2_release)
2083
+++ b/src/libstdc++-v3/doc/html/manual/setup.html (.../branches/gcc-4_8-branch)
2085
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2086
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 2. Setup</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I. Introduction" /><link rel="prev" href="bugs.html" title="Bugs" /><link rel="next" href="configure.html" title="Configure" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Setup</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bugs.html">Prev</a> </td><th width="60%" align="center">Part I.
2087
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 2. Setup</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I. Introduction" /><link rel="prev" href="bugs.html" title="Bugs" /><link rel="next" href="configure.html" title="Configure" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Setup</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bugs.html">Prev</a> </td><th width="60%" align="center">Part I.
2090
-</th><td width="20%" align="right"> <a accesskey="n" href="configure.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup"></a>Chapter 2. Setup</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></div><p>To transform libstdc++ sources into installed include files
2091
+</th><td width="20%" align="right"> <a accesskey="n" href="configure.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup"></a>Chapter 2. Setup</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></div><p>To transform libstdc++ sources into installed include files
2092
and properly built binaries useful for linking to other software is
2093
a multi-step process. Steps include getting the sources,
2094
configuring and building the sources, testing, and installation.
2095
Index: libstdc++-v3/doc/html/manual/backwards.html
2096
===================================================================
2097
--- a/src/libstdc++-v3/doc/html/manual/backwards.html (.../tags/gcc_4_8_2_release)
2098
+++ b/src/libstdc++-v3/doc/html/manual/backwards.html (.../branches/gcc-4_8-branch)
2100
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2101
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Backwards Compatibility</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, backwards" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="api.html" title="API Evolution and Deprecation History" /><link rel="next" href="appendix_free.html" title="Appendix C. Free Software Needs Free Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Backwards Compatibility</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center">Appendix B.
2102
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Backwards Compatibility</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, backwards" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="api.html" title="API Evolution and Deprecation History" /><link rel="next" href="appendix_free.html" title="Appendix C. Free Software Needs Free Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Backwards Compatibility</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center">Appendix B.
2103
Porting and Maintenance
2105
</th><td width="20%" align="right"> <a accesskey="n" href="appendix_free.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.appendix.porting.backwards"></a>Backwards Compatibility</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.first"></a>First</h3></div></div></div><p>The first generation GNU C++ library was called libg++. It was a
2106
@@ -940,15 +940,15 @@
2107
This is a change in behavior from older versions. Now, most
2108
<span class="type">iterator_type</span> typedefs in container classes are POD
2109
objects, not <span class="type">value_type</span> pointers.
2110
-</p></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idp23415104"></a><p><span class="title"><em>
2111
+</p></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idm269992117648"></a><p><span class="title"><em>
2112
<a class="link" href="http://www.kegel.com/gcc/gcc4.html" target="_top">
2113
Migrating to GCC 4.1
2115
- </em>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry"><a id="idp23417888"></a><p><span class="title"><em>
2116
+ </em>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry"><a id="idm269992114864"></a><p><span class="title"><em>
2117
<a class="link" href="http://lists.debian.org/debian-gcc/2006/03/msg00405.html" target="_top">
2118
Building the Whole Debian Archive with GCC 4.1: A Summary
2120
- </em>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry"><a id="idp23420736"></a><p><span class="title"><em>
2121
+ </em>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry"><a id="idm269992112016"></a><p><span class="title"><em>
2122
<a class="link" href="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html" target="_top">
2123
Migration guide for GCC-3.2
2125
Index: libstdc++-v3/doc/html/manual/source_design_notes.html
2126
===================================================================
2127
--- a/src/libstdc++-v3/doc/html/manual/source_design_notes.html (.../tags/gcc_4_8_2_release)
2128
+++ b/src/libstdc++-v3/doc/html/manual/source_design_notes.html (.../branches/gcc-4_8-branch)
2130
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2131
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Notes</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A. Contributing" /><link rel="prev" href="source_code_style.html" title="Coding Style" /><link rel="next" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Notes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_code_style.html">Prev</a> </td><th width="60%" align="center">Appendix A.
2132
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Notes</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A. Contributing" /><link rel="prev" href="source_code_style.html" title="Coding Style" /><link rel="next" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Notes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_code_style.html">Prev</a> </td><th width="60%" align="center">Appendix A.
2135
</th><td width="20%" align="right"> <a accesskey="n" href="appendix_porting.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.design_notes"></a>Design Notes</h2></div></div></div><p>
2136
Index: libstdc++-v3/doc/html/manual/ext_sgi.html
2137
===================================================================
2138
--- a/src/libstdc++-v3/doc/html/manual/ext_sgi.html (.../tags/gcc_4_8_2_release)
2139
+++ b/src/libstdc++-v3/doc/html/manual/ext_sgi.html (.../branches/gcc-4_8-branch)
2141
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2142
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Deprecated</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /><link rel="prev" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /><link rel="next" href="ext_utilities.html" title="Chapter 24. Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Deprecated</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><th width="60%" align="center">Chapter 23. HP/SGI Extensions</th><td width="20%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.deprecated_sgi"></a>Deprecated</h2></div></div></div><p>
2143
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Deprecated</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /><link rel="prev" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /><link rel="next" href="ext_utilities.html" title="Chapter 24. Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Deprecated</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><th width="60%" align="center">Chapter 23. HP/SGI Extensions</th><td width="20%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.deprecated_sgi"></a>Deprecated</h2></div></div></div><p>
2144
The SGI hashing classes <code class="classname">hash_set</code> and
2145
<code class="classname">hash_set</code> have been deprecated by the
2146
unordered_set, unordered_multiset, unordered_map,
2147
Index: libstdc++-v3/doc/html/manual/facets.html
2148
===================================================================
2149
--- a/src/libstdc++-v3/doc/html/manual/facets.html (.../tags/gcc_4_8_2_release)
2150
+++ b/src/libstdc++-v3/doc/html/manual/facets.html (.../branches/gcc-4_8-branch)
2152
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2153
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Facets</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="localization.html" title="Chapter 8. Localization" /><link rel="prev" href="localization.html" title="Chapter 8. Localization" /><link rel="next" href="containers.html" title="Chapter 9. Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Facets</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="localization.html">Prev</a> </td><th width="60%" align="center">Chapter 8.
2154
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Facets</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="localization.html" title="Chapter 8. Localization" /><link rel="prev" href="localization.html" title="Chapter 8. Localization" /><link rel="next" href="containers.html" title="Chapter 9. Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Facets</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="localization.html">Prev</a> </td><th width="60%" align="center">Chapter 8.
2157
-</th><td width="20%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.facet"></a>Facets</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.ctype"></a>ctype</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15778336"></a>Specializations</h5></div></div></div><p>
2158
+</th><td width="20%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.facet"></a>Facets</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.ctype"></a>ctype</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999753024"></a>Specializations</h5></div></div></div><p>
2159
For the required specialization codecvt<wchar_t, char, mbstate_t> ,
2160
conversions are made between the internal character set (always UCS4
2161
on GNU/Linux) and whatever the currently selected locale for the
2163
</p></li><li class="listitem"><p>
2164
Rename abstract base class. See if just smash-overriding is a
2165
better approach. Clarify, add sanity to naming.
2166
- </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15793392"></a><p><span class="citetitle"><em class="citetitle">
2167
+ </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999738032"></a><p><span class="citetitle"><em class="citetitle">
2169
- </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="idp15798144"></a><p><span class="citetitle"><em class="citetitle">
2170
+ </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="idm269999733280"></a><p><span class="citetitle"><em class="citetitle">
2172
- </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idp15801232"></a><p><span class="citetitle"><em class="citetitle">
2173
+ </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm269999730192"></a><p><span class="citetitle"><em class="citetitle">
2174
ISO/IEC 14882:1998 Programming languages - C++
2175
- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15803520"></a><p><span class="citetitle"><em class="citetitle">
2176
+ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269999727904"></a><p><span class="citetitle"><em class="citetitle">
2177
ISO/IEC 9899:1999 Programming languages - C
2178
- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp15805792"></a><p><span class="title"><em>
2179
+ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999725632"></a><p><span class="title"><em>
2180
<a class="link" href="http://www.unix.org/version3/ieee_std.html" target="_top">
2181
The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
2183
</em>. </span><span class="copyright">Copyright © 1999
2184
- The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry"><a id="idp15809040"></a><p><span class="citetitle"><em class="citetitle">
2185
+ The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry"><a id="idm269999722384"></a><p><span class="citetitle"><em class="citetitle">
2186
The C++ Programming Language, Special Edition
2187
</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
2189
- . </span></span></p></div><div class="biblioentry"><a id="idp15813664"></a><p><span class="citetitle"><em class="citetitle">
2190
+ . </span></span></p></div><div class="biblioentry"><a id="idm269999717760"></a><p><span class="citetitle"><em class="citetitle">
2191
Standard C++ IOStreams and Locales
2192
</em>. </span><span class="subtitle">
2193
Advanced Programmer's Guide and Reference
2194
@@ -409,17 +409,17 @@
2195
</p></li><li class="listitem"><p>
2196
wchar_t/char internal buffers and conversions between
2197
internal/external buffers?
2198
- </p></li></ul></div></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15891136"></a><p><span class="citetitle"><em class="citetitle">
2199
+ </p></li></ul></div></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999640080"></a><p><span class="citetitle"><em class="citetitle">
2201
</em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">
2202
Chapters 6 Character Set Handling and 7 Locales and Internationalization
2203
- . </span></p></div><div class="biblioentry"><a id="idp15895888"></a><p><span class="citetitle"><em class="citetitle">
2204
+ . </span></p></div><div class="biblioentry"><a id="idm269999635328"></a><p><span class="citetitle"><em class="citetitle">
2206
- </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idp15898976"></a><p><span class="citetitle"><em class="citetitle">
2207
+ </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm269999632240"></a><p><span class="citetitle"><em class="citetitle">
2208
ISO/IEC 14882:1998 Programming languages - C++
2209
- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15901264"></a><p><span class="citetitle"><em class="citetitle">
2210
+ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269999629952"></a><p><span class="citetitle"><em class="citetitle">
2211
ISO/IEC 9899:1999 Programming languages - C
2212
- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp15903536"></a><p><span class="title"><em>
2213
+ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999627680"></a><p><span class="title"><em>
2214
<a class="link" href="http://www.opengroup.org/austin/" target="_top">
2215
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
2217
@@ -426,25 +426,25 @@
2218
</em>. </span><span class="copyright">Copyright © 2008
2219
The Open Group/The Institute of Electrical and Electronics
2221
- . </span></p></div><div class="biblioentry"><a id="idp15906768"></a><p><span class="citetitle"><em class="citetitle">
2222
+ . </span></p></div><div class="biblioentry"><a id="idm269999624448"></a><p><span class="citetitle"><em class="citetitle">
2223
The C++ Programming Language, Special Edition
2224
</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
2226
- . </span></span></p></div><div class="biblioentry"><a id="idp15911392"></a><p><span class="citetitle"><em class="citetitle">
2227
+ . </span></span></p></div><div class="biblioentry"><a id="idm269999619824"></a><p><span class="citetitle"><em class="citetitle">
2228
Standard C++ IOStreams and Locales
2229
</em>. </span><span class="subtitle">
2230
Advanced Programmer's Guide and Reference
2231
. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
2232
Addison Wesley Longman
2233
- . </span></span></p></div><div class="biblioentry"><a id="idp15917056"></a><p><span class="title"><em>
2234
+ . </span></span></p></div><div class="biblioentry"><a id="idm269999614160"></a><p><span class="title"><em>
2235
<a class="link" href="http://www.lysator.liu.se/c/na1.html" target="_top">
2236
A brief description of Normative Addendum 1
2238
- </em>. </span><span class="author"><span class="firstname">Clive</span> <span class="surname">Feather</span>. </span><span class="pagenums">Extended Character Sets. </span></p></div><div class="biblioentry"><a id="idp15920304"></a><p><span class="title"><em>
2239
+ </em>. </span><span class="author"><span class="firstname">Clive</span> <span class="surname">Feather</span>. </span><span class="pagenums">Extended Character Sets. </span></p></div><div class="biblioentry"><a id="idm269999610912"></a><p><span class="title"><em>
2240
<a class="link" href="http://tldp.org/HOWTO/Unicode-HOWTO.html" target="_top">
2243
- </em>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry"><a id="idp15923088"></a><p><span class="title"><em>
2244
+ </em>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry"><a id="idm269999608128"></a><p><span class="title"><em>
2245
<a class="link" href="http://www.cl.cam.ac.uk/~mgk25/unicode.html" target="_top">
2246
UTF-8 and Unicode FAQ for Unix/Linux
2248
@@ -690,16 +690,16 @@
2249
model. As of this writing, it is unknown how to query to see
2250
if a specified message catalog exists using the gettext
2252
- </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp16003632"></a><p><span class="citetitle"><em class="citetitle">
2253
+ </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999527584"></a><p><span class="citetitle"><em class="citetitle">
2255
</em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling, and 7 Locales and Internationalization
2256
- . </span></p></div><div class="biblioentry"><a id="idp16008384"></a><p><span class="citetitle"><em class="citetitle">
2257
+ . </span></p></div><div class="biblioentry"><a id="idm269999522832"></a><p><span class="citetitle"><em class="citetitle">
2259
- </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idp16011472"></a><p><span class="citetitle"><em class="citetitle">
2260
+ </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm269999519744"></a><p><span class="citetitle"><em class="citetitle">
2261
ISO/IEC 14882:1998 Programming languages - C++
2262
- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp16013760"></a><p><span class="citetitle"><em class="citetitle">
2263
+ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269999517456"></a><p><span class="citetitle"><em class="citetitle">
2264
ISO/IEC 9899:1999 Programming languages - C
2265
- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp16016032"></a><p><span class="title"><em>
2266
+ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999515184"></a><p><span class="title"><em>
2267
<a class="link" href="http://www.opengroup.org/austin/" target="_top">
2268
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
2270
@@ -706,23 +706,23 @@
2271
</em>. </span><span class="copyright">Copyright © 2008
2272
The Open Group/The Institute of Electrical and Electronics
2274
- . </span></p></div><div class="biblioentry"><a id="idp16019264"></a><p><span class="citetitle"><em class="citetitle">
2275
+ . </span></p></div><div class="biblioentry"><a id="idm269999511952"></a><p><span class="citetitle"><em class="citetitle">
2276
The C++ Programming Language, Special Edition
2277
</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
2279
- . </span></span></p></div><div class="biblioentry"><a id="idp16023888"></a><p><span class="citetitle"><em class="citetitle">
2280
+ . </span></span></p></div><div class="biblioentry"><a id="idm269999507328"></a><p><span class="citetitle"><em class="citetitle">
2281
Standard C++ IOStreams and Locales
2282
</em>. </span><span class="subtitle">
2283
Advanced Programmer's Guide and Reference
2284
. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
2285
Addison Wesley Longman
2286
- . </span></span></p></div><div class="biblioentry"><a id="idp16029552"></a><p><span class="title"><em>
2287
- <a class="link" href="http://java.sun.com/reference/api/index.html" target="_top">
2288
+ . </span></span></p></div><div class="biblioentry"><a id="idm269999501664"></a><p><span class="title"><em>
2289
+ <a class="link" href="http://www.oracle.com/technetwork/java/api/index.html" target="_top">
2290
API Specifications, Java Platform
2292
</em>. </span><span class="pagenums">java.util.Properties, java.text.MessageFormat,
2293
java.util.Locale, java.util.ResourceBundle
2294
- . </span></p></div><div class="biblioentry"><a id="idp16031888"></a><p><span class="title"><em>
2295
+ . </span></p></div><div class="biblioentry"><a id="idm269999499328"></a><p><span class="title"><em>
2296
<a class="link" href="https://www.gnu.org/software/gettext/" target="_top">
2297
GNU gettext tools, version 0.10.38, Native Language Support
2299
Index: libstdc++-v3/doc/html/manual/diagnostics.html
2300
===================================================================
2301
--- a/src/libstdc++-v3/doc/html/manual/diagnostics.html (.../tags/gcc_4_8_2_release)
2302
+++ b/src/libstdc++-v3/doc/html/manual/diagnostics.html (.../branches/gcc-4_8-branch)
2304
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2305
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 5. Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="termination.html" title="Termination" /><link rel="next" href="concept_checking.html" title="Concept Checking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5.
2306
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 5. Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="termination.html" title="Termination" /><link rel="next" href="concept_checking.html" title="Concept Checking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5.
2309
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><th width="60%" align="center">Part II.
2312
</th><td width="20%" align="right"> <a accesskey="n" href="concept_checking.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.diagnostics"></a>Chapter 5.
2314
- <a id="idp13835248" class="indexterm"></a>
2315
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.exceptions"></a>Exceptions</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.api"></a>API Reference</h3></div></div></div><p>
2316
+ <a id="idm270001697504" class="indexterm"></a>
2317
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.exceptions"></a>Exceptions</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.api"></a>API Reference</h3></div></div></div><p>
2318
All exception objects are defined in one of the standard header
2319
files: <code class="filename">exception</code>,
2320
<code class="filename">stdexcept</code>, <code class="filename">new</code>, and
2321
Index: libstdc++-v3/doc/html/manual/mt_allocator_design.html
2322
===================================================================
2323
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator_design.html (.../tags/gcc_4_8_2_release)
2324
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator_design.html (.../branches/gcc-4_8-branch)
2326
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2327
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="next" href="mt_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.design_issues"></a>Design Issues</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.overview"></a>Overview</h3></div></div></div><p> There are three general components to the allocator: a datum
2328
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="next" href="mt_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.design_issues"></a>Design Issues</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.overview"></a>Overview</h3></div></div></div><p> There are three general components to the allocator: a datum
2329
describing the characteristics of the memory pool, a policy class
2330
containing this pool that links instantiation types to common or
2331
individual pools, and a class inheriting from the policy class that is
2332
Index: libstdc++-v3/doc/html/manual/appendix_free.html
2333
===================================================================
2334
--- a/src/libstdc++-v3/doc/html/manual/appendix_free.html (.../tags/gcc_4_8_2_release)
2335
+++ b/src/libstdc++-v3/doc/html/manual/appendix_free.html (.../branches/gcc-4_8-branch)
2337
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2338
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix C. Free Software Needs Free Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV. Appendices" /><link rel="prev" href="backwards.html" title="Backwards Compatibility" /><link rel="next" href="appendix_gpl.html" title="Appendix D. GNU General Public License version 3" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix C.
2339
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix C. Free Software Needs Free Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV. Appendices" /><link rel="prev" href="backwards.html" title="Backwards Compatibility" /><link rel="next" href="appendix_gpl.html" title="Appendix D. GNU General Public License version 3" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix C.
2340
Free Software Needs Free Documentation
2342
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><th width="60%" align="center">Part IV.
2345
</th><td width="20%" align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.free"></a>
2346
Free Software Needs Free Documentation
2347
- <a id="idp23426192" class="indexterm"></a>
2348
+ <a id="idm269992106560" class="indexterm"></a>
2349
</h1></div></div></div><p>
2350
The biggest deficiency in free operating systems is not in the
2351
software--it is the lack of good free manuals that we can include in
2352
Index: libstdc++-v3/doc/html/manual/algorithms.html
2353
===================================================================
2354
--- a/src/libstdc++-v3/doc/html/manual/algorithms.html (.../tags/gcc_4_8_2_release)
2355
+++ b/src/libstdc++-v3/doc/html/manual/algorithms.html (.../branches/gcc-4_8-branch)
2357
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2358
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 11. Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library, algorithm" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="iterators.html" title="Chapter 10. Iterators" /><link rel="next" href="numerics.html" title="Chapter 12. Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 11.
2359
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 11. Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library, algorithm" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="iterators.html" title="Chapter 10. Iterators" /><link rel="next" href="numerics.html" title="Chapter 12. Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 11.
2362
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><th width="60%" align="center">Part II.
2365
</th><td width="20%" align="right"> <a accesskey="n" href="numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.algorithms"></a>Chapter 11.
2367
- <a id="idp16191968" class="indexterm"></a>
2368
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></dd></dl></div><p>
2369
+ <a id="idm269999339120" class="indexterm"></a>
2370
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></dd></dl></div><p>
2371
The neatest accomplishment of the algorithms section is that all the
2372
work is done via iterators, not containers directly. This means two
2374
Index: libstdc++-v3/doc/html/manual/appendix_porting.html
2375
===================================================================
2376
--- a/src/libstdc++-v3/doc/html/manual/appendix_porting.html (.../tags/gcc_4_8_2_release)
2377
+++ b/src/libstdc++-v3/doc/html/manual/appendix_porting.html (.../branches/gcc-4_8-branch)
2379
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2380
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix B. Porting and Maintenance</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV. Appendices" /><link rel="prev" href="source_design_notes.html" title="Design Notes" /><link rel="next" href="documentation_hacking.html" title="Writing and Generating Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix B.
2381
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix B. Porting and Maintenance</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV. Appendices" /><link rel="prev" href="source_design_notes.html" title="Design Notes" /><link rel="next" href="documentation_hacking.html" title="Writing and Generating Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix B.
2382
Porting and Maintenance
2384
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><th width="60%" align="center">Part IV.
2387
</th><td width="20%" align="right"> <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.porting"></a>
2388
Porting and Maintenance
2389
- <a id="idp22008864" class="indexterm"></a>
2390
-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.make">Make</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Organization</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.harness.dejagnu">Dejagnu Harness Details</a></span></dt><dt><span class="section"><a href="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety">
2391
+ <a id="idm269993523968" class="indexterm"></a>
2392
+</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.make">Make</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Organization</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.harness.dejagnu">Dejagnu Harness Details</a></span></dt><dt><span class="section"><a href="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety">
2393
Qualifying Exception Safety Guarantees
2395
</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety.overview">Overview</a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.status">
2397
in the build directory starts the build process. The <code class="literal">all</code> target comes from the <code class="filename">Makefile</code> file, which is generated via <span class="command"><strong>configure</strong></span> from the <code class="filename">Makefile.in</code> file, which is in turn generated (via
2398
<span class="command"><strong>automake</strong></span>) from the file
2399
<code class="filename">Makefile.am</code>.
2400
-</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.overview.map"></a>What Comes from Where</h4></div></div></div><div class="figure"><a id="idp22035648"></a><p class="title"><strong>Figure B.1. Configure and Build File Dependencies</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/confdeps.png" align="middle" alt="Dependency Graph for Configure and Build Files" /></div></div></div><br class="figure-break" /><p>
2401
+</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.overview.map"></a>What Comes from Where</h4></div></div></div><div class="figure"><a id="idm269993497120"></a><p class="title"><strong>Figure B.1. Configure and Build File Dependencies</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/confdeps.png" align="middle" alt="Dependency Graph for Configure and Build Files" /></div></div></div><br class="figure-break" /><p>
2402
Regenerate all generated files by using the command
2403
<code class="code">autoreconf</code> at the top level of the libstdc++ source
2405
Index: libstdc++-v3/doc/html/manual/profile_mode_cost_model.html
2406
===================================================================
2407
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html (.../tags/gcc_4_8_2_release)
2408
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html (.../branches/gcc-4_8-branch)
2410
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2411
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Empirical Cost Model</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_api.html" title="Extensions for Custom Containers" /><link rel="next" href="profile_mode_impl.html" title="Implementation Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Empirical Cost Model</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_api.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_impl.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.cost_model"></a>Empirical Cost Model</h2></div></div></div><p>
2412
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Empirical Cost Model</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_api.html" title="Extensions for Custom Containers" /><link rel="next" href="profile_mode_impl.html" title="Implementation Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Empirical Cost Model</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_api.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_impl.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.cost_model"></a>Empirical Cost Model</h2></div></div></div><p>
2413
Currently, the cost model uses formulas with predefined relative weights
2414
for alternative containers or container implementations. For instance,
2415
iterating through a vector is X times faster than iterating through a list.
2416
Index: libstdc++-v3/doc/html/manual/make.html
2417
===================================================================
2418
--- a/src/libstdc++-v3/doc/html/manual/make.html (.../tags/gcc_4_8_2_release)
2419
+++ b/src/libstdc++-v3/doc/html/manual/make.html (.../branches/gcc-4_8-branch)
2421
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2422
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Make</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="configure.html" title="Configure" /><link rel="next" href="using.html" title="Chapter 3. Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Make</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.make"></a>Make</h2></div></div></div><p>If you have never done this before, you should read the basic
2423
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Make</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="configure.html" title="Configure" /><link rel="next" href="using.html" title="Chapter 3. Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Make</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.make"></a>Make</h2></div></div></div><p>If you have never done this before, you should read the basic
2424
<a class="link" href="http://gcc.gnu.org/install/" target="_top">GCC Installation
2425
Instructions</a> first. Read <span class="emphasis"><em>all of them</em></span>.
2426
<span class="emphasis"><em>Twice.</em></span>
2427
Index: libstdc++-v3/doc/html/manual/pairs.html
2428
===================================================================
2429
--- a/src/libstdc++-v3/doc/html/manual/pairs.html (.../tags/gcc_4_8_2_release)
2430
+++ b/src/libstdc++-v3/doc/html/manual/pairs.html (.../branches/gcc-4_8-branch)
2432
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2433
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Pairs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6. Utilities" /><link rel="prev" href="utilities.html" title="Chapter 6. Utilities" /><link rel="next" href="memory.html" title="Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Pairs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><th width="60%" align="center">Chapter 6.
2434
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Pairs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6. Utilities" /><link rel="prev" href="utilities.html" title="Chapter 6. Utilities" /><link rel="next" href="memory.html" title="Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Pairs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><th width="60%" align="center">Chapter 6.
2437
</th><td width="20%" align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.pairs"></a>Pairs</h2></div></div></div><p>The <code class="code">pair<T1,T2></code> is a simple and handy way to
2438
Index: libstdc++-v3/doc/html/manual/test.html
2439
===================================================================
2440
--- a/src/libstdc++-v3/doc/html/manual/test.html (.../tags/gcc_4_8_2_release)
2441
+++ b/src/libstdc++-v3/doc/html/manual/test.html (.../branches/gcc-4_8-branch)
2443
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2444
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Test</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, test, testsuite, performance, conformance, ABI, exception safety" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="internals.html" title="Porting to New Hardware or Operating Systems" /><link rel="next" href="abi.html" title="ABI Policy and Guidelines" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Test</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><th width="60%" align="center">Appendix B.
2445
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Test</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, test, testsuite, performance, conformance, ABI, exception safety" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="internals.html" title="Porting to New Hardware or Operating Systems" /><link rel="next" href="abi.html" title="ABI Policy and Guidelines" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Test</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><th width="60%" align="center">Appendix B.
2446
Porting and Maintenance
2448
</th><td width="20%" align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.test"></a>Test</h2></div></div></div><p>
2450
reporting functions including:
2451
</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>time_counter</p></li><li class="listitem"><p>resource_counter</p></li><li class="listitem"><p>report_performance</p></li></ul></div></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="test.special"></a>Special Topics</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.exception.safety"></a>
2452
Qualifying Exception Safety Guarantees
2453
- <a id="idp22628992" class="indexterm"></a>
2454
+ <a id="idm269992903504" class="indexterm"></a>
2455
</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.overview"></a>Overview</h5></div></div></div><p>
2456
Testing is composed of running a particular test sequence,
2457
and looking at what happens to the surrounding code when
2458
Index: libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
2459
===================================================================
2460
--- a/src/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html (.../tags/gcc_4_8_2_release)
2461
+++ b/src/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html (.../branches/gcc-4_8-branch)
2463
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2464
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Linking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_namespaces.html" title="Namespaces" /><link rel="next" href="using_concurrency.html" title="Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Linking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_namespaces.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_concurrency.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.linkage"></a>Linking</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.freestanding"></a>Almost Nothing</h3></div></div></div><p>
2465
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Linking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_namespaces.html" title="Namespaces" /><link rel="next" href="using_concurrency.html" title="Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Linking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_namespaces.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_concurrency.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.linkage"></a>Linking</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.freestanding"></a>Almost Nothing</h3></div></div></div><p>
2466
Or as close as it gets: freestanding. This is a minimal
2467
configuration, with only partial support for the standard
2468
library. Assume only the following header files can be used:
2469
Index: libstdc++-v3/doc/html/manual/using_headers.html
2470
===================================================================
2471
--- a/src/libstdc++-v3/doc/html/manual/using_headers.html (.../tags/gcc_4_8_2_release)
2472
+++ b/src/libstdc++-v3/doc/html/manual/using_headers.html (.../branches/gcc-4_8-branch)
2474
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2475
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Headers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using.html" title="Chapter 3. Using" /><link rel="next" href="using_macros.html" title="Macros" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Headers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_macros.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.headers"></a>Headers</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.all"></a>Header Files</h3></div></div></div><p>
2476
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Headers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using.html" title="Chapter 3. Using" /><link rel="next" href="using_macros.html" title="Macros" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Headers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_macros.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.headers"></a>Headers</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.all"></a>Header Files</h3></div></div></div><p>
2477
The C++ standard specifies the entire set of header files that
2478
must be available to all hosted implementations. Actually, the
2479
word "files" is a misnomer, since the contents of the
2481
the 1998 standard as updated for 2003, and the current 2011 standard.
2483
C++98/03 include files. These are available in the default compilation mode, i.e. <code class="code">-std=c++98</code> or <code class="code">-std=gnu++98</code>.
2484
- </p><div class="table"><a id="idp13079360"></a><p class="title"><strong>Table 3.2. C++ 1998 Library Headers</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">complex</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td></tr><tr><td align="left"><code class="filename">fstream</code></td><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td><td align="left"><code class="filename">iosfwd</code></td></tr><tr><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td><td align="left"><code class="filename">list</code></td></tr><tr><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td></tr><tr><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">typeinfo</code></td></tr><tr><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13115840"></a><p class="title"><strong>Table 3.3. C++ 1998 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">ciso646</code></td></tr><tr><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td></tr><tr><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p>
2485
+ </p><div class="table"><a id="idm270002453792"></a><p class="title"><strong>Table 3.2. C++ 1998 Library Headers</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">complex</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td></tr><tr><td align="left"><code class="filename">fstream</code></td><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td><td align="left"><code class="filename">iosfwd</code></td></tr><tr><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td><td align="left"><code class="filename">list</code></td></tr><tr><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td></tr><tr><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">typeinfo</code></td></tr><tr><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002417312"></a><p class="title"><strong>Table 3.3. C++ 1998 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">ciso646</code></td></tr><tr><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td></tr><tr><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p>
2486
C++11 include files. These are only available in C++11 compilation
2487
mode, i.e. <code class="literal">-std=c++11</code> or <code class="literal">-std=gnu++11</code>.
2488
-</p><p></p><div class="table"><a id="idp13140576"></a><p class="title"><strong>Table 3.4. C++ 2011 Library Headers</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">array</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">chrono</code></td><td align="left"><code class="filename">complex</code></td></tr><tr><td align="left"><code class="filename">condition_variable</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td><td align="left"><code class="filename">forward_list</code></td><td align="left"><code class="filename">fstream</code></td></tr><tr><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">future</code></td><td align="left"><code class="filename">initalizer_list</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td></tr><tr><td align="left"><code class="filename">iosfwd</code></td><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td></tr><tr><td align="left"><code class="filename">list</code></td><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">mutex</code></td></tr><tr><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">random</code></td></tr><tr><td align="left"><code class="filename">ratio</code></td><td align="left"><code class="filename">regex</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">system_error</code></td><td align="left"><code class="filename">thread</code></td></tr><tr><td align="left"><code class="filename">tuple</code></td><td align="left"><code class="filename">type_traits</code></td><td align="left"><code class="filename">typeinfo</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="filename">unordered_set</code></td></tr><tr><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13192016"></a><p class="title"><strong>Table 3.5. C++ 2011 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">ccomplex</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cfenv</code></td></tr><tr><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">cinttypes</code></td><td align="left"><code class="filename">ciso646</code></td><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td></tr><tr><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstdbool</code></td></tr><tr><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdint</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctgmath</code></td><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cuchar</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
2489
+</p><p></p><div class="table"><a id="idm270002392576"></a><p class="title"><strong>Table 3.4. C++ 2011 Library Headers</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">array</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">chrono</code></td><td align="left"><code class="filename">complex</code></td></tr><tr><td align="left"><code class="filename">condition_variable</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td><td align="left"><code class="filename">forward_list</code></td><td align="left"><code class="filename">fstream</code></td></tr><tr><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">future</code></td><td align="left"><code class="filename">initalizer_list</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td></tr><tr><td align="left"><code class="filename">iosfwd</code></td><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td></tr><tr><td align="left"><code class="filename">list</code></td><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">mutex</code></td></tr><tr><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">random</code></td></tr><tr><td align="left"><code class="filename">ratio</code></td><td align="left"><code class="filename">regex</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">system_error</code></td><td align="left"><code class="filename">thread</code></td></tr><tr><td align="left"><code class="filename">tuple</code></td><td align="left"><code class="filename">type_traits</code></td><td align="left"><code class="filename">typeinfo</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="filename">unordered_set</code></td></tr><tr><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002341136"></a><p class="title"><strong>Table 3.5. C++ 2011 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">ccomplex</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cfenv</code></td></tr><tr><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">cinttypes</code></td><td align="left"><code class="filename">ciso646</code></td><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td></tr><tr><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstdbool</code></td></tr><tr><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdint</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctgmath</code></td><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cuchar</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
2490
In addition, TR1 includes as:
2491
-</p><div class="table"><a id="idp13221904"></a><p class="title"><strong>Table 3.6. C++ TR 1 Library Headers</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/array</code></td><td align="left"><code class="filename">tr1/complex</code></td><td align="left"><code class="filename">tr1/memory</code></td><td align="left"><code class="filename">tr1/functional</code></td><td align="left"><code class="filename">tr1/random</code></td></tr><tr><td align="left"><code class="filename">tr1/regex</code></td><td align="left"><code class="filename">tr1/tuple</code></td><td align="left"><code class="filename">tr1/type_traits</code></td><td align="left"><code class="filename">tr1/unordered_map</code></td><td align="left"><code class="filename">tr1/unordered_set</code></td></tr><tr><td align="left"><code class="filename">tr1/utility</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13238832"></a><p class="title"><strong>Table 3.7. C++ TR 1 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/ccomplex</code></td><td align="left"><code class="filename">tr1/cfenv</code></td><td align="left"><code class="filename">tr1/cfloat</code></td><td align="left"><code class="filename">tr1/cmath</code></td><td align="left"><code class="filename">tr1/cinttypes</code></td></tr><tr><td align="left"><code class="filename">tr1/climits</code></td><td align="left"><code class="filename">tr1/cstdarg</code></td><td align="left"><code class="filename">tr1/cstdbool</code></td><td align="left"><code class="filename">tr1/cstdint</code></td><td align="left"><code class="filename">tr1/cstdio</code></td></tr><tr><td align="left"><code class="filename">tr1/cstdlib</code></td><td align="left"><code class="filename">tr1/ctgmath</code></td><td align="left"><code class="filename">tr1/ctime</code></td><td align="left"><code class="filename">tr1/cwchar</code></td><td align="left"><code class="filename">tr1/cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>Decimal floating-point arithmetic is available if the C++
2492
+</p><div class="table"><a id="idm270002311248"></a><p class="title"><strong>Table 3.6. C++ TR 1 Library Headers</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/array</code></td><td align="left"><code class="filename">tr1/complex</code></td><td align="left"><code class="filename">tr1/memory</code></td><td align="left"><code class="filename">tr1/functional</code></td><td align="left"><code class="filename">tr1/random</code></td></tr><tr><td align="left"><code class="filename">tr1/regex</code></td><td align="left"><code class="filename">tr1/tuple</code></td><td align="left"><code class="filename">tr1/type_traits</code></td><td align="left"><code class="filename">tr1/unordered_map</code></td><td align="left"><code class="filename">tr1/unordered_set</code></td></tr><tr><td align="left"><code class="filename">tr1/utility</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002294320"></a><p class="title"><strong>Table 3.7. C++ TR 1 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/ccomplex</code></td><td align="left"><code class="filename">tr1/cfenv</code></td><td align="left"><code class="filename">tr1/cfloat</code></td><td align="left"><code class="filename">tr1/cmath</code></td><td align="left"><code class="filename">tr1/cinttypes</code></td></tr><tr><td align="left"><code class="filename">tr1/climits</code></td><td align="left"><code class="filename">tr1/cstdarg</code></td><td align="left"><code class="filename">tr1/cstdbool</code></td><td align="left"><code class="filename">tr1/cstdint</code></td><td align="left"><code class="filename">tr1/cstdio</code></td></tr><tr><td align="left"><code class="filename">tr1/cstdlib</code></td><td align="left"><code class="filename">tr1/ctgmath</code></td><td align="left"><code class="filename">tr1/ctime</code></td><td align="left"><code class="filename">tr1/cwchar</code></td><td align="left"><code class="filename">tr1/cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>Decimal floating-point arithmetic is available if the C++
2493
compiler supports scalar decimal floating-point types defined via
2494
<code class="code">__attribute__((mode(SD|DD|LD)))</code>.
2495
-</p><div class="table"><a id="idp13259904"></a><p class="title"><strong>Table 3.8. C++ TR 24733 Decimal Floating-Point Header</strong></p><div class="table-contents"><table summary="C++ TR 24733 Decimal Floating-Point Header" border="1"><colgroup><col align="left" class="c1" /></colgroup><tbody><tr><td align="left"><code class="filename">decimal/decimal</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
2496
+</p><div class="table"><a id="idm270002273248"></a><p class="title"><strong>Table 3.8. C++ TR 24733 Decimal Floating-Point Header</strong></p><div class="table-contents"><table summary="C++ TR 24733 Decimal Floating-Point Header" border="1"><colgroup><col align="left" class="c1" /></colgroup><tbody><tr><td align="left"><code class="filename">decimal/decimal</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
2497
Also included are files for the C++ ABI interface:
2498
-</p><div class="table"><a id="idp13265424"></a><p class="title"><strong>Table 3.9. C++ ABI Headers</strong></p><div class="table-contents"><table summary="C++ ABI Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">cxxabi.h</code></td><td align="left"><code class="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
2499
+</p><div class="table"><a id="idm270002267728"></a><p class="title"><strong>Table 3.9. C++ ABI Headers</strong></p><div class="table-contents"><table summary="C++ ABI Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">cxxabi.h</code></td><td align="left"><code class="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
2500
And a large variety of extensions.
2501
-</p><div class="table"><a id="idp13271824"></a><p class="title"><strong>Table 3.10. Extension Headers</strong></p><div class="table-contents"><table summary="Extension Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">ext/algorithm</code></td><td align="left"><code class="filename">ext/atomicity.h</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"><code class="filename">ext/cast.h</code></td></tr><tr><td align="left"><code class="filename">ext/codecvt_specializations.h</code></td><td align="left"><code class="filename">ext/concurrence.h</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="filename">ext/enc_filebuf.h</code></td><td align="left"><code class="filename">ext/extptr_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/functional</code></td><td align="left"><code class="filename">ext/iterator</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="filename">ext/memory</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="filename">ext/numeric</code></td><td align="left"><code class="filename">ext/numeric_traits.h</code></td><td align="left"><code class="filename">ext/pb_ds/assoc_container.h</code></td><td align="left"><code class="filename">ext/pb_ds/priority_queue.h</code></td></tr><tr><td align="left"><code class="filename">ext/pod_char_traits.h</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="filename">ext/rb_tree</code></td><td align="left"><code class="filename">ext/rope</code></td><td align="left"><code class="filename">ext/slist</code></td></tr><tr><td align="left"><code class="filename">ext/stdio_filebuf.h</code></td><td align="left"><code class="filename">ext/stdio_sync_filebuf.h</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left"><code class="filename">ext/typelist.h</code></td><td align="left"><code class="filename">ext/type_traits.h</code></td></tr><tr><td align="left"><code class="filename">ext/vstring.h</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13307552"></a><p class="title"><strong>Table 3.11. Extension Debug Headers</strong></p><div class="table-contents"><table summary="Extension Debug Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">debug/bitset</code></td><td align="left"><code class="filename">debug/deque</code></td><td align="left"><code class="filename">debug/list</code></td><td align="left"><code class="filename">debug/map</code></td><td align="left"><code class="filename">debug/set</code></td></tr><tr><td align="left"><code class="filename">debug/string</code></td><td align="left"><code class="filename">debug/unordered_map</code></td><td align="left"><code class="filename">debug/unordered_set</code></td><td align="left"><code class="filename">debug/vector</code></td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13322320"></a><p class="title"><strong>Table 3.12. Extension Profile Headers</strong></p><div class="table-contents"><table summary="Extension Profile Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><tbody><tr><td align="left"><code class="filename">profile/bitset</code></td><td align="left"><code class="filename">profile/deque</code></td><td align="left"><code class="filename">profile/list</code></td><td align="left"><code class="filename">profile/map</code></td></tr><tr><td align="left"><code class="filename">profile/set</code></td><td align="left"><code class="filename">profile/unordered_map</code></td><td align="left"><code class="filename">profile/unordered_set</code></td><td align="left"><code class="filename">profile/vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13335696"></a><p class="title"><strong>Table 3.13. Extension Parallel Headers</strong></p><div class="table-contents"><table summary="Extension Parallel Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">parallel/algorithm</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.mixing"></a>Mixing Headers</h3></div></div></div><p> A few simple rules.
2502
+</p><div class="table"><a id="idm270002261328"></a><p class="title"><strong>Table 3.10. Extension Headers</strong></p><div class="table-contents"><table summary="Extension Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">ext/algorithm</code></td><td align="left"><code class="filename">ext/atomicity.h</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"><code class="filename">ext/cast.h</code></td></tr><tr><td align="left"><code class="filename">ext/codecvt_specializations.h</code></td><td align="left"><code class="filename">ext/concurrence.h</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="filename">ext/enc_filebuf.h</code></td><td align="left"><code class="filename">ext/extptr_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/functional</code></td><td align="left"><code class="filename">ext/iterator</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="filename">ext/memory</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="filename">ext/numeric</code></td><td align="left"><code class="filename">ext/numeric_traits.h</code></td><td align="left"><code class="filename">ext/pb_ds/assoc_container.h</code></td><td align="left"><code class="filename">ext/pb_ds/priority_queue.h</code></td></tr><tr><td align="left"><code class="filename">ext/pod_char_traits.h</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="filename">ext/rb_tree</code></td><td align="left"><code class="filename">ext/rope</code></td><td align="left"><code class="filename">ext/slist</code></td></tr><tr><td align="left"><code class="filename">ext/stdio_filebuf.h</code></td><td align="left"><code class="filename">ext/stdio_sync_filebuf.h</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left"><code class="filename">ext/typelist.h</code></td><td align="left"><code class="filename">ext/type_traits.h</code></td></tr><tr><td align="left"><code class="filename">ext/vstring.h</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002225600"></a><p class="title"><strong>Table 3.11. Extension Debug Headers</strong></p><div class="table-contents"><table summary="Extension Debug Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">debug/bitset</code></td><td align="left"><code class="filename">debug/deque</code></td><td align="left"><code class="filename">debug/list</code></td><td align="left"><code class="filename">debug/map</code></td><td align="left"><code class="filename">debug/set</code></td></tr><tr><td align="left"><code class="filename">debug/string</code></td><td align="left"><code class="filename">debug/unordered_map</code></td><td align="left"><code class="filename">debug/unordered_set</code></td><td align="left"><code class="filename">debug/vector</code></td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002210832"></a><p class="title"><strong>Table 3.12. Extension Profile Headers</strong></p><div class="table-contents"><table summary="Extension Profile Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><tbody><tr><td align="left"><code class="filename">profile/bitset</code></td><td align="left"><code class="filename">profile/deque</code></td><td align="left"><code class="filename">profile/list</code></td><td align="left"><code class="filename">profile/map</code></td></tr><tr><td align="left"><code class="filename">profile/set</code></td><td align="left"><code class="filename">profile/unordered_map</code></td><td align="left"><code class="filename">profile/unordered_set</code></td><td align="left"><code class="filename">profile/vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002197456"></a><p class="title"><strong>Table 3.13. Extension Parallel Headers</strong></p><div class="table-contents"><table summary="Extension Parallel Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">parallel/algorithm</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.mixing"></a>Mixing Headers</h3></div></div></div><p> A few simple rules.
2503
</p><p>First, mixing different dialects of the standard headers is not
2504
possible. It's an all-or-nothing affair. Thus, code like
2505
</p><pre class="programlisting">
2506
Index: libstdc++-v3/doc/html/manual/using_namespaces.html
2507
===================================================================
2508
--- a/src/libstdc++-v3/doc/html/manual/using_namespaces.html (.../tags/gcc_4_8_2_release)
2509
+++ b/src/libstdc++-v3/doc/html/manual/using_namespaces.html (.../branches/gcc-4_8-branch)
2511
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2512
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Namespaces</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_macros.html" title="Macros" /><link rel="next" href="using_dynamic_or_shared.html" title="Linking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Namespaces</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_macros.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.namespaces"></a>Namespaces</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.all"></a>Available Namespaces</h3></div></div></div><p> There are three main namespaces.
2513
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Namespaces</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_macros.html" title="Macros" /><link rel="next" href="using_dynamic_or_shared.html" title="Linking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Namespaces</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_macros.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.namespaces"></a>Namespaces</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.all"></a>Available Namespaces</h3></div></div></div><p> There are three main namespaces.
2514
</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>std</p><p>The ISO C++ standards specify that "all library entities are defined
2515
within namespace std." This includes namespaces nested
2516
within <code class="code">namespace std</code>, such as <code class="code">namespace
2517
Index: libstdc++-v3/doc/html/manual/debug.html
2518
===================================================================
2519
--- a/src/libstdc++-v3/doc/html/manual/debug.html (.../tags/gcc_4_8_2_release)
2520
+++ b/src/libstdc++-v3/doc/html/manual/debug.html (.../branches/gcc-4_8-branch)
2522
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2523
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Debugging Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_exceptions.html" title="Exceptions" /><link rel="next" href="std_contents.html" title="Part II. Standard Contents" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Debugging Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="std_contents.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.debug"></a>Debugging Support</h2></div></div></div><p>
2524
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Debugging Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_exceptions.html" title="Exceptions" /><link rel="next" href="std_contents.html" title="Part II. Standard Contents" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Debugging Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="std_contents.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.debug"></a>Debugging Support</h2></div></div></div><p>
2525
There are numerous things that can be done to improve the ease with
2526
which C++ binaries are debugged when using the GNU tool chain. Here
2530
<a class="link" href="http://valgrind.org/docs/manual/hg-manual.html" target="_top">
2532
- <a class="link" href="http://code.google.com/p/data-race-test" target="_top">
2533
+ <a class="link" href="http://code.google.com/p/data-race-test/" target="_top">
2534
ThreadSanitizer</a>.
2536
With DRD, Helgrind and ThreadSanitizer you will need to define
2537
Index: libstdc++-v3/doc/html/manual/localization.html
2538
===================================================================
2539
--- a/src/libstdc++-v3/doc/html/manual/localization.html (.../tags/gcc_4_8_2_release)
2540
+++ b/src/libstdc++-v3/doc/html/manual/localization.html (.../branches/gcc-4_8-branch)
2542
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2543
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 8. Localization</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="strings.html" title="Chapter 7. Strings" /><link rel="next" href="facets.html" title="Facets" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8.
2544
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 8. Localization</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="strings.html" title="Chapter 7. Strings" /><link rel="next" href="facets.html" title="Facets" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8.
2547
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><th width="60%" align="center">Part II.
2550
</th><td width="20%" align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.localization"></a>Chapter 8.
2552
- <a id="idp15701088" class="indexterm"></a>
2553
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idp15778336">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.locales"></a>Locales</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.locales.locale"></a>locale</h3></div></div></div><p>
2554
+ <a id="idm269999830208" class="indexterm"></a>
2555
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm269999753024">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.locales"></a>Locales</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.locales.locale"></a>locale</h3></div></div></div><p>
2556
Describes the basic locale object, including nested
2557
classes id, facet, and the reference-counted implementation object,
2559
@@ -402,18 +402,18 @@
2560
What should non-required facet instantiations do? If the
2561
generic implementation is provided, then how to end-users
2562
provide specializations?
2563
- </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15744064"></a><p><span class="citetitle"><em class="citetitle">
2564
+ </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999787232"></a><p><span class="citetitle"><em class="citetitle">
2566
</em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">
2567
Chapters 6 Character Set Handling and 7 Locales and
2568
Internationalization
2569
- . </span></p></div><div class="biblioentry"><a id="idp15748832"></a><p><span class="citetitle"><em class="citetitle">
2570
+ . </span></p></div><div class="biblioentry"><a id="idm269999782464"></a><p><span class="citetitle"><em class="citetitle">
2572
- </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idp15751920"></a><p><span class="citetitle"><em class="citetitle">
2573
+ </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm269999779376"></a><p><span class="citetitle"><em class="citetitle">
2574
ISO/IEC 14882:1998 Programming languages - C++
2575
- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15754208"></a><p><span class="citetitle"><em class="citetitle">
2576
+ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269999777088"></a><p><span class="citetitle"><em class="citetitle">
2577
ISO/IEC 9899:1999 Programming languages - C
2578
- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp15756480"></a><p><span class="title"><em>
2579
+ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999774816"></a><p><span class="title"><em>
2580
<a class="link" href="http://www.opengroup.org/austin/" target="_top">
2581
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
2583
@@ -420,11 +420,11 @@
2584
</em>. </span><span class="copyright">Copyright © 2008
2585
The Open Group/The Institute of Electrical and Electronics
2587
- . </span></p></div><div class="biblioentry"><a id="idp15759712"></a><p><span class="citetitle"><em class="citetitle">
2588
+ . </span></p></div><div class="biblioentry"><a id="idm269999771584"></a><p><span class="citetitle"><em class="citetitle">
2589
The C++ Programming Language, Special Edition
2590
</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
2592
- . </span></span></p></div><div class="biblioentry"><a id="idp15764336"></a><p><span class="citetitle"><em class="citetitle">
2593
+ . </span></span></p></div><div class="biblioentry"><a id="idm269999766960"></a><p><span class="citetitle"><em class="citetitle">
2594
Standard C++ IOStreams and Locales
2595
</em>. </span><span class="subtitle">
2596
Advanced Programmer's Guide and Reference
2597
Index: libstdc++-v3/doc/html/manual/ext_algorithms.html
2598
===================================================================
2599
--- a/src/libstdc++-v3/doc/html/manual/ext_algorithms.html (.../tags/gcc_4_8_2_release)
2600
+++ b/src/libstdc++-v3/doc/html/manual/ext_algorithms.html (.../branches/gcc-4_8-branch)
2602
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2603
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 25. Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_utilities.html" title="Chapter 24. Utilities" /><link rel="next" href="ext_numerics.html" title="Chapter 26. Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 25. Algorithms</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><th width="60%" align="center">Part III.
2604
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 25. Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_utilities.html" title="Chapter 24. Utilities" /><link rel="next" href="ext_numerics.html" title="Chapter 26. Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 25. Algorithms</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><th width="60%" align="center">Part III.
2607
</th><td width="20%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.algorithms"></a>Chapter 25. Algorithms</h2></div></div></div><p>25.1.6 (count, count_if) is extended with two more versions of count
2608
Index: libstdc++-v3/doc/html/manual/debug_mode.html
2609
===================================================================
2610
--- a/src/libstdc++-v3/doc/html/manual/debug_mode.html (.../tags/gcc_4_8_2_release)
2611
+++ b/src/libstdc++-v3/doc/html/manual/debug_mode.html (.../branches/gcc-4_8-branch)
2613
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2614
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 17. Debug Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /><link rel="next" href="debug_mode_semantics.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 17. Debug Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><th width="60%" align="center">Part III.
2615
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 17. Debug Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III. Extensions" /><link rel="prev" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /><link rel="next" href="debug_mode_semantics.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 17. Debug Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><th width="60%" align="center">Part III.
2618
-</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode_semantics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode"></a>Chapter 17. Debug Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and
2619
+</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode_semantics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode"></a>Chapter 17. Debug Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and
2620
debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.intro"></a>Intro</h2></div></div></div><p>
2621
By default, libstdc++ is built with efficiency in mind, and
2622
therefore performs little or no error checking that is not
2623
Index: libstdc++-v3/doc/html/manual/profile_mode_design.html
2624
===================================================================
2625
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_design.html (.../tags/gcc_4_8_2_release)
2626
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_design.html (.../branches/gcc-4_8-branch)
2628
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2629
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="next" href="profile_mode_api.html" title="Extensions for Custom Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_api.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.design"></a>Design</h2></div></div></div><p>
2630
-</p><div class="table"><a id="idp16981200"></a><p class="title"><strong>Table 19.1. Profile Code Location</strong></p><div class="table-contents"><table summary="Profile Code Location" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Code Location</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><code class="code">libstdc++-v3/include/std/*</code></td><td align="left">Preprocessor code to redirect to profile extension headers.</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/*</code></td><td align="left">Profile extension public headers (map, vector, ...).</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/impl/*</code></td><td align="left">Profile extension internals. Implementation files are
2631
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="next" href="profile_mode_api.html" title="Extensions for Custom Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_api.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.design"></a>Design</h2></div></div></div><p>
2632
+</p><div class="table"><a id="idm269998550064"></a><p class="title"><strong>Table 19.1. Profile Code Location</strong></p><div class="table-contents"><table summary="Profile Code Location" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Code Location</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><code class="code">libstdc++-v3/include/std/*</code></td><td align="left">Preprocessor code to redirect to profile extension headers.</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/*</code></td><td align="left">Profile extension public headers (map, vector, ...).</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/impl/*</code></td><td align="left">Profile extension internals. Implementation files are
2633
only included from <code class="code">impl/profiler.h</code>, which is the only
2634
file included from the public headers.</td></tr></tbody></table></div></div><br class="table-break" /><p>
2635
</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.wrapper"></a>Wrapper Model</h3></div></div></div><p>
2636
Index: libstdc++-v3/doc/html/manual/using_concurrency.html
2637
===================================================================
2638
--- a/src/libstdc++-v3/doc/html/manual/using_concurrency.html (.../tags/gcc_4_8_2_release)
2639
+++ b/src/libstdc++-v3/doc/html/manual/using_concurrency.html (.../branches/gcc-4_8-branch)
2641
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2642
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_dynamic_or_shared.html" title="Linking" /><link rel="next" href="using_exceptions.html" title="Exceptions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.concurrency"></a>Concurrency</h2></div></div></div><p>This section discusses issues surrounding the proper compilation
2643
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_dynamic_or_shared.html" title="Linking" /><link rel="next" href="using_exceptions.html" title="Exceptions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.concurrency"></a>Concurrency</h2></div></div></div><p>This section discusses issues surrounding the proper compilation
2644
of multithreaded applications which use the Standard C++
2645
library. This information is GCC-specific since the C++
2646
standard does not address matters of multithreaded applications.
2647
Index: libstdc++-v3/doc/html/manual/mt_allocator_impl.html
2648
===================================================================
2649
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator_impl.html (.../tags/gcc_4_8_2_release)
2650
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator_impl.html (.../branches/gcc-4_8-branch)
2652
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2653
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_design.html" title="Design Issues" /><link rel="next" href="mt_allocator_ex_single.html" title="Single Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_design.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_ex_single.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.tune"></a>Tunable Parameters</h3></div></div></div><p>Certain allocation parameters can be modified, or tuned. There
2654
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_design.html" title="Design Issues" /><link rel="next" href="mt_allocator_ex_single.html" title="Single Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_design.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_ex_single.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.tune"></a>Tunable Parameters</h3></div></div></div><p>Certain allocation parameters can be modified, or tuned. There
2655
exists a nested <code class="code">struct __pool_base::_Tune</code> that contains all
2656
these parameters, which include settings for
2657
</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>Alignment</p></li><li class="listitem"><p>Maximum bytes before calling <code class="code">::operator new</code> directly</p></li><li class="listitem"><p>Minimum bytes</p></li><li class="listitem"><p>Size of underlying global allocations</p></li><li class="listitem"><p>Maximum number of supported threads</p></li><li class="listitem"><p>Migration of deallocations to the global free list</p></li><li class="listitem"><p>Shunt for global <code class="code">new</code> and <code class="code">delete</code></p></li></ul></div><p>Adjusting parameters for a given instance of an allocator can only
2658
Index: libstdc++-v3/doc/html/manual/appendix_gfdl.html
2659
===================================================================
2660
--- a/src/libstdc++-v3/doc/html/manual/appendix_gfdl.html (.../tags/gcc_4_8_2_release)
2661
+++ b/src/libstdc++-v3/doc/html/manual/appendix_gfdl.html (.../branches/gcc-4_8-branch)
2663
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2664
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix E. GNU Free Documentation License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV. Appendices" /><link rel="prev" href="appendix_gpl.html" title="Appendix D. GNU General Public License version 3" /><link rel="next" href="../bk02.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix E. GNU Free Documentation License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><th width="60%" align="center">Part IV.
2665
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix E. GNU Free Documentation License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV. Appendices" /><link rel="prev" href="appendix_gpl.html" title="Appendix D. GNU General Public License version 3" /><link rel="next" href="../bk02.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix E. GNU Free Documentation License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><th width="60%" align="center">Part IV.
2667
</th><td width="20%" align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.gfdl-1.3"></a>GNU Free Documentation License</h1></div></div></div><p>Version 1.3, 3 November 2008</p><p>
2668
Copyright © 2000, 2001, 2002, 2007, 2008
2669
Index: libstdc++-v3/doc/html/manual/containers.html
2670
===================================================================
2671
--- a/src/libstdc++-v3/doc/html/manual/containers.html (.../tags/gcc_4_8_2_release)
2672
+++ b/src/libstdc++-v3/doc/html/manual/containers.html (.../branches/gcc-4_8-branch)
2674
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2675
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 9. Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="facets.html" title="Facets" /><link rel="next" href="associative.html" title="Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9.
2676
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 9. Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="facets.html" title="Facets" /><link rel="next" href="associative.html" title="Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9.
2679
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><th width="60%" align="center">Part II.
2682
</th><td width="20%" align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.containers"></a>Chapter 9.
2684
- <a id="idp16037808" class="indexterm"></a>
2685
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.sequences"></a>Sequences</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.list"></a>list</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.list.size"></a>list::size() is O(n)</h4></div></div></div><p>
2686
+ <a id="idm269999493408" class="indexterm"></a>
2687
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.sequences"></a>Sequences</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.list"></a>list</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.list.size"></a>list::size() is O(n)</h4></div></div></div><p>
2688
Yes it is, and that's okay. This is a decision that we preserved
2689
when we imported SGI's STL implementation. The following is
2690
quoted from <a class="link" href="http://www.sgi.com/tech/stl/FAQ.html" target="_top">their FAQ</a>:
2691
Index: libstdc++-v3/doc/html/manual/io.html
2692
===================================================================
2693
--- a/src/libstdc++-v3/doc/html/manual/io.html (.../tags/gcc_4_8_2_release)
2694
+++ b/src/libstdc++-v3/doc/html/manual/io.html (.../branches/gcc-4_8-branch)
2696
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2697
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 13. Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="numerics_and_c.html" title="Interacting with C" /><link rel="next" href="streambufs.html" title="Stream Buffers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13.
2698
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 13. Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="numerics_and_c.html" title="Interacting with C" /><link rel="next" href="streambufs.html" title="Stream Buffers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13.
2701
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><th width="60%" align="center">Part II.
2704
</th><td width="20%" align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.io"></a>Chapter 13.
2706
- <a id="idp16257600" class="indexterm"></a>
2707
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="section"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="section"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="section"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="section"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="section"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="section"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="section"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="section"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.objects"></a>Iostream Objects</h2></div></div></div><p>To minimize the time you have to wait on the compiler, it's good to
2708
+ <a id="idm269999273616" class="indexterm"></a>
2709
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="section"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="section"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="section"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="section"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="section"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="section"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="section"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="section"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.objects"></a>Iostream Objects</h2></div></div></div><p>To minimize the time you have to wait on the compiler, it's good to
2710
only include the headers you really need. Many people simply include
2711
<iostream> when they don't need to -- and that can <span class="emphasis"><em>penalize
2712
your runtime as well.</em></span> Here are some tips on which header to use
2713
Index: libstdc++-v3/doc/html/manual/index.html
2714
===================================================================
2715
--- a/src/libstdc++-v3/doc/html/manual/index.html (.../tags/gcc_4_8_2_release)
2716
+++ b/src/libstdc++-v3/doc/html/manual/index.html (.../branches/gcc-4_8-branch)
2718
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2719
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library Manual</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="../index.html" title="The GNU C++ Library" /><link rel="prev" href="../index.html" title="The GNU C++ Library" /><link rel="next" href="intro.html" title="Part I. Introduction" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library Manual</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="../index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><div><div><h1 class="title"><a id="manual"></a>The GNU C++ Library Manual</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname"></span> <span class="surname"></span></h3></div><div class="author"><h3 class="author"><span class="firstname">Paolo</span> <span class="surname">Carlini</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Phil</span> <span class="surname">Edwards</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Doug</span> <span class="surname">Gregor</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Dhruv</span> <span class="surname">Matani</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jason</span> <span class="surname">Merrill</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Mark</span> <span class="surname">Mitchell</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Nathan</span> <span class="surname">Myers</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Felix</span> <span class="surname">Natter</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Stefan</span> <span class="surname">Olsson</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Ami</span> <span class="surname">Tavory</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jonathan</span> <span class="surname">Wakely</span></h3></div></div></div><div><p class="copyright">Copyright © 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
2720
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library Manual</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="../index.html" title="The GNU C++ Library" /><link rel="prev" href="../index.html" title="The GNU C++ Library" /><link rel="next" href="intro.html" title="Part I. Introduction" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library Manual</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="../index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><div><div><h1 class="title"><a id="manual"></a>The GNU C++ Library Manual</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname"></span> <span class="surname"></span></h3></div><div class="author"><h3 class="author"><span class="firstname">Paolo</span> <span class="surname">Carlini</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Phil</span> <span class="surname">Edwards</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Doug</span> <span class="surname">Gregor</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Dhruv</span> <span class="surname">Matani</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jason</span> <span class="surname">Merrill</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Mark</span> <span class="surname">Mitchell</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Nathan</span> <span class="surname">Myers</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Felix</span> <span class="surname">Natter</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Stefan</span> <span class="surname">Olsson</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Ami</span> <span class="surname">Tavory</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jonathan</span> <span class="surname">Wakely</span></h3></div></div></div><div><p class="copyright">Copyright © 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
2721
<a class="link" href="http://www.fsf.org" target="_top">FSF</a>
2722
- </p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="part"><a href="intro.html">I.
2723
+ </p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="part"><a href="intro.html">I.
2726
</a></span></dt><dd><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="std_contents.html">II.
2728
</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6.
2731
-</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp13920976">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13924528">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13937824">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15512272">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15534784">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15542080">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15556704">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15573056">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15576640">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7.
2732
+</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270001611968">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm270001608416">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm270001595120">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270000019344">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999996832">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269999989536">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999974912">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269999958496">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269999954912">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7.
2735
</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="localization.html">8.
2738
-</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idp15778336">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9.
2739
+</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm269999753024">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9.
2742
</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="iterators.html">10.
2743
@@ -143,19 +143,19 @@
2745
</a></span></dt><dt><span class="appendix"><a href="appendix_gpl.html">D.
2746
<acronym class="acronym">GNU</acronym> General Public License version 3
2747
- </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>22.1. <a href="policy_data_structures.html#idp17613296">Node Invariants</a></dt><dt>22.2. <a href="policy_data_structures.html#idp17619952">Underlying Associative Data Structures</a></dt><dt>22.3. <a href="policy_data_structures.html#idp17651648">Range Iteration in Different Data Structures</a></dt><dt>22.4. <a href="policy_data_structures.html#idp17666528">Point Iteration in Hash Data Structures</a></dt><dt>22.5. <a href="policy_data_structures.html#idp17675840">Effect of erase in different underlying data structures</a></dt><dt>22.6. <a href="policy_data_structures.html#idp17743424">Underlying Priority Queue Data Structures</a></dt><dt>22.7. <a href="policy_data_structures_using.html#idp17806128">Exception Hierarchy</a></dt><dt>22.8. <a href="policy_data_structures_design.html#idp18000448">Non-unique Mapping Standard Containers</a></dt><dt>22.9. <a href="policy_data_structures_design.html#fig.pbds_embedded_lists_2">
2748
+ </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>22.1. <a href="policy_data_structures.html#idm269997917584">Node Invariants</a></dt><dt>22.2. <a href="policy_data_structures.html#idm269997910864">Underlying Associative Data Structures</a></dt><dt>22.3. <a href="policy_data_structures.html#idm269997879168">Range Iteration in Different Data Structures</a></dt><dt>22.4. <a href="policy_data_structures.html#idm269997864256">Point Iteration in Hash Data Structures</a></dt><dt>22.5. <a href="policy_data_structures.html#idm269997855056">Effect of erase in different underlying data structures</a></dt><dt>22.6. <a href="policy_data_structures.html#idm269997787392">Underlying Priority Queue Data Structures</a></dt><dt>22.7. <a href="policy_data_structures_using.html#idm269997724688">Exception Hierarchy</a></dt><dt>22.8. <a href="policy_data_structures_design.html#idm269997530416">Non-unique Mapping Standard Containers</a></dt><dt>22.9. <a href="policy_data_structures_design.html#fig.pbds_embedded_lists_2">
2749
Effect of embedded lists in
2750
<code class="classname">std::multimap</code>
2751
- </a></dt><dt>22.10. <a href="policy_data_structures_design.html#idp18023952">Non-unique Mapping Containers</a></dt><dt>22.11. <a href="policy_data_structures_design.html#idp18043824">Point Iterator Hierarchy</a></dt><dt>22.12. <a href="policy_data_structures_design.html#idp18057168">Invalidation Guarantee Tags Hierarchy</a></dt><dt>22.13. <a href="policy_data_structures_design.html#idp18087392">Container Tag Hierarchy</a></dt><dt>22.14. <a href="policy_data_structures_design.html#idp18127536">Hash functions, ranged-hash functions, and
2752
- range-hashing functions</a></dt><dt>22.15. <a href="policy_data_structures_design.html#idp18191968">Insert hash sequence diagram</a></dt><dt>22.16. <a href="policy_data_structures_design.html#idp18199024">Insert hash sequence diagram with a null policy</a></dt><dt>22.17. <a href="policy_data_structures_design.html#idp18215840">Hash policy class diagram</a></dt><dt>22.18. <a href="policy_data_structures_design.html#idp18234944">Balls and bins</a></dt><dt>22.19. <a href="policy_data_structures_design.html#idp18265728">Insert resize sequence diagram</a></dt><dt>22.20. <a href="policy_data_structures_design.html#idp18273504">Standard resize policy trigger sequence
2753
- diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idp18277664">Standard resize policy size sequence
2754
- diagram</a></dt><dt>22.22. <a href="policy_data_structures_design.html#idp18355696">Tree node invariants</a></dt><dt>22.23. <a href="policy_data_structures_design.html#idp18365136">Tree node invalidation</a></dt><dt>22.24. <a href="policy_data_structures_design.html#idp18378304">A tree and its update policy</a></dt><dt>22.25. <a href="policy_data_structures_design.html#idp18389968">Restoring node invariants</a></dt><dt>22.26. <a href="policy_data_structures_design.html#idp18398144">Insert update sequence</a></dt><dt>22.27. <a href="policy_data_structures_design.html#idp18420400">Useless update path</a></dt><dt>22.28. <a href="policy_data_structures_design.html#idp18465088">A PATRICIA trie</a></dt><dt>22.29. <a href="policy_data_structures_design.html#idp18475584">A trie and its update policy</a></dt><dt>22.30. <a href="policy_data_structures_design.html#idp18506160">A simple list</a></dt><dt>22.31. <a href="policy_data_structures_design.html#idp18511744">The counter algorithm</a></dt><dt>22.32. <a href="policy_data_structures_design.html#idp18575568">Underlying Priority-Queue Data-Structures.</a></dt><dt>22.33. <a href="policy_data_structures_design.html#idp18610544">Priority-Queue Data-Structure Tags.</a></dt><dt>B.1. <a href="appendix_porting.html#idp22035648">Configure and Build File Dependencies</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>1.1. <a href="status.html#idp452240">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#idp8670848">C++ 2011 Implementation Status</a></dt><dt>1.3. <a href="status.html#idp7483200">C++ TR1 Implementation Status</a></dt><dt>1.4. <a href="status.html#idp12559072">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using.html#idp13051936">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#idp13079360">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#idp13115840">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#idp13140576">C++ 2011 Library Headers</a></dt><dt>3.5. <a href="using_headers.html#idp13192016">C++ 2011 Library Headers for C Library Facilities</a></dt><dt>3.6. <a href="using_headers.html#idp13221904">C++ TR 1 Library Headers</a></dt><dt>3.7. <a href="using_headers.html#idp13238832">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.8. <a href="using_headers.html#idp13259904">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.9. <a href="using_headers.html#idp13265424">C++ ABI Headers</a></dt><dt>3.10. <a href="using_headers.html#idp13271824">Extension Headers</a></dt><dt>3.11. <a href="using_headers.html#idp13307552">Extension Debug Headers</a></dt><dt>3.12. <a href="using_headers.html#idp13322320">Extension Profile Headers</a></dt><dt>3.13. <a href="using_headers.html#idp13335696">Extension Parallel Headers</a></dt><dt>17.1. <a href="debug_mode_using.html#idp16490400">Debugging Containers</a></dt><dt>17.2. <a href="debug_mode_using.html#idp16535296">Debugging Containers C++11</a></dt><dt>18.1. <a href="parallel_mode_using.html#idp16725920">Parallel Algorithms</a></dt><dt>19.1. <a href="profile_mode_design.html#idp16981200">Profile Code Location</a></dt><dt>19.2. <a href="profile_mode_diagnostics.html#idp17088912">Profile Diagnostics</a></dt><dt>21.1. <a href="bitmap_allocator_impl.html#idp17500848">Bitmap Allocator Memory Map</a></dt><dt>B.1. <a href="documentation_hacking.html#idp22162432">Doxygen Prerequisites</a></dt><dt>B.2. <a href="documentation_hacking.html#idp22238096">HTML to Doxygen Markup Comparison</a></dt><dt>B.3. <a href="documentation_hacking.html#idp22257536">Docbook Prerequisites</a></dt><dt>B.4. <a href="documentation_hacking.html#idp22335040">HTML to Docbook XML Markup Comparison</a></dt><dt>B.5. <a href="documentation_hacking.html#idp22359184">Docbook XML Element Use</a></dt><dt>B.6. <a href="api.html#idp23030528">Extension Allocators</a></dt><dt>B.7. <a href="api.html#idp23058160">Extension Allocators Continued</a></dt></dl></div><div class="list-of-equations"><p><strong>List of Equations</strong></p><dl><dt>22.1. <a href="policy_data_structures_design.html#idp18141344">Ranged Hash Function</a></dt><dt>22.2. <a href="policy_data_structures_design.html#idp18147232">Range-Hashing, Division Method</a></dt><dt>22.3. <a href="policy_data_structures_design.html#idp18151744">Division via Prime Modulo</a></dt><dt>22.4. <a href="policy_data_structures_design.html#idp18153568">Division via Bit Mask</a></dt><dt>22.5. <a href="policy_data_structures_design.html#idp18163200">
2755
+ </a></dt><dt>22.10. <a href="policy_data_structures_design.html#idm269997506912">Non-unique Mapping Containers</a></dt><dt>22.11. <a href="policy_data_structures_design.html#idm269997487104">Point Iterator Hierarchy</a></dt><dt>22.12. <a href="policy_data_structures_design.html#idm269997473760">Invalidation Guarantee Tags Hierarchy</a></dt><dt>22.13. <a href="policy_data_structures_design.html#idm269997443664">Container Tag Hierarchy</a></dt><dt>22.14. <a href="policy_data_structures_design.html#idm269997403584">Hash functions, ranged-hash functions, and
2756
+ range-hashing functions</a></dt><dt>22.15. <a href="policy_data_structures_design.html#idm269997339216">Insert hash sequence diagram</a></dt><dt>22.16. <a href="policy_data_structures_design.html#idm269997332160">Insert hash sequence diagram with a null policy</a></dt><dt>22.17. <a href="policy_data_structures_design.html#idm269997315408">Hash policy class diagram</a></dt><dt>22.18. <a href="policy_data_structures_design.html#idm269997296368">Balls and bins</a></dt><dt>22.19. <a href="policy_data_structures_design.html#idm269997265648">Insert resize sequence diagram</a></dt><dt>22.20. <a href="policy_data_structures_design.html#idm269997257872">Standard resize policy trigger sequence
2757
+ diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idm269997253712">Standard resize policy size sequence
2758
+ diagram</a></dt><dt>22.22. <a href="policy_data_structures_design.html#idm269997175616">Tree node invariants</a></dt><dt>22.23. <a href="policy_data_structures_design.html#idm269997166176">Tree node invalidation</a></dt><dt>22.24. <a href="policy_data_structures_design.html#idm269997153072">A tree and its update policy</a></dt><dt>22.25. <a href="policy_data_structures_design.html#idm269997141408">Restoring node invariants</a></dt><dt>22.26. <a href="policy_data_structures_design.html#idm269997133232">Insert update sequence</a></dt><dt>22.27. <a href="policy_data_structures_design.html#idm269997110976">Useless update path</a></dt><dt>22.28. <a href="policy_data_structures_design.html#idm269997066288">A PATRICIA trie</a></dt><dt>22.29. <a href="policy_data_structures_design.html#idm269997055856">A trie and its update policy</a></dt><dt>22.30. <a href="policy_data_structures_design.html#idm269997025344">A simple list</a></dt><dt>22.31. <a href="policy_data_structures_design.html#idm269997019760">The counter algorithm</a></dt><dt>22.32. <a href="policy_data_structures_design.html#idm269996955920">Underlying Priority-Queue Data-Structures.</a></dt><dt>22.33. <a href="policy_data_structures_design.html#idm269996920880">Priority-Queue Data-Structure Tags.</a></dt><dt>B.1. <a href="appendix_porting.html#idm269993497120">Configure and Build File Dependencies</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>1.1. <a href="status.html#idm270008034928">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#idm270007982624">C++ 2011 Implementation Status</a></dt><dt>1.3. <a href="status.html#idm270006687472">C++ TR1 Implementation Status</a></dt><dt>1.4. <a href="status.html#idm270002960368">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using.html#idm270002481088">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#idm270002453792">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#idm270002417312">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#idm270002392576">C++ 2011 Library Headers</a></dt><dt>3.5. <a href="using_headers.html#idm270002341136">C++ 2011 Library Headers for C Library Facilities</a></dt><dt>3.6. <a href="using_headers.html#idm270002311248">C++ TR 1 Library Headers</a></dt><dt>3.7. <a href="using_headers.html#idm270002294320">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.8. <a href="using_headers.html#idm270002273248">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.9. <a href="using_headers.html#idm270002267728">C++ ABI Headers</a></dt><dt>3.10. <a href="using_headers.html#idm270002261328">Extension Headers</a></dt><dt>3.11. <a href="using_headers.html#idm270002225600">Extension Debug Headers</a></dt><dt>3.12. <a href="using_headers.html#idm270002210832">Extension Profile Headers</a></dt><dt>3.13. <a href="using_headers.html#idm270002197456">Extension Parallel Headers</a></dt><dt>17.1. <a href="debug_mode_using.html#idm269999040896">Debugging Containers</a></dt><dt>17.2. <a href="debug_mode_using.html#idm269998996000">Debugging Containers C++11</a></dt><dt>18.1. <a href="parallel_mode_using.html#idm269998805216">Parallel Algorithms</a></dt><dt>19.1. <a href="profile_mode_design.html#idm269998550064">Profile Code Location</a></dt><dt>19.2. <a href="profile_mode_diagnostics.html#idm269998442544">Profile Diagnostics</a></dt><dt>21.1. <a href="bitmap_allocator_impl.html#idm269998030352">Bitmap Allocator Memory Map</a></dt><dt>B.1. <a href="documentation_hacking.html#idm269993370272">Doxygen Prerequisites</a></dt><dt>B.2. <a href="documentation_hacking.html#idm269993294592">HTML to Doxygen Markup Comparison</a></dt><dt>B.3. <a href="documentation_hacking.html#idm269993275152">Docbook Prerequisites</a></dt><dt>B.4. <a href="documentation_hacking.html#idm269993197520">HTML to Docbook XML Markup Comparison</a></dt><dt>B.5. <a href="documentation_hacking.html#idm269993173376">Docbook XML Element Use</a></dt><dt>B.6. <a href="api.html#idm269992502096">Extension Allocators</a></dt><dt>B.7. <a href="api.html#idm269992474464">Extension Allocators Continued</a></dt></dl></div><div class="list-of-equations"><p><strong>List of Equations</strong></p><dl><dt>22.1. <a href="policy_data_structures_design.html#idm269997389776">Ranged Hash Function</a></dt><dt>22.2. <a href="policy_data_structures_design.html#idm269997383888">Range-Hashing, Division Method</a></dt><dt>22.3. <a href="policy_data_structures_design.html#idm269997379376">Division via Prime Modulo</a></dt><dt>22.4. <a href="policy_data_structures_design.html#idm269997377552">Division via Bit Mask</a></dt><dt>22.5. <a href="policy_data_structures_design.html#idm269997367984">
2759
A Standard String Hash Function
2760
- </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idp18169344">
2761
+ </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idm269997361840">
2762
Only k String DNA Hash
2763
- </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idp18240448">
2764
+ </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idm269997290864">
2765
Probability of Probe Sequence of Length k
2766
- </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idp18247216">
2767
+ </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idm269997284096">
2768
Probability Probe Sequence in Some Bin
2769
</a></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="../index.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Part I.
2771
Index: libstdc++-v3/doc/html/manual/numerics_and_c.html
2772
===================================================================
2773
--- a/src/libstdc++-v3/doc/html/manual/numerics_and_c.html (.../tags/gcc_4_8_2_release)
2774
+++ b/src/libstdc++-v3/doc/html/manual/numerics_and_c.html (.../branches/gcc-4_8-branch)
2776
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2777
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="numerics.html" title="Chapter 12. Numerics" /><link rel="prev" href="generalized_numeric_operations.html" title="Generalized Operations" /><link rel="next" href="io.html" title="Chapter 13. Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><th width="60%" align="center">Chapter 12.
2778
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="numerics.html" title="Chapter 12. Numerics" /><link rel="prev" href="generalized_numeric_operations.html" title="Generalized Operations" /><link rel="next" href="io.html" title="Chapter 13. Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><th width="60%" align="center">Chapter 12.
2781
</th><td width="20%" align="right"> <a accesskey="n" href="io.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.c"></a>Interacting with C</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.c.array"></a>Numerics vs. Arrays</h3></div></div></div><p>One of the major reasons why FORTRAN can chew through numbers so well
2782
Index: libstdc++-v3/doc/html/manual/appendix_gpl.html
2783
===================================================================
2784
--- a/src/libstdc++-v3/doc/html/manual/appendix_gpl.html (.../tags/gcc_4_8_2_release)
2785
+++ b/src/libstdc++-v3/doc/html/manual/appendix_gpl.html (.../branches/gcc-4_8-branch)
2787
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2788
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix D. GNU General Public License version 3</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV. Appendices" /><link rel="prev" href="appendix_free.html" title="Appendix C. Free Software Needs Free Documentation" /><link rel="next" href="appendix_gfdl.html" title="Appendix E. GNU Free Documentation License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix D.
2789
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix D. GNU General Public License version 3</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV. Appendices" /><link rel="prev" href="appendix_free.html" title="Appendix C. Free Software Needs Free Documentation" /><link rel="next" href="appendix_gfdl.html" title="Appendix E. GNU Free Documentation License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix D.
2790
<acronym class="acronym">GNU</acronym> General Public License version 3
2791
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_free.html">Prev</a> </td><th width="60%" align="center">Part IV.
2795
The precise terms and conditions for copying, distribution and modification
2797
- </p><h2><a id="idp23466384"></a>
2798
+ </p><h2><a id="idm269992066368"></a>
2799
TERMS AND CONDITIONS
2800
</h2><h2><a id="gpl-3-definitions"></a>
2803
waiver of all civil liability in connection with the Program, unless a
2804
warranty or assumption of liability accompanies a copy of the Program in
2806
- </p><h2><a id="idp23565184"></a>
2807
+ </p><h2><a id="idm269991967568"></a>
2808
END OF TERMS AND CONDITIONS
2809
</h2><h2><a id="HowToApply"></a>
2810
How to Apply These Terms to Your New Programs
2811
Index: libstdc++-v3/doc/html/manual/source_code_style.html
2812
===================================================================
2813
--- a/src/libstdc++-v3/doc/html/manual/source_code_style.html (.../tags/gcc_4_8_2_release)
2814
+++ b/src/libstdc++-v3/doc/html/manual/source_code_style.html (.../branches/gcc-4_8-branch)
2816
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2817
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Coding Style</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A. Contributing" /><link rel="prev" href="source_organization.html" title="Directory Layout and Source Conventions" /><link rel="next" href="source_design_notes.html" title="Design Notes" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Coding Style</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_organization.html">Prev</a> </td><th width="60%" align="center">Appendix A.
2818
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Coding Style</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A. Contributing" /><link rel="prev" href="source_organization.html" title="Directory Layout and Source Conventions" /><link rel="next" href="source_design_notes.html" title="Design Notes" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Coding Style</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_organization.html">Prev</a> </td><th width="60%" align="center">Appendix A.
2821
</th><td width="20%" align="right"> <a accesskey="n" href="source_design_notes.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.coding_style"></a>Coding Style</h2></div></div></div><p>
2822
Index: libstdc++-v3/doc/html/manual/streambufs.html
2823
===================================================================
2824
--- a/src/libstdc++-v3/doc/html/manual/streambufs.html (.../tags/gcc_4_8_2_release)
2825
+++ b/src/libstdc++-v3/doc/html/manual/streambufs.html (.../branches/gcc-4_8-branch)
2827
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2828
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Stream Buffers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13. Input and Output" /><link rel="prev" href="io.html" title="Chapter 13. Input and Output" /><link rel="next" href="stringstreams.html" title="Memory Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Stream Buffers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io.html">Prev</a> </td><th width="60%" align="center">Chapter 13.
2829
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Stream Buffers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13. Input and Output" /><link rel="prev" href="io.html" title="Chapter 13. Input and Output" /><link rel="next" href="stringstreams.html" title="Memory Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Stream Buffers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io.html">Prev</a> </td><th width="60%" align="center">Chapter 13.
2832
</th><td width="20%" align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.streambufs"></a>Stream Buffers</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.derived"></a>Derived streambuf Classes</h3></div></div></div><p>
2833
Index: libstdc++-v3/doc/html/manual/utilities.html
2834
===================================================================
2835
--- a/src/libstdc++-v3/doc/html/manual/utilities.html (.../tags/gcc_4_8_2_release)
2836
+++ b/src/libstdc++-v3/doc/html/manual/utilities.html (.../branches/gcc-4_8-branch)
2838
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2839
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 6. Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="concept_checking.html" title="Concept Checking" /><link rel="next" href="pairs.html" title="Pairs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6.
2840
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 6. Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II. Standard Contents" /><link rel="prev" href="concept_checking.html" title="Concept Checking" /><link rel="next" href="pairs.html" title="Pairs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6.
2843
</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="concept_checking.html">Prev</a> </td><th width="60%" align="center">Part II.
2846
</th><td width="20%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.util"></a>Chapter 6.
2848
- <a id="idp13862416" class="indexterm"></a>
2849
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp13920976">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13924528">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13937824">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15512272">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15534784">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15542080">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15556704">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15573056">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15576640">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.functors"></a>Functors</h2></div></div></div><p>If you don't know what functors are, you're not alone. Many people
2850
+ <a id="idm270001670464" class="indexterm"></a>
2851
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270001611968">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm270001608416">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm270001595120">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270000019344">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999996832">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269999989536">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999974912">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269999958496">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269999954912">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.functors"></a>Functors</h2></div></div></div><p>If you don't know what functors are, you're not alone. Many people
2852
get slightly the wrong idea. In the interest of not reinventing
2853
the wheel, we will refer you to the introduction to the functor
2854
concept written by SGI as part of their STL, in
2855
Index: libstdc++-v3/include/debug/functions.h
2856
===================================================================
2857
--- a/src/libstdc++-v3/include/debug/functions.h (.../tags/gcc_4_8_2_release)
2858
+++ b/src/libstdc++-v3/include/debug/functions.h (.../branches/gcc-4_8-branch)
2859
@@ -345,11 +345,13 @@
2860
return __check_sorted_set_aux(__first, __last, __pred, _SameType());
2863
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
2864
+ // 270. Binary search requirements overly strict
2865
+ // Determine if a sequence is partitioned w.r.t. this element.
2866
template<typename _ForwardIterator, typename _Tp>
2868
- __check_partitioned_lower_aux(_ForwardIterator __first,
2869
- _ForwardIterator __last, const _Tp& __value,
2870
- std::forward_iterator_tag)
2871
+ __check_partitioned_lower(_ForwardIterator __first,
2872
+ _ForwardIterator __last, const _Tp& __value)
2874
while (__first != __last && *__first < __value)
2876
@@ -362,38 +364,11 @@
2877
return __first == __last;
2880
- // For performance reason, as the iterator range has been validated, check on
2881
- // random access safe iterators is done using the base iterator.
2882
- template<typename _Iterator, typename _Sequence, typename _Tp>
2884
- __check_partitioned_lower_aux(
2885
- const _Safe_iterator<_Iterator, _Sequence>& __first,
2886
- const _Safe_iterator<_Iterator, _Sequence>& __last,
2887
- const _Tp& __value,
2888
- std::random_access_iterator_tag __tag)
2890
- return __check_partitioned_lower_aux(__first.base(), __last.base(),
2894
- // _GLIBCXX_RESOLVE_LIB_DEFECTS
2895
- // 270. Binary search requirements overly strict
2896
- // Determine if a sequence is partitioned w.r.t. this element.
2897
template<typename _ForwardIterator, typename _Tp>
2899
- __check_partitioned_lower(_ForwardIterator __first,
2900
+ __check_partitioned_upper(_ForwardIterator __first,
2901
_ForwardIterator __last, const _Tp& __value)
2903
- return __check_partitioned_lower_aux(__first, __last, __value,
2904
- std::__iterator_category(__first));
2907
- template<typename _ForwardIterator, typename _Tp>
2909
- __check_partitioned_upper_aux(_ForwardIterator __first,
2910
- _ForwardIterator __last, const _Tp& __value,
2911
- std::forward_iterator_tag)
2913
while (__first != __last && !(__value < *__first))
2915
if (__first != __last)
2916
@@ -405,35 +380,12 @@
2917
return __first == __last;
2920
- // For performance reason, as the iterator range has been validated, check on
2921
- // random access safe iterators is done using the base iterator.
2922
- template<typename _Iterator, typename _Sequence, typename _Tp>
2924
- __check_partitioned_upper_aux(
2925
- const _Safe_iterator<_Iterator, _Sequence>& __first,
2926
- const _Safe_iterator<_Iterator, _Sequence>& __last,
2927
- const _Tp& __value,
2928
- std::random_access_iterator_tag __tag)
2930
- return __check_partitioned_upper_aux(__first.base(), __last.base(),
2934
- template<typename _ForwardIterator, typename _Tp>
2936
- __check_partitioned_upper(_ForwardIterator __first,
2937
- _ForwardIterator __last, const _Tp& __value)
2939
- return __check_partitioned_upper_aux(__first, __last, __value,
2940
- std::__iterator_category(__first));
2943
+ // Determine if a sequence is partitioned w.r.t. this element.
2944
template<typename _ForwardIterator, typename _Tp, typename _Pred>
2946
- __check_partitioned_lower_aux(_ForwardIterator __first,
2947
- _ForwardIterator __last, const _Tp& __value,
2949
- std::forward_iterator_tag)
2950
+ __check_partitioned_lower(_ForwardIterator __first,
2951
+ _ForwardIterator __last, const _Tp& __value,
2954
while (__first != __last && bool(__pred(*__first, __value)))
2956
@@ -446,39 +398,12 @@
2957
return __first == __last;
2960
- // For performance reason, as the iterator range has been validated, check on
2961
- // random access safe iterators is done using the base iterator.
2962
- template<typename _Iterator, typename _Sequence,
2963
- typename _Tp, typename _Pred>
2965
- __check_partitioned_lower_aux(
2966
- const _Safe_iterator<_Iterator, _Sequence>& __first,
2967
- const _Safe_iterator<_Iterator, _Sequence>& __last,
2968
- const _Tp& __value, _Pred __pred,
2969
- std::random_access_iterator_tag __tag)
2971
- return __check_partitioned_lower_aux(__first.base(), __last.base(),
2972
- __value, __pred, __tag);
2975
- // Determine if a sequence is partitioned w.r.t. this element.
2976
template<typename _ForwardIterator, typename _Tp, typename _Pred>
2978
- __check_partitioned_lower(_ForwardIterator __first,
2979
+ __check_partitioned_upper(_ForwardIterator __first,
2980
_ForwardIterator __last, const _Tp& __value,
2983
- return __check_partitioned_lower_aux(__first, __last, __value, __pred,
2984
- std::__iterator_category(__first));
2987
- template<typename _ForwardIterator, typename _Tp, typename _Pred>
2989
- __check_partitioned_upper_aux(_ForwardIterator __first,
2990
- _ForwardIterator __last, const _Tp& __value,
2992
- std::forward_iterator_tag)
2994
while (__first != __last && !bool(__pred(__value, *__first)))
2996
if (__first != __last)
2997
@@ -490,31 +415,6 @@
2998
return __first == __last;
3001
- // For performance reason, as the iterator range has been validated, check on
3002
- // random access safe iterators is done using the base iterator.
3003
- template<typename _Iterator, typename _Sequence,
3004
- typename _Tp, typename _Pred>
3006
- __check_partitioned_upper_aux(
3007
- const _Safe_iterator<_Iterator, _Sequence>& __first,
3008
- const _Safe_iterator<_Iterator, _Sequence>& __last,
3009
- const _Tp& __value, _Pred __pred,
3010
- std::random_access_iterator_tag __tag)
3012
- return __check_partitioned_upper_aux(__first.base(), __last.base(),
3013
- __value, __pred, __tag);
3016
- template<typename _ForwardIterator, typename _Tp, typename _Pred>
3018
- __check_partitioned_upper(_ForwardIterator __first,
3019
- _ForwardIterator __last, const _Tp& __value,
3022
- return __check_partitioned_upper_aux(__first, __last, __value, __pred,
3023
- std::__iterator_category(__first));
3026
// Helper struct to detect random access safe iterators.
3027
template<typename _Iterator>
3028
struct __is_safe_random_iterator
3029
Index: libstdc++-v3/include/debug/macros.h
3030
===================================================================
3031
--- a/src/libstdc++-v3/include/debug/macros.h (.../tags/gcc_4_8_2_release)
3032
+++ b/src/libstdc++-v3/include/debug/macros.h (.../branches/gcc-4_8-branch)
3034
w.r.t. the value _Value. */
3035
#define __glibcxx_check_partitioned_lower(_First,_Last,_Value) \
3036
__glibcxx_check_valid_range(_First,_Last); \
3037
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
3039
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower( \
3040
+ __gnu_debug::__base(_First), \
3041
+ __gnu_debug::__base(_Last), _Value), \
3042
_M_message(__gnu_debug::__msg_unpartitioned) \
3043
._M_iterator(_First, #_First) \
3044
._M_iterator(_Last, #_Last) \
3047
#define __glibcxx_check_partitioned_upper(_First,_Last,_Value) \
3048
__glibcxx_check_valid_range(_First,_Last); \
3049
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
3051
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper( \
3052
+ __gnu_debug::__base(_First), \
3053
+ __gnu_debug::__base(_Last), _Value), \
3054
_M_message(__gnu_debug::__msg_unpartitioned) \
3055
._M_iterator(_First, #_First) \
3056
._M_iterator(_Last, #_Last) \
3058
w.r.t. the value _Value and predicate _Pred. */
3059
#define __glibcxx_check_partitioned_lower_pred(_First,_Last,_Value,_Pred) \
3060
__glibcxx_check_valid_range(_First,_Last); \
3061
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
3063
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower( \
3064
+ __gnu_debug::__base(_First), \
3065
+ __gnu_debug::__base(_Last), _Value, _Pred), \
3066
_M_message(__gnu_debug::__msg_unpartitioned_pred) \
3067
._M_iterator(_First, #_First) \
3068
._M_iterator(_Last, #_Last) \
3070
w.r.t. the value _Value and predicate _Pred. */
3071
#define __glibcxx_check_partitioned_upper_pred(_First,_Last,_Value,_Pred) \
3072
__glibcxx_check_valid_range(_First,_Last); \
3073
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
3075
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper( \
3076
+ __gnu_debug::__base(_First), \
3077
+ __gnu_debug::__base(_Last), _Value, _Pred), \
3078
_M_message(__gnu_debug::__msg_unpartitioned_pred) \
3079
._M_iterator(_First, #_First) \
3080
._M_iterator(_Last, #_Last) \
3081
Index: libstdc++-v3/include/std/future
3082
===================================================================
3083
--- a/src/libstdc++-v3/include/std/future (.../tags/gcc_4_8_2_release)
3084
+++ b/src/libstdc++-v3/include/std/future (.../branches/gcc-4_8-branch)
3085
@@ -1261,9 +1261,11 @@
3086
struct __future_base::_Task_state<_Fn, _Alloc, _Res(_Args...)> final
3087
: __future_base::_Task_state_base<_Res(_Args...)>
3089
- _Task_state(_Fn&& __fn, const _Alloc& __a)
3090
- : _Task_state_base<_Res(_Args...)>(__a), _M_impl(std::move(__fn), __a)
3092
+ template<typename _Fn2>
3093
+ _Task_state(_Fn2&& __fn, const _Alloc& __a)
3094
+ : _Task_state_base<_Res(_Args...)>(__a),
3095
+ _M_impl(std::forward<_Fn2>(__fn), __a)
3100
@@ -1292,19 +1294,21 @@
3102
struct _Impl : _Alloc
3104
- _Impl(_Fn&& __fn, const _Alloc& __a)
3105
- : _Alloc(__a), _M_fn(std::move(__fn)) { }
3106
+ template<typename _Fn2>
3107
+ _Impl(_Fn2&& __fn, const _Alloc& __a)
3108
+ : _Alloc(__a), _M_fn(std::forward<_Fn2>(__fn)) { }
3113
- template<typename _Signature, typename _Fn, typename _Alloc>
3114
- static shared_ptr<__future_base::_Task_state_base<_Signature>>
3115
- __create_task_state(_Fn&& __fn, const _Alloc& __a)
3117
- typedef __future_base::_Task_state<_Fn, _Alloc, _Signature> _State;
3118
- return std::allocate_shared<_State>(__a, std::move(__fn), __a);
3120
+ template<typename _Signature, typename _Fn, typename _Alloc>
3121
+ static shared_ptr<__future_base::_Task_state_base<_Signature>>
3122
+ __create_task_state(_Fn&& __fn, const _Alloc& __a)
3124
+ typedef typename decay<_Fn>::type _Fn2;
3125
+ typedef __future_base::_Task_state<_Fn2, _Alloc, _Signature> _State;
3126
+ return std::allocate_shared<_State>(__a, std::forward<_Fn>(__fn), __a);
3129
template<typename _Fn, typename _Alloc, typename _Res, typename... _Args>
3130
shared_ptr<__future_base::_Task_state_base<_Res(_Args...)>>
3131
@@ -1344,7 +1348,8 @@
3132
__constrain_pkgdtask<packaged_task, _Fn>::__type>
3134
packaged_task(_Fn&& __fn)
3135
- : packaged_task(allocator_arg, std::allocator<int>(), std::move(__fn))
3136
+ : packaged_task(allocator_arg, std::allocator<int>(),
3137
+ std::forward<_Fn>(__fn))
3140
// _GLIBCXX_RESOLVE_LIB_DEFECTS
3141
Index: libstdc++-v3/include/bits/stl_vector.h
3142
===================================================================
3143
--- a/src/libstdc++-v3/include/bits/stl_vector.h (.../tags/gcc_4_8_2_release)
3144
+++ b/src/libstdc++-v3/include/bits/stl_vector.h (.../branches/gcc-4_8-branch)
3145
@@ -1361,7 +1361,8 @@
3147
_M_move_assign(vector&& __x, std::true_type) noexcept
3149
- const vector __tmp(std::move(*this));
3150
+ vector __tmp(get_allocator());
3151
+ this->_M_impl._M_swap_data(__tmp._M_impl);
3152
this->_M_impl._M_swap_data(__x._M_impl);
3153
if (_Alloc_traits::_S_propagate_on_move_assign())
3154
std::__alloc_on_move(_M_get_Tp_allocator(),
3155
Index: libstdc++-v3/include/bits/stl_algo.h
3156
===================================================================
3157
--- a/src/libstdc++-v3/include/bits/stl_algo.h (.../tags/gcc_4_8_2_release)
3158
+++ b/src/libstdc++-v3/include/bits/stl_algo.h (.../branches/gcc-4_8-branch)
3159
@@ -2279,7 +2279,7 @@
3160
_RandomAccessIterator __last)
3162
_RandomAccessIterator __mid = __first + (__last - __first) / 2;
3163
- std::__move_median_to_first(__first, __first + 1, __mid, (__last - 2));
3164
+ std::__move_median_to_first(__first, __first + 1, __mid, __last - 1);
3165
return std::__unguarded_partition(__first + 1, __last, *__first);
3168
@@ -2291,7 +2291,7 @@
3169
_RandomAccessIterator __last, _Compare __comp)
3171
_RandomAccessIterator __mid = __first + (__last - __first) / 2;
3172
- std::__move_median_to_first(__first, __first + 1, __mid, (__last - 2),
3173
+ std::__move_median_to_first(__first, __first + 1, __mid, __last - 1,
3175
return std::__unguarded_partition(__first + 1, __last, *__first, __comp);
3177
Index: libstdc++-v3/include/bits/shared_ptr_base.h
3178
===================================================================
3179
--- a/src/libstdc++-v3/include/bits/shared_ptr_base.h (.../tags/gcc_4_8_2_release)
3180
+++ b/src/libstdc++-v3/include/bits/shared_ptr_base.h (.../branches/gcc-4_8-branch)
3184
// Perform lock-free add-if-not-zero operation.
3185
- _Atomic_word __count = _M_use_count;
3186
+ _Atomic_word __count = _M_get_use_count();
3192
template<typename... _Args>
3193
_Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
3194
- : _M_impl(__a), _M_storage()
3197
_M_impl._M_ptr = static_cast<_Tp*>(static_cast<void*>(&_M_storage));
3198
// _GLIBCXX_RESOLVE_LIB_DEFECTS
3200
: _M_ptr(__r.get()), _M_refcount()
3202
__glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>)
3203
- auto __tmp = std::__addressof(*__r.get());
3204
+ auto __tmp = __r.get();
3205
_M_refcount = __shared_count<_Lp>(std::move(__r));
3206
__enable_shared_from_this_helper(_M_refcount, __tmp, __tmp);
3208
Index: libstdc++-v3/include/c_global/cstdio
3209
===================================================================
3210
--- a/src/libstdc++-v3/include/c_global/cstdio (.../tags/gcc_4_8_2_release)
3211
+++ b/src/libstdc++-v3/include/c_global/cstdio (.../branches/gcc-4_8-branch)
3220
Index: libstdc++-v3/ChangeLog
3221
===================================================================
3222
--- a/src/libstdc++-v3/ChangeLog (.../tags/gcc_4_8_2_release)
3223
+++ b/src/libstdc++-v3/ChangeLog (.../branches/gcc-4_8-branch)
3225
+2014-03-18 Jonathan Wakely <jwakely@redhat.com>
3227
+ PR libstdc++/60564
3228
+ * include/std/future (__future_base::_Task_state<>): Change
3229
+ constructors to template functions using perfect forwarding.
3230
+ (__create_task_state): Use decayed type as stored task.
3231
+ (packaged_task::packaged_task(_Fn&&)): Forward instead of moving.
3232
+ * testsuite/30_threads/packaged_task/60564.cc: New.
3234
+2014-03-12 Roland McGrath <mcgrathr@google.com>
3235
+ Mark Seaborn <mseaborn@google.com>
3237
+ PR libstdc++/59392
3238
+ * libsupc++/eh_call.cc (__cxa_call_unexpected): Call __do_catch with
3239
+ the address of a null pointer, not with a null pointer to pointer.
3240
+ Copy comment for this case from eh_personality.cc:__cxa_call_unexpected.
3241
+ * testsuite/18_support/bad_exception/59392.cc: New file.
3243
+2014-03-11 Jonathan Wakely <jwakely@redhat.com>
3245
+ Backport from mainline.
3246
+ 2014-01-09 Jonathan Wakely <jwakely@redhat.com>
3248
+ PR libstdc++/59680
3249
+ * src/c++11/thread.cc (__sleep_for): Fix call to ::sleep.
3251
+2014-03-11 Jonathan Wakely <jwakely@redhat.com>
3253
+ Backport from mainline.
3254
+ 2014-01-27 Jonathan Wakely <jwakely@redhat.com>
3256
+ PR libstdc++/59215
3257
+ * include/bits/shared_ptr_base.h
3258
+ (_Sp_counted_base<_S_atomic>::_M_add_ref_lock()): Use relaxed atomic
3261
+2014-03-11 Jonathan Wakely <jwakely@redhat.com>
3263
+ Backport from mainline.
3265
+ 2014-01-09 Jonathan Wakely <jwakely@redhat.com>
3267
+ PR libstdc++/59738
3268
+ * include/bits/stl_vector.h (vector<>::_M_move_assign): Restore
3269
+ support for non-Movable types.
3271
+ 2014-01-08 François Dumont <fdumont@gcc.gnu.org>
3273
+ * include/bits/stl_vector.h (std::vector<>::_M_move_assign): Pass
3274
+ *this allocator instance when building temporary vector instance
3275
+ so that *this allocator does not get moved.
3276
+ * testsuite/23_containers/vector/allocator/move.cc (test01): Add
3277
+ check on a vector iterator.
3278
+ * testsuite/23_containers/vector/allocator/move_assign.cc
3279
+ (test02): Likewise.
3280
+ (test03): New, test with a non-propagating allocator.
3282
+ 2013-11-15 Jonathan Wakely <jwakely.gcc@gmail.com>
3284
+ * testsuite/23_containers/vector/allocator/move.cc: New
3286
+2014-01-27 Jason Merrill <jason@redhat.com>
3291
+ * libsupc++/eh_throw.cc (__cxa_throw): Set uncaughtExceptions.
3292
+ * libsupc++/eh_alloc.cc (__cxa_allocate_dependent_exception)
3293
+ (__cxa_allocate_exception): Don't set it here.
3295
+2013-12-15 H.J. Lu <hongjiu.lu@intel.com>
3297
+ * config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt: Update.
3299
+2013-11-22 Jonathan Wakely <jwakely.gcc@gmail.com>
3301
+ * acinclude.m4 (libtool_VERSION): Bump.
3302
+ * configure: Regenerate.
3303
+ * doc/xml/manual/abi.xml: Update version information.
3305
+2013-11-05 Jonathan Wakely <jwakely.gcc@gmail.com>
3307
+ * doc/xml/manual/status_cxx2011.xml: Document aligned_union as
3310
+ * doc/xml/manual/spine.xml: Update copyright years.
3311
+ * doc/html/*: Regenerate.
3313
+2013-11-01 Paolo Carlini <paolo.carlini@oracle.com>
3315
+ PR libstdc++/58952
3316
+ * include/c_global/cstdio: Undef getchar.
3318
+2013-10-31 Jonathan Wakely <jwakely.gcc@gmail.com>
3320
+ * testsuite/20_util/shared_ptr/cons/58839.cc: Do not use
3321
+ default_delete<void>.
3323
+2013-10-30 Chris Studholme <cvs@cs.utoronto.ca>
3325
+ PR libstdc++/58912
3326
+ * include/bits/shared_ptr_base.h (_Sp_counted_ptr_inplace): Remove
3327
+ unnecessary initialization of storage buffer.
3329
+2013-10-29 Jonathan Wakely <jwakely.gcc@gmail.com>
3331
+ PR libstdc++/58839
3332
+ * include/bits/shared_ptr_base.h
3333
+ (__shared_ptr<T>::__shared_ptr(unique_ptr<U,D>&&)): Do not dereference
3335
+ * testsuite/20_util/shared_ptr/cons/58839.cc: New.
3337
+2013-10-20 Chris Jefferson <chris@bubblescope.net>
3338
+ Paolo Carlini <paolo.carlini@oracle.com>
3340
+ PR libstdc++/58800
3341
+ * include/bits/stl_algo.h (__unguarded_partition_pivot): Change
3342
+ __last - 2 to __last - 1.
3343
+ * testsuite/25_algorithms/nth_element/58800.cc: New
3345
+2013-10-16 François Dumont <fdumont@gcc.gnu.org>
3347
+ PR libstdc++/58191
3348
+ * include/debug/macros.h (__glibcxx_check_partitioned_lower): Add
3349
+ __gnu_debug::__base calls on iterators passed to internal debug
3351
+ (__glibcxx_check_partitioned_lower_pred): Likewise.
3352
+ (__glibcxx_check_partitioned_upper): Likewise.
3353
+ (__glibcxx_check_partitioned_upper_pred): Likewise.
3354
+ * include/debug/functions.h (__check_partitioned_lower):
3355
+ Remove code to detect safe iterators.
3356
+ (__check_partitioned_upper): Likewise.
3358
2013-10-16 Release Manager
3360
* GCC 4.8.2 released.
3361
Index: libstdc++-v3/libsupc++/eh_call.cc
3362
===================================================================
3363
--- a/src/libstdc++-v3/libsupc++/eh_call.cc (.../tags/gcc_4_8_2_release)
3364
+++ b/src/libstdc++-v3/libsupc++/eh_call.cc (.../branches/gcc-4_8-branch)
3365
@@ -104,14 +104,14 @@
3366
} end_catch_protect_obj;
3373
if (foreign_exception)
3376
__unexpected(unexpectedHandler);
3381
/* See if the new exception matches the rtti list. */
3382
if (foreign_exception)
3383
@@ -140,15 +140,19 @@
3384
&new_ptr) != ctm_failed)
3385
__throw_exception_again;
3387
- if (catch_type->__do_catch(&bad_exc, 0, 1))
3388
+ // If the exception spec allows std::bad_exception, throw that.
3389
+ // We don't have a thrown object to compare against, but since
3390
+ // bad_exception doesn't have virtual bases, that's OK; just pass NULL.
3392
+ if (catch_type->__do_catch(&bad_exc, &obj, 1))
3393
bad_exception_allowed = true;
3396
// If the exception spec allows std::bad_exception, throw that.
3397
-#ifdef __EXCEPTIONS
3398
+#ifdef __EXCEPTIONS
3399
if (bad_exception_allowed)
3400
throw std::bad_exception();
3405
__terminate(terminateHandler);
3406
Index: libstdc++-v3/libsupc++/eh_alloc.cc
3407
===================================================================
3408
--- a/src/libstdc++-v3/libsupc++/eh_alloc.cc (.../tags/gcc_4_8_2_release)
3409
+++ b/src/libstdc++-v3/libsupc++/eh_alloc.cc (.../branches/gcc-4_8-branch)
3410
@@ -129,12 +129,6 @@
3414
- // We have an uncaught exception as soon as we allocate memory. This
3415
- // yields uncaught_exception() true during the copy-constructor that
3416
- // initializes the exception object. See Issue 475.
3417
- __cxa_eh_globals *globals = __cxa_get_globals ();
3418
- globals->uncaughtExceptions += 1;
3420
memset (ret, 0, sizeof (__cxa_refcounted_exception));
3422
return (void *)((char *)ret + sizeof (__cxa_refcounted_exception));
3423
@@ -191,12 +185,6 @@
3427
- // We have an uncaught exception as soon as we allocate memory. This
3428
- // yields uncaught_exception() true during the copy-constructor that
3429
- // initializes the exception object. See Issue 475.
3430
- __cxa_eh_globals *globals = __cxa_get_globals ();
3431
- globals->uncaughtExceptions += 1;
3433
memset (ret, 0, sizeof (__cxa_dependent_exception));
3436
Index: libstdc++-v3/libsupc++/eh_throw.cc
3437
===================================================================
3438
--- a/src/libstdc++-v3/libsupc++/eh_throw.cc (.../tags/gcc_4_8_2_release)
3439
+++ b/src/libstdc++-v3/libsupc++/eh_throw.cc (.../branches/gcc-4_8-branch)
3442
PROBE2 (throw, obj, tinfo);
3444
+ __cxa_eh_globals *globals = __cxa_get_globals ();
3445
+ globals->uncaughtExceptions += 1;
3447
// Definitely a primary.
3448
__cxa_refcounted_exception *header
3449
= __get_refcounted_exception_header_from_obj (obj);
3450
Index: libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc
3451
===================================================================
3452
--- a/src/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc (.../tags/gcc_4_8_2_release)
3453
+++ b/src/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc (.../branches/gcc-4_8-branch)
3455
+// Copyright (C) 2013 Free Software Foundation, Inc.
3457
+// This file is part of the GNU ISO C++ Library. This library is free
3458
+// software; you can redistribute it and/or modify it under the
3459
+// terms of the GNU General Public License as published by the
3460
+// Free Software Foundation; either version 3, or (at your option)
3461
+// any later version.
3463
+// This library is distributed in the hope that it will be useful,
3464
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
3465
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3466
+// GNU General Public License for more details.
3468
+// You should have received a copy of the GNU General Public License along
3469
+// with this library; see the file COPYING3. If not see
3470
+// <http://www.gnu.org/licenses/>.
3472
+// 25.3.2 [lib.alg.nth.element]
3474
+// { dg-options "-std=gnu++11" }
3476
+#include <algorithm>
3477
+#include <testsuite_hooks.h>
3478
+#include <testsuite_iterators.h>
3480
+using __gnu_test::test_container;
3481
+using __gnu_test::random_access_iterator_wrapper;
3483
+typedef test_container<int, random_access_iterator_wrapper> Container;
3487
+ std::vector<int> v = {
3497
+ Container con(v.data(), v.data() + 7);
3499
+ std::nth_element(con.begin(), con.begin() + 3, con.end());
3507
Index: libstdc++-v3/testsuite/18_support/bad_exception/59392.cc
3508
===================================================================
3509
--- a/src/libstdc++-v3/testsuite/18_support/bad_exception/59392.cc (.../tags/gcc_4_8_2_release)
3510
+++ b/src/libstdc++-v3/testsuite/18_support/bad_exception/59392.cc (.../branches/gcc-4_8-branch)
3512
+// Copyright (C) 2014 Free Software Foundation, Inc.
3514
+// This file is part of the GNU ISO C++ Library. This library is free
3515
+// software; you can redistribute it and/or modify it under the
3516
+// terms of the GNU General Public License as published by the
3517
+// Free Software Foundation; either version 3, or (at your option)
3518
+// any later version.
3520
+// This library is distributed in the hope that it will be useful,
3521
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
3522
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3523
+// GNU General Public License for more details.
3525
+// You should have received a copy of the GNU General Public License along
3526
+// with this library; see the file COPYING3. If not see
3527
+// <http://www.gnu.org/licenses/>.
3529
+#include <exception>
3533
+class unexpected {};
3534
+class from_handler {};
3536
+static void func_with_exception_spec() throw(expected)
3538
+ throw unexpected();
3541
+static void unexpected_handler()
3543
+ throw from_handler();
3546
+static void terminate_handler()
3554
+ std::set_unexpected(unexpected_handler);
3555
+ std::set_terminate(terminate_handler);
3557
+ func_with_exception_spec();
3558
+ } catch (expected&) {
3564
Property changes on: libstdc++-v3/testsuite/18_support/bad_exception/59392.cc
3565
___________________________________________________________________
3566
Added: svn:eol-style
3569
\ No newline at end of property
3570
Index: libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc
3571
===================================================================
3572
--- a/src/libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc (.../tags/gcc_4_8_2_release)
3573
+++ b/src/libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc (.../branches/gcc-4_8-branch)
3575
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* *-*-solaris* *-*-cygwin *-*-darwin* powerpc-ibm-aix* } }
3576
+// { dg-options " -std=gnu++11 -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* powerpc-ibm-aix* } }
3577
+// { dg-options " -std=gnu++11 -pthreads" { target *-*-solaris* } }
3578
+// { dg-options " -std=gnu++11 " { target *-*-cygwin *-*-darwin* } }
3579
+// { dg-require-cstdint "" }
3580
+// { dg-require-gthreads "" }
3581
+// { dg-require-atomic-builtins "" }
3583
+// Copyright (C) 2014 Free Software Foundation, Inc.
3585
+// This file is part of the GNU ISO C++ Library. This library is free
3586
+// software; you can redistribute it and/or modify it under the
3587
+// terms of the GNU General Public License as published by the
3588
+// Free Software Foundation; either version 3, or (at your option)
3589
+// any later version.
3591
+// This library is distributed in the hope that it will be useful,
3592
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
3593
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3594
+// GNU General Public License for more details.
3596
+// You should have received a copy of the GNU General Public License along
3597
+// with this library; see the file COPYING3. If not see
3598
+// <http://www.gnu.org/licenses/>.
3602
+#include <testsuite_hooks.h>
3607
+ X(const X&) = default;
3608
+ X(X&& x) { x.moved = true; }
3610
+ void operator()() const { }
3612
+ bool moved = false;
3618
+ std::packaged_task<void()> p(x);
3619
+ VERIFY( !x.moved );
3626
Index: libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc
3627
===================================================================
3628
--- a/src/libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc (.../tags/gcc_4_8_2_release)
3629
+++ b/src/libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc (.../branches/gcc-4_8-branch)
3631
+// Copyright (C) 2013 Free Software Foundation, Inc.
3633
+// This file is part of the GNU ISO C++ Library. This library is free
3634
+// software; you can redistribute it and/or modify it under the
3635
+// terms of the GNU General Public License as published by the
3636
+// Free Software Foundation; either version 3, or (at your option)
3637
+// any later version.
3639
+// This library is distributed in the hope that it will be useful,
3640
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
3641
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3642
+// GNU General Public License for more details.
3644
+// You should have received a copy of the GNU General Public License along
3645
+// with this library; see the file COPYING3. If not see
3646
+// <http://www.gnu.org/licenses/>.
3648
+// { dg-options "-std=gnu++11" }
3651
+#include <testsuite_hooks.h>
3652
+#include <testsuite_allocator.h>
3654
+struct T { int i; };
3656
+using __gnu_test::uneq_allocator;
3660
+ bool test __attribute__((unused)) = true;
3661
+ typedef uneq_allocator<T> alloc_type;
3662
+ typedef std::vector<T, alloc_type> test_type;
3663
+ test_type v1(alloc_type(1));
3665
+ auto it = v1.begin();
3666
+ test_type v2(std::move(v1));
3667
+ VERIFY(1 == v1.get_allocator().get_personality());
3668
+ VERIFY(1 == v2.get_allocator().get_personality());
3669
+ VERIFY( it == v2.begin() );
3674
+ bool test __attribute__((unused)) = true;
3675
+ typedef uneq_allocator<T> alloc_type;
3676
+ typedef std::vector<T, alloc_type> test_type;
3677
+ test_type v1(alloc_type(1));
3679
+ test_type v2(std::move(v1), alloc_type(2));
3680
+ VERIFY(1 == v1.get_allocator().get_personality());
3681
+ VERIFY(2 == v2.get_allocator().get_personality());
3690
Index: libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc
3691
===================================================================
3692
--- a/src/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc (.../tags/gcc_4_8_2_release)
3693
+++ b/src/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc (.../branches/gcc-4_8-branch)
3695
typedef std::vector<T, alloc_type> test_type;
3696
test_type v1(alloc_type(1));
3698
+ auto it = v1.begin();
3699
test_type v2(alloc_type(2));
3700
+ v2.push_back(T());
3702
- v2.push_back(T());
3703
+ VERIFY( it == v2.begin() );
3704
VERIFY(0 == v1.get_allocator().get_personality());
3705
VERIFY(1 == v2.get_allocator().get_personality());
3710
+ bool test __attribute__((unused)) = true;
3711
+ typedef propagating_allocator<T, false> alloc_type;
3712
+ typedef std::vector<T, alloc_type> test_type;
3713
+ test_type v1(alloc_type(1));
3714
+ v1.push_back(T());
3715
+ auto it = v1.begin();
3716
+ test_type v2(alloc_type(1));
3717
+ v2.push_back(T());
3718
+ v2 = std::move(v1);
3719
+ VERIFY( it == v2.begin() );
3720
+ VERIFY(1 == v1.get_allocator().get_personality());
3721
+ VERIFY(1 == v2.get_allocator().get_personality());
3731
Index: libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc
3732
===================================================================
3733
--- a/src/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc (.../tags/gcc_4_8_2_release)
3734
+++ b/src/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc (.../branches/gcc-4_8-branch)
3736
+// { dg-options "-std=gnu++11" }
3737
+// { dg-do compile }
3739
+// Copyright (C) 2013 Free Software Foundation, Inc.
3741
+// This file is part of the GNU ISO C++ Library. This library is free
3742
+// software; you can redistribute it and/or modify it under the
3743
+// terms of the GNU General Public License as published by the
3744
+// Free Software Foundation; either version 3, or (at your option)
3745
+// any later version.
3747
+// This library is distributed in the hope that it will be useful,
3748
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
3749
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3750
+// GNU General Public License for more details.
3752
+// You should have received a copy of the GNU General Public License along
3753
+// with this library; see the file COPYING3. If not see
3754
+// <http://www.gnu.org/licenses/>.
3761
+ void operator()(void*) const noexcept { }
3766
+ std::unique_ptr<void, D> y;
3767
+ std::shared_ptr<void> x = std::move(y);
3769
Index: libstdc++-v3/testsuite/20_util/bind/57899.cc
3770
===================================================================
3771
--- a/src/libstdc++-v3/testsuite/20_util/bind/57899.cc (.../tags/gcc_4_8_2_release)
3772
+++ b/src/libstdc++-v3/testsuite/20_util/bind/57899.cc (.../branches/gcc-4_8-branch)
3774
+// Copyright (C) 2010-2014 Free Software Foundation, Inc.
3776
+// This file is part of the GNU ISO C++ Library. This library is free
3777
+// software; you can redistribute it and/or modify it under the
3778
+// terms of the GNU General Public License as published by the
3779
+// Free Software Foundation; either version 3, or (at your option)
3780
+// any later version.
3782
+// This library is distributed in the hope that it will be useful,
3783
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
3784
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3785
+// GNU General Public License for more details.
3787
+// You should have received a copy of the GNU General Public License along
3788
+// with this library; see the file COPYING3. If not see
3789
+// <http://www.gnu.org/licenses/>.
3791
+// 20.7.11 Function template bind
3794
+// { dg-do compile }
3795
+// { dg-options -std=c++11 }
3797
+#include <functional>
3799
+using std::placeholders::_1;
3801
+struct S { int i; };
3807
+ const S& operator()(const P& p) const { return p.s; }
3810
+int gi(const S& s) { return s.i; }
3812
+bool cmp(int, int) { return true; }
3817
+ auto f1 = bind(gs, _1);
3818
+ auto f2 = bind(gi, f1);
3819
+ auto f3 = bind(cmp, f2, 5);
3822
Index: libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
3823
===================================================================
3824
--- a/src/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt (.../tags/gcc_4_8_2_release)
3825
+++ b/src/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt (.../branches/gcc-4_8-branch)
3827
FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE6getlocEv@@GLIBCXX_3.4
3828
FUNC:_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4
3829
FUNC:_ZNKSt15basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4
3830
+FUNC:_ZNKSt17bad_function_call4whatEv@@GLIBCXX_3.4.18
3831
FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4
3832
FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4
3833
FUNC:_ZNKSt18basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4
3835
FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewm@@GLIBCXX_3.4
3836
FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewx@@GLIBCXX_3.4
3837
FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewy@@GLIBCXX_3.4
3838
+FUNC:_ZNKSt8__detail20_Prime_rehash_policy11_M_next_bktEj@@GLIBCXX_3.4.18
3839
+FUNC:_ZNKSt8__detail20_Prime_rehash_policy14_M_need_rehashEjjj@@GLIBCXX_3.4.18
3840
FUNC:_ZNKSt8bad_cast4whatEv@@GLIBCXX_3.4.9
3841
FUNC:_ZNKSt8ios_base7failure4whatEv@@GLIBCXX_3.4
3842
FUNC:_ZNKSt8messagesIcE18_M_convert_to_charERKSs@@GLIBCXX_3.4
3843
@@ -1207,6 +1210,7 @@
3844
FUNC:_ZNSt11regex_errorD0Ev@@GLIBCXX_3.4.15
3845
FUNC:_ZNSt11regex_errorD1Ev@@GLIBCXX_3.4.15
3846
FUNC:_ZNSt11regex_errorD2Ev@@GLIBCXX_3.4.15
3847
+FUNC:_ZNSt11this_thread11__sleep_forENSt6chrono8durationIxSt5ratioILx1ELx1EEEENS1_IxS2_ILx1ELx1000000000EEEE@@GLIBCXX_3.4.18
3848
FUNC:_ZNSt12__basic_fileIcE2fdEv@@GLIBCXX_3.4
3849
FUNC:_ZNSt12__basic_fileIcE4fileEv@@GLIBCXX_3.4.1
3850
FUNC:_ZNSt12__basic_fileIcE4openEPKcSt13_Ios_Openmodei@@GLIBCXX_3.4
3851
@@ -1485,6 +1489,11 @@
3852
FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEt@@GLIBCXX_3.4
3853
FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEx@@GLIBCXX_3.4
3854
FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEy@@GLIBCXX_3.4
3855
+FUNC:_ZNSt13random_device14_M_init_pretr1ERKSs@@GLIBCXX_3.4.18
3856
+FUNC:_ZNSt13random_device16_M_getval_pretr1Ev@@GLIBCXX_3.4.18
3857
+FUNC:_ZNSt13random_device7_M_finiEv@@GLIBCXX_3.4.18
3858
+FUNC:_ZNSt13random_device7_M_initERKSs@@GLIBCXX_3.4.18
3859
+FUNC:_ZNSt13random_device9_M_getvalEv@@GLIBCXX_3.4.18
3860
FUNC:_ZNSt13runtime_errorC1ERKSs@@GLIBCXX_3.4
3861
FUNC:_ZNSt13runtime_errorC2ERKSs@@GLIBCXX_3.4
3862
FUNC:_ZNSt13runtime_errorD0Ev@@GLIBCXX_3.4
3863
@@ -1929,6 +1938,8 @@
3864
FUNC:_ZNSt6__norm15_List_node_base8transferEPS0_S1_@@GLIBCXX_3.4.9
3865
FUNC:_ZNSt6__norm15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14
3866
FUNC:_ZNSt6chrono12system_clock3nowEv@@GLIBCXX_3.4.11
3867
+FUNC:_ZNSt6chrono3_V212steady_clock3nowEv@@GLIBCXX_3.4.19
3868
+FUNC:_ZNSt6chrono3_V212system_clock3nowEv@@GLIBCXX_3.4.19
3869
FUNC:_ZNSt6gslice8_IndexerC1EjRKSt8valarrayIjES4_@@GLIBCXX_3.4
3870
FUNC:_ZNSt6gslice8_IndexerC2EjRKSt8valarrayIjES4_@@GLIBCXX_3.4
3871
FUNC:_ZNSt6locale11_M_coalesceERKS_S1_i@@GLIBCXX_3.4
3872
@@ -2467,6 +2478,7 @@
3873
FUNC:__cxa_guard_release@@CXXABI_1.3
3874
FUNC:__cxa_pure_virtual@@CXXABI_1.3
3875
FUNC:__cxa_rethrow@@CXXABI_1.3
3876
+FUNC:__cxa_thread_atexit@@CXXABI_1.3.7
3877
FUNC:__cxa_throw@@CXXABI_1.3
3878
FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
3879
FUNC:__cxa_vec_cctor@@CXXABI_1.3
3880
@@ -2491,6 +2503,7 @@
3881
OBJECT:0:CXXABI_1.3.4
3882
OBJECT:0:CXXABI_1.3.5
3883
OBJECT:0:CXXABI_1.3.6
3884
+OBJECT:0:CXXABI_1.3.7
3885
OBJECT:0:CXXABI_TM_1
3886
OBJECT:0:GLIBCXX_3.4
3887
OBJECT:0:GLIBCXX_3.4.1
3888
@@ -2502,6 +2515,8 @@
3889
OBJECT:0:GLIBCXX_3.4.15
3890
OBJECT:0:GLIBCXX_3.4.16
3891
OBJECT:0:GLIBCXX_3.4.17
3892
+OBJECT:0:GLIBCXX_3.4.18
3893
+OBJECT:0:GLIBCXX_3.4.19
3894
OBJECT:0:GLIBCXX_3.4.2
3895
OBJECT:0:GLIBCXX_3.4.3
3896
OBJECT:0:GLIBCXX_3.4.4
3897
@@ -3033,6 +3048,8 @@
3898
OBJECT:1:_ZNSt21__numeric_limits_base9is_moduloE@@GLIBCXX_3.4
3899
OBJECT:1:_ZNSt21__numeric_limits_base9is_signedE@@GLIBCXX_3.4
3900
OBJECT:1:_ZNSt6chrono12system_clock12is_monotonicE@@GLIBCXX_3.4.11
3901
+OBJECT:1:_ZNSt6chrono3_V212steady_clock9is_steadyE@@GLIBCXX_3.4.19
3902
+OBJECT:1:_ZNSt6chrono3_V212system_clock9is_steadyE@@GLIBCXX_3.4.19
3903
OBJECT:1:_ZSt10adopt_lock@@GLIBCXX_3.4.11
3904
OBJECT:1:_ZSt10defer_lock@@GLIBCXX_3.4.11
3905
OBJECT:1:_ZSt11try_to_lock@@GLIBCXX_3.4.11
3906
Index: libstdc++-v3/acinclude.m4
3907
===================================================================
3908
--- a/src/libstdc++-v3/acinclude.m4 (.../tags/gcc_4_8_2_release)
3909
+++ b/src/libstdc++-v3/acinclude.m4 (.../branches/gcc-4_8-branch)
3910
@@ -3266,7 +3266,7 @@
3913
# For libtool versioning info, format is CURRENT:REVISION:AGE
3914
-libtool_VERSION=6:18:0
3915
+libtool_VERSION=6:19:0
3917
# Everything parsed; figure out what files and settings to use.
3918
case $enable_symvers in
3919
Index: boehm-gc/include/private/gcconfig.h
3920
===================================================================
3921
--- a/src/boehm-gc/include/private/gcconfig.h (.../tags/gcc_4_8_2_release)
3922
+++ b/src/boehm-gc/include/private/gcconfig.h (.../branches/gcc-4_8-branch)
3923
@@ -837,7 +837,15 @@
3924
# define NO_PTHREAD_TRYLOCK
3927
+# if defined(__powerpc64__)
3928
+# define ALIGNMENT 8
3929
+# define CPP_WORDSZ 64
3931
+# define HBLKSIZE 4096
3934
# define ALIGNMENT 4
3936
# define OS_TYPE "FREEBSD"
3937
# ifndef GC_FREEBSD_THREADS
3938
# define MPROTECT_VDB
3939
Index: boehm-gc/ChangeLog
3940
===================================================================
3941
--- a/src/boehm-gc/ChangeLog (.../tags/gcc_4_8_2_release)
3942
+++ b/src/boehm-gc/ChangeLog (.../branches/gcc-4_8-branch)
3944
+2013-12-29 Andreas Tobler <andreast@gcc.gnu.org>
3947
+ * include/private/gcconfig.h: Add FreeBSD powerpc64 defines.
3949
2013-10-16 Release Manager
3951
* GCC 4.8.2 released.
3952
Index: contrib/ChangeLog
3953
===================================================================
3954
--- a/src/contrib/ChangeLog (.../tags/gcc_4_8_2_release)
3955
+++ b/src/contrib/ChangeLog (.../branches/gcc-4_8-branch)
3957
+2013-10-21 Mike Stump <mikestump@comcast.net>
3959
+ * gcc_update (configure): Update to handle svn 1.8.1.
3961
2013-10-16 Release Manager
3963
* GCC 4.8.2 released.
3964
Index: contrib/gcc_update
3965
===================================================================
3966
--- a/src/contrib/gcc_update (.../tags/gcc_4_8_2_release)
3967
+++ b/src/contrib/gcc_update (.../branches/gcc-4_8-branch)
3971
revision=`$GCC_SVN info | awk '/Revision:/ { print $2 }'`
3972
- branch=`$GCC_SVN info | sed -ne "/URL:/ {
3973
+ branch=`$GCC_SVN info | sed -ne "/^URL:/ {
3977
Index: libatomic/cas_n.c
3978
===================================================================
3979
--- a/src/libatomic/cas_n.c (.../tags/gcc_4_8_2_release)
3980
+++ b/src/libatomic/cas_n.c (.../branches/gcc-4_8-branch)
3982
#if !DONE && N <= WORDSIZE && defined(atomic_compare_exchange_w)
3984
SIZE(libat_compare_exchange) (UTYPE *mptr, UTYPE *eptr, UTYPE newval,
3985
- int smodel, int fmodel UNUSED)
3986
+ int smodel, int fmodel)
3988
UWORD mask, shift, weval, woldval, wnewval, t, *wptr;
3991
pre_barrier (smodel);
3995
while (!atomic_compare_exchange_w (wptr, &woldval, t, true,
3996
__ATOMIC_RELAXED, __ATOMIC_RELAXED));
3998
+ post_barrier (smodel);
4002
*eptr = woldval >> shift;
4004
- post_barrier (smodel);
4006
+ post_barrier (fmodel);
4011
@@ -102,18 +102,17 @@
4018
pre_seq_barrier (smodel);
4019
magic = protect_start (mptr);
4022
- if (oldval == *eptr)
4028
+ ret = (oldval == *eptr);
4034
protect_end (mptr, magic);
4035
post_seq_barrier (smodel);
4036
Index: libatomic/ChangeLog
4037
===================================================================
4038
--- a/src/libatomic/ChangeLog (.../tags/gcc_4_8_2_release)
4039
+++ b/src/libatomic/ChangeLog (.../branches/gcc-4_8-branch)
4041
+2014-02-20 Richard Henderson <rth@redhat.com>
4044
+ * cas_n.c (libat_compare_exchange): Conditionalize on failure
4045
+ the store back to EPTR.
4047
2013-10-16 Release Manager
4049
* GCC 4.8.2 released.
4050
Index: libbacktrace/configure
4051
===================================================================
4052
--- a/src/libbacktrace/configure (.../tags/gcc_4_8_2_release)
4053
+++ b/src/libbacktrace/configure (.../branches/gcc-4_8-branch)
4054
@@ -11667,12 +11667,13 @@
4058
-if ac_fn_c_try_compile "$LINENO"; then :
4059
+if ac_fn_c_try_link "$LINENO"; then :
4060
have_unwind_getipinfo=yes
4062
have_unwind_getipinfo=no
4064
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
4065
+rm -f core conftest.err conftest.$ac_objext \
4066
+ conftest$ac_exeext conftest.$ac_ext
4067
CFLAGS="$ac_save_CFLAGS"
4068
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_unwind_getipinfo" >&5
4069
$as_echo "$have_unwind_getipinfo" >&6; }
4070
Index: libbacktrace/Makefile.in
4071
===================================================================
4072
--- a/src/libbacktrace/Makefile.in (.../tags/gcc_4_8_2_release)
4073
+++ b/src/libbacktrace/Makefile.in (.../branches/gcc-4_8-branch)
4077
# Makefile.am -- Backtrace Makefile.
4078
-# Copyright (C) 2012 Free Software Foundation, Inc.
4079
+# Copyright (C) 2012-2013 Free Software Foundation, Inc.
4081
# Redistribution and use in source and binary forms, with or without
4082
# modification, are permitted provided that the following conditions are
4083
Index: libbacktrace/dwarf.c
4084
===================================================================
4085
--- a/src/libbacktrace/dwarf.c (.../tags/gcc_4_8_2_release)
4086
+++ b/src/libbacktrace/dwarf.c (.../branches/gcc-4_8-branch)
4087
@@ -2507,7 +2507,6 @@
4088
if (pfvec->count == 0)
4091
- addrs = (struct function_addrs *) pfvec->vec.base;
4092
addrs_count = pfvec->count;
4095
@@ -2514,12 +2513,17 @@
4097
if (!backtrace_vector_release (state, &lvec.vec, error_callback, data))
4099
+ addrs = (struct function_addrs *) pfvec->vec.base;
4103
/* Finish this list of addresses, but leave the remaining space in
4104
the vector available for the next function unit. */
4105
- backtrace_vector_finish (state, &fvec->vec);
4106
+ addrs = ((struct function_addrs *)
4107
+ backtrace_vector_finish (state, &fvec->vec,
4108
+ error_callback, data));
4109
+ if (addrs == NULL)
4114
Index: libbacktrace/ChangeLog
4115
===================================================================
4116
--- a/src/libbacktrace/ChangeLog (.../tags/gcc_4_8_2_release)
4117
+++ b/src/libbacktrace/ChangeLog (.../branches/gcc-4_8-branch)
4119
+2014-02-07 Misty De Meo <misty@brew.sh>
4122
+ * configure.ac: Use AC_LINK_IFELSE in check for
4123
+ _Unwind_GetIPInfo.
4124
+ * configure: Regenerate.
4126
+2013-12-05 Ian Lance Taylor <iant@google.com>
4128
+ * alloc.c (backtrace_vector_finish): Add error_callback and data
4129
+ parameters. Call backtrace_vector_release. Return address base.
4130
+ * mmap.c (backtrace_vector_finish): Add error_callback and data
4131
+ parameters. Return address base.
4132
+ * dwarf.c (read_function_info): Get new address base from
4133
+ backtrace_vector_finish.
4134
+ * internal.h (backtrace_vector_finish): Update declaration.
4136
+2013-11-30 Ian Lance Taylor <iant@google.com>
4138
+ Backport from mainline:
4139
+ 2013-10-17 Ian Lance Taylor <iant@google.com>
4141
+ * elf.c (elf_add): Don't get the wrong offsets if a debug section
4144
2013-10-16 Release Manager
4146
* GCC 4.8.2 released.
4147
Index: libbacktrace/elf.c
4148
===================================================================
4149
--- a/src/libbacktrace/elf.c (.../tags/gcc_4_8_2_release)
4150
+++ b/src/libbacktrace/elf.c (.../branches/gcc-4_8-branch)
4155
+ if (sections[i].size == 0)
4157
if (min_offset == 0 || sections[i].offset < min_offset)
4158
min_offset = sections[i].offset;
4159
end = sections[i].offset + sections[i].size;
4160
@@ -751,8 +753,13 @@
4163
for (i = 0; i < (int) DEBUG_MAX; ++i)
4164
- sections[i].data = ((const unsigned char *) debug_view.data
4165
- + (sections[i].offset - min_offset));
4167
+ if (sections[i].size == 0)
4168
+ sections[i].data = NULL;
4170
+ sections[i].data = ((const unsigned char *) debug_view.data
4171
+ + (sections[i].offset - min_offset));
4174
if (!backtrace_dwarf_add (state, base_address,
4175
sections[DEBUG_INFO].data,
4176
Index: libbacktrace/internal.h
4177
===================================================================
4178
--- a/src/libbacktrace/internal.h (.../tags/gcc_4_8_2_release)
4179
+++ b/src/libbacktrace/internal.h (.../branches/gcc-4_8-branch)
4180
@@ -192,13 +192,17 @@
4181
struct backtrace_vector *vec);
4183
/* Finish the current allocation on VEC. Prepare to start a new
4184
- allocation. The finished allocation will never be freed. */
4185
+ allocation. The finished allocation will never be freed. Returns
4186
+ a pointer to the base of the finished entries, or NULL on
4189
-extern void backtrace_vector_finish (struct backtrace_state *state,
4190
- struct backtrace_vector *vec);
4191
+extern void* backtrace_vector_finish (struct backtrace_state *state,
4192
+ struct backtrace_vector *vec,
4193
+ backtrace_error_callback error_callback,
4196
-/* Release any extra space allocated for VEC. Returns 1 on success, 0
4198
+/* Release any extra space allocated for VEC. This may change
4199
+ VEC->base. Returns 1 on success, 0 on failure. */
4201
extern int backtrace_vector_release (struct backtrace_state *state,
4202
struct backtrace_vector *vec,
4203
Index: libbacktrace/configure.ac
4204
===================================================================
4205
--- a/src/libbacktrace/configure.ac (.../tags/gcc_4_8_2_release)
4206
+++ b/src/libbacktrace/configure.ac (.../branches/gcc-4_8-branch)
4208
ac_save_CFFLAGS="$CFLAGS"
4209
CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
4210
AC_MSG_CHECKING([for _Unwind_GetIPInfo])
4211
- AC_COMPILE_IFELSE(
4214
[#include "unwind.h"
4215
struct _Unwind_Context *context;
4216
Index: libbacktrace/alloc.c
4217
===================================================================
4218
--- a/src/libbacktrace/alloc.c (.../tags/gcc_4_8_2_release)
4219
+++ b/src/libbacktrace/alloc.c (.../branches/gcc-4_8-branch)
4220
@@ -113,12 +113,24 @@
4222
/* Finish the current allocation on VEC. */
4225
-backtrace_vector_finish (struct backtrace_state *state ATTRIBUTE_UNUSED,
4226
- struct backtrace_vector *vec)
4228
+backtrace_vector_finish (struct backtrace_state *state,
4229
+ struct backtrace_vector *vec,
4230
+ backtrace_error_callback error_callback,
4233
- vec->base = (char *) vec->base + vec->size;
4236
+ /* With this allocator we call realloc in backtrace_vector_grow,
4237
+ which means we can't easily reuse the memory here. So just
4239
+ if (!backtrace_vector_release (state, vec, error_callback, data))
4248
/* Release any extra space allocated for VEC. */
4249
Index: libbacktrace/mmap.c
4250
===================================================================
4251
--- a/src/libbacktrace/mmap.c (.../tags/gcc_4_8_2_release)
4252
+++ b/src/libbacktrace/mmap.c (.../branches/gcc-4_8-branch)
4253
@@ -230,12 +230,19 @@
4255
/* Finish the current allocation on VEC. */
4258
-backtrace_vector_finish (struct backtrace_state *state ATTRIBUTE_UNUSED,
4259
- struct backtrace_vector *vec)
4261
+backtrace_vector_finish (
4262
+ struct backtrace_state *state ATTRIBUTE_UNUSED,
4263
+ struct backtrace_vector *vec,
4264
+ backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
4265
+ void *data ATTRIBUTE_UNUSED)
4270
vec->base = (char *) vec->base + vec->size;
4275
/* Release any extra space allocated for VEC. */
4276
Index: libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
4277
===================================================================
4278
--- a/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c (.../tags/gcc_4_8_2_release)
4279
+++ b/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c (.../branches/gcc-4_8-branch)
4281
#include <pango/pango.h>
4282
#include <pango/pangoft2.h>
4283
#include <pango/pangofc-font.h>
4284
-#include <freetype/ftglyph.h>
4285
-#include <freetype/ftoutln.h>
4286
-#include <freetype/fttypes.h>
4287
-#include <freetype/tttables.h>
4288
+#include <ft2build.h>
4289
+#include FT_GLYPH_H
4290
+#include FT_OUTLINE_H
4291
+#include FT_TYPES_H
4292
+#include FT_TRUETYPE_TABLES_H
4293
#include "gdkfont.h"
4294
#include "gtkpeer.h"
4295
#include "gnu_java_awt_peer_gtk_GdkFontPeer.h"
4296
Index: libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c
4297
===================================================================
4298
--- a/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c (.../tags/gcc_4_8_2_release)
4299
+++ b/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c (.../branches/gcc-4_8-branch)
4301
#include <pango/pango.h>
4302
#include <pango/pangoft2.h>
4303
#include <pango/pangofc-font.h>
4304
-#include <freetype/ftglyph.h>
4305
-#include <freetype/ftoutln.h>
4306
+#include <ft2build.h>
4307
+#include FT_GLYPH_H
4308
+#include FT_OUTLINE_H
4310
#include "gdkfont.h"
4311
#include "gnu_java_awt_peer_gtk_FreetypeGlyphVector.h"
4312
Index: libjava/classpath/ChangeLog.gcj
4313
===================================================================
4314
--- a/src/libjava/classpath/ChangeLog.gcj (.../tags/gcc_4_8_2_release)
4315
+++ b/src/libjava/classpath/ChangeLog.gcj (.../branches/gcc-4_8-branch)
4317
+2013-11-29 Matthias Klose <doko@ubuntu.com>
4319
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c,
4320
+ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c:
4321
+ Fix freetype includes.
4323
2013-03-22 Jakub Jelinek <jakub@redhat.com>
4326
Index: libjava/classpath
4327
===================================================================
4328
--- a/src/libjava/classpath (.../tags/gcc_4_8_2_release)
4329
+++ b/src/libjava/classpath (.../branches/gcc-4_8-branch)
4331
Property changes on: libjava/classpath
4332
___________________________________________________________________
4333
Modified: svn:mergeinfo
4334
Merged /trunk/libjava/classpath:r206395
4335
Index: libjava/ChangeLog
4336
===================================================================
4337
--- a/src/libjava/ChangeLog (.../tags/gcc_4_8_2_release)
4338
+++ b/src/libjava/ChangeLog (.../branches/gcc-4_8-branch)
4340
+2014-03-11 Uros Bizjak <ubizjak@gmail.com>
4342
+ * java/lang/natObject.cc (_Jv_MonitorEnter): Add missing parenthesis
4343
+ around comparison with (address | LOCKED) in JvAssert.
4345
2013-10-16 Release Manager
4347
* GCC 4.8.2 released.
4348
Index: libjava/java/lang/natObject.cc
4349
===================================================================
4350
--- a/src/libjava/java/lang/natObject.cc (.../tags/gcc_4_8_2_release)
4351
+++ b/src/libjava/java/lang/natObject.cc (.../branches/gcc-4_8-branch)
4353
// only be held by other threads waiting for conversion, and
4354
// they, like us, drop it quickly without blocking.
4355
_Jv_MutexLock(&(hl->si.mutex));
4356
- JvAssert(he -> address == address | LOCKED );
4357
+ JvAssert(he -> address == (address | LOCKED));
4358
release_set(&(he -> address), (address | REQUEST_CONVERSION | HEAVY));
4359
// release lock on he
4360
LOG(REQ_CONV, (address | REQUEST_CONVERSION | HEAVY), self);
4363
obj_addr_t was_heavy = (address & HEAVY);
4364
if ((address & LOCKED) ||
4365
- !compare_and_swap(&(he -> address), address, (address | LOCKED )))
4366
+ !compare_and_swap(&(he -> address), address, address | LOCKED ))
4370
Index: gnattools/configure
4371
===================================================================
4372
--- a/src/gnattools/configure (.../tags/gcc_4_8_2_release)
4373
+++ b/src/gnattools/configure (.../branches/gcc-4_8-branch)
4374
@@ -2029,66 +2029,59 @@
4375
# Per-target case statement
4376
# -------------------------
4378
- alpha*-dec-vx*) # Unlike all other Vxworks
4380
+ TOOLS_TARGET_PAIRS="\
4381
+ mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
4382
+ indepsw.adb<indepsw-aix.adb"
4385
- | powerpc*-wrs-vxworks \
4386
- | sparc*-wrs-vx* \
4387
- | *86-wrs-vxworks \
4389
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb"
4391
+ TOOLS_TARGET_PAIRS="\
4392
+ mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \
4393
+ indepsw.adb<indepsw-darwin.adb"
4395
- sparc-sun-solaris*)
4396
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
4398
+ TOOLS_TARGET_PAIRS="\
4399
+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
4400
+ indepsw.adb<indepsw-gnu.adb"
4402
- *86-*-solaris2* | x86_64-*-solaris2.1[0-9]*)
4403
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
4406
- | powerpc*-*-linux* \
4407
- | *ia64-*-linux* \
4408
- | alpha*-*-linux* \
4409
- | sparc*-*-linux* \
4410
- | hppa*-*-linux* \
4411
- | *x86_64-*-linux*)
4413
TOOLS_TARGET_PAIRS="\
4414
mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
4415
indepsw.adb<indepsw-gnu.adb"
4418
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb"
4420
+ TOOLS_TARGET_PAIRS="\
4421
+ mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
4422
+ indepsw.adb<indepsw-gnu.adb"
4426
+ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
4429
TOOLS_TARGET_PAIRS="\
4430
- mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
4431
+ mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb \
4432
indepsw.adb<indepsw-gnu.adb"
4434
- hppa*-hp-hpux10*) # Unlike hpux11
4438
TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-hpux.adb"
4441
- TOOLS_TARGET_PAIRS="\
4442
- mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
4443
- indepsw.adb<indepsw-aix.adb"
4445
+ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-ia64-hpux.adb"
4447
- alpha*-dec-vms* | alpha*-dec-openvms* | alpha*-dec-vms* \
4448
- | alpha*-hp-vms* | alpha*-hp-openvms* | alpha*-hp-vms*)
4449
+ alpha*-*-vms* | alpha*-*-openvms*)
4450
TOOLS_TARGET_PAIRS="\
4451
mlib-tgt-specific.adb<mlib-tgt-specific-vms-alpha.adb \
4452
symbols.adb<symbols-vms.adb \
4453
symbols-processing.adb<symbols-processing-vms-alpha.adb"
4455
EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
4457
- ia64*-dec-vms* | ia64*-dec-openvms* | ia64*-dec-vms* \
4458
- | ia64*-hp-vms* | ia64*-hp-openvms* | ia64*-hp-vms*)
4459
+ ia64-*-vms* | ia64-*-openvms*)
4460
TOOLS_TARGET_PAIRS="\
4461
mlib-tgt-specific.adb<mlib-tgt-specific-vms-ia64.adb \
4462
symbols.adb<symbols-vms.adb \
4463
symbols-processing.adb<symbols-processing-vms-ia64.adb"
4465
EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
4467
*-*-cygwin32* | *-*-mingw32* | *-*-pe)
4468
@@ -2097,14 +2090,6 @@
4469
indepsw.adb<indepsw-mingw.adb"
4470
EXTRA_GNATTOOLS='../../gnatdll$(exeext)'
4473
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb"
4476
- TOOLS_TARGET_PAIRS="\
4477
- mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
4478
- indepsw.adb<indepsw-gnu.adb"
4482
# From user or toplevel makefile.
4483
Index: gnattools/Makefile.in
4484
===================================================================
4485
--- a/src/gnattools/Makefile.in (.../tags/gcc_4_8_2_release)
4486
+++ b/src/gnattools/Makefile.in (.../branches/gcc-4_8-branch)
4492
+host_alias = @host_alias@
4495
INSTALL_DATA = @INSTALL_DATA@
4497
TOOLS_FLAGS_TO_PASS_RE= \
4498
"CC=../../xgcc -B../../" \
4499
"CFLAGS=$(CFLAGS)" \
4500
+ "LDFLAGS=$(LDFLAGS)" \
4501
"ADAFLAGS=$(ADAFLAGS)" \
4502
"ADA_CFLAGS=$(ADA_CFLAGS)" \
4503
"INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
4507
# Variables for gnattools, cross
4508
+ifeq ($(build), $(host))
4509
+ GNATMAKE_FOR_HOST=gnatmake
4510
+ GNATLINK_FOR_HOST=gnatlink
4511
+ GNATBIND_FOR_HOST=gnatbind
4512
+ GNATLS_FOR_HOST=gnatls
4514
+ GNATMAKE_FOR_HOST=$(host_alias)-gnatmake
4515
+ GNATLINK_FOR_HOST=$(host_alias)-gnatlink
4516
+ GNATBIND_FOR_HOST=$(host_alias)-gnatbind
4517
+ GNATLS_FOR_HOST=$(host_alias)-gnatls
4520
+# Put the host RTS dir first in the PATH to hide the default runtime
4521
+# files that are among the sources
4522
+RTS_DIR:=$(strip $(subst \,/,$(shell $(GNATLS_FOR_HOST) -v | grep adalib )))
4524
TOOLS_FLAGS_TO_PASS_CROSS= \
4526
"CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
4528
"exeext=$(exeext)" \
4529
"fsrcdir=$(fsrcdir)" \
4530
"srcdir=$(fsrcdir)" \
4531
- "GNATMAKE=gnatmake" \
4532
- "GNATLINK=gnatlink" \
4533
- "GNATBIND=gnatbind" \
4534
+ "GNATMAKE=$(GNATMAKE_FOR_HOST)" \
4535
+ "GNATLINK=$(GNATLINK_FOR_HOST)" \
4536
+ "GNATBIND=$(GNATBIND_FOR_HOST)" \
4540
@@ -179,11 +198,6 @@
4541
$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
4542
$(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools
4544
-# For cross builds of gnattools,
4545
-# put the host RTS dir first in the PATH to hide the default runtime
4546
-# files that are among the sources
4547
-# FIXME: This should be done in configure.
4548
-RTS_DIR:=$(strip $(subst \,/,$(shell gnatls -v | grep adalib )))
4549
gnattools-cross: $(GCC_DIR)/stamp-tools
4551
$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
4552
Index: gnattools/configure.ac
4553
===================================================================
4554
--- a/src/gnattools/configure.ac (.../tags/gcc_4_8_2_release)
4555
+++ b/src/gnattools/configure.ac (.../branches/gcc-4_8-branch)
4557
# Per-target case statement
4558
# -------------------------
4560
- alpha*-dec-vx*) # Unlike all other Vxworks
4562
+ TOOLS_TARGET_PAIRS="\
4563
+ mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
4564
+ indepsw.adb<indepsw-aix.adb"
4567
- | powerpc*-wrs-vxworks \
4568
- | sparc*-wrs-vx* \
4569
- | *86-wrs-vxworks \
4571
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb"
4573
+ TOOLS_TARGET_PAIRS="\
4574
+ mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \
4575
+ indepsw.adb<indepsw-darwin.adb"
4577
- sparc-sun-solaris*)
4578
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
4580
+ TOOLS_TARGET_PAIRS="\
4581
+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
4582
+ indepsw.adb<indepsw-gnu.adb"
4584
- *86-*-solaris2* | x86_64-*-solaris2.1[[0-9]]*)
4585
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
4588
- | powerpc*-*-linux* \
4589
- | *ia64-*-linux* \
4590
- | alpha*-*-linux* \
4591
- | sparc*-*-linux* \
4592
- | hppa*-*-linux* \
4593
- | *x86_64-*-linux*)
4595
TOOLS_TARGET_PAIRS="\
4596
mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
4597
indepsw.adb<indepsw-gnu.adb"
4600
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb"
4602
+ TOOLS_TARGET_PAIRS="\
4603
+ mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
4604
+ indepsw.adb<indepsw-gnu.adb"
4608
+ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
4611
TOOLS_TARGET_PAIRS="\
4612
- mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
4613
+ mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb \
4614
indepsw.adb<indepsw-gnu.adb"
4616
- hppa*-hp-hpux10*) # Unlike hpux11
4620
TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-hpux.adb"
4623
- TOOLS_TARGET_PAIRS="\
4624
- mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
4625
- indepsw.adb<indepsw-aix.adb"
4627
+ TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-ia64-hpux.adb"
4629
- alpha*-dec-vms* | alpha*-dec-openvms* | alpha*-dec-vms* \
4630
- | alpha*-hp-vms* | alpha*-hp-openvms* | alpha*-hp-vms*)
4631
+ alpha*-*-vms* | alpha*-*-openvms*)
4632
TOOLS_TARGET_PAIRS="\
4633
mlib-tgt-specific.adb<mlib-tgt-specific-vms-alpha.adb \
4634
symbols.adb<symbols-vms.adb \
4635
symbols-processing.adb<symbols-processing-vms-alpha.adb"
4637
EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
4639
- ia64*-dec-vms* | ia64*-dec-openvms* | ia64*-dec-vms* \
4640
- | ia64*-hp-vms* | ia64*-hp-openvms* | ia64*-hp-vms*)
4641
+ ia64-*-vms* | ia64-*-openvms*)
4642
TOOLS_TARGET_PAIRS="\
4643
mlib-tgt-specific.adb<mlib-tgt-specific-vms-ia64.adb \
4644
symbols.adb<symbols-vms.adb \
4645
symbols-processing.adb<symbols-processing-vms-ia64.adb"
4647
EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
4649
*-*-cygwin32* | *-*-mingw32* | *-*-pe)
4650
@@ -137,14 +130,6 @@
4651
indepsw.adb<indepsw-mingw.adb"
4652
EXTRA_GNATTOOLS='../../gnatdll$(exeext)'
4655
- TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb"
4658
- TOOLS_TARGET_PAIRS="\
4659
- mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
4660
- indepsw.adb<indepsw-gnu.adb"
4664
# From user or toplevel makefile.
4665
Index: gnattools/ChangeLog
4666
===================================================================
4667
--- a/src/gnattools/ChangeLog (.../tags/gcc_4_8_2_release)
4668
+++ b/src/gnattools/ChangeLog (.../branches/gcc-4_8-branch)
4670
+2013-12-12 Eric Botcazou <ebotcazou@adacore.com>
4671
+ Iain Sandoe <iain@codesourcery.com>
4674
+ * Makefile.in (host): Define.
4675
+ (host_alias): Likewise.
4676
+ (TOOLS_FLAGS_TO_PASS_RE): Add LDFLAGS.
4677
+ (GNATMAKE_FOR_HOST): Define.
4678
+ (GNATLINK_FOR_HOST): Likewise.
4679
+ (GNATBIND_FOR_HOST): Likewise.
4680
+ (GNATLS_FOR_HOST): Likewise.
4681
+ (RTS_DIR): Move around and use GNATLS_FOR_HOST.
4682
+ (TOOLS_FLAGS_TO_PASS_CROSS): Use the other *_HOST variables.
4684
+2013-12-04 Eric Botcazou <ebotcazou@adacore.com>
4687
+ * configure.ac (target parameterization): Rewrite.
4688
+ * configure: Regenerate.
4690
2013-10-16 Release Manager
4692
* GCC 4.8.2 released.
4693
Index: maintainer-scripts/ChangeLog
4694
===================================================================
4695
--- a/src/maintainer-scripts/ChangeLog (.../tags/gcc_4_8_2_release)
4696
+++ b/src/maintainer-scripts/ChangeLog (.../branches/gcc-4_8-branch)
4698
+2014-02-01 Dmitry Gorbachev <d.g.gorbachev@gmail.com>
4701
+ * gcc_release: Avoid printing empty line to generated MD5SUMS files.
4702
+ Bump copyright year.
4704
2013-10-16 Release Manager
4706
* GCC 4.8.2 released.
4707
Index: maintainer-scripts/gcc_release
4708
===================================================================
4709
--- a/src/maintainer-scripts/gcc_release (.../tags/gcc_4_8_2_release)
4710
+++ b/src/maintainer-scripts/gcc_release (.../branches/gcc-4_8-branch)
4713
# Script to create a GCC release.
4715
-# Copyright (c) 2001, 2002, 2006, 2009, 2010, 2011 Free Software Foundation.
4716
+# Copyright (c) 2001-2014 Free Software Foundation.
4718
# This file is part of GCC.
4723
# md5sum -c MD5SUMS | grep -v \"OK$\"
4728
sed -e 's:^\./::' -e '/MD5SUMS/d' |
4729
Index: libgcc/config.host
4730
===================================================================
4731
--- a/src/libgcc/config.host (.../tags/gcc_4_8_2_release)
4732
+++ b/src/libgcc/config.host (.../branches/gcc-4_8-branch)
4733
@@ -331,10 +331,10 @@
4735
arm*-*-uclinux*) # ARM ucLinux
4736
tmake_file="${tmake_file} t-fixedpoint-gnu-prefix"
4737
+ tmake_file="$tmake_file arm/t-arm arm/t-elf t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
4738
tmake_file="${tmake_file} arm/t-bpabi"
4739
tm_file="$tm_file arm/bpabi-lib.h"
4740
unwind_header=config/arm/unwind-arm.h
4741
- tmake_file="$tmake_file arm/t-arm arm/t-elf t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
4742
extra_parts="$extra_parts crti.o crtn.o"
4744
arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems*)
4745
@@ -718,6 +718,10 @@
4746
tmake_file="${tmake_file} microblaze/t-microblaze t-fdpbit"
4747
extra_parts="$extra_parts crtbeginS.o crtendS.o crtbeginT.o crti.o crtn.o"
4749
+microblaze*-*-rtems*)
4750
+ tmake_file="${tmake_file} microblaze/t-microblaze t-fdpbit"
4751
+ extra_parts="$extra_parts crtbeginS.o crtendS.o crtbeginT.o crti.o crtn.o"
4753
mips*-*-netbsd*) # NetBSD/mips, either endian.
4755
mips*-*-linux*) # Linux MIPS, either endian.
4756
@@ -1081,7 +1085,7 @@
4757
md_unwind_header=tilepro/linux-unwind.h
4760
- tmake_file="v850/t-v850 t-fdpbit"
4761
+ tmake_file="${tmake_file} v850/t-v850 t-fdpbit"
4764
tmake_file="$tmake_file vax/t-linux"
4765
@@ -1098,7 +1102,7 @@
4766
extra_parts="$extra_parts crti.o crtn.o"
4769
- tmake_file="$tmake_file xtensa/t-xtensa xtensa/t-linux"
4770
+ tmake_file="$tmake_file xtensa/t-xtensa xtensa/t-linux t-slibgcc-libgcc"
4771
md_unwind_header=xtensa/linux-unwind.h
4774
Index: libgcc/ChangeLog
4775
===================================================================
4776
--- a/src/libgcc/ChangeLog (.../tags/gcc_4_8_2_release)
4777
+++ b/src/libgcc/ChangeLog (.../branches/gcc-4_8-branch)
4779
+2014-03-20 Joel Sherrill <joel.sherrill@oarcorp.com>
4781
+ * config.host (v850*-*-*): Add to tmake_file instead of resetting it.
4783
+2014-02-28 Joey Ye <joey.ye@arm.com>
4785
+ Backport from mainline r208229
4786
+ 2014-02-28 Joey Ye <joey.ye@arm.com>
4789
+ * config/arm/sfp-machine.h (_FP_NANFRAC_H,
4790
+ _FP_NANFRAC_S, _FP_NANFRAC_D, _FP_NANFRAC_Q):
4793
+2014-02-18 Kai Tietz <ktietz@redhat.com>
4794
+ Jonathan Schleifer <js@webkeks.org>
4797
+ * unwind-seh.c (_GCC_specific_handler): Pass proper
4798
+ value to unwind-handler.
4800
+2014-01-25 Walter Lee <walt@tilera.com>
4802
+ Backport from mainline
4803
+ 2014-01-25 Walter Lee <walt@tilera.com>
4805
+ * config/tilepro/atomic.c (pre_atomic_barrier): Mark inline.
4806
+ (post_atomic_barrier): Ditto.
4807
+ (__fetch_and_do): New macro.
4808
+ (__atomic_fetch_and_do): Use __fetch_and_do.
4809
+ (__sync_fetch_and_do): New macro.
4810
+ (__sync_fetch_and_add_4): New function.
4811
+ (__sync_fetch_and_sub_4): New function.
4812
+ (__sync_fetch_and_or_4): New function.
4813
+ (__sync_fetch_and_and_4): New function.
4814
+ (__sync_fetch_and_xor_4): New function.
4815
+ (__sync_fetch_and_nand_4): New function.
4816
+ (__sync_fetch_and_add_8): New function.
4817
+ (__sync_fetch_and_sub_8): New function.
4818
+ (__sync_fetch_and_or_8): New function.
4819
+ (__sync_fetch_and_and_8): New function.
4820
+ (__sync_fetch_and_xor_8): New function.
4821
+ (__sync_fetch_and_nand_8): New function.
4822
+ (__do_and_fetch): New macro.
4823
+ (__atomic_do_and_fetch): Use __do_and_fetch.
4824
+ (__sync_do_and_fetch): New macro.
4825
+ (__sync_add_and_fetch_4): New function.
4826
+ (__sync_sub_and_fetch_4): New function.
4827
+ (__sync_or_and_fetch_4): New function.
4828
+ (__sync_and_and_fetch_4): New function.
4829
+ (__sync_xor_and_fetch_4): New function.
4830
+ (__sync_nand_and_fetch_4): New function.
4831
+ (__sync_add_and_fetch_8): New function.
4832
+ (__sync_sub_and_fetch_8): New function.
4833
+ (__sync_or_and_fetch_8): New function.
4834
+ (__sync_and_and_fetch_8): New function.
4835
+ (__sync_xor_and_fetch_8): New function.
4836
+ (__sync_nand_and_fetch_8): New function.
4837
+ (__sync_exchange_methods): New macro.
4838
+ (__sync_val_compare_and_swap_4): New function.
4839
+ (__sync_bool_compare_and_swap_4): New function.
4840
+ (__sync_lock_test_and_test_4): New function.
4841
+ (__sync_val_compare_and_swap_8): New function.
4842
+ (__sync_bool_compare_and_swap_8): New function.
4843
+ (__sync_lock_test_and_test_8): New function.
4844
+ (__subword_cmpxchg_body): New macro.
4845
+ (__atomic_compare_exchange_1): Use __subword_cmpxchg_body.
4846
+ (__atomic_compare_exchange_2): Ditto.
4847
+ (__sync_subword_cmpxchg): New macro.
4848
+ (__sync_val_compare_and_swap_1): New function.
4849
+ (__sync_bool_compare_and_swap_1): New function.
4850
+ (__sync_val_compare_and_swap_2): New function.
4851
+ (__sync_bool_compare_and_swap_2): New function.
4852
+ (__atomic_subword): Rename to ...
4853
+ (__subword): ... New name.
4854
+ (__atomic_subword_fetch): Use __subword.
4855
+ (__sync_subword_fetch): New macro.
4856
+ (__sync_fetch_and_add_1): New function.
4857
+ (__sync_fetch_and_sub_1): New function.
4858
+ (__sync_fetch_and_or_1): New function.
4859
+ (__sync_fetch_and_and_1): New function.
4860
+ (__sync_fetch_and_xor_1): New function.
4861
+ (__sync_fetch_and_nand_1): New function.
4862
+ (__sync_fetch_and_add_2): New function.
4863
+ (__sync_fetch_and_sub_2): New function.
4864
+ (__sync_fetch_and_or_2): New function.
4865
+ (__sync_fetch_and_and_2): New function.
4866
+ (__sync_fetch_and_xor_2): New function.
4867
+ (__sync_fetch_and_nand_2): New function.
4868
+ (__sync_add_and_fetch_1): New function.
4869
+ (__sync_sub_and_fetch_1): New function.
4870
+ (__sync_or_and_fetch_1): New function.
4871
+ (__sync_and_and_fetch_1): New function.
4872
+ (__sync_xor_and_fetch_1): New function.
4873
+ (__sync_nand_and_fetch_1): New function.
4874
+ (__sync_add_and_fetch_2): New function.
4875
+ (__sync_sub_and_fetch_2): New function.
4876
+ (__sync_or_and_fetch_2): New function.
4877
+ (__sync_and_and_fetch_2): New function.
4878
+ (__sync_xor_and_fetch_2): New function.
4879
+ (__sync_nand_and_fetch_2): New function.
4880
+ (__atomic_subword_lock): Use __subword.
4881
+ (__sync_subword_lock): New macro.
4882
+ (__sync_lock_test_and_set_1): New function.
4883
+ (__sync_lock_test_and_set_2): New function.
4885
+2014-01-25 Walter Lee <walt@tilera.com>
4887
+ Backport from mainline
4888
+ 2014-01-25 Walter Lee <walt@tilera.com>
4890
+ * config/tilepro/atomic.c (BIT_OFFSET): Define.
4891
+ (__atomic_subword_cmpxchg): Use BIT_OFFSET.
4892
+ (__atomic_subword): Ditto.
4894
+2014-01-25 Walter Lee <walt@tilera.com>
4896
+ Backport from mainline
4897
+ 2014-01-25 Walter Lee <walt@tilera.com>
4899
+ * config/tilepro/atomic.c (__atomic_do_and_fetch): Add
4900
+ a prefix op argument.
4901
+ (__atomic_nand_fetch_4): Add prefix op.
4902
+ (__atomic_nand_fetch_8): Ditto.
4904
+2014-01-21 Baruch Siach <barch@tkos.co.il>
4906
+ * config.host (tmake_file): add t-slibgcc-libgcc for xtensa*-*-linux*.
4908
+2014-01-03 Joseph Myers <joseph@codesourcery.com>
4910
+ * config/rs6000/ibm-ldouble.c (__gcc_qdiv): Scale up arguments in
4911
+ case of small numerator and finite nonzero result.
4913
+2013-12-12 Zhenqiang Chen <zhenqiang.chen@arm.com>
4915
+ Backport from trunk r205917.
4916
+ 2013-12-12 Zhenqiang Chen <zhenqiang.chen@arm.com>
4917
+ * config.host (arm*-*-uclinux*): Move t-arm before t-bpabi.
4919
+2013-12-10 Uros Bizjak <ubizjak@gmail.com>
4921
+ * config/i386/sfp-exceptions.c (__sfp_handle_exceptions): Emit SSE
4922
+ instructions when __SSE_MATH__ is defined.
4924
+2013-12-06 Ralf Corsépius <ralf.corsepius@rtems.org>
4926
+ * config.host (microblaze-*-rtems*): New.
4928
+2013-11-10 Kai Tietz <ktietz@redhat.com>
4930
+ Back-merged from trunk
4931
+ * config/i386/cygming-crtbegin.c (__gcc_register_frame):
4932
+ Increment load-count on use of LIBGCC_SONAME DLL.
4933
+ (hmod_libgcc): New static variable to hold handle of
4934
+ LIBGCC_SONAME DLL.
4935
+ (__gcc_deregister_frame): Decrement load-count of
4936
+ LIBGCC_SONAME DLL.
4938
+2013-11-07 Uros Bizjak <ubizjak@gmail.com>
4940
+ * config/i386/sfp-exceptions.c (__sfp_handle_exceptions): Handle
4941
+ FP_EX_DENORM. Store result to volatile location after SSE division
4942
+ to close interrupt window. Remove unneeded fwait after x87
4943
+ division since interrupt window will be closed by emitted fstp.
4944
+ Rewrite FP_EX_INEXACT handling.
4946
2013-10-16 Release Manager
4948
* GCC 4.8.2 released.
4950
* config/mips/crtn.S (fini, init): New labels.
4952
2012-02-19 Edgar E. Iglesias <edgar.iglesias@gmail.com>
4953
- * config/microblaze/modsi3.S (modsi3): Fix case with 0x80000000
4954
+ * config/microblaze/modsi3.S (modsi3): Fix case with 0x80000000
4957
2013-02-16 Alan Modra <amodra@gmail.com>
4958
Index: libgcc/config/i386/sfp-exceptions.c
4959
===================================================================
4960
--- a/src/libgcc/config/i386/sfp-exceptions.c (.../tags/gcc_4_8_2_release)
4961
+++ b/src/libgcc/config/i386/sfp-exceptions.c (.../branches/gcc-4_8-branch)
4963
if (_fex & FP_EX_INVALID)
4967
+#ifdef __SSE_MATH__
4968
+ volatile float r __attribute__ ((unused));
4969
asm volatile ("%vdivss\t{%0, %d0|%d0, %0}" : "+x" (f));
4970
+ r = f; /* Needed to trigger exception. */
4972
asm volatile ("fdiv\t{%y0, %0|%0, %y0}" : "+t" (f));
4973
- asm volatile ("fwait");
4974
+ /* No need for fwait, exception is triggered by emitted fstp. */
4977
+ if (_fex & FP_EX_DENORM)
4980
+ asm volatile ("fnstenv\t%0" : "=m" (temp));
4981
+ temp.__status_word |= FP_EX_DENORM;
4982
+ asm volatile ("fldenv\t%0" : : "m" (temp));
4983
+ asm volatile ("fwait");
4985
if (_fex & FP_EX_DIVZERO)
4987
float f = 1.0f, g = 0.0f;
4989
+#ifdef __SSE_MATH__
4990
+ volatile float r __attribute__ ((unused));
4991
asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g));
4992
+ r = f; /* Needed to trigger exception. */
4994
asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g));
4995
- asm volatile ("fwait");
4996
+ /* No need for fwait, exception is triggered by emitted fstp. */
4999
if (_fex & FP_EX_OVERFLOW)
5002
if (_fex & FP_EX_INEXACT)
5005
- asm volatile ("fnstenv\t%0" : "=m" (temp));
5006
- temp.__status_word |= FP_EX_INEXACT;
5007
- asm volatile ("fldenv\t%0" : : "m" (temp));
5008
- asm volatile ("fwait");
5009
+ float f = 1.0f, g = 3.0f;
5010
+#ifdef __SSE_MATH__
5011
+ volatile float r __attribute__ ((unused));
5012
+ asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g));
5013
+ r = f; /* Needed to trigger exception. */
5015
+ asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g));
5016
+ /* No need for fwait, exception is triggered by emitted fstp. */
5021
Index: libgcc/config/i386/cygming-crtbegin.c
5022
===================================================================
5023
--- a/src/libgcc/config/i386/cygming-crtbegin.c (.../tags/gcc_4_8_2_release)
5024
+++ b/src/libgcc/config/i386/cygming-crtbegin.c (.../branches/gcc-4_8-branch)
5028
static struct object obj;
5030
+/* Handle of libgcc's DLL reference. */
5031
+HANDLE hmod_libgcc;
5034
#if TARGET_USE_JCR_SECTION
5037
void (*register_frame_fn) (const void *, struct object *);
5038
HANDLE h = GetModuleHandle (LIBGCC_SONAME);
5041
- register_frame_fn = (void (*) (const void *, struct object *))
5042
- GetProcAddress (h, "__register_frame_info");
5044
+ /* Increasing the load-count of LIBGCC_SONAME DLL. */
5045
+ hmod_libgcc = LoadLibrary (LIBGCC_SONAME);
5046
+ register_frame_fn = (void (*) (const void *, struct object *))
5047
+ GetProcAddress (h, "__register_frame_info");
5050
register_frame_fn = __register_frame_info;
5051
if (register_frame_fn)
5053
deregister_frame_fn = __deregister_frame_info;
5054
if (deregister_frame_fn)
5055
deregister_frame_fn (__EH_FRAME_BEGIN__);
5057
+ FreeLibrary (hmod_libgcc);
5060
Index: libgcc/config/rs6000/ibm-ldouble.c
5061
===================================================================
5062
--- a/src/libgcc/config/rs6000/ibm-ldouble.c (.../tags/gcc_4_8_2_release)
5063
+++ b/src/libgcc/config/rs6000/ibm-ldouble.c (.../branches/gcc-4_8-branch)
5064
@@ -188,7 +188,16 @@
5068
- /* Finite nonzero result requires corrections to the highest order term. */
5069
+ /* Finite nonzero result requires corrections to the highest order
5070
+ term. These corrections require the low part of c * t to be
5071
+ exactly represented in double. */
5072
+ if (fabs (a) <= 0x1p-969)
5080
s = c * t; /* (s,sigma) = c*t exactly. */
5081
w = -(-b + d * t); /* Written to get fnmsub for speed, but not
5082
Index: libgcc/config/tilepro/atomic.c
5083
===================================================================
5084
--- a/src/libgcc/config/tilepro/atomic.c (.../tags/gcc_4_8_2_release)
5085
+++ b/src/libgcc/config/tilepro/atomic.c (.../branches/gcc-4_8-branch)
5087
/* This code should be inlined by the compiler, but for now support
5088
it as out-of-line methods in libgcc. */
5092
pre_atomic_barrier (int model)
5094
switch ((enum memmodel) model)
5101
post_atomic_barrier (int model)
5103
switch ((enum memmodel) model)
5106
#define __unused __attribute__((unused))
5108
-#define __atomic_fetch_and_do(type, size, opname) \
5110
-__atomic_fetch_##opname##_##size(type* p, type i, int model) \
5111
+#define __fetch_and_do(proto, type, size, opname, top, bottom) \
5114
- pre_atomic_barrier(model); \
5116
type rv = arch_atomic_##opname(p, i); \
5117
- post_atomic_barrier(model); \
5122
+#define __atomic_fetch_and_do(type, size, opname) \
5123
+ __fetch_and_do(type __atomic_fetch_##opname##_##size(type* p, type i, int model), \
5124
+ type, size, opname, \
5125
+ pre_atomic_barrier(model), \
5126
+ post_atomic_barrier(model)) \
5128
__atomic_fetch_and_do (int, 4, add)
5129
__atomic_fetch_and_do (int, 4, sub)
5130
__atomic_fetch_and_do (int, 4, or)
5132
__atomic_fetch_and_do (long long, 8, and)
5133
__atomic_fetch_and_do (long long, 8, xor)
5134
__atomic_fetch_and_do (long long, 8, nand)
5135
-#define __atomic_do_and_fetch(type, size, opname, op) \
5137
-__atomic_##opname##_fetch_##size(type* p, type i, int model) \
5139
- pre_atomic_barrier(model); \
5140
- type rv = arch_atomic_##opname(p, i) op i; \
5141
- post_atomic_barrier(model); \
5144
+#define __sync_fetch_and_do(type, size, opname) \
5145
+ __fetch_and_do(type __sync_fetch_and_##opname##_##size(type* p, type i), \
5146
+ type, size, opname, \
5147
+ arch_atomic_write_barrier(), \
5148
+ arch_atomic_read_barrier())
5150
+__sync_fetch_and_do (int, 4, add)
5151
+__sync_fetch_and_do (int, 4, sub)
5152
+__sync_fetch_and_do (int, 4, or)
5153
+__sync_fetch_and_do (int, 4, and)
5154
+__sync_fetch_and_do (int, 4, xor)
5155
+__sync_fetch_and_do (int, 4, nand)
5156
+__sync_fetch_and_do (long long, 8, add)
5157
+__sync_fetch_and_do (long long, 8, sub)
5158
+__sync_fetch_and_do (long long, 8, or)
5159
+__sync_fetch_and_do (long long, 8, and)
5160
+__sync_fetch_and_do (long long, 8, xor)
5161
+__sync_fetch_and_do (long long, 8, nand)
5163
+#define __do_and_fetch(proto, type, size, opname, op, op2, top, bottom) \
5167
+ type rv = op2 (arch_atomic_##opname(p, i) op i); \
5171
-__atomic_do_and_fetch (int, 4, add, +)
5172
-__atomic_do_and_fetch (int, 4, sub, -)
5173
-__atomic_do_and_fetch (int, 4, or, |)
5174
-__atomic_do_and_fetch (int, 4, and, &)
5175
-__atomic_do_and_fetch (int, 4, xor, |)
5176
-__atomic_do_and_fetch (int, 4, nand, &)
5177
-__atomic_do_and_fetch (long long, 8, add, +)
5178
-__atomic_do_and_fetch (long long, 8, sub, -)
5179
-__atomic_do_and_fetch (long long, 8, or, |)
5180
-__atomic_do_and_fetch (long long, 8, and, &)
5181
-__atomic_do_and_fetch (long long, 8, xor, |)
5182
-__atomic_do_and_fetch (long long, 8, nand, &)
5184
+#define __atomic_do_and_fetch(type, size, opname, op, op2) \
5185
+ __do_and_fetch(type __atomic_##opname##_fetch_##size(type* p, type i, int model), \
5186
+ type, size, opname, op, op2, \
5187
+ pre_atomic_barrier(model), \
5188
+ post_atomic_barrier(model)) \
5190
+__atomic_do_and_fetch (int, 4, add, +, )
5191
+__atomic_do_and_fetch (int, 4, sub, -, )
5192
+__atomic_do_and_fetch (int, 4, or, |, )
5193
+__atomic_do_and_fetch (int, 4, and, &, )
5194
+__atomic_do_and_fetch (int, 4, xor, |, )
5195
+__atomic_do_and_fetch (int, 4, nand, &, ~)
5196
+__atomic_do_and_fetch (long long, 8, add, +, )
5197
+__atomic_do_and_fetch (long long, 8, sub, -, )
5198
+__atomic_do_and_fetch (long long, 8, or, |, )
5199
+__atomic_do_and_fetch (long long, 8, and, &, )
5200
+__atomic_do_and_fetch (long long, 8, xor, |, )
5201
+__atomic_do_and_fetch (long long, 8, nand, &, ~)
5203
+#define __sync_do_and_fetch(type, size, opname, op, op2) \
5204
+ __do_and_fetch(type __sync_##opname##_and_fetch_##size(type* p, type i), \
5205
+ type, size, opname, op, op2, \
5206
+ arch_atomic_write_barrier(), \
5207
+ arch_atomic_read_barrier()) \
5209
+__sync_do_and_fetch (int, 4, add, +, )
5210
+__sync_do_and_fetch (int, 4, sub, -, )
5211
+__sync_do_and_fetch (int, 4, or, |, )
5212
+__sync_do_and_fetch (int, 4, and, &, )
5213
+__sync_do_and_fetch (int, 4, xor, |, )
5214
+__sync_do_and_fetch (int, 4, nand, &, ~)
5215
+__sync_do_and_fetch (long long, 8, add, +, )
5216
+__sync_do_and_fetch (long long, 8, sub, -, )
5217
+__sync_do_and_fetch (long long, 8, or, |, )
5218
+__sync_do_and_fetch (long long, 8, and, &, )
5219
+__sync_do_and_fetch (long long, 8, xor, |, )
5220
+__sync_do_and_fetch (long long, 8, nand, &, ~)
5222
#define __atomic_exchange_methods(type, size) \
5224
__atomic_compare_exchange_##size(volatile type* ptr, type* oldvalp, \
5225
@@ -128,49 +179,117 @@
5226
post_atomic_barrier(model); \
5230
__atomic_exchange_methods (int, 4)
5231
__atomic_exchange_methods (long long, 8)
5233
+#define __sync_exchange_methods(type, size) \
5235
+__sync_val_compare_and_swap_##size(type* ptr, type oldval, type newval) \
5237
+ arch_atomic_write_barrier(); \
5238
+ type retval = arch_atomic_val_compare_and_exchange(ptr, oldval, newval); \
5239
+ arch_atomic_read_barrier(); \
5244
+__sync_bool_compare_and_swap_##size(type* ptr, type oldval, type newval) \
5246
+ arch_atomic_write_barrier(); \
5247
+ bool retval = arch_atomic_bool_compare_and_exchange(ptr, oldval, newval); \
5248
+ arch_atomic_read_barrier(); \
5253
+__sync_lock_test_and_set_##size(type* ptr, type val) \
5255
+ type retval = arch_atomic_exchange(ptr, val); \
5256
+ arch_atomic_acquire_barrier_value(retval); \
5260
+__sync_exchange_methods (int, 4)
5261
+__sync_exchange_methods (long long, 8)
5263
+#ifdef __LITTLE_ENDIAN__
5264
+#define BIT_OFFSET(n, type) ((n) * 8)
5266
+#define BIT_OFFSET(n, type) ((4 - sizeof(type) - (n)) * 8)
5269
/* Subword methods require the same approach for both TILEPro and
5270
TILE-Gx. We load the background data for the word, insert the
5271
desired subword piece, then compare-and-exchange it into place. */
5272
#define u8 unsigned char
5273
#define u16 unsigned short
5275
+#define __subword_cmpxchg_body(type, size, ptr, guess, val) \
5277
+ unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL); \
5278
+ const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type); \
5279
+ const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1; \
5280
+ const unsigned int bgmask = ~(valmask << shift); \
5281
+ unsigned int oldword = *p; \
5282
+ type oldval = (oldword >> shift) & valmask; \
5283
+ if (__builtin_expect((oldval == guess), 1)) { \
5284
+ unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
5285
+ oldword = arch_atomic_val_compare_and_exchange(p, oldword, word); \
5286
+ oldval = (oldword >> shift) & valmask; \
5291
#define __atomic_subword_cmpxchg(type, size) \
5294
-__atomic_compare_exchange_##size(volatile type* ptr, type* guess, \
5295
+__atomic_compare_exchange_##size(volatile type* ptr, type* guess_ptr, \
5296
type val, bool weak __unused, int models, \
5297
int modelf __unused) \
5299
pre_atomic_barrier(models); \
5300
- unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL); \
5301
- const int shift = ((unsigned long)ptr & 3UL) * 8; \
5302
- const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1; \
5303
- const unsigned int bgmask = ~(valmask << shift); \
5304
- unsigned int oldword = *p; \
5305
- type oldval = (oldword >> shift) & valmask; \
5306
- if (__builtin_expect((oldval == *guess), 1)) { \
5307
- unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
5308
- oldword = arch_atomic_val_compare_and_exchange(p, oldword, word); \
5309
- oldval = (oldword >> shift) & valmask; \
5311
+ type guess = *guess_ptr; \
5312
+ type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val); \
5313
post_atomic_barrier(models); \
5314
- bool success = (oldval == *guess); \
5315
- *guess = oldval; \
5316
+ bool success = (oldval == guess); \
5317
+ *guess_ptr = oldval; \
5321
__atomic_subword_cmpxchg (u8, 1)
5322
__atomic_subword_cmpxchg (u16, 2)
5324
+#define __sync_subword_cmpxchg(type, size) \
5327
+__sync_val_compare_and_swap_##size(type* ptr, type guess, type val) \
5329
+ arch_atomic_write_barrier(); \
5330
+ type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val); \
5331
+ arch_atomic_read_barrier(); \
5336
+__sync_bool_compare_and_swap_##size(type* ptr, type guess, type val) \
5338
+ type oldval = __sync_val_compare_and_swap_##size(ptr, guess, val); \
5339
+ return oldval == guess; \
5342
+__sync_subword_cmpxchg (u8, 1)
5343
+__sync_subword_cmpxchg (u16, 2)
5345
/* For the atomic-update subword methods, we use the same approach as
5346
above, but we retry until we succeed if the compare-and-exchange
5348
-#define __atomic_subword(type, proto, top, expr, bottom) \
5349
+#define __subword(type, proto, top, expr, bottom) \
5353
unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL); \
5354
- const int shift = ((unsigned long)ptr & 3UL) * 8; \
5355
+ const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type); \
5356
const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1; \
5357
const unsigned int bgmask = ~(valmask << shift); \
5358
unsigned int oldword, xword = *p; \
5359
@@ -184,12 +303,14 @@
5360
} while (__builtin_expect(xword != oldword, 0)); \
5364
#define __atomic_subword_fetch(type, funcname, expr, retval) \
5365
- __atomic_subword(type, \
5366
- type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
5367
- pre_atomic_barrier(model);, \
5369
- post_atomic_barrier(model); return retval;)
5371
+ type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
5372
+ pre_atomic_barrier(model);, \
5374
+ post_atomic_barrier(model); return retval;)
5376
__atomic_subword_fetch (u8, fetch_add_1, oldval + i, oldval)
5377
__atomic_subword_fetch (u8, fetch_sub_1, oldval - i, oldval)
5378
__atomic_subword_fetch (u8, fetch_or_1, oldval | i, oldval)
5380
__atomic_subword_fetch (u8, fetch_and_1, oldval & i, oldval)
5381
__atomic_subword_fetch (u8, fetch_xor_1, oldval ^ i, oldval)
5382
__atomic_subword_fetch (u8, fetch_nand_1, ~(oldval & i), oldval)
5384
__atomic_subword_fetch (u16, fetch_add_2, oldval + i, oldval)
5385
__atomic_subword_fetch (u16, fetch_sub_2, oldval - i, oldval)
5386
__atomic_subword_fetch (u16, fetch_or_2, oldval | i, oldval)
5388
__atomic_subword_fetch (u16, fetch_and_2, oldval & i, oldval)
5389
__atomic_subword_fetch (u16, fetch_xor_2, oldval ^ i, oldval)
5390
__atomic_subword_fetch (u16, fetch_nand_2, ~(oldval & i), oldval)
5392
__atomic_subword_fetch (u8, add_fetch_1, oldval + i, val)
5393
__atomic_subword_fetch (u8, sub_fetch_1, oldval - i, val)
5394
__atomic_subword_fetch (u8, or_fetch_1, oldval | i, val)
5396
__atomic_subword_fetch (u8, and_fetch_1, oldval & i, val)
5397
__atomic_subword_fetch (u8, xor_fetch_1, oldval ^ i, val)
5398
__atomic_subword_fetch (u8, nand_fetch_1, ~(oldval & i), val)
5400
__atomic_subword_fetch (u16, add_fetch_2, oldval + i, val)
5401
__atomic_subword_fetch (u16, sub_fetch_2, oldval - i, val)
5402
__atomic_subword_fetch (u16, or_fetch_2, oldval | i, val)
5403
@@ -214,12 +338,58 @@
5404
__atomic_subword_fetch (u16, and_fetch_2, oldval & i, val)
5405
__atomic_subword_fetch (u16, xor_fetch_2, oldval ^ i, val)
5406
__atomic_subword_fetch (u16, nand_fetch_2, ~(oldval & i), val)
5408
+#define __sync_subword_fetch(type, funcname, expr, retval) \
5410
+ type __sync_ ## funcname(type *ptr, type i), \
5411
+ arch_atomic_read_barrier();, \
5413
+ arch_atomic_write_barrier(); return retval;)
5415
+__sync_subword_fetch (u8, fetch_and_add_1, oldval + i, oldval)
5416
+__sync_subword_fetch (u8, fetch_and_sub_1, oldval - i, oldval)
5417
+__sync_subword_fetch (u8, fetch_and_or_1, oldval | i, oldval)
5418
+__sync_subword_fetch (u8, fetch_and_and_1, oldval & i, oldval)
5419
+__sync_subword_fetch (u8, fetch_and_xor_1, oldval ^ i, oldval)
5420
+__sync_subword_fetch (u8, fetch_and_nand_1, ~(oldval & i), oldval)
5422
+__sync_subword_fetch (u16, fetch_and_add_2, oldval + i, oldval)
5423
+__sync_subword_fetch (u16, fetch_and_sub_2, oldval - i, oldval)
5424
+__sync_subword_fetch (u16, fetch_and_or_2, oldval | i, oldval)
5425
+__sync_subword_fetch (u16, fetch_and_and_2, oldval & i, oldval)
5426
+__sync_subword_fetch (u16, fetch_and_xor_2, oldval ^ i, oldval)
5427
+__sync_subword_fetch (u16, fetch_and_nand_2, ~(oldval & i), oldval)
5429
+__sync_subword_fetch (u8, add_and_fetch_1, oldval + i, val)
5430
+__sync_subword_fetch (u8, sub_and_fetch_1, oldval - i, val)
5431
+__sync_subword_fetch (u8, or_and_fetch_1, oldval | i, val)
5432
+__sync_subword_fetch (u8, and_and_fetch_1, oldval & i, val)
5433
+__sync_subword_fetch (u8, xor_and_fetch_1, oldval ^ i, val)
5434
+__sync_subword_fetch (u8, nand_and_fetch_1, ~(oldval & i), val)
5436
+__sync_subword_fetch (u16, add_and_fetch_2, oldval + i, val)
5437
+__sync_subword_fetch (u16, sub_and_fetch_2, oldval - i, val)
5438
+__sync_subword_fetch (u16, or_and_fetch_2, oldval | i, val)
5439
+__sync_subword_fetch (u16, and_and_fetch_2, oldval & i, val)
5440
+__sync_subword_fetch (u16, xor_and_fetch_2, oldval ^ i, val)
5441
+__sync_subword_fetch (u16, nand_and_fetch_2, ~(oldval & i), val)
5443
#define __atomic_subword_lock(type, size) \
5445
-__atomic_subword(type, \
5446
- type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
5447
- pre_atomic_barrier(model);, \
5449
- post_atomic_barrier(model); return oldval;)
5451
+ type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
5452
+ pre_atomic_barrier(model);, \
5454
+ post_atomic_barrier(model); return oldval;)
5456
__atomic_subword_lock (u8, 1)
5457
__atomic_subword_lock (u16, 2)
5459
+#define __sync_subword_lock(type, size) \
5461
+ type __sync_lock_test_and_set_##size(type* ptr, type nval), \
5464
+ arch_atomic_acquire_barrier_value(oldval); return oldval;)
5466
+__sync_subword_lock (u8, 1)
5467
+__sync_subword_lock (u16, 2)
5468
Index: libgcc/config/arm/sfp-machine.h
5469
===================================================================
5470
--- a/src/libgcc/config/arm/sfp-machine.h (.../tags/gcc_4_8_2_release)
5471
+++ b/src/libgcc/config/arm/sfp-machine.h (.../branches/gcc-4_8-branch)
5473
#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
5474
#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
5476
-#define _FP_NANFRAC_H ((_FP_QNANBIT_H << 1) - 1)
5477
-#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
5478
-#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1
5479
-#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
5480
+/* According to RTABI, QNAN is only with the most significant bit of the
5481
+ significand set, and all other significand bits zero. */
5482
+#define _FP_NANFRAC_H 0
5483
+#define _FP_NANFRAC_S 0
5484
+#define _FP_NANFRAC_D 0, 0
5485
+#define _FP_NANFRAC_Q 0, 0, 0, 0
5486
#define _FP_NANSIGN_H 0
5487
#define _FP_NANSIGN_S 0
5488
#define _FP_NANSIGN_D 0
5489
Index: libgcc/unwind-seh.c
5490
===================================================================
5491
--- a/src/libgcc/unwind-seh.c (.../tags/gcc_4_8_2_release)
5492
+++ b/src/libgcc/unwind-seh.c (.../branches/gcc-4_8-branch)
5494
ms_exc->ExceptionInformation[3] = gcc_context.reg[1];
5496
/* Begin phase 2. Perform the unwinding. */
5497
- RtlUnwindEx (this_frame, gcc_context.ra, ms_exc, gcc_exc,
5498
- ms_orig_context, ms_disp->HistoryTable);
5499
+ RtlUnwindEx (this_frame, gcc_context.ra, ms_exc,
5500
+ (PVOID)gcc_context.reg[0], ms_orig_context,
5501
+ ms_disp->HistoryTable);
5504
/* In _Unwind_RaiseException we return _URC_FATAL_PHASE1_ERROR. */
5505
Index: gcc/tree-vrp.c
5506
===================================================================
5507
--- a/src/gcc/tree-vrp.c (.../tags/gcc_4_8_2_release)
5508
+++ b/src/gcc/tree-vrp.c (.../branches/gcc-4_8-branch)
5509
@@ -5271,9 +5271,13 @@
5511
else if (CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (op_def)))
5513
- /* Recurse through the type conversion. */
5514
- retval |= register_edge_assert_for_1 (gimple_assign_rhs1 (op_def),
5516
+ /* Recurse through the type conversion, unless it is a narrowing
5517
+ conversion or conversion from non-integral type. */
5518
+ tree rhs = gimple_assign_rhs1 (op_def);
5519
+ if (INTEGRAL_TYPE_P (TREE_TYPE (rhs))
5520
+ && (TYPE_PRECISION (TREE_TYPE (rhs))
5521
+ <= TYPE_PRECISION (TREE_TYPE (op))))
5522
+ retval |= register_edge_assert_for_1 (rhs, code, e, bsi);
5526
@@ -7453,7 +7457,8 @@
5528
else if ((operand_less_p (vr1min, *vr0max) == 1
5529
|| operand_equal_p (vr1min, *vr0max, 0))
5530
- && operand_less_p (*vr0min, vr1min) == 1)
5531
+ && operand_less_p (*vr0min, vr1min) == 1
5532
+ && operand_less_p (*vr0max, vr1max) == 1)
5534
/* [ ( ] ) or [ ]( ) */
5535
if (*vr0type == VR_RANGE
5536
@@ -7487,7 +7492,8 @@
5538
else if ((operand_less_p (*vr0min, vr1max) == 1
5539
|| operand_equal_p (*vr0min, vr1max, 0))
5540
- && operand_less_p (vr1min, *vr0min) == 1)
5541
+ && operand_less_p (vr1min, *vr0min) == 1
5542
+ && operand_less_p (vr1max, *vr0max) == 1)
5544
/* ( [ ) ] or ( )[ ] */
5545
if (*vr0type == VR_RANGE
5546
Index: gcc/loop-unswitch.c
5547
===================================================================
5548
--- a/src/gcc/loop-unswitch.c (.../tags/gcc_4_8_2_release)
5549
+++ b/src/gcc/loop-unswitch.c (.../branches/gcc-4_8-branch)
5555
for (i = 0; i < 2; i++)
5557
op[i] = XEXP (test, i);
5558
@@ -205,11 +206,15 @@
5561
op[i] = get_iv_value (&iv, const0_rtx);
5562
+ if (iv.extend != IV_UNKNOWN_EXTEND
5563
+ && iv.mode != iv.extend_mode)
5564
+ op[i] = lowpart_subreg (iv.mode, op[i], iv.extend_mode);
5565
+ if (mode == VOIDmode)
5568
+ gcc_assert (mode == iv.mode);
5571
- mode = GET_MODE (op[0]);
5572
- if (mode == VOIDmode)
5573
- mode = GET_MODE (op[1]);
5574
if (GET_MODE_CLASS (mode) == MODE_CC)
5576
if (at != BB_END (bb))
5577
Index: gcc/tree-ssa-loop-im.c
5578
===================================================================
5579
--- a/src/gcc/tree-ssa-loop-im.c (.../tags/gcc_4_8_2_release)
5580
+++ b/src/gcc/tree-ssa-loop-im.c (.../branches/gcc-4_8-branch)
5581
@@ -1190,6 +1190,67 @@
5582
fini_walk_dominator_tree (&walk_data);
5585
+/* Return true if CODE is an operation that when operating on signed
5586
+ integer types involves undefined behavior on overflow and the
5587
+ operation can be expressed with unsigned arithmetic. */
5590
+arith_code_with_undefined_signed_overflow (tree_code code)
5598
+ case POINTER_PLUS_EXPR:
5605
+/* Rewrite STMT, an assignment with a signed integer or pointer arithmetic
5606
+ operation that can be transformed to unsigned arithmetic by converting
5607
+ its operand, carrying out the operation in the corresponding unsigned
5608
+ type and converting the result back to the original type.
5610
+ Returns a sequence of statements that replace STMT and also contain
5611
+ a modified form of STMT itself. */
5614
+rewrite_to_defined_overflow (gimple stmt)
5616
+ if (dump_file && (dump_flags & TDF_DETAILS))
5618
+ fprintf (dump_file, "rewriting stmt with undefined signed "
5620
+ print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
5623
+ tree lhs = gimple_assign_lhs (stmt);
5624
+ tree type = unsigned_type_for (TREE_TYPE (lhs));
5625
+ gimple_seq stmts = NULL;
5626
+ for (unsigned i = 1; i < gimple_num_ops (stmt); ++i)
5628
+ gimple_seq stmts2 = NULL;
5629
+ gimple_set_op (stmt, i,
5630
+ force_gimple_operand (fold_convert (type,
5631
+ gimple_op (stmt, i)),
5632
+ &stmts2, true, NULL_TREE));
5633
+ gimple_seq_add_seq (&stmts, stmts2);
5635
+ gimple_assign_set_lhs (stmt, make_ssa_name (type, stmt));
5636
+ if (gimple_assign_rhs_code (stmt) == POINTER_PLUS_EXPR)
5637
+ gimple_assign_set_rhs_code (stmt, PLUS_EXPR);
5638
+ gimple_seq_add_stmt (&stmts, stmt);
5639
+ gimple cvt = gimple_build_assign_with_ops
5640
+ (NOP_EXPR, lhs, gimple_assign_lhs (stmt), NULL_TREE);
5641
+ gimple_seq_add_stmt (&stmts, cvt);
5646
/* Hoist the statements in basic block BB out of the loops prescribed by
5647
data stored in LIM_DATA structures associated with each statement. Callback
5648
for walk_dominator_tree. */
5649
@@ -1321,7 +1382,21 @@
5652
gsi_remove (&bsi, false);
5653
- gsi_insert_on_edge (e, stmt);
5654
+ /* In case this is a stmt that is not unconditionally executed
5655
+ when the target loop header is executed and the stmt may
5656
+ invoke undefined integer or pointer overflow rewrite it to
5657
+ unsigned arithmetic. */
5658
+ if (is_gimple_assign (stmt)
5659
+ && INTEGRAL_TYPE_P (TREE_TYPE (gimple_assign_lhs (stmt)))
5660
+ && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (gimple_assign_lhs (stmt)))
5661
+ && arith_code_with_undefined_signed_overflow
5662
+ (gimple_assign_rhs_code (stmt))
5663
+ && (!ALWAYS_EXECUTED_IN (bb)
5664
+ || !(ALWAYS_EXECUTED_IN (bb) == level
5665
+ || flow_loop_nested_p (ALWAYS_EXECUTED_IN (bb), level))))
5666
+ gsi_insert_seq_on_edge (e, rewrite_to_defined_overflow (stmt));
5668
+ gsi_insert_on_edge (e, stmt);
5672
Index: gcc/tree-ssa-tail-merge.c
5673
===================================================================
5674
--- a/src/gcc/tree-ssa-tail-merge.c (.../tags/gcc_4_8_2_release)
5675
+++ b/src/gcc/tree-ssa-tail-merge.c (.../branches/gcc-4_8-branch)
5678
def_operand_p def_p;
5680
- if (gimple_has_side_effects (stmt))
5681
+ if (gimple_has_side_effects (stmt)
5682
+ || gimple_vdef (stmt) != NULL_TREE)
5685
def_p = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_DEF);
5686
Index: gcc/cgraphbuild.c
5687
===================================================================
5688
--- a/src/gcc/cgraphbuild.c (.../tags/gcc_4_8_2_release)
5689
+++ b/src/gcc/cgraphbuild.c (.../branches/gcc-4_8-branch)
5691
decl = get_base_var (*tp);
5692
if (TREE_CODE (decl) == FUNCTION_DECL)
5694
- struct cgraph_node *node = cgraph_get_create_node (decl);
5695
+ struct cgraph_node *node = cgraph_get_create_real_symbol_node (decl);
5696
if (!ctx->only_vars)
5697
cgraph_mark_address_taken_node (node);
5698
ipa_record_reference ((symtab_node)ctx->varpool_node,
5701
struct cgraph_node *per_node;
5703
- per_node = cgraph_get_create_node (DECL_FUNCTION_PERSONALITY (node->symbol.decl));
5704
+ per_node = cgraph_get_create_real_symbol_node (DECL_FUNCTION_PERSONALITY (node->symbol.decl));
5705
ipa_record_reference ((symtab_node)node, (symtab_node)per_node, IPA_REF_ADDR, NULL);
5706
cgraph_mark_address_taken_node (per_node);
5708
@@ -218,12 +218,12 @@
5709
/* Mark address taken in STMT. */
5712
-mark_address (gimple stmt, tree addr, void *data)
5713
+mark_address (gimple stmt, tree addr, tree, void *data)
5715
addr = get_base_address (addr);
5716
if (TREE_CODE (addr) == FUNCTION_DECL)
5718
- struct cgraph_node *node = cgraph_get_create_node (addr);
5719
+ struct cgraph_node *node = cgraph_get_create_real_symbol_node (addr);
5720
cgraph_mark_address_taken_node (node);
5721
ipa_record_reference ((symtab_node)data,
5724
/* Mark load of T. */
5727
-mark_load (gimple stmt, tree t, void *data)
5728
+mark_load (gimple stmt, tree t, tree, void *data)
5730
t = get_base_address (t);
5731
if (t && TREE_CODE (t) == FUNCTION_DECL)
5734
/* ??? This can happen on platforms with descriptors when these are
5735
directly manipulated in the code. Pretend that it's an address. */
5736
- struct cgraph_node *node = cgraph_get_create_node (t);
5737
+ struct cgraph_node *node = cgraph_get_create_real_symbol_node (t);
5738
cgraph_mark_address_taken_node (node);
5739
ipa_record_reference ((symtab_node)data,
5742
/* Mark store of T. */
5745
-mark_store (gimple stmt, tree t, void *data)
5746
+mark_store (gimple stmt, tree t, tree, void *data)
5748
t = get_base_address (t);
5749
if (t && TREE_CODE (t) == VAR_DECL
5752
tree fn = gimple_omp_parallel_child_fn (stmt);
5753
ipa_record_reference ((symtab_node)node,
5754
- (symtab_node)cgraph_get_create_node (fn),
5755
+ (symtab_node)cgraph_get_create_real_symbol_node (fn),
5756
IPA_REF_ADDR, stmt);
5758
if (gimple_code (stmt) == GIMPLE_OMP_TASK)
5759
@@ -338,12 +338,12 @@
5760
tree fn = gimple_omp_task_child_fn (stmt);
5762
ipa_record_reference ((symtab_node)node,
5763
- (symtab_node) cgraph_get_create_node (fn),
5764
+ (symtab_node) cgraph_get_create_real_symbol_node (fn),
5765
IPA_REF_ADDR, stmt);
5766
fn = gimple_omp_task_copy_fn (stmt);
5768
ipa_record_reference ((symtab_node)node,
5769
- (symtab_node)cgraph_get_create_node (fn),
5770
+ (symtab_node)cgraph_get_create_real_symbol_node (fn),
5771
IPA_REF_ADDR, stmt);
5774
Index: gcc/tree-ssa-uninit.c
5775
===================================================================
5776
--- a/src/gcc/tree-ssa-uninit.c (.../tags/gcc_4_8_2_release)
5777
+++ b/src/gcc/tree-ssa-uninit.c (.../branches/gcc-4_8-branch)
5779
#include "hashtab.h"
5780
#include "tree-pass.h"
5781
#include "diagnostic-core.h"
5782
+#include "params.h"
5784
/* This implements the pass that does predicate aware warning on uses of
5785
possibly uninitialized variables. The pass first collects the set of
5788
/* Computes the control dependence chains (paths of edges)
5789
for DEP_BB up to the dominating basic block BB (the head node of a
5790
- chain should be dominated by it). CD_CHAINS is pointer to a
5791
- dynamic array holding the result chains. CUR_CD_CHAIN is the current
5792
+ chain should be dominated by it). CD_CHAINS is pointer to an
5793
+ array holding the result chains. CUR_CD_CHAIN is the current
5794
chain being computed. *NUM_CHAINS is total number of chains. The
5795
function returns true if the information is successfully computed,
5796
return false if there is no control dependence or not computed. */
5798
compute_control_dep_chain (basic_block bb, basic_block dep_bb,
5799
vec<edge> *cd_chains,
5801
- vec<edge> *cur_cd_chain)
5802
+ vec<edge> *cur_cd_chain,
5807
@@ -267,6 +269,10 @@
5808
if (EDGE_COUNT (bb->succs) < 2)
5811
+ if (*num_calls > PARAM_VALUE (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS))
5815
/* Could use a set instead. */
5816
cur_chain_len = cur_cd_chain->length ();
5817
if (cur_chain_len > MAX_CHAIN_LEN)
5820
/* Now check if DEP_BB is indirectly control dependent on BB. */
5821
if (compute_control_dep_chain (cd_bb, dep_bb, cd_chains,
5822
- num_chains, cur_cd_chain))
5823
+ num_chains, cur_cd_chain, num_calls))
5825
found_cd_chain = true;
5827
@@ -438,14 +444,12 @@
5830
size_t num_chains = 0, i;
5831
- vec<edge> *dep_chains = 0;
5832
+ int num_calls = 0;
5833
+ vec<edge> dep_chains[MAX_NUM_CHAINS];
5834
vec<edge> cur_chain = vNULL;
5835
bool has_valid_pred = false;
5836
basic_block cd_root = 0;
5838
- typedef vec<edge> vec_edge_heap;
5839
- dep_chains = XCNEWVEC (vec_edge_heap, MAX_NUM_CHAINS);
5841
/* First find the closest bb that is control equivalent to PHI_BB
5842
that also dominates USE_BB. */
5844
@@ -458,20 +462,16 @@
5848
- compute_control_dep_chain (cd_root, use_bb,
5849
- dep_chains, &num_chains,
5851
+ compute_control_dep_chain (cd_root, use_bb, dep_chains, &num_chains,
5852
+ &cur_chain, &num_calls);
5855
- = convert_control_dep_chain_into_preds (dep_chains,
5859
+ = convert_control_dep_chain_into_preds (dep_chains, num_chains, preds,
5861
/* Free individual chain */
5862
cur_chain.release ();
5863
for (i = 0; i < num_chains; i++)
5864
dep_chains[i].release ();
5865
- free (dep_chains);
5866
return has_valid_pred;
5870
size_t *num_preds, gimple phi)
5872
size_t num_chains = 0, i, n;
5873
- vec<edge> *dep_chains = 0;
5874
+ vec<edge> dep_chains[MAX_NUM_CHAINS];
5875
vec<edge> cur_chain = vNULL;
5876
vec<edge> def_edges = vNULL;
5877
bool has_valid_pred = false;
5879
basic_block phi_bb, cd_root = 0;
5880
struct pointer_set_t *visited_phis;
5882
- typedef vec<edge> vec_edge_heap;
5883
- dep_chains = XCNEWVEC (vec_edge_heap, MAX_NUM_CHAINS);
5885
phi_bb = gimple_bb (phi);
5886
/* First find the closest dominating bb to be
5887
the control dependence root */
5888
@@ -567,38 +564,33 @@
5889
for (i = 0; i < n; i++)
5892
+ int num_calls = 0;
5895
opnd_edge = def_edges[i];
5896
prev_nc = num_chains;
5897
- compute_control_dep_chain (cd_root, opnd_edge->src,
5898
- dep_chains, &num_chains,
5900
- /* Free individual chain */
5901
- cur_chain.release ();
5902
+ compute_control_dep_chain (cd_root, opnd_edge->src, dep_chains,
5903
+ &num_chains, &cur_chain, &num_calls);
5905
/* Now update the newly added chains with
5906
the phi operand edge: */
5907
if (EDGE_COUNT (opnd_edge->src->succs) > 1)
5909
- if (prev_nc == num_chains
5910
- && num_chains < MAX_NUM_CHAINS)
5912
+ if (prev_nc == num_chains && num_chains < MAX_NUM_CHAINS)
5913
+ dep_chains[num_chains++] = vNULL;
5914
for (j = prev_nc; j < num_chains; j++)
5916
- dep_chains[j].safe_push (opnd_edge);
5918
+ dep_chains[j].safe_push (opnd_edge);
5922
+ /* Free individual chain */
5923
+ cur_chain.release ();
5926
- = convert_control_dep_chain_into_preds (dep_chains,
5930
+ = convert_control_dep_chain_into_preds (dep_chains, num_chains, preds,
5932
for (i = 0; i < num_chains; i++)
5933
dep_chains[i].release ();
5934
- free (dep_chains);
5935
return has_valid_pred;
5938
Index: gcc/tree-ssa-loop-niter.c
5939
===================================================================
5940
--- a/src/gcc/tree-ssa-loop-niter.c (.../tags/gcc_4_8_2_release)
5941
+++ b/src/gcc/tree-ssa-loop-niter.c (.../branches/gcc-4_8-branch)
5942
@@ -2075,7 +2075,8 @@
5946
- if (gimple_code (stmt) != GIMPLE_ASSIGN)
5947
+ if (gimple_code (stmt) != GIMPLE_ASSIGN
5948
+ || gimple_assign_rhs_class (stmt) == GIMPLE_TERNARY_RHS)
5951
code = gimple_assign_rhs_code (stmt);
5952
@@ -2143,7 +2144,7 @@
5956
- gcc_assert (is_gimple_min_invariant (base));
5957
+ gcc_checking_assert (is_gimple_min_invariant (base));
5961
@@ -2152,7 +2153,7 @@
5962
if (gimple_code (stmt) == GIMPLE_PHI)
5965
- gcc_assert (is_gimple_assign (stmt));
5966
+ gcc_checking_assert (is_gimple_assign (stmt));
5968
/* STMT must be either an assignment of a single SSA name or an
5969
expression involving an SSA name and a constant. Try to fold that
5970
Index: gcc/c-family/ChangeLog
5971
===================================================================
5972
--- a/src/gcc/c-family/ChangeLog (.../tags/gcc_4_8_2_release)
5973
+++ b/src/gcc/c-family/ChangeLog (.../branches/gcc-4_8-branch)
5975
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
5977
+ Backport from mainline
5978
+ 2014-02-19 Jakub Jelinek <jakub@redhat.com>
5981
+ * c-common.c (c_common_nodes_and_builtins): When initializing
5982
+ c_uint{16,32,64}_type_node, also set corresponding
5983
+ uint{16,32,64}_type_node to the same value.
5985
+ 2014-02-12 Jakub Jelinek <jakub@redhat.com>
5988
+ * c-common.c (merge_tlist): If copy is true, call new_tlist,
5989
+ if false, add ADD itself, rather than vice versa.
5990
+ (verify_tree): For COND_EXPR, don't call merge_tlist with non-zero
5991
+ copy. For SAVE_EXPR, only call merge_tlist once.
5993
+2013-11-29 Jakub Jelinek <jakub@redhat.com>
5996
+ * c-common.c (get_priority): If TREE_VALUE (args) is IDENTIFIER_NODE,
5997
+ goto invalid. If it is error_mark_node, don't issue further
6000
+2013-11-04 Marek Polacek <polacek@redhat.com>
6002
+ Backport from mainline
6003
+ 2013-11-04 Marek Polacek <polacek@redhat.com>
6006
+ * c-common.c (invalid_indirection_error): Handle RO_ARROW_STAR case.
6008
2013-10-16 Release Manager
6010
* GCC 4.8.2 released.
6011
Index: gcc/c-family/c-common.c
6012
===================================================================
6013
--- a/src/gcc/c-family/c-common.c (.../tags/gcc_4_8_2_release)
6014
+++ b/src/gcc/c-family/c-common.c (.../branches/gcc-4_8-branch)
6015
@@ -2894,7 +2894,7 @@
6019
- *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
6020
+ *end = copy ? new_tlist (NULL, add->expr, add->writer) : add;
6021
end = &(*end)->next;
6024
@@ -3052,7 +3052,7 @@
6025
verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
6026
warn_for_collisions (tmp_list2);
6027
merge_tlist (pbefore_sp, tmp_before, 0);
6028
- merge_tlist (pbefore_sp, tmp_list2, 1);
6029
+ merge_tlist (pbefore_sp, tmp_list2, 0);
6031
tmp_list3 = tmp_nosp = 0;
6032
verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
6033
@@ -3156,12 +3156,7 @@
6034
warn_for_collisions (tmp_nosp);
6039
- struct tlist *t = tmp_nosp;
6040
- tmp_nosp = t->next;
6041
- merge_tlist (&tmp_list3, t, 0);
6043
+ merge_tlist (&tmp_list3, tmp_nosp, 0);
6044
t->cache_before_sp = tmp_before;
6045
t->cache_after_sp = tmp_list3;
6047
@@ -5511,13 +5506,13 @@
6049
TREE_TYPE (identifier_global_value (c_get_ident (UINT8_TYPE)));
6051
- c_uint16_type_node =
6052
+ c_uint16_type_node = uint16_type_node =
6053
TREE_TYPE (identifier_global_value (c_get_ident (UINT16_TYPE)));
6055
- c_uint32_type_node =
6056
+ c_uint32_type_node = uint32_type_node =
6057
TREE_TYPE (identifier_global_value (c_get_ident (UINT32_TYPE)));
6059
- c_uint64_type_node =
6060
+ c_uint64_type_node = uint64_type_node =
6061
TREE_TYPE (identifier_global_value (c_get_ident (UINT64_TYPE)));
6062
if (INT_LEAST8_TYPE)
6063
int_least8_type_node =
6064
@@ -6917,6 +6912,10 @@
6067
arg = TREE_VALUE (args);
6068
+ if (TREE_CODE (arg) == IDENTIFIER_NODE)
6070
+ if (arg == error_mark_node)
6071
+ return DEFAULT_INIT_PRIORITY;
6072
arg = default_conversion (arg);
6073
if (!host_integerp (arg, /*pos=*/0)
6074
|| !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
6075
@@ -9763,6 +9762,11 @@
6076
"invalid type argument of %<->%> (have %qT)",
6079
+ case RO_ARROW_STAR:
6081
+ "invalid type argument of %<->*%> (have %qT)",
6084
case RO_IMPLICIT_CONVERSION:
6086
"invalid type argument of implicit conversion (have %qT)",
6087
Index: gcc/c/c-typeck.c
6088
===================================================================
6089
--- a/src/gcc/c/c-typeck.c (.../tags/gcc_4_8_2_release)
6090
+++ b/src/gcc/c/c-typeck.c (.../branches/gcc-4_8-branch)
6091
@@ -3629,7 +3629,8 @@
6092
/* Report invalid types. */
6094
if (typecode != POINTER_TYPE && typecode != FIXED_POINT_TYPE
6095
- && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
6096
+ && typecode != INTEGER_TYPE && typecode != REAL_TYPE
6097
+ && typecode != VECTOR_TYPE)
6099
if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
6100
error_at (location, "wrong type argument to increment");
6101
@@ -3694,7 +3695,9 @@
6105
- inc = integer_one_node;
6106
+ inc = (TREE_CODE (argtype) == VECTOR_TYPE
6107
+ ? build_one_cst (argtype)
6108
+ : integer_one_node);
6109
inc = convert (argtype, inc);
6112
@@ -4331,8 +4334,10 @@
6116
- op1 = remove_c_maybe_const_expr (op1);
6117
- op2 = remove_c_maybe_const_expr (op2);
6118
+ /* Use c_fully_fold here, since C_MAYBE_CONST_EXPR might be
6119
+ nested inside of the expression. */
6120
+ op1 = c_fully_fold (op1, false, NULL);
6121
+ op2 = c_fully_fold (op2, false, NULL);
6123
ret = build3 (COND_EXPR, result_type, ifexp, op1, op2);
6125
@@ -10618,7 +10623,8 @@
6126
"%qE has invalid type for %<reduction%>", t);
6129
- else if (FLOAT_TYPE_P (TREE_TYPE (t)))
6130
+ else if (FLOAT_TYPE_P (TREE_TYPE (t))
6131
+ || TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
6133
enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
6134
const char *r_name = NULL;
6135
@@ -10628,8 +10634,14 @@
6141
+ if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
6145
+ if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
6150
@@ -10641,10 +10653,12 @@
6153
case TRUTH_ANDIF_EXPR:
6155
+ if (FLOAT_TYPE_P (TREE_TYPE (t)))
6158
case TRUTH_ORIF_EXPR:
6160
+ if (FLOAT_TYPE_P (TREE_TYPE (t)))
6165
Index: gcc/c/ChangeLog
6166
===================================================================
6167
--- a/src/gcc/c/ChangeLog (.../tags/gcc_4_8_2_release)
6168
+++ b/src/gcc/c/ChangeLog (.../branches/gcc-4_8-branch)
6170
+2014-01-23 Jakub Jelinek <jakub@redhat.com>
6172
+ PR middle-end/58809
6173
+ * c-typeck.c (c_finish_omp_clause): Reject MIN_EXPR, MAX_EXPR,
6174
+ BIT_AND_EXPR, BIT_IOR_EXPR and BIT_XOR_EXPR on COMPLEX_TYPEs.
6176
+2014-01-22 Marek Polacek <polacek@redhat.com>
6178
+ Backport from mainline
6179
+ 2014-01-22 Marek Polacek <polacek@redhat.com>
6182
+ * c-typeck.c (build_conditional_expr): Call c_fully_fold instead
6183
+ of remove_c_maybe_const_expr on op1 and op2.
6185
+2013-12-03 Marek Polacek <polacek@redhat.com>
6187
+ Backport from mainline
6188
+ 2013-12-03 Marek Polacek <polacek@redhat.com>
6191
+ * c-decl.c (build_compound_literal): Allow compound literals with
6192
+ empty initial value.
6194
+2013-11-27 Tom de Vries <tom@codesourcery.com>
6195
+ Marc Glisse <marc.glisse@inria.fr>
6198
+ * c-typeck.c (build_unary_op): Allow vector increment and decrement.
6200
2013-10-16 Release Manager
6202
* GCC 4.8.2 released.
6203
Index: gcc/c/c-decl.c
6204
===================================================================
6205
--- a/src/gcc/c/c-decl.c (.../tags/gcc_4_8_2_release)
6206
+++ b/src/gcc/c/c-decl.c (.../branches/gcc-4_8-branch)
6207
@@ -4632,7 +4632,9 @@
6209
int failure = complete_array_type (&TREE_TYPE (decl),
6210
DECL_INITIAL (decl), true);
6211
- gcc_assert (!failure);
6212
+ /* If complete_array_type returns 3, it means that the
6213
+ initial value of the compound literal is empty. Allow it. */
6214
+ gcc_assert (failure == 0 || failure == 3);
6216
type = TREE_TYPE (decl);
6217
TREE_TYPE (DECL_INITIAL (decl)) = type;
6219
===================================================================
6220
--- a/src/gcc/cgraph.c (.../tags/gcc_4_8_2_release)
6221
+++ b/src/gcc/cgraph.c (.../branches/gcc-4_8-branch)
6222
@@ -2596,4 +2596,47 @@
6223
FOR_EACH_FUNCTION (node)
6224
verify_cgraph_node (node);
6227
+/* Create external decl node for DECL.
6228
+ The difference i nbetween cgraph_get_create_node and
6229
+ cgraph_get_create_real_symbol_node is that cgraph_get_create_node
6230
+ may return inline clone, while cgraph_get_create_real_symbol_node
6231
+ will create a new node in this case.
6232
+ FIXME: This function should be removed once clones are put out of decl
6235
+struct cgraph_node *
6236
+cgraph_get_create_real_symbol_node (tree decl)
6238
+ struct cgraph_node *first_clone = cgraph_get_node (decl);
6239
+ struct cgraph_node *node;
6240
+ /* create symbol table node. even if inline clone exists, we can not take
6241
+ it as a target of non-inlined call. */
6242
+ node = cgraph_get_node (decl);
6243
+ if (node && !node->global.inlined_to)
6246
+ node = cgraph_create_node (decl);
6248
+ /* ok, we previously inlined the function, then removed the offline copy and
6249
+ now we want it back for external call. this can happen when devirtualizing
6250
+ while inlining function called once that happens after extern inlined and
6251
+ virtuals are already removed. in this case introduce the external node
6252
+ and make it available for call. */
6255
+ first_clone->clone_of = node;
6256
+ node->clones = first_clone;
6257
+ symtab_prevail_in_asm_name_hash ((symtab_node) node);
6258
+ symtab_insert_node_to_hashtable ((symtab_node) node);
6260
+ fprintf (dump_file, "Introduced new external node "
6261
+ "(%s/%i) and turned into root of the clone tree.\n",
6262
+ xstrdup (cgraph_node_name (node)), node->uid);
6264
+ else if (dump_file)
6265
+ fprintf (dump_file, "Introduced new external node "
6266
+ "(%s/%i).\n", xstrdup (cgraph_node_name (node)), node->uid);
6269
#include "gt-cgraph.h"
6271
===================================================================
6272
--- a/src/gcc/cgraph.h (.../tags/gcc_4_8_2_release)
6273
+++ b/src/gcc/cgraph.h (.../branches/gcc-4_8-branch)
6275
struct cgraph_node * cgraph_create_node (tree);
6276
struct cgraph_node * cgraph_create_empty_node (void);
6277
struct cgraph_node * cgraph_get_create_node (tree);
6278
+struct cgraph_node * cgraph_get_create_real_symbol_node (tree);
6279
struct cgraph_node * cgraph_same_body_alias (struct cgraph_node *, tree, tree);
6280
struct cgraph_node * cgraph_add_thunk (struct cgraph_node *, tree, tree, bool, HOST_WIDE_INT,
6281
HOST_WIDE_INT, tree, tree);
6283
===================================================================
6284
--- a/src/gcc/optabs.c (.../tags/gcc_4_8_2_release)
6285
+++ b/src/gcc/optabs.c (.../branches/gcc-4_8-branch)
6286
@@ -4558,8 +4558,11 @@
6287
if (!COMPARISON_P (comparison))
6290
+ /* State variables we need to save and restore if cmove can't be used. */
6291
+ int save_pending_stack_adjust = pending_stack_adjust;
6292
+ int save_stack_pointer_delta = stack_pointer_delta;
6293
+ last = get_last_insn ();
6294
do_pending_stack_adjust ();
6295
- last = get_last_insn ();
6296
prepare_cmp_insn (XEXP (comparison, 0), XEXP (comparison, 1),
6297
GET_CODE (comparison), NULL_RTX, unsignedp, OPTAB_WIDEN,
6298
&comparison, &cmode);
6299
@@ -4579,6 +4582,8 @@
6302
delete_insns_since (last);
6303
+ pending_stack_adjust = save_pending_stack_adjust;
6304
+ stack_pointer_delta = save_stack_pointer_delta;
6308
@@ -6233,7 +6238,7 @@
6310
/* If the optabs changed, record it. */
6311
if (memcmp (tmp_optabs, this_target_optabs, sizeof (struct target_optabs)))
6312
- TREE_OPTIMIZATION_OPTABS (optnode) = (unsigned char *) tmp_optabs;
6313
+ TREE_OPTIMIZATION_OPTABS (optnode) = tmp_optabs;
6316
TREE_OPTIMIZATION_OPTABS (optnode) = NULL;
6317
@@ -7035,8 +7040,7 @@
6319
create_output_operand (&ops[0], target, mode);
6320
create_fixed_operand (&ops[1], mem);
6321
- /* VAL may have been promoted to a wider mode. Shrink it if so. */
6322
- create_convert_operand_to (&ops[2], val, mode, true);
6323
+ create_input_operand (&ops[2], val, mode);
6324
create_integer_operand (&ops[3], model);
6325
if (maybe_expand_insn (icode, 4, ops))
6326
return ops[0].value;
6327
@@ -7075,8 +7079,7 @@
6328
struct expand_operand ops[3];
6329
create_output_operand (&ops[0], target, mode);
6330
create_fixed_operand (&ops[1], mem);
6331
- /* VAL may have been promoted to a wider mode. Shrink it if so. */
6332
- create_convert_operand_to (&ops[2], val, mode, true);
6333
+ create_input_operand (&ops[2], val, mode);
6334
if (maybe_expand_insn (icode, 3, ops))
6335
return ops[0].value;
6337
@@ -7118,8 +7121,6 @@
6339
if (!target || !register_operand (target, mode))
6340
target = gen_reg_rtx (mode);
6341
- if (GET_MODE (val) != VOIDmode && GET_MODE (val) != mode)
6342
- val = convert_modes (mode, GET_MODE (val), val, 1);
6343
if (expand_compare_and_swap_loop (mem, target, val, NULL_RTX))
6346
@@ -7331,8 +7332,8 @@
6347
create_output_operand (&ops[0], target_bool, bool_mode);
6348
create_output_operand (&ops[1], target_oval, mode);
6349
create_fixed_operand (&ops[2], mem);
6350
- create_convert_operand_to (&ops[3], expected, mode, true);
6351
- create_convert_operand_to (&ops[4], desired, mode, true);
6352
+ create_input_operand (&ops[3], expected, mode);
6353
+ create_input_operand (&ops[4], desired, mode);
6354
create_integer_operand (&ops[5], is_weak);
6355
create_integer_operand (&ops[6], succ_model);
6356
create_integer_operand (&ops[7], fail_model);
6357
@@ -7353,8 +7354,8 @@
6359
create_output_operand (&ops[0], target_oval, mode);
6360
create_fixed_operand (&ops[1], mem);
6361
- create_convert_operand_to (&ops[2], expected, mode, true);
6362
- create_convert_operand_to (&ops[3], desired, mode, true);
6363
+ create_input_operand (&ops[2], expected, mode);
6364
+ create_input_operand (&ops[3], desired, mode);
6365
if (!maybe_expand_insn (icode, 4, ops))
6368
Index: gcc/DATESTAMP
6369
===================================================================
6370
--- a/src/gcc/DATESTAMP (.../tags/gcc_4_8_2_release)
6371
+++ b/src/gcc/DATESTAMP (.../branches/gcc-4_8-branch)
6375
Index: gcc/value-prof.c
6376
===================================================================
6377
--- a/src/gcc/value-prof.c (.../tags/gcc_4_8_2_release)
6378
+++ b/src/gcc/value-prof.c (.../branches/gcc-4_8-branch)
6379
@@ -1270,8 +1270,7 @@
6381
/* Build an EH edge for the direct call if necessary. */
6382
lp_nr = lookup_stmt_eh_lp (icall_stmt);
6384
- && stmt_could_throw_p (dcall_stmt))
6385
+ if (lp_nr > 0 && stmt_could_throw_p (dcall_stmt))
6390
===================================================================
6391
--- a/src/gcc/tree.h (.../tags/gcc_4_8_2_release)
6392
+++ b/src/gcc/tree.h (.../branches/gcc-4_8-branch)
6393
@@ -3589,7 +3589,7 @@
6395
/* Target optabs for this set of optimization options. This is of
6396
type `struct target_optabs *'. */
6397
- unsigned char *GTY ((atomic)) optabs;
6398
+ void *GTY ((atomic)) optabs;
6400
/* The value of this_target_optabs against which the optabs above were
6402
@@ -5854,6 +5854,7 @@
6403
extern tree fold_builtin_fputs (location_t, tree, tree, bool, bool, tree);
6404
extern tree fold_builtin_strcpy (location_t, tree, tree, tree, tree);
6405
extern tree fold_builtin_strncpy (location_t, tree, tree, tree, tree, tree);
6406
+extern tree fold_builtin_strcat (location_t, tree, tree, tree);
6407
extern tree fold_builtin_memory_chk (location_t, tree, tree, tree, tree, tree, tree, bool,
6408
enum built_in_function);
6409
extern tree fold_builtin_stxcpy_chk (location_t, tree, tree, tree, tree, tree, bool,
6410
@@ -6545,4 +6546,18 @@
6411
&& builtin_info.implicit_p[uns_fncode]);
6414
+/* Return pointer to optimization flags of FNDECL. */
6415
+static inline struct cl_optimization *
6416
+opts_for_fn (const_tree fndecl)
6418
+ tree fn_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (fndecl);
6419
+ if (fn_opts == NULL_TREE)
6420
+ fn_opts = optimization_default_node;
6421
+ return TREE_OPTIMIZATION (fn_opts);
6424
+/* opt flag for function FNDECL, e.g. opts_for_fn (fndecl, optimize) is
6425
+ the optimization level of function fndecl. */
6426
+#define opt_for_fn(fndecl, opt) (opts_for_fn (fndecl)->x_##opt)
6428
#endif /* GCC_TREE_H */
6430
===================================================================
6431
--- a/src/gcc/ipa-cp.c (.../tags/gcc_4_8_2_release)
6432
+++ b/src/gcc/ipa-cp.c (.../branches/gcc-4_8-branch)
6434
reason = "not a tree_versionable_function";
6435
else if (cgraph_function_body_availability (node) <= AVAIL_OVERWRITABLE)
6436
reason = "insufficient body availability";
6437
+ else if (!opt_for_fn (node->symbol.decl, optimize)
6438
+ || !opt_for_fn (node->symbol.decl, flag_ipa_cp))
6439
+ reason = "non-optimized function";
6441
if (reason && dump_file && !node->alias && !node->thunk.thunk_p)
6442
fprintf (dump_file, "Function %s/%i is not versionable, reason: %s.\n",
6443
@@ -3119,6 +3122,7 @@
6444
struct cgraph_node *node)
6446
struct ipa_node_params *orig_caller_info = IPA_NODE_REF (cs->caller);
6447
+ struct ipa_node_params *orig_node_info;
6448
struct ipa_agg_replacement_value *aggval;
6451
@@ -3133,6 +3137,7 @@
6452
if (aggval->index >= ec)
6455
+ orig_node_info = IPA_NODE_REF (IPA_NODE_REF (node)->ipcp_orig_node);
6456
if (orig_caller_info->ipcp_orig_node)
6457
orig_caller_info = IPA_NODE_REF (orig_caller_info->ipcp_orig_node);
6459
@@ -3150,7 +3155,7 @@
6463
- plats = ipa_get_parm_lattices (orig_caller_info, aggval->index);
6464
+ plats = ipa_get_parm_lattices (orig_node_info, aggval->index);
6465
if (plats->aggs_bottom)
6468
Index: gcc/configure
6469
===================================================================
6470
--- a/src/gcc/configure (.../tags/gcc_4_8_2_release)
6471
+++ b/src/gcc/configure (.../branches/gcc-4_8-branch)
6472
@@ -11202,13 +11202,11 @@
6473
/* | A-Za-z:\\/* ) realsrcdir=${srcdir};;
6474
*) realsrcdir=../${srcdir};;
6476
- saved_CFLAGS="${CFLAGS}"
6477
CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
6478
- LDFLAGS="${LDFLAGS_FOR_BUILD}" \
6479
+ LDFLAGS="${LDFLAGS_FOR_BUILD}" GMPINC="" \
6480
${realsrcdir}/configure \
6481
--enable-languages=${enable_languages-all} \
6482
--target=$target_alias --host=$build_alias --build=$build_alias
6483
- CFLAGS="${saved_CFLAGS}"
6485
# We just finished tests for the build machine, so rename
6486
# the file auto-build.h in the gcc directory.
6487
@@ -11703,6 +11701,7 @@
6488
if test x$build != x$host || test "x$coverage_flags" != x
6490
BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
6491
+ BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CXXFLAGS_FOR_BUILD)'
6492
BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
6495
@@ -17828,7 +17827,7 @@
6496
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
6497
lt_status=$lt_dlunknown
6498
cat > conftest.$ac_ext <<_LT_EOF
6499
-#line 17831 "configure"
6500
+#line 17830 "configure"
6501
#include "confdefs.h"
6504
@@ -17934,7 +17933,7 @@
6505
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
6506
lt_status=$lt_dlunknown
6507
cat > conftest.$ac_ext <<_LT_EOF
6508
-#line 17937 "configure"
6509
+#line 17936 "configure"
6510
#include "confdefs.h"
6513
@@ -24263,6 +24262,43 @@
6514
$as_echo "#define HAVE_AS_SPARC4 1" >>confdefs.h
6518
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for LEON instructions" >&5
6519
+$as_echo_n "checking assembler for LEON instructions... " >&6; }
6520
+if test "${gcc_cv_as_sparc_leon+set}" = set; then :
6521
+ $as_echo_n "(cached) " >&6
6523
+ gcc_cv_as_sparc_leon=no
6524
+ if test x$gcc_cv_as != x; then
6526
+ .register %g2, #scratch
6527
+ .register %g3, #scratch
6529
+ smac %g2, %g3, %g1
6530
+ umac %g2, %g3, %g1
6531
+ cas [%g2], %g3, %g1' > conftest.s
6532
+ if { ac_try='$gcc_cv_as $gcc_cv_as_flags -Aleon -o conftest.o conftest.s >&5'
6533
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
6534
+ (eval $ac_try) 2>&5
6536
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
6537
+ test $ac_status = 0; }; }
6539
+ gcc_cv_as_sparc_leon=yes
6541
+ echo "configure: failed program was" >&5
6542
+ cat conftest.s >&5
6544
+ rm -f conftest.o conftest.s
6547
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_sparc_leon" >&5
6548
+$as_echo "$gcc_cv_as_sparc_leon" >&6; }
6549
+if test $gcc_cv_as_sparc_leon = yes; then
6551
+$as_echo "#define HAVE_AS_LEON 1" >>confdefs.h
6556
i[34567]86-*-* | x86_64-*-*)
6557
@@ -24745,6 +24781,10 @@
6559
# These two are used unconditionally by i386.[ch]; it is to be defined
6560
# to 1 if the feature is present, 0 otherwise.
6561
+ as_ix86_gotoff_in_data_opt=
6562
+ if test x$gas = xyes; then
6563
+ as_ix86_gotoff_in_data_opt="--32"
6565
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for GOTOFF in data" >&5
6566
$as_echo_n "checking assembler for GOTOFF in data... " >&6; }
6567
if test "${gcc_cv_as_ix86_gotoff_in_data+set}" = set; then :
6568
@@ -24761,7 +24801,7 @@
6571
.long .L0@GOTOFF' > conftest.s
6572
- if { ac_try='$gcc_cv_as $gcc_cv_as_flags -o conftest.o conftest.s >&5'
6573
+ if { ac_try='$gcc_cv_as $gcc_cv_as_flags $as_ix86_gotoff_in_data_opt -o conftest.o conftest.s >&5'
6574
{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
6577
@@ -24822,6 +24862,37 @@
6581
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for ud2 mnemonic" >&5
6582
+$as_echo_n "checking assembler for ud2 mnemonic... " >&6; }
6583
+if test "${gcc_cv_as_ix86_ud2+set}" = set; then :
6584
+ $as_echo_n "(cached) " >&6
6586
+ gcc_cv_as_ix86_ud2=no
6587
+ if test x$gcc_cv_as != x; then
6588
+ $as_echo 'ud2' > conftest.s
6589
+ if { ac_try='$gcc_cv_as $gcc_cv_as_flags -o conftest.o conftest.s >&5'
6590
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
6591
+ (eval $ac_try) 2>&5
6593
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
6594
+ test $ac_status = 0; }; }
6596
+ gcc_cv_as_ix86_ud2=yes
6598
+ echo "configure: failed program was" >&5
6599
+ cat conftest.s >&5
6601
+ rm -f conftest.o conftest.s
6604
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_ix86_ud2" >&5
6605
+$as_echo "$gcc_cv_as_ix86_ud2" >&6; }
6606
+if test $gcc_cv_as_ix86_ud2 = yes; then
6608
+$as_echo "#define HAVE_AS_IX86_UD2 1" >>confdefs.h
6612
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for R_386_TLS_GD_PLT reloc" >&5
6613
$as_echo_n "checking assembler for R_386_TLS_GD_PLT reloc... " >&6; }
6614
if test "${gcc_cv_as_ix86_tlsgdplt+set}" = set; then :
6615
@@ -27239,8 +27310,8 @@
6616
$as_echo_n "checking for exported symbols... " >&6; }
6617
if test "x$export_sym_check" != x; then
6618
echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
6619
- ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest > /dev/null 2>&1
6620
- if $export_sym_check conftest | grep foobar > /dev/null; then
6621
+ ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > /dev/null 2>&1
6622
+ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
6623
: # No need to use a flag
6624
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
6625
$as_echo "yes" >&6; }
6626
@@ -27249,8 +27320,8 @@
6627
$as_echo "yes" >&6; }
6628
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -rdynamic" >&5
6629
$as_echo_n "checking for -rdynamic... " >&6; }
6630
- ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest > /dev/null 2>&1
6631
- if $export_sym_check conftest | grep foobar > /dev/null; then
6632
+ ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest$ac_exeext > /dev/null 2>&1
6633
+ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
6635
pluginlibs="-rdynamic"
6637
Index: gcc/builtins.c
6638
===================================================================
6639
--- a/src/gcc/builtins.c (.../tags/gcc_4_8_2_release)
6640
+++ b/src/gcc/builtins.c (.../branches/gcc-4_8-branch)
6642
static tree fold_builtin_strpbrk (location_t, tree, tree, tree);
6643
static tree fold_builtin_strstr (location_t, tree, tree, tree);
6644
static tree fold_builtin_strrchr (location_t, tree, tree, tree);
6645
-static tree fold_builtin_strcat (location_t, tree, tree);
6646
static tree fold_builtin_strncat (location_t, tree, tree, tree);
6647
static tree fold_builtin_strspn (location_t, tree, tree);
6648
static tree fold_builtin_strcspn (location_t, tree, tree);
6649
@@ -1958,6 +1957,7 @@
6650
tree fndecl = get_callee_fndecl (exp);
6651
enum machine_mode mode;
6652
bool errno_set = false;
6653
+ bool try_widening = false;
6656
if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
6657
@@ -1969,6 +1969,7 @@
6659
CASE_FLT_FN (BUILT_IN_SQRT):
6660
errno_set = ! tree_expr_nonnegative_p (arg);
6661
+ try_widening = true;
6662
builtin_optab = sqrt_optab;
6664
CASE_FLT_FN (BUILT_IN_EXP):
6665
@@ -2025,8 +2026,10 @@
6666
if (! flag_errno_math || ! HONOR_NANS (mode))
6669
- /* Before working hard, check whether the instruction is available. */
6670
- if (optab_handler (builtin_optab, mode) != CODE_FOR_nothing
6671
+ /* Before working hard, check whether the instruction is available, but try
6672
+ to widen the mode for specific operations. */
6673
+ if ((optab_handler (builtin_optab, mode) != CODE_FOR_nothing
6674
+ || (try_widening && !excess_precision_type (TREE_TYPE (exp))))
6675
&& (!errno_set || !optimize_insn_for_size_p ()))
6677
rtx result = gen_reg_rtx (mode);
6678
@@ -5347,7 +5350,7 @@
6679
expand_builtin_atomic_compare_exchange (enum machine_mode mode, tree exp,
6682
- rtx expect, desired, mem, oldval;
6683
+ rtx expect, desired, mem, oldval, label;
6684
enum memmodel success, failure;
6687
@@ -5385,14 +5388,26 @@
6688
if (host_integerp (weak, 0) && tree_low_cst (weak, 0) != 0)
6692
- if (!expand_atomic_compare_and_swap ((target == const0_rtx ? NULL : &target),
6693
- &oldval, mem, oldval, desired,
6694
+ if (target == const0_rtx)
6697
+ /* Lest the rtl backend create a race condition with an imporoper store
6698
+ to memory, always create a new pseudo for OLDVAL. */
6701
+ if (!expand_atomic_compare_and_swap (&target, &oldval, mem, expect, desired,
6702
is_weak, success, failure))
6705
- if (oldval != expect)
6706
- emit_move_insn (expect, oldval);
6707
+ /* Conditionally store back to EXPECT, lest we create a race condition
6708
+ with an improper store to memory. */
6709
+ /* ??? With a rearrangement of atomics at the gimple level, we can handle
6710
+ the normal case where EXPECT is totally private, i.e. a register. At
6711
+ which point the store can be unconditional. */
6712
+ label = gen_label_rtx ();
6713
+ emit_cmp_and_jump_insns (target, const0_rtx, NE, NULL, VOIDmode, 1, label);
6714
+ emit_move_insn (expect, oldval);
6715
+ emit_label (label);
6719
@@ -10766,7 +10781,7 @@
6720
return fold_builtin_strstr (loc, arg0, arg1, type);
6722
case BUILT_IN_STRCAT:
6723
- return fold_builtin_strcat (loc, arg0, arg1);
6724
+ return fold_builtin_strcat (loc, arg0, arg1, NULL_TREE);
6726
case BUILT_IN_STRSPN:
6727
return fold_builtin_strspn (loc, arg0, arg1);
6728
@@ -11809,8 +11824,9 @@
6729
COMPOUND_EXPR in the chain will contain the tree for the simplified
6730
form of the builtin function call. */
6733
-fold_builtin_strcat (location_t loc ATTRIBUTE_UNUSED, tree dst, tree src)
6735
+fold_builtin_strcat (location_t loc ATTRIBUTE_UNUSED, tree dst, tree src,
6738
if (!validate_arg (dst, POINTER_TYPE)
6739
|| !validate_arg (src, POINTER_TYPE))
6740
@@ -11828,22 +11844,17 @@
6741
/* See if we can store by pieces into (dst + strlen(dst)). */
6743
tree strlen_fn = builtin_decl_implicit (BUILT_IN_STRLEN);
6744
- tree strcpy_fn = builtin_decl_implicit (BUILT_IN_STRCPY);
6745
+ tree memcpy_fn = builtin_decl_implicit (BUILT_IN_MEMCPY);
6747
- if (!strlen_fn || !strcpy_fn)
6748
+ if (!strlen_fn || !memcpy_fn)
6751
- /* If we don't have a movstr we don't want to emit an strcpy
6752
- call. We have to do that if the length of the source string
6753
- isn't computable (in that case we can use memcpy probably
6754
- later expanding to a sequence of mov instructions). If we
6755
- have movstr instructions we can emit strcpy calls. */
6758
- tree len = c_strlen (src, 1);
6759
- if (! len || TREE_SIDE_EFFECTS (len))
6762
+ /* If the length of the source string isn't computable don't
6763
+ split strcat into strlen and memcpy. */
6765
+ len = c_strlen (src, 1);
6766
+ if (! len || TREE_SIDE_EFFECTS (len))
6769
/* Stabilize the argument list. */
6770
dst = builtin_save_expr (dst);
6771
@@ -11855,7 +11866,11 @@
6772
newdst = fold_build_pointer_plus_loc (loc, dst, newdst);
6773
newdst = builtin_save_expr (newdst);
6775
- call = build_call_expr_loc (loc, strcpy_fn, 2, newdst, src);
6776
+ len = fold_convert_loc (loc, size_type_node, len);
6777
+ len = size_binop_loc (loc, PLUS_EXPR, len,
6778
+ build_int_cst (size_type_node, 1));
6780
+ call = build_call_expr_loc (loc, memcpy_fn, 3, newdst, src, len);
6781
return build2 (COMPOUND_EXPR, TREE_TYPE (dst), call, dst);
6784
Index: gcc/fold-const.c
6785
===================================================================
6786
--- a/src/gcc/fold-const.c (.../tags/gcc_4_8_2_release)
6787
+++ b/src/gcc/fold-const.c (.../branches/gcc-4_8-branch)
6788
@@ -2664,10 +2664,11 @@
6790
/* Handle operand 2 the same as for ARRAY_REF. Operand 0
6791
may be NULL when we're called to compare MEM_EXPRs. */
6792
- if (!OP_SAME_WITH_NULL (0))
6793
+ if (!OP_SAME_WITH_NULL (0)
6796
flags &= ~OEP_CONSTANT_ADDRESS_OF;
6797
- return OP_SAME (1) && OP_SAME_WITH_NULL (2);
6798
+ return OP_SAME_WITH_NULL (2);
6802
@@ -4920,12 +4921,16 @@
6803
int in0_p, in1_p, in_p;
6804
tree low0, low1, low, high0, high1, high;
6805
bool strict_overflow_p = false;
6806
- tree lhs = make_range (op0, &in0_p, &low0, &high0, &strict_overflow_p);
6807
- tree rhs = make_range (op1, &in1_p, &low1, &high1, &strict_overflow_p);
6809
+ tree tem, lhs, rhs;
6810
const char * const warnmsg = G_("assuming signed overflow does not occur "
6811
"when simplifying range test");
6813
+ if (!INTEGRAL_TYPE_P (type))
6816
+ lhs = make_range (op0, &in0_p, &low0, &high0, &strict_overflow_p);
6817
+ rhs = make_range (op1, &in1_p, &low1, &high1, &strict_overflow_p);
6819
/* If this is an OR operation, invert both sides; we will invert
6820
again at the end. */
6822
@@ -10927,6 +10932,13 @@
6823
fold_build2_loc (loc, MULT_EXPR, type,
6824
build_int_cst (type, 2) , arg1));
6826
+ /* ((T) (X /[ex] C)) * C cancels out if the conversion is
6827
+ sign-changing only. */
6828
+ if (TREE_CODE (arg1) == INTEGER_CST
6829
+ && TREE_CODE (arg0) == EXACT_DIV_EXPR
6830
+ && operand_equal_p (arg1, TREE_OPERAND (arg0, 1), 0))
6831
+ return fold_convert_loc (loc, type, TREE_OPERAND (arg0, 0));
6833
strict_overflow_p = false;
6834
if (TREE_CODE (arg1) == INTEGER_CST
6835
&& 0 != (tem = extract_muldiv (op0, arg1, code, NULL_TREE,
6836
@@ -16587,7 +16599,7 @@
6837
unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
6838
tree index = bitsize_int (indexi);
6840
- if (offset/part_widthi <= TYPE_VECTOR_SUBPARTS (op00type))
6841
+ if (offset / part_widthi < TYPE_VECTOR_SUBPARTS (op00type))
6842
return fold_build3_loc (loc,
6843
BIT_FIELD_REF, type, op00,
6846
===================================================================
6847
--- a/src/gcc/reorg.c (.../tags/gcc_4_8_2_release)
6848
+++ b/src/gcc/reorg.c (.../branches/gcc-4_8-branch)
6849
@@ -1105,6 +1105,7 @@
6852
struct resources cc_set;
6855
/* We can't do anything if there are more delay slots in SEQ than we
6856
can handle, or if we don't know that it will be a taken branch.
6857
@@ -1145,6 +1146,7 @@
6861
+ redundant = XALLOCAVEC (bool, XVECLEN (seq, 0));
6862
for (i = 1; i < XVECLEN (seq, 0); i++)
6864
rtx trial = XVECEXP (seq, 0, i);
6865
@@ -1166,7 +1168,8 @@
6867
/* If this insn was already done (usually in a previous delay slot),
6868
pretend we put it in our delay slot. */
6869
- if (redundant_insn (trial, insn, new_delay_list))
6870
+ redundant[i] = redundant_insn (trial, insn, new_delay_list);
6874
/* We will end up re-vectoring this branch, so compute flags
6875
@@ -1199,6 +1202,12 @@
6879
+ /* Record the effect of the instructions that were redundant and which
6880
+ we therefore decided not to copy. */
6881
+ for (i = 1; i < XVECLEN (seq, 0); i++)
6883
+ update_block (XVECEXP (seq, 0, i), insn);
6885
/* Show the place to which we will be branching. */
6886
*pnew_thread = first_active_target_insn (JUMP_LABEL (XVECEXP (seq, 0, 0)));
6888
@@ -1262,6 +1271,7 @@
6889
/* If this insn was already done, we don't need it. */
6890
if (redundant_insn (trial, insn, delay_list))
6892
+ update_block (trial, insn);
6893
delete_from_delay_slot (trial);
6896
@@ -3266,6 +3276,7 @@
6897
to reprocess this insn. */
6898
if (redundant_insn (XVECEXP (pat, 0, 1), delay_insn, 0))
6900
+ update_block (XVECEXP (pat, 0, 1), insn);
6901
delete_from_delay_slot (XVECEXP (pat, 0, 1));
6902
next = prev_active_insn (next);
6904
@@ -3385,6 +3396,7 @@
6905
&& redirect_with_delay_slots_safe_p (delay_insn, target_label,
6908
+ update_block (XVECEXP (PATTERN (trial), 0, 1), insn);
6909
reorg_redirect_jump (delay_insn, target_label);
6912
Index: gcc/tree-ssa-sccvn.c
6913
===================================================================
6914
--- a/src/gcc/tree-ssa-sccvn.c (.../tags/gcc_4_8_2_release)
6915
+++ b/src/gcc/tree-ssa-sccvn.c (.../branches/gcc-4_8-branch)
6919
/* For non-calls, store the information that makes up the address. */
6924
vn_reference_op_s temp;
6925
@@ -711,7 +711,15 @@
6926
.arshift (BITS_PER_UNIT == 8
6927
? 3 : exact_log2 (BITS_PER_UNIT),
6928
HOST_BITS_PER_DOUBLE_INT);
6929
- if (off.fits_shwi ())
6930
+ if (off.fits_shwi ()
6931
+ /* Probibit value-numbering zero offset components
6932
+ of addresses the same before the pass folding
6933
+ __builtin_object_size had a chance to run
6934
+ (checking cfun->after_inlining does the
6936
+ && (TREE_CODE (orig) != ADDR_EXPR
6937
+ || !off.is_zero ()
6938
+ || cfun->after_inlining))
6942
Index: gcc/ChangeLog
6943
===================================================================
6944
--- a/src/gcc/ChangeLog (.../tags/gcc_4_8_2_release)
6945
+++ b/src/gcc/ChangeLog (.../branches/gcc-4_8-branch)
6947
+2014-03-20 Jakub Jelinek <jakub@redhat.com>
6950
+ * config/i386/i386.c (x86_output_mi_thunk): Surround UNSPEC_GOT
6951
+ into CONST, put pic register as first operand of PLUS. Use
6952
+ gen_const_mem for both 32-bit and 64-bit PIC got loads.
6954
+2014-03-20 Eric Botcazou <ebotcazou@adacore.com>
6956
+ * config/sparc/sparc.c (sparc_do_work_around_errata): Implement work
6957
+ around for store forwarding issue in the FPU on the UT699.
6958
+ * config/sparc/sparc.md (in_branch_delay): Return false for single FP
6959
+ loads and operations if -mfix-ut699 is specified.
6960
+ (divtf3_hq): Tweak attribute.
6961
+ (sqrttf2_hq): Likewise.
6963
+2014-03-18 Kai Tietz <ktietz@redhat.com>
6965
+ PR rtl-optimization/56356
6966
+ * sdbout.c (sdbout_parms): Verify that parms'
6967
+ incoming argument is valid.
6968
+ (sdbout_reg_parms): Likewise.
6970
+2014-03-18 Eric Botcazou <ebotcazou@adacore.com>
6972
+ * config/sparc/sparc.c (sparc_do_work_around_errata): Speed up and use
6973
+ proper constant for the store mode.
6975
+2014-03-17 Mikael Pettersson <mikpelinux@gmail.com>
6976
+ Committed by Bill Schmidt <wschmidt@linux.vnet.ibm.com>
6978
+ Backport from mainline:
6980
+ 2013-06-20 Joern Rennecke <joern.rennecke@embecosm.com>
6982
+ PR rtl-optimization/57425
6983
+ PR rtl-optimization/57569
6984
+ * alias.c (write_dependence_p): Remove parameters mem_mode and
6985
+ canon_mem_addr. Add parameters x_mode, x_addr and x_canonicalized.
6986
+ Changed all callers.
6987
+ (canon_anti_dependence): Get comments and semantics in sync.
6988
+ Add parameter mem_canonicalized. Changed all callers.
6989
+ * rtl.h (canon_anti_dependence): Update prototype.
6991
+ 2013-06-16 Joern Rennecke <joern.rennecke@embecosm.com>
6993
+ PR rtl-optimization/57425
6994
+ PR rtl-optimization/57569
6995
+ * alias.c (write_dependence_p): Add new parameters mem_mode,
6996
+ canon_mem_addr and mem_canonicalized. Change type of writep to bool.
6997
+ Changed all callers.
6998
+ (canon_anti_dependence): New function.
6999
+ * cse.c (check_dependence): Use canon_anti_dependence.
7000
+ * cselib.c (cselib_invalidate_mem): Likewise.
7001
+ * rtl.h (canon_anti_dependence): Declare.
7003
+2014-03-17 Richard Biener <rguenther@suse.de>
7005
+ Backport from mainline
7006
+ 2014-03-11 Richard Biener <rguenther@suse.de>
7008
+ PR tree-optimization/60429
7009
+ PR tree-optimization/60485
7010
+ * tree-ssa-structalias.c (set_union_with_increment): Properly
7011
+ take into account all fields that overlap the shifted vars.
7012
+ (do_sd_constraint): Likewise.
7013
+ (do_ds_constraint): Likewise.
7014
+ (get_constraint_for_ptr_offset): Likewise.
7016
+2014-03-15 Eric Botcazou <ebotcazou@adacore.com>
7018
+ * config/sparc/sparc-protos.h (tls_call_delay): Delete.
7019
+ (eligible_for_call_delay): New prototype.
7020
+ * config/sparc/sparc.c (tls_call_delay): Rename into...
7021
+ (eligible_for_call_delay): ...this. Return false if the instruction
7022
+ cannot be put in the delay slot of a branch.
7023
+ (eligible_for_restore_insn): Simplify.
7024
+ (eligible_for_return_delay): Return false if the instruction cannot be
7025
+ put in the delay slot of a branch and simplify.
7026
+ (eligible_for_sibcall_delay): Return false if the instruction cannot be
7027
+ put in the delay slot of a branch.
7028
+ * config/sparc/sparc.md (fix_ut699): New attribute.
7029
+ (tls_call_delay): Delete.
7030
+ (in_call_delay): Reimplement.
7031
+ (eligible_for_sibcall_delay): Rename into...
7032
+ (in_sibcall_delay): ...this.
7033
+ (eligible_for_return_delay): Rename into...
7034
+ (in_return_delay): ...this.
7035
+ (in_branch_delay): Reimplement.
7036
+ (in_uncond_branch_delay): Delete.
7037
+ (in_annul_branch_delay): Delete.
7039
+2014-03-14 Georg-Johann Lay <avr@gjlay.de>
7041
+ Backport from 2014-03-14 trunk r208562.
7044
+ * config/avr/avr.c (avr_set_current_function): Pass function name
7045
+ through default_strip_name_encoding before sanity checking instead
7046
+ of skipping the first char of the assembler name.
7048
+2014-03-13 Georg-Johann Lay <avr@gjlay.de>
7050
+ Backport from 2014-03-13 trunk r208532.
7053
+ * config/avr/avr.c (avr_out_plus): Swap cc_plus and cc_minus in
7054
+ calls of avr_out_plus_1.
7056
+2014-03-13 Joey Ye <joey.ye@arm.com>
7058
+ Backport from mainline
7059
+ 2014-03-12 Thomas Preud'homme <thomas.preudhomme@arm.com>
7061
+ PR tree-optimization/60454
7062
+ * tree-ssa-math-opts.c (find_bswap_1): Fix bswap detection.
7064
+2014-03-06 Matthias Klose <doko@ubuntu.com>
7066
+ * Makefile.in (s-mlib): Only pass MULTIARCH_DIRNAME if
7067
+ MULTILIB_OSDIRNAMES is not defined.
7069
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
7071
+ PR tree-optimization/60276
7072
+ * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Avoid
7073
+ a -Wsign-compare warning.
7075
+ * Makefile.in (tree-ssa-uninit.o): Depend on $(PARAMS_H).
7077
+ Backport from mainline
7078
+ 2014-02-21 Jakub Jelinek <jakub@redhat.com>
7080
+ PR tree-optimization/56490
7081
+ * params.def (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS): New param.
7082
+ * tree-ssa-uninit.c: Include params.h.
7083
+ (compute_control_dep_chain): Add num_calls argument, return false
7084
+ if it exceed PARAM_UNINIT_CONTROL_DEP_ATTEMPTS param, pass
7085
+ num_calls to recursive call.
7086
+ (find_predicates): Change dep_chain into normal array, add num_calls
7087
+ variable and adjust compute_control_dep_chain caller.
7088
+ (find_def_preds): Likewise.
7090
+ 2014-02-13 Jakub Jelinek <jakub@redhat.com>
7093
+ * expr.c (compress_float_constant): If x is a hard register,
7094
+ extend into a pseudo and then move to x.
7096
+ 2014-02-11 Richard Henderson <rth@redhat.com>
7097
+ Jakub Jelinek <jakub@redhat.com>
7100
+ * tree-sra.c (load_assign_lhs_subreplacements): Add VIEW_CONVERT_EXPR
7101
+ around drhs if type conversion to lacc->type is not useless.
7103
+ 2014-02-08 Jakub Jelinek <jakub@redhat.com>
7106
+ * ipa-cp.c (determine_versionability): Fail at -O0
7107
+ or __attribute__((optimize (0))) or -fno-ipa-cp functions.
7108
+ * tree-sra.c (ipa_sra_preliminary_function_checks): Similarly.
7110
+ 2014-02-06 Jakub Jelinek <jakub@redhat.com>
7113
+ * tree.h (opts_for_fn): New inline function.
7114
+ (opt_for_fn): Define.
7115
+ * config/i386/i386.c (ix86_function_regparm): Use
7116
+ opt_for_fn (decl, optimize) instead of optimize.
7118
+ 2014-02-05 Jakub Jelinek <jakub@redhat.com>
7120
+ PR middle-end/57499
7121
+ * tree-eh.c (cleanup_empty_eh): Bail out on totally empty
7122
+ bb with no successors.
7124
+2014-03-04 Richard Biener <rguenther@suse.de>
7126
+ PR tree-optimization/60382
7127
+ * tree-vect-loop.c (vect_is_simple_reduction_1): Do not consider
7128
+ dead PHIs a reduction.
7130
+2014-02-25 Richard Biener <rguenther@suse.de>
7132
+ Backport from mainline
7133
+ 2014-02-21 Richard Biener <rguenther@suse.de>
7135
+ PR tree-optimization/60276
7136
+ * tree-vectorizer.h (struct _stmt_vec_info): Add min_neg_dist field.
7137
+ (STMT_VINFO_MIN_NEG_DIST): New macro.
7138
+ * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Record
7139
+ STMT_VINFO_MIN_NEG_DIST.
7140
+ * tree-vect-stmts.c (vectorizable_load): Verify if assumptions
7141
+ made for negative dependence distances still hold.
7143
+2014-02-25 Richard Biener <rguenther@suse.de>
7145
+ Backport from mainline
7146
+ 2014-02-21 Richard Biener <rguenther@suse.de>
7148
+ PR middle-end/60291
7149
+ * tree-ssa-live.c (mark_all_vars_used_1): Do not walk
7150
+ DECL_INITIAL for globals not in the current function context.
7152
+ 2014-02-20 Richard Biener <rguenther@suse.de>
7154
+ PR middle-end/60221
7155
+ * tree-eh.c (execute_cleanup_eh_1): Also cleanup empty EH
7158
+ 2014-02-14 Richard Biener <rguenther@suse.de>
7160
+ PR tree-optimization/60183
7161
+ * tree-ssa-phiprop.c (propagate_with_phi): Avoid speculating
7163
+ (tree_ssa_phiprop): Calculate and free post-dominators.
7165
+2014-02-25 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
7168
+ * config/arm/arm.h (CANNOT_CHANGE_MODE_CLASS): Allow 128 to 64-bit
7171
+2014-02-24 John David Anglin <danglin@gcc.gnu.org>
7173
+ * config/pa/pa.c (pa_output_move_double): Don't valididate when
7174
+ adjusting offsetable addresses.
7176
+2014-02-23 David Holsgrove <david.holsgrove@xilinx.com>
7178
+ * config/microblaze/microblaze.md: Correct ashrsi_reg / lshrsi_reg names
7180
+2014-02-23 Edgar E. Iglesias <edgar.iglesias@xilinx.com>
7182
+ * config/microblaze/microblaze.h: Remove SECONDARY_MEMORY_NEEDED
7185
+2014-02-23 David Holsgrove <david.holsgrove@xilinx.com>
7187
+ * /config/microblaze/microblaze.c: Add microblaze_asm_output_mi_thunk
7188
+ and define TARGET_ASM_OUTPUT_MI_THUNK and
7189
+ TARGET_ASM_CAN_OUTPUT_MI_THUNK.
7191
+2014-02-23 David Holsgrove <david.holsgrove@xilinx.com>
7193
+ * config/microblaze/predicates.md: Add cmp_op predicate.
7194
+ * config/microblaze/microblaze.md: Add branch_compare instruction
7195
+ which uses cmp_op predicate and emits cmp insn before branch.
7196
+ * config/microblaze/microblaze.c (microblaze_emit_compare): Rename
7197
+ to microblaze_expand_conditional_branch and consolidate logic.
7198
+ (microblaze_expand_conditional_branch): emit branch_compare
7199
+ insn instead of handling cmp op separate from branch insn.
7201
+2014-02-21 Martin Jambor <mjambor@suse.cz>
7204
+ * ipa-cp.c (cgraph_edge_brings_all_agg_vals_for_node): Uce correct
7205
+ info when checking whether lattices are bottom.
7207
+2014-02-21 Jakub Jelinek <jakub@redhat.com>
7209
+ * config/i386/i386.c (ix86_expand_vec_perm): Use V8SImode
7210
+ mode for mask of V8SFmode permutation.
7212
+2014-02-20 Richard Henderson <rth@redhat.com>
7215
+ * builtins.c (expand_builtin_atomic_compare_exchange): Conditionalize
7216
+ on failure the store back into EXPECT. Always make a new pseudo for
7219
+2014-02-20 Jakub Jelinek <jakub@redhat.com>
7222
+ * config/i386/i386.c (expand_vec_perm_interleave2): Don't call
7223
+ gen_reg_rtx if d->testing_p.
7224
+ (expand_vec_perm_pshufb2, expand_vec_perm_even_odd_1,
7225
+ expand_vec_perm_broadcast_1): Return early if d->testing_p and
7226
+ we will certainly return true.
7228
+2014-02-20 Richard Biener <rguenther@suse.de>
7230
+ * tree-cfg.c (replace_uses_by): Mark altered BBs before
7231
+ doing the substitution.
7233
+2014-02-19 H.J. Lu <hongjiu.lu@intel.com>
7235
+ Backport from mainline
7236
+ 2014-02-19 H.J. Lu <hongjiu.lu@intel.com>
7239
+ * config/i386/i386.c (construct_container): Remove TFmode check
7240
+ for X86_64_INTEGER_CLASS.
7242
+2014-02-19 Uros Bizjak <ubizjak@gmail.com>
7244
+ Backport from mainline
7245
+ 2014-02-19 Uros Bizjak <ubizjak@gmail.com>
7248
+ * config/i386/i386.c (type_natural_mode): Warn for ABI changes
7249
+ only when -Wpsabi is enabled.
7251
+2014-02-19 Terry Guo <terry.guo@arm.com>
7253
+ Backport from mainline
7254
+ 2014-02-08 Terry Guo <terry.guo@arm.com>
7256
+ * doc/invoke.texi: Document ARM -march=armv7e-m.
7258
+2014-02-18 Kai Tietz <ktietz@redhat.com>
7260
+ Backport from mainline
7261
+ 2014-02-18 Kai Tietz <ktietz@redhat.com>
7264
+ * config/i386/i386.c (ix86_expand_prologue): Use
7265
+ rax register as displacement for restoring %r10, %rax.
7266
+ Additional fix wrong offset for restoring both-registers.
7268
+2014-02-18 Eric Botcazou <ebotcazou@adacore.com>
7270
+ * ipa-prop.c (compute_complex_ancestor_jump_func): Replace overzealous
7271
+ assertion with conditional return.
7273
+2014-02-18 Jakub Jelinek <jakub@redhat.com>
7274
+ Uros Bizjak <ubizjak@gmail.com>
7277
+ * config/i386/driver-i386.c (host_detect_local_cpu): If
7278
+ YMM state is not saved by the OS, also clear has_f16c. Move
7279
+ CPUID 0x80000001 handling before YMM state saving checking.
7281
+2014-02-14 Roland McGrath <mcgrathr@google.com>
7283
+ * configure.ac (HAVE_AS_IX86_UD2): New test for 'ud2' mnemonic.
7284
+ * configure: Regenerated.
7285
+ * config.in: Regenerated.
7286
+ * config/i386/i386.md (trap) [HAVE_AS_IX86_UD2]: Use the mnemonic
7287
+ instead of ASM_SHORT.
7289
+2014-02-13 Uros Bizjak <ubizjak@gmail.com>
7291
+ Backport from mainline
7292
+ 2014-02-13 Uros Bizjak <ubizjak@gmail.com>
7294
+ * config/i386/sse.md (xop_vmfrcz<mode>2): Generate const0 in
7295
+ operands[2], not operands[3].
7297
+2014-02-13 Dominik Vogt <vogt@linux.vnet.ibm.com>
7299
+ * config/s390/s390.c (s390_asm_output_function_label): Fix crash
7300
+ caused by bad second argument to warning_at() with -mhotpatch and
7301
+ nested functions (e.g. with gfortran).
7303
+2014-02-12 H.J. Lu <hongjiu.lu@intel.com>
7305
+ Backport from mainline
7306
+ 2014-02-12 H.J. Lu <hongjiu.lu@intel.com>
7307
+ Uros Bizjak <ubizjak@gmail.com>
7310
+ * configure.ac (HAVE_AS_GOTOFF_IN_DATA): Pass --32 to GNU assembler.
7312
+2014-02-12 Eric Botcazou <ebotcazou@adacore.com>
7314
+ PR rtl-optimization/60116
7315
+ * combine.c (try_combine): Also remove dangling REG_DEAD notes on the
7316
+ other_insn once the combination has been validated.
7318
+2014-02-10 Nagaraju Mekala <nagaraju.mekala@xilinx.com>
7320
+ * config/microblaze/microblaze.md: Add movsi4_rev insn pattern.
7321
+ * config/microblaze/predicates.md: Add reg_or_mem_operand predicate.
7323
+2014-02-10 Nagaraju Mekala <nagaraju.mekala@xilinx.com>
7325
+ * config/microblaze/microblaze.c: Extend mcpu version format
7327
+2014-02-10 David Holsgrove <david.holsgrove@xilinx.com>
7329
+ * config/microblaze/microblaze.h: Define SIZE_TYPE and PTRDIFF_TYPE.
7331
+2014-02-10 Richard Biener <rguenther@suse.de>
7333
+ Backport from mainline
7334
+ 2014-01-30 Richard Biener <rguenther@suse.de>
7336
+ PR tree-optimization/59903
7337
+ * tree-vect-loop.c (vect_transform_loop): Guard multiple-types
7340
+ 2014-02-10 Richard Biener <rguenther@suse.de>
7342
+ PR tree-optimization/60115
7343
+ * tree-eh.c (tree_could_trap_p): Unify TARGET_MEM_REF and
7344
+ MEM_REF handling. Properly verify that the accesses are not
7345
+ out of the objects bound.
7347
+2014-02-05 James Greenhalgh <james.greenhalgh@arm.com>
7349
+ Backport from mainline.
7350
+ 2014-02-05 James Greenhalgh <james.greenhalgh@arm.com>
7353
+ * doc/invoke.texi (-march): Clarify documentation for ARM.
7354
+ (-mtune): Likewise.
7355
+ (-mcpu): Likewise.
7357
+2014-02-04 John David Anglin <danglin@gcc.gnu.org>
7360
+ * config/pa/pa.c (legitimize_tls_address): Return original address
7361
+ if not passed a SYMBOL_REF rtx.
7362
+ (hppa_legitimize_address): Call legitimize_tls_address for all TLS
7364
+ (pa_emit_move_sequence): Simplify TLS source operands.
7365
+ (pa_legitimate_constant_p): Reject all TLS constants.
7366
+ * config/pa/pa.h (PA_SYMBOL_REF_TLS_P): Correct comment.
7367
+ (CONSTANT_ADDRESS_P): Reject TLS CONST addresses.
7369
+2014-02-04 Uros Bizjak <ubizjak@gmail.com>
7371
+ Backport from mainline
7372
+ 2014-02-02 Uros Bizjak <ubizjak@gmail.com>
7375
+ * config/i386/i386.c (classify_argument): Fix handling of bit_offset
7376
+ when calculating size of integer atomic types.
7378
+2014-02-02 Uros Bizjak <ubizjak@gmail.com>
7380
+ Backport from mainline
7381
+ 2014-01-30 Jakub Jelinek <jakub@redhat.com>
7383
+ * config/i386/f16cintrin.h (_cvtsh_ss): Avoid -Wnarrowing warning.
7385
+2014-01-31 Richard Henderson <rth@redhat.com>
7387
+ PR middle-end/60004
7388
+ * tree-eh.c (lower_try_finally_switch): Delay lowering finally block
7389
+ until after else_eh is processed.
7391
+2014-01-30 David Holsgrove <david.holsgrove@xilinx.com>
7393
+ Backport from mainline
7394
+ * config/microblaze/microblaze.md(cstoresf4, cbranchsf4): Replace
7395
+ comparison_operator with ordered_comparison_operator.
7397
+2014-01-25 Walter Lee <walt@tilera.com>
7399
+ Backport from mainline
7400
+ 2014-01-25 Walter Lee <walt@tilera.com>
7402
+ * config/tilegx/sync.md (atomic_fetch_sub): Fix negation and
7403
+ avoid clobbering a live register.
7405
+2014-01-25 Walter Lee <walt@tilera.com>
7407
+ Backport from mainline
7408
+ 2014-01-25 Walter Lee <walt@tilera.com>
7410
+ * config/tilegx/tilegx-c.c (tilegx_cpu_cpp_builtins):
7411
+ Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1,2}.
7412
+ * config/tilegx/tilepro-c.c (tilepro_cpu_cpp_builtins):
7413
+ Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1,2,4,8}.
7415
+2014-01-25 Walter Lee <walt@tilera.com>
7417
+ Backport from mainline
7418
+ 2014-01-25 Walter Lee <walt@tilera.com>
7420
+ * config/tilegx/tilegx.c (tilegx_gen_bundles): Delete barrier
7421
+ insns before bundling.
7422
+ * config/tilegx/tilegx.md (tile_network_barrier): Update comment.
7424
+2014-01-25 Walter Lee <walt@tilera.com>
7426
+ Backport from mainline
7427
+ 2014-01-25 Walter Lee <walt@tilera.com>
7429
+ * config/tilegx/tilegx.c (tilegx_expand_builtin): Set
7430
+ PREFETCH_SCHEDULE_BARRIER_P to true for prefetches.
7431
+ * config/tilepro/tilepro.c (tilepro_expand_builtin): Ditto.
7433
+2014-01-25 Walter Lee <walt@tilera.com>
7435
+ Backport from mainline
7436
+ 2014-01-25 Walter Lee <walt@tilera.com>
7438
+ * config/tilepro/tilepro.md (ctzdi2): Use register_operand
7443
+2014-01-25 Walter Lee <walt@tilera.com>
7445
+ Backport from mainline
7446
+ 2014-01-25 Walter Lee <walt@tilera.com>
7448
+ * config/tilegx/tilegx.c (tilegx_expand_to_rtl_hook): New.
7449
+ (TARGET_EXPAND_TO_RTL_HOOK): Define.
7451
+2014-01-24 H.J. Lu <hongjiu.lu@intel.com>
7453
+ Backport from mainline
7454
+ 2014-01-23 H.J. Lu <hongjiu.lu@intel.com>
7457
+ * config/i386/i386.md (pushsf splitter): Get stack adjustment
7458
+ from push operand if code of push isn't PRE_DEC.
7460
+2014-01-23 David Holsgrove <david.holsgrove@xilinx.com>
7462
+ Backport from mainline.
7463
+ * config/microblaze/microblaze.md: Add trap insn and attribute
7465
+2014-01-23 Marek Polacek <polacek@redhat.com>
7467
+ Backport from mainline
7468
+ 2013-10-21 Marek Polacek <polacek@redhat.com>
7470
+ PR middle-end/58809
7471
+ * fold-const.c (fold_range_test): Return 0 if the type is not
7474
+2014-01-22 David Holsgrove <david.holsgrove@xilinx.com>
7476
+ * config/microblaze/microblaze.md: Correct bswaphi2 insn.
7478
+2014-01-22 Uros Bizjak <ubizjak@gmail.com>
7480
+ Backport from mainline
7481
+ 2014-01-20 Uros Bizjak <ubizjak@gmail.com>
7483
+ * config/i386/i386.c (ix86_avoid_lea_for_addr): Return false
7484
+ for SImode_address_operand operands, having only a REG argument.
7486
+ 2014-01-20 Jakub Jelinek <jakub@redhat.com>
7489
+ * config/i386/i386.c (ix86_avoid_lea_for_addr): Return false
7490
+ if operands[1] is a REG or ZERO_EXTEND of a REG.
7492
+ 2014-01-18 Uros Bizjak <ubizjak@gmail.com>
7493
+ H.J. Lu <hongjiu.lu@intel.com>
7496
+ * config/i386/i386.md (*lea<mode>): Zero-extend return register
7497
+ to DImode for zero-extended addresses.
7499
+2014-01-21 Andrew Pinski <apinski@cavium.com>
7500
+ Steve Ellcey <sellcey@mips.com>
7503
+ * config/mips/mips.c (mips_print_operand): Check operand mode instead
7506
+2014-01-21 Andrey Belevantsev <abel@ispras.ru>
7508
+ Backport from mainline
7509
+ 2013-12-23 Andrey Belevantsev <abel@ispras.ru>
7511
+ PR rtl-optimization/57422
7512
+ * sel-sched.c (mark_unavailable_hard_regs): Fix typo when calling
7513
+ add_to_hard_reg_set.
7515
+2014-01-20 Jakub Jelinek <jakub@redhat.com>
7517
+ PR middle-end/59860
7518
+ * tree.h (fold_builtin_strcat): New prototype.
7519
+ * builtins.c (fold_builtin_strcat): No longer static. Add len
7520
+ argument, if non-NULL, don't call c_strlen. Optimize
7521
+ directly into __builtin_memcpy instead of __builtin_strcpy.
7522
+ (fold_builtin_2): Adjust fold_builtin_strcat caller.
7523
+ * gimple-fold.c (gimple_fold_builtin): Handle BUILT_IN_STRCAT.
7525
+2014-01-20 Richard Biener <rguenther@suse.de>
7527
+ PR middle-end/59860
7528
+ * builtins.c (fold_builtin_strcat): Remove case better handled
7529
+ by tree-ssa-strlen.c.
7531
+2014-01-19 John David Anglin <danglin@gcc.gnu.org>
7533
+ * config/pa/pa.c (pa_attr_length_millicode_call): Correct length of
7534
+ long non-pic millicode calls.
7536
+2014-01-17 John David Anglin <danglin@gcc.gnu.org>
7538
+ * config/pa/pa.c (pa_attr_length_indirect_call): Don't output a short
7539
+ call to $$dyncall when TARGET_LONG_CALLS is true.
7541
+2014-01-17 H.J. Lu <hongjiu.lu@intel.com>
7543
+ Backport from mainline
7544
+ 2014-01-14 H.J. Lu <hongjiu.lu@intel.com>
7547
+ * config/i386/i386.c (type_natural_mode): Add a bool parameter
7548
+ to indicate if type is used for function return value. Warn
7549
+ ABI change if the vector mode isn't available for function
7551
+ (ix86_function_arg_advance): Pass false to type_natural_mode.
7552
+ (ix86_function_arg): Likewise.
7553
+ (ix86_gimplify_va_arg): Likewise.
7554
+ (function_arg_32): Don't warn ABI change.
7555
+ (ix86_function_value): Pass true to type_natural_mode.
7556
+ (ix86_return_in_memory): Likewise.
7557
+ (ix86_struct_value_rtx): Removed.
7558
+ (TARGET_STRUCT_VALUE_RTX): Likewise.
7560
+2014-01-17 Charles Baylis <charles.baylis@linaro.org>
7562
+ Backport from mainline
7563
+ 2013-12-19 Charles Baylis <charles.baylis@linaro.org>
7566
+ * config/arm/arm-ldmstm.ml: Use low_register_operand for Thumb
7568
+ * config/arm/ldmstm.md: Regenerate.
7570
+ 2013-12-19 Charles Baylis <charles.baylis@linaro.org>
7573
+ * config/arm/predicates.md (arm_hard_general_register_operand):
7575
+ (arm_hard_register_operand): Remove.
7576
+ * config/arm/arm-ldmstm.ml: Use arm_hard_general_register_operand
7578
+ * config/arm/ldmstm.md: Regenerate.
7580
+ 2013-12-19 Charles Baylis <charles.baylis@linaro.org>
7583
+ * config/arm/predicates.md (vfp_hard_register_operand): New predicate.
7584
+ * config/arm/arm.md (vfp_pop_multiple_with_writeback): Use
7585
+ vfp_hard_register_operand.
7587
+2014-01-17 Kugan Vivekanandarajah <kuganv@linaro.org>
7589
+ Backport from mainline
7590
+ 2014-01-15 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
7591
+ Kugan Vivekanandarajah <kuganv@linaro.org>
7594
+ * config/aarch64/aarch64.c (aarch64_build_constant): Fix incorrect
7597
+2014-01-17 Terry Guo <terry.guo@arm.com>
7600
+ * config/arm/arm.md (prefetch): Set insn type attribute to load1.
7602
+2014-01-16 Jakub Jelinek <jakub@redhat.com>
7605
+ * config/i386/i386.c (ix86_expand_builtin): If target doesn't
7606
+ satisfy operand 0 predicate for gathers, use a new pseudo as
7609
+2014-01-16 Richard Henderson <rth@redhat.com>
7612
+ * reginfo.c (global_regs_decl): Globalize.
7613
+ * rtl.h (global_regs_decl): Declare.
7614
+ * ira.c (do_reload): Diagnose frame_pointer_needed and it
7615
+ reserved via global_regs.
7617
+2014-01-16 Peter Bergner <bergner@vnet.ibm.com>
7619
+ Backport from mainline
7620
+ 2014-01-15 Uros Bizjak <ubizjak@gmail.com>
7622
+ * config/i386/i386.c (ix86_hard_regno_mode_ok): Use
7623
+ VALID_AVX256_REG_OR_OI_MODE.
7625
+ 2013-09-05 Peter Bergner <bergner@vnet.ibm.com>
7628
+ * reginfo.c (choose_hard_reg_mode): Scan through all mode classes
7629
+ looking for widest mode.
7631
+2014-01-16 Marek Polacek <polacek@redhat.com>
7633
+ Backported from mainline
7634
+ 2014-01-16 Marek Polacek <polacek@redhat.com>
7636
+ PR middle-end/59827
7637
+ * gimple-low.c (gimple_check_call_args): Don't use DECL_ARG_TYPE if
7638
+ it is error_mark_node.
7640
+2014-01-15 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
7643
+ * config/s390/s390.c (s390_preferred_reload_class): Don't return
7644
+ ADDR_REGS for invalid symrefs in non-PIC code.
7646
+2014-01-14 Uros Bizjak <ubizjak@gmail.com>
7649
+ 2014-01-08 Uros Bizjak <ubizjak@gmail.com>
7651
+ * config/i386/i386.c (ix86_data_alignment): Calculate max_align
7652
+ from prefetch_block tune setting.
7654
+2014-01-13 Jakub Jelinek <jakub@redhat.com>
7656
+ Backported from mainline
7657
+ 2014-01-10 Jakub Jelinek <jakub@redhat.com>
7659
+ PR tree-optimization/59745
7660
+ * tree-predcom.c (tree_predictive_commoning_loop): Call
7661
+ free_affine_expand_cache if giving up because components is NULL.
7663
+2014-01-10 Yufeng Zhang <yufeng.zhang@arm.com>
7665
+ * config/arm/arm.c (arm_expand_neon_args): Call expand_expr
7666
+ with EXPAND_MEMORY for NEON_ARG_MEMORY; check if the returned
7667
+ rtx is const0_rtx or not.
7669
+2014-01-10 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
7671
+ * config/s390/s390.c (s390_expand_tbegin): Remove jump over CC
7672
+ extraction in good case.
7674
+2014-01-10 Huacai Chen <chenhc@lemote.com>
7676
+ * config/mips/driver-native.c (host_detect_local_cpu): Handle new
7677
+ kernel strings for Loongson-2E/2F/3A.
7679
+2014-01-10 Richard Biener <rguenther@suse.de>
7681
+ PR tree-optimization/59715
7682
+ * tree-flow.h (split_critical_edges): Declare.
7683
+ * tree-cfg.c (split_critical_edges): Export.
7684
+ * tree-ssa-sink.c (execute_sink_code): Split critical edges.
7686
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
7688
+ * config/mips/mips.h (ISA_HAS_WSBH): Define.
7689
+ * config/mips/mips.md (UNSPEC_WSBH, UNSPEC_DSBH, UNSPEC_DSHD): New
7691
+ (bswaphi2, bswapsi2, bswapdi2, wsbh, dsbh, dshd): New patterns.
7693
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
7695
+ PR rtl-optimization/59137
7696
+ * reorg.c (steal_delay_list_from_target): Call update_block for
7698
+ (steal_delay_list_from_fallthrough, relax_delay_slots): Likewise.
7700
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
7703
+ 2012-10-07 Richard Sandiford <rdsandiford@googlemail.com>
7705
+ * config/mips/mips.c (mips_truncated_op_cost): New function.
7706
+ (mips_rtx_costs): Adjust test for BADDU.
7707
+ * config/mips/mips.md (*baddu_di<mode>): Push truncates to operands.
7709
+ 2012-10-02 Richard Sandiford <rdsandiford@googlemail.com>
7711
+ * config/mips/mips.md (*baddu_si_eb, *baddu_si_el): Merge into...
7712
+ (*baddu_si): ...this new pattern.
7714
+2014-01-09 Richard Biener <rguenther@suse.de>
7716
+ Backport from mainline
7717
+ 2013-11-18 Richard Biener <rguenther@suse.de>
7719
+ PR tree-optimization/59125
7720
+ PR tree-optimization/54570
7721
+ * tree-ssa-sccvn.c (copy_reference_ops_from_ref): When inlining
7722
+ is not complete do not treat component-references with offset zero
7723
+ but different fields as equal.
7724
+ * tree-object-size.c: Include tree-phinodes.h and ssa-iterators.h.
7725
+ (compute_object_sizes): Apply TLC. Propagate the constant
7726
+ results into all uses and fold their stmts.
7727
+ * passes.def (pass_all_optimizations): Move pass_object_sizes
7728
+ after the first pass_forwprop and before pass_fre.
7730
+ 2013-12-03 Jakub Jelinek <jakub@redhat.com>
7732
+ PR tree-optimization/59362
7733
+ * tree-object-size.c (object_sizes): Change into array of
7734
+ vec<unsigned HOST_WIDE_INT>.
7735
+ (compute_builtin_object_size): Check computed bitmap for
7736
+ non-NULL instead of object_sizes. Call safe_grow on object_sizes
7737
+ vector if new SSA_NAMEs appeared.
7738
+ (init_object_sizes): Check computed bitmap for non-NULL.
7739
+ Call safe_grow on object_sizes elements instead of initializing
7741
+ (fini_object_sizes): Call release on object_sizes elements, don't
7744
+2014-01-09 Richard Earnshaw <rearnsha@arm.com>
7746
+ PR rtl-optimization/54300
7747
+ * regcprop.c (copyprop_hardreg_forward_1): Ensure any unused
7748
+ outputs in a single-set are killed from the value chains.
7750
+2014-01-09 Jakub Jelinek <jakub@redhat.com>
7752
+ PR rtl-optimization/59724
7753
+ * ifcvt.c (cond_exec_process_if_block): Don't call
7754
+ flow_find_head_matching_sequence with 0 longest_match.
7755
+ * cfgcleanup.c (flow_find_head_matching_sequence): Count even
7756
+ non-active insns if !stop_after.
7757
+ (try_head_merge_bb): Revert 2014-01-07 changes.
7759
+2014-01-09 Hans-Peter Nilsson <hp@axis.com>
7761
+ Backport from mainline
7762
+ 2013-12-23 Hans-Peter Nilsson <hp@axis.com>
7764
+ PR middle-end/59584
7765
+ * config/cris/predicates.md (cris_nonsp_register_operand):
7766
+ New define_predicate.
7767
+ * config/cris/cris.md: Replace register_operand with
7768
+ cris_nonsp_register_operand for destinations in all
7769
+ define_splits where a register is set more than once.
7771
+2014-01-08 H.J. Lu <hongjiu.lu@intel.com>
7773
+ Backport from mainline
7774
+ 2013-12-25 H.J. Lu <hongjiu.lu@intel.com>
7777
+ * config/i386/i386.c (struct ptt): Add a field for processor name.
7778
+ (processor_target_table): Sync with processor_type. Add
7780
+ (cpu_names): Removed.
7781
+ (ix86_option_override_internal): Default x_ix86_tune_string
7782
+ to processor_target_table[TARGET_CPU_DEFAULT].name.
7783
+ (ix86_function_specific_print): Assert arch and tune <
7784
+ PROCESSOR_max. Use processor_target_table to print arch and
7786
+ * config/i386/i386.h (TARGET_CPU_DEFAULT): Default to
7787
+ PROCESSOR_GENERIC32.
7788
+ (target_cpu_default): Removed.
7789
+ (processor_type): Reordered.
7791
+2014-01-08 Uros Bizjak <ubizjak@gmail.com>
7793
+ Backport from mainline
7794
+ 2014-01-05 Uros Bizjak <ubizjak@gmail.com>
7796
+ * config/i386/i386.c (ix86_data_alignment): Calculate max_align
7797
+ from prefetch_block tune setting.
7798
+ (nocona_cost): Correct size of prefetch block to 64.
7800
+2014-01-08 Martin Jambor <mjambor@suse.cz>
7803
+ * ipa-prop.c (ipa_compute_jump_functions): Bail out if not optimizing.
7804
+ (parm_preserved_before_stmt_p): Assume modification present when not
7807
+2014-01-07 John David Anglin <danglin@gcc.gnu.org>
7810
+ * config/pa/pa.c (pa_legitimate_address_p): Return false before reload
7811
+ for 14-bit register offsets when INT14_OK_STRICT is false.
7813
+2014-01-07 Roland Stigge <stigge@antcom.de>
7814
+ Michael Meissner <meissner@linux.vnet.ibm.com>
7817
+ * config/rs6000/rs6000.c (rs6000_legitimate_offset_address_p):
7818
+ Only check TFmode for SPE constants. Don't check TImode or TDmode.
7820
+2014-01-07 Jakub Jelinek <jakub@redhat.com>
7822
+ PR rtl-optimization/58668
7823
+ * cfgcleanup.c (flow_find_cross_jump): Don't count
7824
+ any jumps if dir_p is NULL. Remove p1 variable and make USE/CLOBBER
7825
+ check consistent with other places.
7826
+ (flow_find_head_matching_sequence): Don't count USE or CLOBBER insns.
7827
+ (try_head_merge_bb): Adjust for the flow_find_head_matching_sequence
7829
+ * ifcvt.c (count_bb_insns): Don't count USE or CLOBBER insns.
7831
+2014-01-07 Mike Stump <mikestump@comcast.net>
7832
+ Jakub Jelinek <jakub@redhat.com>
7835
+ * tree.h (struct tree_optimization_option): Change optabs
7836
+ type from unsigned char * to void *.
7837
+ * optabs.c (init_tree_optimization_optabs): Adjust
7838
+ TREE_OPTIMIZATION_OPTABS initialization.
7840
+2014-01-07 Jakub Jelinek <jakub@redhat.com>
7842
+ Backported from mainline
7843
+ 2013-12-16 Jakub Jelinek <jakub@redhat.com>
7845
+ PR middle-end/58956
7846
+ PR middle-end/59470
7847
+ * gimple.h (walk_stmt_load_store_addr_fn): New typedef.
7848
+ (walk_stmt_load_store_addr_ops, walk_stmt_load_store_ops): Use it
7849
+ for callback params.
7850
+ * gimple.c (walk_stmt_load_store_ops): Likewise.
7851
+ (walk_stmt_load_store_addr_ops): Likewise. Adjust all callback
7852
+ calls to supply the gimple operand containing the base tree
7853
+ as an extra argument.
7854
+ * tree-ssa-ter.c (find_ssaname, find_ssaname_in_store): New helper
7856
+ (find_replaceable_in_bb): For calls or GIMPLE_ASM, only set
7857
+ same_root_var if USE is used somewhere in the stores of the stmt.
7858
+ * ipa-prop.c (visit_ref_for_mod_analysis): Remove name of the stmt
7859
+ argument and ATTRIBUTE_UNUSED, add another unnamed tree argument.
7860
+ * ipa-pure-const.c (check_load, check_store, check_ipa_load,
7861
+ check_ipa_store): Likewise.
7862
+ * gimple.c (gimple_ior_addresses_taken_1): Likewise.
7863
+ * ipa-split.c (test_nonssa_use, mark_nonssa_use): Likewise.
7864
+ (verify_non_ssa_vars, visit_bb): Adjust their callers.
7865
+ * cfgexpand.c (add_scope_conflicts_1): Use
7866
+ walk_stmt_load_store_addr_fn type for visit variable.
7867
+ (visit_op, visit_conflict): Remove name of the stmt
7868
+ argument and ATTRIBUTE_UNUSED, add another unnamed tree argument.
7869
+ * tree-sra.c (asm_visit_addr): Likewise. Remove name of the data
7870
+ argument and ATTRIBUTE_UNUSED.
7871
+ * cgraphbuild.c (mark_address, mark_load, mark_store): Add another
7872
+ unnamed tree argument.
7874
+2014-01-03 Andreas Schwab <schwab@linux-m68k.org>
7876
+ * config/m68k/m68k.c (handle_move_double): Handle pushes with
7877
+ overlapping registers also for registers other than the stack
7880
+2014-01-03 Jakub Jelinek <jakub@redhat.com>
7883
+ * config/i386/i386.c (ix86_avoid_jump_mispredicts): Don't consider
7886
+2014-01-01 Jakub Jelinek <jakub@redhat.com>
7888
+ PR rtl-optimization/59647
7889
+ * cse.c (cse_process_notes_1): Don't substitute negative VOIDmode
7890
+ new_rtx into UNSIGNED_FLOAT rtxes.
7892
+2013-12-28 Eric Botcazou <ebotcazou@adacore.com>
7894
+ * doc/invoke.texi (output file options): Document -fada-spec-parent.
7896
+2013-12-26 Uros Bizjak <ubizjak@gmail.com>
7898
+ * config/i386/driver-i386.c (decode_caches_intel): Add missing entries.
7900
+2013-12-20 Jakub Jelinek <jakub@redhat.com>
7903
+ Backported from mainline
7904
+ 2013-08-19 Dehao Chen <dehao@google.com>
7906
+ * value-prof.c (gimple_ic): Fix the bug of adding EH edge.
7908
+2013-12-19 James Greenhalgh <james.greenhalgh@arm.com>
7910
+ Backport from Mainline.
7911
+ 2013-05-01 James Greenhalgh <james.greenhalgh@arm.com>
7913
+ * config/aarch64/aarch64-simd-builtins.def (cmhs): Rename to...
7915
+ (cmhi): Rename to...
7917
+ * config/aarch64/aarch64-simd.md
7918
+ (simd_mode): Add SF.
7919
+ (aarch64_vcond_internal): Use new names for unsigned comparison insns.
7920
+ (aarch64_cm<optab><mode>): Rewrite to not use UNSPECs.
7921
+ * config/aarch64/aarch64.md (*cstore<mode>_neg): Rename to...
7922
+ (cstore<mode>_neg): ...This.
7923
+ * config/aarch64/iterators.md
7925
+ (unspec): Remove UNSPEC_CM<EQ, LE, LT, GE, GT, HS, HI, TST>.
7926
+ (COMPARISONS): New.
7927
+ (UCOMPARISONS): Likewise.
7928
+ (optab): Add missing comparisons.
7930
+ (cmp_1): Likewise.
7931
+ (cmp_2): Likewise.
7934
+ (VCMP_S): Likewise.
7935
+ (VCMP_U): Likewise.
7936
+ (V_cmp_result): Add DF, SF modes.
7937
+ (v_cmp_result): Likewise.
7939
+ (vmtype): Likewise.
7940
+ * config/aarch64/predicates.md (aarch64_reg_or_fp_zero): New.
7942
+ Partial Backport from mainline.
7943
+ 2013-05-01 James Greenhalgh <james.greenhalgh@arm.com>
7945
+ * config/aarch64/arm_neon.h
7946
+ (vc<eq, lt, le, gt, ge, tst><qsd>_<u><8,16,32,64>): Remap
7947
+ to builtins or C as appropriate.
7949
+2013-12-19 Dominik Vogt <vogt@linux.vnet.ibm.com>
7950
+ Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
7952
+ Backport from mainline
7953
+ 2013-12-19 Dominik Vogt <vogt@linux.vnet.ibm.com>
7954
+ * config/s390/s390.c (s390_hotpatch_trampoline_halfwords_default): New
7956
+ (s390_hotpatch_trampoline_halfwords_max): New constant
7957
+ (s390_hotpatch_trampoline_halfwords): New static variable
7958
+ (get_hotpatch_attribute): New function
7959
+ (s390_handle_hotpatch_attribute): New function
7960
+ (s390_attribute_table): New target specific attribute table to implement
7961
+ the hotpatch attribute
7962
+ (s390_option_override): Parse hotpatch options
7963
+ (s390_function_num_hotpatch_trampoline_halfwords): New function
7964
+ (s390_can_inline_p): Implement target hook to
7965
+ suppress hotpatching for explicitly inlined functions
7966
+ (s390_asm_output_function_label): Generate hotpatch prologue
7967
+ (TARGET_ATTRIBUTE_TABLE): Define to implement target attribute table
7968
+ (TARGET_CAN_INLINE_P): Define to implement target hook
7969
+ * config/s390/s390.opt (mhotpatch): New options -mhotpatch, -mhotpatch=
7970
+ * config/s390/s390-protos.h (s390_asm_output_function_label): Add
7972
+ * config/s390/s390.h (ASM_OUTPUT_FUNCTION_LABEL): Target specific
7973
+ function label generation for hotpatching
7974
+ (FUNCTION_BOUNDARY): Align functions to eight bytes
7975
+ * doc/extend.texi: Document hotpatch attribute
7976
+ * doc/invoke.texi: Document -mhotpatch option
7978
+2013-12-18 Eric Botcazou <ebotcazou@adacore.com>
7980
+ * config/arm/arm.c (arm_expand_epilogue_apcs_frame): Fix thinko.
7982
+2013-12-12 Vladimir Makarov <vmakarov@redhat.com>
7984
+ PR middle-end/59470
7985
+ * lra-coalesce.c (lra_coalesce): Invalidate inheritance pseudo
7986
+ values if necessary.
7988
+2013-12-12 Jakub Jelinek <jakub@redhat.com>
7991
+ * gimplify.c (omp_check_private): Add copyprivate argument, if it
7992
+ is true, don't check omp_privatize_by_reference.
7993
+ (gimplify_scan_omp_clauses): For OMP_CLAUSE_COPYPRIVATE verify
7994
+ decl is private in outer context. Adjust omp_check_private caller.
7996
+2013-12-10 Eric Botcazou <ebotcazou@adacore.com>
7998
+ PR rtl-optimization/58295
7999
+ * simplify-rtx.c (simplify_truncation): Restrict the distribution for
8000
+ WORD_REGISTER_OPERATIONS targets.
8002
+2013-12-10 Kai Tietz <ktietz@redhat.com>
8005
+ * config/i386/i386.c (ix86_expand_prologue): Address saved
8006
+ registers stack-relative, not via frame-pointer.
8008
+2013-12-09 Alan Modra <amodra@gmail.com>
8010
+ Apply from mainline
8011
+ 2013-12-05 Alan Modra <amodra@gmail.com>
8012
+ * configure.ac (BUILD_CXXFLAGS) Don't use ALL_CXXFLAGS for
8014
+ <recursive call for build != host>: Clear GMPINC. Don't bother
8016
+ * configure: Regenerate.
8018
+2013-12-08 Uros Bizjak <ubizjak@gmail.com>
8020
+ Backport from mainline
8021
+ 2013-12-06 Uros Bizjak <ubizjak@gmail.com>
8024
+ * config/i386/i386.c (type_natural_mode): Properly handle
8025
+ size 8 for !TARGET_64BIT.
8027
+2013-12-07 Ralf Corsépius <ralf.corsepius@rtems.org>
8029
+ * config.gcc (microblaze*-*-rtems*): Add TARGET_BIG_ENDIAN_DEFAULT.
8031
+2013-12-06 Jakub Jelinek <jakub@redhat.com>
8033
+ PR tree-optimization/59388
8034
+ * tree-ssa-reassoc.c (update_range_test): If op == range->exp,
8035
+ gimplify tem after stmt rather than before it.
8037
+2013-12-06 Oleg Endo <olegendo@gcc.gnu.org>
8039
+ Backport from mainline
8040
+ 2013-11-26 Oleg Endo <olegendo@gcc.gnu.org>
8044
+ * config/sh/sh.c (max_mov_insn_displacement, disp_addr_displacement):
8045
+ Prefix function names with 'sh_'. Make them non-static.
8046
+ * config/sh/sh-protos.h (sh_disp_addr_displacement,
8047
+ sh_max_mov_insn_displacement): Add declarations.
8048
+ * config/sh/constraints.md (Q): Reject QImode.
8049
+ (Sdd): Use match_code "mem".
8050
+ (Snd): Fix erroneous matching of non-memory operands.
8051
+ * config/sh/predicates.md (short_displacement_mem_operand): New
8053
+ (general_movsrc_operand): Disallow PC relative QImode loads.
8054
+ * config/sh/sh.md (*mov<mode>_reg_reg): Remove it.
8055
+ (*movqi, *movhi): Merge both insns into...
8056
+ (*mov<mode>): ... this new insn. Replace generic 'm' constraints with
8057
+ 'Snd' and 'Sdd' constraints. Calculate insn length dynamically based
8058
+ on the operand types.
8060
+2013-12-06 Richard Biener <rguenther@suse.de>
8062
+ Backport from mainline
8063
+ 2013-11-29 Richard Biener <rguenther@suse.de>
8065
+ PR tree-optimization/59334
8066
+ * tree-ssa-dce.c (eliminate_unnecessary_stmts): Fix bug
8067
+ in previous commit.
8069
+ 2013-11-28 Richard Biener <rguenther@suse.de>
8071
+ PR tree-optimization/59330
8072
+ * tree-ssa-dce.c (eliminate_unnecessary_stmts): Simplify
8073
+ and fix delayed marking of free calls not necessary.
8075
+2013-12-06 Richard Biener <rguenther@suse.de>
8077
+ Backport from mainline
8078
+ 2013-11-27 Richard Biener <rguenther@suse.de>
8080
+ PR tree-optimization/59288
8081
+ * tree-vect-loop.c (get_initial_def_for_induction): Do not
8082
+ re-analyze the PHI but use STMT_VINFO_LOOP_PHI_EVOLUTION_PART.
8084
+ 2013-11-19 Richard Biener <rguenther@suse.de>
8086
+ PR tree-optimization/59164
8087
+ * tree-vect-loop.c (vect_analyze_loop_operations): Adjust
8088
+ check whether we can create an epilogue loop to reflect the
8089
+ cases where we create one.
8091
+ 2013-09-05 Richard Biener <rguenther@suse.de>
8093
+ PR tree-optimization/58137
8094
+ * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size):
8095
+ Do not create vectors of pointers.
8096
+ * tree-vect-loop.c (get_initial_def_for_induction): Use proper
8097
+ types for the components of the vector initializer.
8098
+ * tree-cfg.c (verify_gimple_assign_binary): Remove special-casing
8099
+ allowing pointer vectors with PLUS_EXPR/MINUS_EXPR.
8101
+2013-12-06 Oleg Endo <olegendo@gcc.gnu.org>
8105
+ * config/sh/sh.md (*cbranch_t): Check that there are no labels between
8106
+ the s1 insn and the testing insn. Remove REG_DEAD note from s1 insn.
8108
+2013-12-05 Richard Biener <rguenther@suse.de>
8110
+ Backport from mainline
8111
+ 2013-11-19 Richard Biener <rguenther@suse.de>
8113
+ PR middle-end/58956
8114
+ * tree-ssa-ter.c (find_replaceable_in_bb): Avoid forwarding
8115
+ loads into stmts that may clobber it.
8117
+2013-12-04 Jakub Jelinek <jakub@redhat.com>
8119
+ PR rtl-optimization/58726
8120
+ * combine.c (force_to_mode): Fix comment typo. Don't destructively
8121
+ modify x for ROTATE, ROTATERT and IF_THEN_ELSE.
8123
+2013-12-04 Jakub Jelinek <jakub@redhat.com>
8124
+ Uros Bizjak <ubizjak@gmail.com>
8127
+ * config/i386/i386.c (ix86_legitimate_combined_insn): If for
8128
+ !TARGET_AVX there is misaligned MEM operand with vector mode
8129
+ and get_attr_ssememalign is 0, return false.
8130
+ (ix86_expand_special_args_builtin): Add get_pointer_alignment
8131
+ computed alignment and for non-temporal loads/stores also
8132
+ at least GET_MODE_ALIGNMENT as MEM_ALIGN.
8133
+ * config/i386/sse.md
8134
+ (<sse>_loadu<ssemodesuffix><avxsizesuffix>,
8135
+ <sse>_storeu<ssemodesuffix><avxsizesuffix>,
8136
+ <sse2>_loaddqu<avxsizesuffix>,
8137
+ <sse2>_storedqu<avxsizesuffix>, <sse3>_lddqu<avxsizesuffix>,
8138
+ sse_vmrcpv4sf2, sse_vmrsqrtv4sf2, sse2_cvtdq2pd, sse_movhlps,
8139
+ sse_movlhps, sse_storehps, sse_loadhps, sse_loadlps,
8140
+ *vec_interleave_highv2df, *vec_interleave_lowv2df,
8141
+ *vec_extractv2df_1_sse, sse2_loadhpd, sse2_loadlpd, sse2_movsd,
8142
+ sse4_1_<code>v8qiv8hi2, sse4_1_<code>v4qiv4si2,
8143
+ sse4_1_<code>v4hiv4si2, sse4_1_<code>v2qiv2di2,
8144
+ sse4_1_<code>v2hiv2di2, sse4_1_<code>v2siv2di2, sse4_2_pcmpestr,
8145
+ *sse4_2_pcmpestr_unaligned, sse4_2_pcmpestri, sse4_2_pcmpestrm,
8146
+ sse4_2_pcmpestr_cconly, sse4_2_pcmpistr, *sse4_2_pcmpistr_unaligned,
8147
+ sse4_2_pcmpistri, sse4_2_pcmpistrm, sse4_2_pcmpistr_cconly): Add
8148
+ ssememalign attribute.
8149
+ * config/i386/i386.md (ssememalign): New define_attr.
8151
+2013-12-03 Jakub Jelinek <jakub@redhat.com>
8153
+ PR middle-end/59011
8154
+ * gimplify.c (nonlocal_vla_vars): New variable.
8155
+ (gimplify_var_or_parm_decl): Put VAR_DECLs for VLAs into
8156
+ nonlocal_vla_vars chain.
8157
+ (gimplify_body): Call declare_vars on nonlocal_vla_vars chain
8158
+ if outer_bind has DECL_INITIAL (current_function_decl) block.
8161
+ * optabs.c (emit_conditional_move): Save and restore
8162
+ pending_stack_adjust and stack_pointer_delta if cmove can't be used.
8164
+2013-12-02 Jakub Jelinek <jakub@redhat.com>
8166
+ PR tree-optimization/59358
8167
+ * tree-vrp.c (union_ranges): To check for the partially
8168
+ overlapping ranges or adjacent ranges, also compare *vr0max
8171
+2013-12-02 Richard Biener <rguenther@suse.de>
8173
+ PR tree-optimization/59139
8174
+ * tree-ssa-loop-niter.c (chain_of_csts_start): Properly match
8175
+ code in get_val_for.
8176
+ (get_val_for): Use gcc_checking_asserts.
8178
+2013-11-27 Tom de Vries <tom@codesourcery.com>
8179
+ Marc Glisse <marc.glisse@inria.fr>
8181
+ PR middle-end/59037
8182
+ * fold-const.c (fold_indirect_ref_1): Don't create out-of-bounds
8184
+ * gimplify.c (gimple_fold_indirect_ref): Same.
8186
+2013-12-01 Eric Botcazou <ebotcazou@adacore.com>
8188
+ * config/i386/winnt.c (i386_pe_asm_named_section): Be prepared for an
8191
+2013-12-01 Bernd Edlinger <bernd.edlinger@hotmail.de>
8193
+ * expr.c (emit_group_store): Fix off-by-one BITFIELD_END argument.
8195
+2013-11-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
8197
+ Backport from mainline
8198
+ 2013-11-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
8200
+ * config/arm/iterators.md (vrint_conds): New int attribute.
8201
+ * config/arm/vfp.md (<vrint_pattern><SDF:mode>2): Set conds attribute.
8202
+ (smax<mode>3): Likewise.
8203
+ (smin<mode>3): Likewise.
8205
+2013-11-28 Uros Bizjak <ubizjak@gmail.com>
8207
+ Backport from mainline
8208
+ 2013-11-27 Uros Bizjak <ubizjak@gmail.com>
8209
+ Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
8212
+ * gcc.target/i386/xop-frczX.c: New test.
8214
+2013-11-28 Terry Guo <terry.guo@arm.com>
8216
+ Backport mainline r205391
8217
+ 2013-11-26 Terry Guo <terry.guo@arm.com>
8219
+ * config/arm/arm.c (require_pic_register): Handle high pic base
8220
+ register for thumb-1.
8221
+ (arm_load_pic_register): Also initialize high pic base register.
8222
+ * doc/invoke.texi: Update documentation for option -mpic-register.
8224
+2013-11-27 Jakub Jelinek <jakub@redhat.com>
8226
+ Backported from mainline
8227
+ 2013-11-26 Jakub Jelinek <jakub@redhat.com>
8229
+ PR tree-optimization/59014
8230
+ * tree-vrp.c (register_edge_assert_for_1): Don't look
8231
+ through conversions from non-integral types or through
8232
+ narrowing conversions.
8234
+2013-11-27 Eric Botcazou <ebotcazou@adacore.com>
8236
+ PR middle-end/59138
8237
+ * expr.c (emit_group_store): Don't write past the end of the structure.
8238
+ (store_bit_field): Fix formatting.
8240
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
8242
+ Backport from mainline
8243
+ 2013-09-17 Sebastian Huber <sebastian.huber@embedded-brains.de>
8245
+ * config/sparc/t-rtems: Add leon3 multilibs.
8247
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
8249
+ Backport from mainline
8250
+ 2013-08-09 Eric Botcazou <ebotcazou@adacore.com>
8252
+ * configure.ac: Add GAS check for LEON instructions on SPARC.
8253
+ * configure: Regenerate.
8254
+ * config.in: Likewise.
8255
+ * config.gcc (with_cpu): Remove sparc-leon*-* and deal with LEON in the
8257
+ * config/sparc/sparc.opt (LEON, LEON3): New masks.
8258
+ * config/sparc/sparc.h (ASM_CPU32_DEFAULT_SPEC): Set to AS_LEON_FLAG
8259
+ for LEON or LEON3.
8260
+ (ASM_CPU_SPEC): Pass AS_LEON_FLAG if -mcpu=leon or -mcpu=leon3.
8261
+ (AS_LEON_FLAG): New macro.
8262
+ * config/sparc/sparc.c (sparc_option_override): Set MASK_LEON for leon
8263
+ and MASK_LEON3 for leon3 and unset them if HAVE_AS_LEON is not defined.
8264
+ Deal with LEON and LEON3 for the memory model.
8265
+ * config/sparc/sync.md (atomic_compare_and_swap<mode>): Enable if LEON3
8266
+ (atomic_compare_and_swap<mode>_1): Likewise.
8267
+ (*atomic_compare_and_swap<mode>_1): Likewise.
8269
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
8271
+ Backport from mainline
8272
+ 2013-07-23 Eric Botcazou <ebotcazou@adacore.com>
8274
+ * doc/invoke.texi (SPARC Options): Document new leon3 processor value.
8276
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
8278
+ Backport from mainline
8279
+ 2013-07-22 Eric Botcazou <ebotcazou@adacore.com>
8281
+ * config.gcc (sparc*-*-*): Accept leon3 processor.
8282
+ (sparc-leon*-*): Merge with sparc*-*-* and add leon3 support.
8283
+ * doc/invoke.texi (SPARC Options): Adjust -mfix-ut699 entry.
8284
+ * config/sparc/sparc-opts.h (enum processor_type): Add PROCESSOR_LEON3.
8285
+ * config/sparc/sparc.opt (enum processor_type): Add leon3.
8286
+ (mfix-ut699): Adjust comment.
8287
+ * config/sparc/sparc.h (TARGET_CPU_leon3): New define.
8288
+ (CPP_CPU32_DEFAULT_SPEC): Add leon3 support.
8289
+ (CPP_CPU_SPEC): Likewise.
8290
+ (ASM_CPU_SPEC): Likewise.
8291
+ * config/sparc/sparc.c (leon3_cost): New constant.
8292
+ (sparc_option_override): Add leon3 support.
8293
+ (mem_ref): New function.
8294
+ (sparc_gate_work_around_errata): Return true if -mfix-ut699 is enabled.
8295
+ (sparc_do_work_around_errata): Look into the instruction in the delay
8296
+ slot and adjust accordingly. Add fix for the data cache nullify issues
8297
+ of the UT699. Change insertion position for the NOP.
8298
+ * config/sparc/leon.md (leon_fpalu, leon_fpmds, write_buf): Delete.
8299
+ (leon3_load): New reservation.
8300
+ (leon_store): Bump latency to 2.
8301
+ (grfpu): New automaton.
8302
+ (grfpu_alu): New unit.
8303
+ (grfpu_ds): Likewise.
8304
+ (leon_fp_alu): Adjust.
8305
+ (leon_fp_mult): Delete.
8306
+ (leon_fp_div): Split into leon_fp_divs and leon_fp_divd.
8307
+ (leon_fp_sqrt): Split into leon_fp_sqrts and leon_fp_sqrtd.
8308
+ * config/sparc/sparc.md (cpu): Add leon3.
8309
+ * config/sparc/sync.md (atomic_exchangesi): Disable if -mfix-ut699.
8310
+ (swapsi): Likewise.
8311
+ (atomic_test_and_set): Likewise.
8312
+ (ldstub): Likewise.
8314
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
8316
+ Backport from mainline
8317
+ 2013-04-10 Steven Bosscher <steven@gcc.gnu.org>
8319
+ * config/sparc/sparc.c: Include tree-pass.h.
8320
+ (TARGET_MACHINE_DEPENDENT_REORG): Do not redefine.
8321
+ (sparc_reorg): Rename to sparc_do_work_around_errata. Move to
8322
+ head of file. Change return type. Split off gate function.
8323
+ (sparc_gate_work_around_errata): New function.
8324
+ (pass_work_around_errata): New pass definition.
8325
+ (insert_pass_work_around_errata) New pass insert definition to
8326
+ insert pass_work_around_errata just after delayed-branch scheduling.
8327
+ (sparc_option_override): Insert the pass.
8328
+ * config/sparc/t-sparc (sparc.o): Add TREE_PASS_H dependence.
8330
+2013-11-24 Sebastian Huber <sebastian.huber@embedded-brains.de>
8332
+ Backport from mainline
8333
+ 2013-05-28 Eric Botcazou <ebotcazou@adacore.com>
8335
+ * doc/invoke.texi (SPARC Options): Document -mfix-ut699.
8336
+ * builtins.c (expand_builtin_mathfn) <BUILT_IN_SQRT>: Try to widen the
8337
+ mode if the instruction isn't available in the original mode.
8338
+ * config/sparc/sparc.opt (mfix-ut699): New option.
8339
+ * config/sparc/sparc.md (muldf3_extend): Disable if -mfix-ut699.
8340
+ (divdf3): Turn into expander.
8341
+ (divdf3_nofix): New insn.
8342
+ (divdf3_fix): Likewise.
8343
+ (divsf3): Disable if -mfix-ut699.
8344
+ (sqrtdf2): Turn into expander.
8345
+ (sqrtdf2_nofix): New insn.
8346
+ (sqrtdf2_fix): Likewise.
8347
+ (sqrtsf2): Disable if -mfix-ut699.
8349
+2013-11-22 Eric Botcazou <ebotcazou@adacore.com>
8351
+ * print-rtl.c (print_rtx) <case MEM>: Output a space if no MEM_EXPR.
8353
+2013-11-21 Zhenqiang Chen <zhenqiang.chen@linaro.org>
8355
+ PR bootstrap/57683
8356
+ Backport from mainline: r197467 and r198999.
8357
+ 2013-04-03 Jeff Law <law@redhat.com>
8359
+ * Makefile.in (lra-constraints.o): Depend on $(OPTABS_H).
8360
+ (lra-eliminations.o): Likewise.
8362
+ 2013-05-16 Jeff Law <law@redhat.com>
8364
+ * Makefile.in (tree-switch-conversion.o): Depend on $(OPTABS_H).
8366
+2013-11-20 Eric Botcazou <ebotcazou@adacore.com>
8369
+ * config/sparc/sparc.c (sparc_fold_builtin) <case CODE_FOR_pdist_vis>:
8370
+ Make sure neg2_ovf is set before being used.
8372
+2013-11-20 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
8373
+ Dominik Vogt <vogt@linux.vnet.ibm.com>
8375
+ Backport from mainline
8376
+ * config/s390/s390.c (s390_canonicalize_comparison): Don't fold
8377
+ int comparisons with an out of range condition code.
8378
+ (s390_optimize_nonescaping_tx): Skip empty BBs.
8379
+ Generate the new tbegin RTX when removing the FPR clobbers (with
8381
+ (s390_expand_tbegin): Fix the retry loop counter. Copy CC to the
8382
+ result before doing the retry calculations.
8383
+ (s390_init_builtins): Make tbegin "returns_twice" and tabort
8385
+ * config/s390/s390.md (UNSPECV_TBEGIN_TDB): New constant used for
8386
+ the TDB setting part of an tbegin.
8387
+ ("tbegin_1", "tbegin_nofloat_1"): Add a set for the TDB.
8388
+ ("tx_assist"): Set unused argument to an immediate zero instead of
8389
+ loading zero into a GPR and pass it as argument.
8390
+ * config/s390/htmxlintrin.h (__TM_simple_begin, __TM_begin):
8391
+ Remove inline and related attributes.
8392
+ (__TM_nesting_depth, __TM_is_user_abort, __TM_is_named_user_abort)
8393
+ (__TM_is_illegal, __TM_is_footprint_exceeded)
8394
+ (__TM_is_nested_too_deep, __TM_is_conflict): Fix format value
8397
+2013-11-19 Uros Bizjak <ubizjak@gmail.com>
8399
+ Backport from mainline
8400
+ 2013-11-18 Uros Bizjak <ubizjak@gmail.com>
8402
+ * config/i386/i386.c (ix86_decompose_address): Use REG_P instead of
8403
+ ix86_address_subreg_operand. Move subreg checks to
8404
+ ix86_validate_address_register. Move address override check to
8405
+ ix86_legitimate_address_p.
8406
+ (ix86_validate_address_register): New function.
8407
+ (ix86_legitimate_address_p): Call ix86_validate_address_register
8408
+ to validate base and index registers. Add address override check
8409
+ from ix86_decompose_address.
8410
+ (ix86_decompose_address): Remove.
8412
+ Backport from mainline
8413
+ 2013-11-17 Uros Bizjak <ubizjak@gmail.com>
8416
+ * config/i386/i386.c (ix86_address_subreg_operand): Do not
8417
+ reject non-integer subregs.
8418
+ (ix86_decompose_address): Do not reject invalid CONST_INT RTXes.
8419
+ Move check for invalid x32 constant addresses ...
8420
+ (ix86_legitimate_address_p): ... here.
8422
+2013-11-19 Richard Biener <rguenther@suse.de>
8424
+ Backport from mainline
8425
+ 2013-11-07 Richard Biener <rguenther@suse.de>
8427
+ * tree-dfa.c (get_ref_base_and_extent): Fix casting.
8429
+2013-11-19 Richard Biener <rguenther@suse.de>
8431
+ PR tree-optimization/57517
8432
+ * tree-predcom.c (combinable_refs_p): Verify the combination
8433
+ is always executed when the refs are.
8435
+2013-11-19 Richard Biener <rguenther@suse.de>
8437
+ Backport from mainline
8438
+ 2013-11-05 Richard Biener <rguenther@suse.de>
8440
+ PR middle-end/58941
8441
+ * tree-dfa.c (get_ref_base_and_extent): Merge common code
8442
+ in MEM_REF and TARGET_MEM_REF handling. Make sure to
8443
+ process trailing array detection before diving into the
8444
+ view-converted object (and possibly apply some extra offset).
8446
+2013-11-18 Richard Biener <rguenther@suse.de>
8448
+ Backport from mainline
8449
+ 2013-10-21 Richard Biener <rguenther@suse.de>
8451
+ PR tree-optimization/58794
8452
+ * fold-const.c (operand_equal_p): Compare FIELD_DECL operand
8453
+ of COMPONENT_REFs with OEP_CONSTANT_ADDRESS_OF left in place.
8455
+ 2013-10-21 Richard Biener <rguenther@suse.de>
8457
+ PR middle-end/58742
8458
+ * fold-const.c (fold_binary_loc): Fold ((T) (X /[ex] C)) * C
8459
+ to (T) X for sign-changing conversions (or no conversion).
8461
+ 2013-11-06 Richard Biener <rguenther@suse.de>
8463
+ PR tree-optimization/58653
8464
+ * tree-predcom.c (ref_at_iteration): Rewrite to generate
8466
+ (prepare_initializers_chain): Adjust.
8468
+ PR tree-optimization/59047
8469
+ * tree-predcom.c (ref_at_iteration): Handle bitfield accesses
8472
+ 2013-10-15 Richard Biener <rguenther@suse.de>
8474
+ PR tree-optimization/58143
8475
+ * tree-ssa-loop-im.c (arith_code_with_undefined_signed_overflow):
8477
+ (rewrite_to_defined_overflow): Likewise.
8478
+ (move_computations_dom_walker::before_dom): Rewrite stmts
8479
+ with undefined signed overflow that are not always executed
8480
+ into unsigned arithmetic.
8482
+2013-11-14 Uros Bizjak <ubizjak@gmail.com>
8484
+ Backport from mainline
8485
+ 2013-11-10 Uros Bizjak <ubizjak@gmail.com>
8487
+ * mode-switching.c (optimize_mode_switching): Mark block as
8488
+ nontransparent, if last_mode at block exit is different from no_mode.
8490
+ Backport from mainline
8491
+ 2013-11-06 Uros Bizjak <ubizjak@gmail.com>
8494
+ * config/i386/i386.c (ix86_avx_u128_mode_needed): Require
8495
+ AVX_U128_DIRTY mode for call_insn RTXes that use AVX256 registers.
8496
+ (ix86_avx_u128_mode_needed): Return AVX_U128_DIRTY mode for call_insn
8497
+ RTXes that return in AVX256 register.
8499
+2013-11-14 Jakub Jelinek <jakub@redhat.com>
8500
+ Uros Bizjak <ubizjak@gmail.com>
8503
+ * config/i386/i386.md (*anddi_2): Only allow CCZmode if
8504
+ operands[2] satisfies_constraint_Z that might have bit 31 set.
8506
+2013-11-12 H.J. Lu <hongjiu.lu@intel.com>
8508
+ Backported from mainline
8509
+ 2013-11-12 H.J. Lu <hongjiu.lu@intel.com>
8512
+ * config/i386/i386.c (initial_ix86_tune_features): Set
8513
+ X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL and
8514
+ X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL for m_HASWELL.
8516
+2013-11-11 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
8518
+ Backported from mainline
8519
+ 2013-10-30 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
8522
+ * config/arm/arm.c (arm_expand_epilogue_apcs_frame): Emit blockage
8524
+2013-11-11 Jakub Jelinek <jakub@redhat.com>
8526
+ Backported from mainline
8527
+ 2013-11-06 Jakub Jelinek <jakub@redhat.com>
8529
+ PR middle-end/58970
8530
+ * expr.c (get_bit_range): Handle *offset == NULL_TREE.
8531
+ (expand_assignment): If *bitpos is negative, set *offset
8532
+ and adjust *bitpos, so that it is not negative.
8534
+ 2013-11-05 Jakub Jelinek <jakub@redhat.com>
8536
+ PR rtl-optimization/58997
8537
+ * loop-iv.c (iv_subreg): For IV_UNKNOWN_EXTEND, expect
8538
+ get_iv_value to be in iv->mode rather than iv->extend_mode.
8539
+ (iv_extend): Likewise. Otherwise, if iv->extend != extend,
8540
+ use lowpart_subreg on get_iv_value before calling simplify_gen_unary.
8541
+ * loop-unswitch.c (may_unswitch_on): Make sure op[i] is in the right
8544
+2013-11-10 Karlson2k <k2k@narod.ru>
8545
+ Kai Tietz <ktietz@redhat.com>
8549
+ * configure.ac: Adding for exported symbols check
8550
+ and for rdynamic-check executable-extension.
8551
+ * configure: Regenerated.
8553
+2013-11-07 H.J. Lu <hongjiu.lu@intel.com>
8556
+ * config/i386/i386.md (push peepholer/splitter): Use Pmode
8557
+ with stack_pointer_rtx.
8559
+2013-11-05 Uros Bizjak <ubizjak@gmail.com>
8561
+ * config/i386/t-rtems (MULTILIB_MATCHES): Fix option typos.
8563
+2013-11-05 Jakub Jelinek <jakub@redhat.com>
8565
+ PR tree-optimization/58984
8566
+ * ipa-prop.c (ipa_load_from_parm_agg_1): Add SIZE_P argument,
8567
+ set *SIZE_P if non-NULL on success.
8568
+ (ipa_load_from_parm_agg, ipa_analyze_indirect_call_uses): Adjust
8570
+ (ipcp_transform_function): Likewise. Punt if size of access
8571
+ is different from TYPE_SIZE on v->value's type.
8573
+2013-11-03 H.J. Lu <hongjiu.lu@intel.com>
8575
+ Backport from mainline
8576
+ 2013-10-12 H.J. Lu <hongjiu.lu@intel.com>
8579
+ * config/i386/i386.c (ix86_copy_addr_to_reg): New function.
8580
+ (ix86_expand_movmem): Replace copy_addr_to_reg with
8581
+ ix86_copy_addr_to_reg.
8582
+ (ix86_expand_setmem): Likewise.
8584
+2013-10-29 Uros Bizjak <ubizjak@gmail.com>
8586
+ Backport from mainline
8587
+ 2013-08-08 Richard Sandiford <rdsandiford@googlemail.com>
8589
+ PR rtl-optimization/58079
8590
+ * combine.c (combine_simplify_rtx): Avoid using SUBST if
8591
+ simplify_comparison has widened a comparison with an integer.
8593
+2013-10-29 Martin Jambor <mjambor@suse.cz>
8595
+ PR middle-end/58789
8596
+ Backport from mainline
8597
+ 2013-05-09 Martin Jambor <mjambor@suse.cz>
8600
+ * gimple-fold.c (canonicalize_constructor_val): Call
8601
+ cgraph_get_create_real_symbol_node instead of cgraph_get_create_node.
8603
+ Backport from mainline
8604
+ 2013-03-16 Jan Hubicka <jh@suse.cz>
8606
+ * cgraph.h (cgraph_get_create_real_symbol_node): Declare.
8607
+ * cgraph.c (cgraph_get_create_real_symbol_node): New function.
8608
+ * cgrpahbuild.c: Use cgraph_get_create_real_symbol_node instead
8609
+ of cgraph_get_create_node.
8610
+ * ipa-prop.c (ipa_make_edge_direct_to_target): Likewise.
8612
+2013-10-28 Tom de Vries <tom@codesourcery.com>
8614
+ * cfgexpand.c (gimple_expand_cfg): Remove test for parm_birth_insn.
8615
+ Don't commit insertions after NOTE_INSN_FUNCTION_BEG.
8617
+2013-10-26 Uros Bizjak <ubizjak@gmail.com>
8619
+ Backport from mainline
8620
+ 2013-10-22 Uros Bizjak <ubizjak@gmail.com>
8623
+ * config/i386/i386.c (put_condition_code) <case GTU, case LEU>:
8624
+ Remove CCCmode handling.
8625
+ <case LTU>: Return 'c' suffix for CCCmode.
8626
+ <case GEU>: Return 'nc' suffix for CCCmode.
8627
+ (ix86_cc_mode) <case GTU, case LEU>: Do not generate overflow checks.
8628
+ * config/i386/i386.md (*sub<mode>3_cconly_overflow): Remove.
8629
+ (*sub<mode>3_cc_overflow): Ditto.
8630
+ (*subsi3_zext_cc_overflow): Ditto.
8632
+2013-10-26 Uros Bizjak <ubizjak@gmail.com>
8634
+ Backport from mainline
8635
+ 2013-10-19 Uros Bizjak <ubizjak@gmail.com>
8638
+ * config/i386/i386.c (ix86_function_value_regno): Add DX_REG,
8639
+ ST1_REG and XMM1_REG for 32bit and 64bit targets. Also add DI_REG
8640
+ and SI_REG for 64bit SYSV ABI targets.
8642
+2013-08-25 Richard Henderson <rth@twiddle.net>
8645
+ * optabs.c (maybe_emit_atomic_exchange): Use create_input_operand
8646
+ instead of create_convert_operand_to.
8647
+ (maybe_emit_sync_lock_test_and_set): Likewise.
8648
+ (expand_atomic_compare_and_swap): Likewise.
8649
+ (maybe_emit_compare_and_swap_exchange_loop): Don't convert_modes.
8651
+2013-10-25 Eric Botcazou <ebotcazou@adacore.com>
8653
+ PR rtl-optimization/58831
8654
+ * alias.c (init_alias_analysis): At the beginning of each iteration, set
8655
+ the reg_seen[N] bit if static_reg_base_value[N] is non-null.
8657
+2013-10-25 Eric Botcazou <ebotcazou@adacore.com>
8659
+ * recog.c (search_ofs): New static variable moved from...
8660
+ (peep2_find_free_register): ...here.
8661
+ (peephole2_optimize): Initialize it.
8663
+2013-10-24 David Edelsohn <dje.gcc@gmail.com>
8665
+ Backport from mainline
8666
+ 2013-10-23 David Edelsohn <dje.gcc@gmail.com>
8669
+ * config/rs6000/rs6000.md (mulsi3_internal1 and splitter): Add
8670
+ TARGET_32BIT final condition.
8671
+ (mulsi3_internal2 and splitter): Same.
8673
+2013-10-23 Tom de Vries <tom@codesourcery.com>
8675
+ PR tree-optimization/58805
8676
+ * tree-ssa-tail-merge.c (stmt_local_def): Add gimple_vdef check.
8678
+2013-10-23 Richard Biener <rguenther@suse.de>
8680
+ Backport from mainline
8681
+ 2013-06-24 Richard Biener <rguenther@suse.de>
8683
+ PR tree-optimization/57488
8684
+ * tree-ssa-pre.c (insert): Clear NEW sets before each iteration.
8686
+2013-10-16 Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
8688
+ Backport from mainline
8689
+ 2013-10-16 Ganesh Gopalasubramanian
8690
+ <Ganesh.Gopalasubramanian@amd.com>
8692
+ * config/i386/i386.c (ix86_option_override_internal): Enable FMA4
8695
2013-10-16 Release Manager
8697
* GCC 4.8.2 released.
8698
@@ -639,7 +2392,7 @@
8699
2013-07-31 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
8701
Backport from mainline
8702
- 2013-03-27 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
8703
+ 2013-03-27 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
8705
* config/s390/s390.h (TARGET_FLT_EVAL_METHOD): Define.
8707
Index: gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c
8708
===================================================================
8709
--- a/src/gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c (.../tags/gcc_4_8_2_release)
8710
+++ b/src/gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c (.../branches/gcc-4_8-branch)
8712
+/* { dg-do compile } */
8713
+/* { dg-require-effective-target arm_thumb1_ok } */
8714
+/* { dg-options "-mthumb -fpic -msingle-pic-base" } */
8723
Index: gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c
8724
===================================================================
8725
--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c (.../tags/gcc_4_8_2_release)
8726
+++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c (.../branches/gcc-4_8-branch)
8728
+/* Test the `vst1Q_laneu64' ARM Neon intrinsic. */
8730
+/* Detect ICE in the case of unaligned memory address. */
8732
+/* { dg-do compile } */
8733
+/* { dg-require-effective-target arm_neon_ok } */
8734
+/* { dg-add-options arm_neon } */
8736
+#include "arm_neon.h"
8738
+unsigned char dummy_store[1000];
8743
+ uint8x16_t vdata = vld1q_u8 (addr);
8744
+ vst1q_lane_u64 ((uint64_t*) &dummy_store, vreinterpretq_u64_u8 (vdata), 0);
8748
+bar (uint64x2_t vdata)
8750
+ vdata = vld1q_lane_u64 ((uint64_t*) &dummy_store, vdata, 0);
8751
+ return vgetq_lane_u64 (vdata, 0);
8753
Index: gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c
8754
===================================================================
8755
--- a/src/gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c (.../tags/gcc_4_8_2_release)
8756
+++ b/src/gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c (.../branches/gcc-4_8-branch)
8758
+/* { dg-do compile } */
8759
+/* { dg-require-effective-target arm_thumb1_ok } */
8760
+/* { dg-options "-mthumb -fpic -mpic-register=9" } */
8769
Index: gcc/testsuite/gcc.target/arm/require-pic-register-loc.c
8770
===================================================================
8771
--- a/src/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c (.../tags/gcc_4_8_2_release)
8772
+++ b/src/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c (.../branches/gcc-4_8-branch)
8774
+/* { dg-do compile } */
8775
+/* { dg-options "-g -fPIC" } */
8778
+void a (void *x) { }
8782
+main (int argc) /* line 9. */
8784
+ if (argc == 12345) /* line 11. */
8794
+/* { dg-final { scan-assembler-not "\.loc 1 7 0" } } */
8795
+/* { dg-final { scan-assembler-not "\.loc 1 8 0" } } */
8796
+/* { dg-final { scan-assembler-not "\.loc 1 9 0" } } */
8798
+/* The loc at the start of the prologue. */
8799
+/* { dg-final { scan-assembler-times "\.loc 1 10 0" 1 } } */
8801
+/* The loc at the end of the prologue, with the first user line. */
8802
+/* { dg-final { scan-assembler-times "\.loc 1 11 0" 1 } } */
8803
Index: gcc/testsuite/gcc.target/arm/vrinta-ce.c
8804
===================================================================
8805
--- a/src/gcc/testsuite/gcc.target/arm/vrinta-ce.c (.../tags/gcc_4_8_2_release)
8806
+++ b/src/gcc/testsuite/gcc.target/arm/vrinta-ce.c (.../branches/gcc-4_8-branch)
8808
+/* { dg-do compile } */
8809
+/* { dg-require-effective-target arm_v8_vfp_ok } */
8810
+/* { dg-options "-O2 -marm -march=armv8-a" } */
8811
+/* { dg-add-options arm_v8_vfp } */
8813
+double foo (double a)
8816
+ return __builtin_round (a);
8821
+/* { dg-final { scan-assembler-times "vrinta.f64\td\[0-9\]+" 1 } } */
8823
Index: gcc/testsuite/gcc.target/arm/pr54300.C
8824
===================================================================
8825
--- a/src/gcc/testsuite/gcc.target/arm/pr54300.C (.../tags/gcc_4_8_2_release)
8826
+++ b/src/gcc/testsuite/gcc.target/arm/pr54300.C (.../branches/gcc-4_8-branch)
8828
+/* { dg-do run } */
8829
+/* { dg-require-effective-target arm_neon } */
8830
+/* { dg-options "-O2" } */
8831
+/* { dg-add-options arm_neon } */
8833
+#include <arm_neon.h>
8834
+#include <stdlib.h>
8836
+struct __attribute__ ((aligned(8))) _v16u8_ {
8838
+ _v16u8_( const int16x8_t &src) { val = vreinterpretq_u8_s16(src); }
8839
+ operator int16x8_t () const { return vreinterpretq_s16_u8(val); }
8841
+typedef struct _v16u8_ v16u8;
8843
+struct __attribute__ ((aligned(4))) _v8u8_ {
8845
+ _v8u8_( const uint8x8_t &src) { val = src; }
8846
+ operator int16x4_t () const { return vreinterpret_s16_u8(val); }
8848
+typedef struct _v8u8_ v8u8;
8850
+typedef v16u8 v8i16;
8851
+typedef int32x4_t v4i32;
8852
+typedef const short cv1i16;
8853
+typedef const unsigned char cv1u8;
8854
+typedef const v8i16 cv8i16;
8856
+static inline __attribute__((always_inline)) v8u8 zero_64(){ return vdup_n_u8( 0 ); }
8858
+static inline __attribute__((always_inline)) v8i16 loadlo_8i16( cv8i16* p ){
8859
+ return vcombine_s16( vld1_s16( (cv1i16 *)p ), zero_64() );
8861
+static inline __attribute__((always_inline)) v8i16 _loadlo_8i16( cv8i16* p, int offset ){
8862
+ return loadlo_8i16( (cv8i16*)(&((cv1u8*)p)[offset]) );
8865
+void __attribute__((noinline))
8866
+test(unsigned short *_Inp, int32_t *_Out,
8867
+ unsigned int s1v, unsigned int dv0,
8868
+ unsigned int smask_v)
8870
+ int32x4_t c = vdupq_n_s32(0);
8872
+ for(unsigned int sv=0 ; sv!=dv0 ; sv=(sv+s1v)&smask_v )
8875
+ s = vmovl_s16( vget_low_s16( _loadlo_8i16( (cv8i16*) _Inp, sv ) ) );
8876
+ c = vaddq_s32( c, s );
8878
+ vst1q_s32( _Out, c );
8883
+ unsigned short a[4] = {1, 2, 3, 4};
8884
+ int32_t b[4] = {0, 0, 0, 0};
8885
+ test(a, b, 1, 1, ~0);
8886
+ if (b[0] != 1 || b[1] != 2 || b[2] != 3 || b[3] != 4)
8889
Index: gcc/testsuite/gcc.target/arm/pr59826.c
8890
===================================================================
8891
--- a/src/gcc/testsuite/gcc.target/arm/pr59826.c (.../tags/gcc_4_8_2_release)
8892
+++ b/src/gcc/testsuite/gcc.target/arm/pr59826.c (.../branches/gcc-4_8-branch)
8894
+/* { dg-do compile } */
8895
+/* { dg-options "-mthumb -mcpu=cortex-m4 -fprefetch-loop-arrays -O2" } */
8897
+typedef struct genxWriter_rec * genxWriter;
8898
+typedef unsigned char * utf8;
8899
+typedef const unsigned char * constUtf8;
8901
+int genxScrubText(genxWriter w, constUtf8 in, utf8 out)
8904
+ constUtf8 last = in;
8908
+ int c = genxNextUnicodeChar(&in);
8916
+ if (!isXMLChar(w, c))
8929
Index: gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c
8930
===================================================================
8931
--- a/src/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c (.../tags/gcc_4_8_2_release)
8932
+++ b/src/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c (.../branches/gcc-4_8-branch)
8934
+/* Test accuracy of long double division (glibc bug 15396). */
8935
+/* { dg-do run { target powerpc*-*-linux* powerpc*-*-darwin* powerpc*-*-aix* rs6000-*-* } } */
8936
+/* { dg-options "-mlong-double-128" } */
8938
+extern void exit (int);
8939
+extern void abort (void);
8941
+volatile long double a = 0x1p-1024L;
8942
+volatile long double b = 0x3p-53L;
8943
+volatile long double r;
8944
+volatile long double expected = 0x1.55555555555555555555555555p-973L;
8950
+ /* Allow error up to 2ulp. */
8951
+ if (__builtin_fabsl (r - expected) > 0x1p-1073L)
8955
Index: gcc/testsuite/gcc.target/microblaze/others/mem_reload.c
8956
===================================================================
8957
--- a/src/gcc/testsuite/gcc.target/microblaze/others/mem_reload.c (.../tags/gcc_4_8_2_release)
8958
+++ b/src/gcc/testsuite/gcc.target/microblaze/others/mem_reload.c (.../branches/gcc-4_8-branch)
8960
+/* { dg-options "-O2 -fPIC" } */
8962
+typedef struct test_struct
8964
+ unsigned long long h[8];
8965
+ unsigned long long Nl,Nh;
8967
+ unsigned long long d[16];
8968
+ unsigned char p[(16*8)];
8970
+ unsigned int num,md_len;
8973
+static const unsigned long long K512[12] = {
8974
+ 0x428a2f98d728ae22,0x7137449123ef65cd,
8975
+ 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc,
8976
+ 0x3956c25bf348b538,0x59f111f1b605d019,
8977
+ 0x923f82a4af194f9b,0xab1c5ed5da6d8118,
8978
+ 0xd807aa98a3030242,0x12835b0145706fbe,
8979
+ 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2};
8981
+#define ROTR(x,s) (((x)>>s) | (x)<<(64-s))
8982
+#define Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
8983
+#define Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41))
8984
+#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z)))
8985
+#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
8987
+#define ROUND_00_15(i,a,b,c,d,e,f,g,h) do { \
8988
+ T1 += h + Sigma1(e) + Ch(e,f,g) + K512[i]; \
8989
+ h = Sigma0(a) + Maj(a,b,c); \
8990
+ d += T1; h += T1; } while (0)
8992
+#define ROUND_16_80(i,a,b,c,d,e,f,g,h,X) do { \
8993
+ T1 = X[(i)&0x0f] += s0 + s1 + X[(i+9)&0x0f]; \
8994
+ ROUND_00_15(i,a,b,c,d,e,f,g,h); } while (0)
8996
+static void testfunc1 (TEST_STRUCT *ctx, const void *in, unsigned int num)
8998
+ const unsigned long long *W=in;
8999
+ unsigned long long a,b,c,d,e,f,g,h,s0,s1,T1;
9000
+ unsigned long long X[16];
9005
+ T1 = X[0] = W[0]; ROUND_00_15(0,a,b,c,d,e,f,g,h);
9006
+ T1 = X[1] = W[1]; ROUND_00_15(1,h,a,b,c,d,e,f,g);
9007
+ T1 = X[2] = W[2]; ROUND_00_15(2,g,h,a,b,c,d,e,f);
9008
+ T1 = X[3] = W[3]; ROUND_00_15(3,f,g,h,a,b,c,d,e);
9009
+ T1 = X[4] = W[4]; ROUND_00_15(4,e,f,g,h,a,b,c,d);
9010
+ T1 = X[5] = W[5]; ROUND_00_15(5,d,e,f,g,h,a,b,c);
9011
+ T1 = X[6] = W[6]; ROUND_00_15(6,c,d,e,f,g,h,a,b);
9012
+ T1 = X[7] = W[7]; ROUND_00_15(7,b,c,d,e,f,g,h,a);
9013
+ T1 = X[8] = W[8]; ROUND_00_15(8,a,b,c,d,e,f,g,h);
9014
+ T1 = X[9] = W[9]; ROUND_00_15(9,h,a,b,c,d,e,f,g);
9016
+ for (i=16;i<80;i+=8)
9018
+ ROUND_16_80(i+0,a,b,c,d,e,f,g,h,X);
9021
+ ctx->h[4] += e; ctx->h[5] += f; ctx->h[6] += g; ctx->h[7] += h;
9025
+int testfunc2 (TEST_STRUCT *c, const void *_data, unsigned int len)
9027
+ const unsigned char *data=(const unsigned char *)_data;
9029
+ unsigned char *p=(unsigned char *)c->u.p;
9031
+ testfunc1 (c,p,0);
9032
+ testfunc1 (c,data,len/sizeof(c->u));
9034
Index: gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c
9035
===================================================================
9036
--- a/src/gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c (.../tags/gcc_4_8_2_release)
9037
+++ b/src/gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c (.../branches/gcc-4_8-branch)
9039
+/* { dg-do compile } */
9043
+ __builtin_trap ();
9046
+/* { dg-final { scan-assembler "brki\tr0,-1" } } */
9047
\ No newline at end of file
9048
Index: gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c
9049
===================================================================
9050
--- a/src/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c (.../tags/gcc_4_8_2_release)
9051
+++ b/src/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c (.../branches/gcc-4_8-branch)
9053
+/* { dg-options "-O3 -mcpu=v6.00.a -mhard-float" } */
9055
+void float_func(float f1, float f2, float f3)
9057
+ /* { dg-final { scan-assembler "fcmp\.eq\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */
9058
+ /* { dg-final { scan-assembler "fcmp\.le\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */
9059
+ if(f1==f2 && f1<=f3)
9060
+ print ("f1 eq f2 && f1 le f3");
9062
Index: gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c
9063
===================================================================
9064
--- a/src/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c (.../tags/gcc_4_8_2_release)
9065
+++ b/src/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c (.../branches/gcc-4_8-branch)
9067
/* { dg-do compile } */
9068
/* { dg-options "-O2" } */
9070
-#include "../../../config/aarch64/arm_neon.h"
9071
+#include <arm_neon.h>
9073
+/* Used to force a variable to a SIMD register. */
9074
+#define force_simd(V1) asm volatile ("mov %d0, %1.d[0]" \
9077
+ : /* No clobbers */);
9079
/* { dg-final { scan-assembler-times "\\tadd\\tx\[0-9\]+" 2 } } */
9084
test_vceqd_s64 (int64x1_t a, int64x1_t b)
9086
- return vceqd_s64 (a, b);
9090
+ res = vceqd_s64 (a, b);
9095
/* { dg-final { scan-assembler-times "\\tcmeq\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
9098
test_vceqzd_s64 (int64x1_t a)
9100
- return vceqzd_s64 (a);
9103
+ res = vceqzd_s64 (a);
9108
/* { dg-final { scan-assembler-times "\\tcmge\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
9111
test_vcged_s64 (int64x1_t a, int64x1_t b)
9113
- return vcged_s64 (a, b);
9117
+ res = vcged_s64 (a, b);
9123
test_vcled_s64 (int64x1_t a, int64x1_t b)
9125
- return vcled_s64 (a, b);
9129
+ res = vcled_s64 (a, b);
9134
-/* { dg-final { scan-assembler-times "\\tcmge\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
9135
+/* Idiom recognition will cause this testcase not to generate
9136
+ the expected cmge instruction, so do not check for it. */
9139
test_vcgezd_s64 (int64x1_t a)
9141
- return vcgezd_s64 (a);
9144
+ res = vcgezd_s64 (a);
9149
/* { dg-final { scan-assembler-times "\\tcmhs\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
9152
test_vcged_u64 (uint64x1_t a, uint64x1_t b)
9154
- return vcged_u64 (a, b);
9158
+ res = vcged_u64 (a, b);
9163
/* { dg-final { scan-assembler-times "\\tcmgt\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
9164
@@ -77,13 +112,23 @@
9166
test_vcgtd_s64 (int64x1_t a, int64x1_t b)
9168
- return vcgtd_s64 (a, b);
9172
+ res = vcgtd_s64 (a, b);
9178
test_vcltd_s64 (int64x1_t a, int64x1_t b)
9180
- return vcltd_s64 (a, b);
9184
+ res = vcltd_s64 (a, b);
9189
/* { dg-final { scan-assembler-times "\\tcmgt\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
9192
test_vcgtzd_s64 (int64x1_t a)
9194
- return vcgtzd_s64 (a);
9197
+ res = vcgtzd_s64 (a);
9202
/* { dg-final { scan-assembler-times "\\tcmhi\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
9205
test_vcgtd_u64 (uint64x1_t a, uint64x1_t b)
9207
- return vcgtd_u64 (a, b);
9211
+ res = vcgtd_u64 (a, b);
9216
/* { dg-final { scan-assembler-times "\\tcmle\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
9217
@@ -107,15 +161,24 @@
9219
test_vclezd_s64 (int64x1_t a)
9221
- return vclezd_s64 (a);
9224
+ res = vclezd_s64 (a);
9229
-/* { dg-final { scan-assembler-times "\\tcmlt\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
9230
+/* Idiom recognition will cause this testcase not to generate
9231
+ the expected cmlt instruction, so do not check for it. */
9234
test_vcltzd_s64 (int64x1_t a)
9236
- return vcltzd_s64 (a);
9239
+ res = vcltzd_s64 (a);
9244
/* { dg-final { scan-assembler-times "\\tdup\\tb\[0-9\]+, v\[0-9\]+\.b" 2 } } */
9245
@@ -179,13 +242,23 @@
9247
test_vtst_s64 (int64x1_t a, int64x1_t b)
9249
- return vtstd_s64 (a, b);
9253
+ res = vtstd_s64 (a, b);
9259
test_vtst_u64 (uint64x1_t a, uint64x1_t b)
9261
- return vtstd_u64 (a, b);
9265
+ res = vtstd_s64 (a, b);
9270
/* { dg-final { scan-assembler-times "\\taddp\\td\[0-9\]+, v\[0-9\]+\.2d" 1 } } */
9271
@@ -722,8 +795,11 @@
9272
return vrshld_u64 (a, b);
9275
-/* { dg-final { scan-assembler-times "\\tasr\\tx\[0-9\]+" 1 } } */
9276
+/* Other intrinsics can generate an asr instruction (vcltzd, vcgezd),
9277
+ so we cannot check scan-assembler-times. */
9279
+/* { dg-final { scan-assembler "\\tasr\\tx\[0-9\]+" } } */
9282
test_vshrd_n_s64 (int64x1_t a)
9284
Index: gcc/testsuite/gcc.target/i386/pr59405.c
9285
===================================================================
9286
--- a/src/gcc/testsuite/gcc.target/i386/pr59405.c (.../tags/gcc_4_8_2_release)
9287
+++ b/src/gcc/testsuite/gcc.target/i386/pr59405.c (.../branches/gcc-4_8-branch)
9289
+/* { dg-do run } */
9290
+/* { dg-options "-mmmx -mfpmath=387" } */
9292
+#include "mmx-check.h"
9294
+#include <mmintrin.h>
9296
+typedef float float32x2_t __attribute__ ((vector_size (8)));
9299
+foo32x2_be (float32x2_t x)
9308
+ float32x2_t b = { 0.0f, 1.0f };
9310
+ if (foo32x2_be (b) != 1.0f)
9313
Index: gcc/testsuite/gcc.target/i386/pr59794-5.c
9314
===================================================================
9315
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-5.c (.../tags/gcc_4_8_2_release)
9316
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-5.c (.../branches/gcc-4_8-branch)
9318
+/* PR target/59794 */
9319
+/* { dg-do compile { target { ia32 } } } */
9320
+/* { dg-options "-O2 -mno-sse" } */
9321
+/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
9323
+typedef int __v4si __attribute__ ((__vector_size__ (16)));
9329
+{ /* { dg-warning "SSE vector return without SSE enabled changes the ABI" } */
9332
Index: gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c
9333
===================================================================
9334
--- a/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c (.../tags/gcc_4_8_2_release)
9335
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c (.../branches/gcc-4_8-branch)
9337
/* { dg-do compile { target lp64 } } */
9338
-/* { dg-options "-O2 -mavx -mabi=ms -mtune=generic -dp" } */
9339
+/* { dg-options "-O2 -mavx -mabi=ms -maccumulate-outgoing-args -dp" } */
9341
typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));
9343
Index: gcc/testsuite/gcc.target/i386/pr54694.c
9344
===================================================================
9345
--- a/src/gcc/testsuite/gcc.target/i386/pr54694.c (.../tags/gcc_4_8_2_release)
9346
+++ b/src/gcc/testsuite/gcc.target/i386/pr54694.c (.../branches/gcc-4_8-branch)
9348
+/* { dg-do compile } */
9349
+/* { dg-options "-O" } */
9351
+register void *hfp __asm__("%ebp"); /* { dg-message "note: for" } */
9353
+extern void g(void *);
9355
+void f(int x) /* { dg-error "frame pointer required" } */
9357
+ g(__builtin_alloca(x));
9359
Index: gcc/testsuite/gcc.target/i386/pr59470.c
9360
===================================================================
9361
--- a/src/gcc/testsuite/gcc.target/i386/pr59470.c (.../tags/gcc_4_8_2_release)
9362
+++ b/src/gcc/testsuite/gcc.target/i386/pr59470.c (.../branches/gcc-4_8-branch)
9364
+/* PR middle-end/58956 */
9365
+/* PR middle-end/59470 */
9366
+/* { dg-do run } */
9367
+/* { dg-options "-O2" } */
9375
+ asm ("{movl $6, (%2); movl $1, %0|mov dword ptr [%2], 6; mov %0, 1}"
9376
+ : "=r" (d[c]) : "rm" (b), "r" (&a) : "memory");
9377
+ if (d[0] != 1 || d[6] != 0)
9378
+ __builtin_abort ();
9381
Index: gcc/testsuite/gcc.target/i386/pr59034-1.c
9382
===================================================================
9383
--- a/src/gcc/testsuite/gcc.target/i386/pr59034-1.c (.../tags/gcc_4_8_2_release)
9384
+++ b/src/gcc/testsuite/gcc.target/i386/pr59034-1.c (.../branches/gcc-4_8-branch)
9386
+/* { dg-do compile { target { ! { ia32 } } } } */
9387
+/* { dg-require-effective-target maybe_x32 } */
9388
+/* { dg-options "-O -mx32 -mtune=corei7 -maddress-mode=short" } */
9390
+extern int foo(int, ...);
9392
+ long double l = 1.2345E6;
9396
Index: gcc/testsuite/gcc.target/i386/pr58690.c
9397
===================================================================
9398
--- a/src/gcc/testsuite/gcc.target/i386/pr58690.c (.../tags/gcc_4_8_2_release)
9399
+++ b/src/gcc/testsuite/gcc.target/i386/pr58690.c (.../branches/gcc-4_8-branch)
9401
+/* { dg-do compile { target { ! { ia32 } } } } */
9402
+/* { dg-require-effective-target maybe_x32 } */
9403
+/* { dg-options "-O2 -mx32 -maddress-mode=short" } */
9409
+extern __thread struct gomp_thread gomp_tls_data;
9413
+ __builtin_memset (&gomp_tls_data, '\0', sizeof (gomp_tls_data));
9415
Index: gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c
9416
===================================================================
9417
--- a/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c (.../tags/gcc_4_8_2_release)
9418
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c (.../branches/gcc-4_8-branch)
9423
- double e [4] __attribute__ ((aligned (8))) = {0.0};
9424
+ double e [4] __attribute__ ((aligned (32))) = {0.0};
9426
u.x = _mm256_set_pd (39578.467285, 7856.342941, 85632.783567, 47563.234215);
9428
Index: gcc/testsuite/gcc.target/i386/pr9771-1.c
9429
===================================================================
9430
--- a/src/gcc/testsuite/gcc.target/i386/pr9771-1.c (.../tags/gcc_4_8_2_release)
9431
+++ b/src/gcc/testsuite/gcc.target/i386/pr9771-1.c (.../branches/gcc-4_8-branch)
9437
+/* main usually performs dynamic realignment of the stack in case
9438
+ _start would fail to properly align the stack, but for dynamic
9439
+ stack realignment we need frame pointer which is incompatible
9440
+ with -ffixed-ebp and the global register var. So, cheat here
9441
+ and hide from the compiler that main is really main. */
9442
+#define ASMNAME(cname) ASMNAME2 (__USER_LABEL_PREFIX__, cname)
9443
+#define ASMNAME2(prefix, cname) STRING (prefix) cname
9444
+#define STRING(x) #x
9445
+int real_main() __asm (ASMNAME ("main"));
9451
Index: gcc/testsuite/gcc.target/i386/pr59794-2.c
9452
===================================================================
9453
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-2.c (.../tags/gcc_4_8_2_release)
9454
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-2.c (.../branches/gcc-4_8-branch)
9456
+/* PR target/59794 */
9457
+/* { dg-prune-output "ABI for passing parameters" } */
9458
+/* { dg-options "-O2 -mno-sse" } */
9459
+/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
9461
+typedef double __v2df __attribute__ ((__vector_size__ (16)));
9465
+extern void bar (__v2df);
9469
+ bar (x); /* { dg-message "warning: SSE vector argument without SSE enabled changes the ABI" } */
9471
Index: gcc/testsuite/gcc.target/i386/pr57003.c
9472
===================================================================
9473
--- a/src/gcc/testsuite/gcc.target/i386/pr57003.c (.../tags/gcc_4_8_2_release)
9474
+++ b/src/gcc/testsuite/gcc.target/i386/pr57003.c (.../branches/gcc-4_8-branch)
9476
/* PR rtl-optimization/57003 */
9478
-/* { dg-options "-O2" } */
9479
+/* { dg-options "-O2 -maccumulate-outgoing-args" } */
9482
unsigned short *b, *c, *d;
9483
Index: gcc/testsuite/gcc.target/i386/pr59929.c
9484
===================================================================
9485
--- a/src/gcc/testsuite/gcc.target/i386/pr59929.c (.../tags/gcc_4_8_2_release)
9486
+++ b/src/gcc/testsuite/gcc.target/i386/pr59929.c (.../branches/gcc-4_8-branch)
9488
+/* { dg-do run } */
9489
+/* { dg-options "-O0 -mno-accumulate-outgoing-args" } */
9490
+/* { dg-options "-O0 -mno-accumulate-outgoing-args -mx32 -maddress-mode=short" { target x32 } } */
9493
+__attribute__ ((noinline))
9494
+test (float x1, float x2, float x3, float x4, float x5, float x6,
9495
+ float x7, float x8, float x9, float x10, float x11, float x12,
9496
+ float x13, float x14, float x15, float x16)
9514
+ __builtin_abort ();
9517
+float x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13,
9539
+ test (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13,
9543
Index: gcc/testsuite/gcc.target/i386/pr59794-6.c
9544
===================================================================
9545
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-6.c (.../tags/gcc_4_8_2_release)
9546
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-6.c (.../branches/gcc-4_8-branch)
9548
+/* PR target/59794 */
9549
+/* { dg-do compile { target { ! ia32 } } } */
9550
+/* { dg-options "-O2 -mno-sse" } */
9551
+/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
9553
+typedef int __v4si __attribute__ ((__vector_size__ (16)));
9559
+{ /* { dg-error "SSE register return with SSE disabled" } */
9562
Index: gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c
9563
===================================================================
9564
--- a/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c (.../tags/gcc_4_8_2_release)
9565
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c (.../branches/gcc-4_8-branch)
9567
/* { dg-do compile { target lp64 } } */
9568
-/* { dg-options "-O0 -mavx -mabi=ms -mtune=generic -dp" } */
9569
+/* { dg-options "-O0 -mavx -mabi=ms -maccumulate-outgoing-args -dp" } */
9571
typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));
9573
Index: gcc/testsuite/gcc.target/i386/sse2-movapd-1.c
9574
===================================================================
9575
--- a/src/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c (.../tags/gcc_4_8_2_release)
9576
+++ b/src/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c (.../branches/gcc-4_8-branch)
9581
- double e[2] __attribute__ ((aligned (8))) = {2134.3343,1234.635654};
9582
+ double e[2] __attribute__ ((aligned (16))) = {2134.3343,1234.635654};
9586
Index: gcc/testsuite/gcc.target/i386/pr59021.c
9587
===================================================================
9588
--- a/src/gcc/testsuite/gcc.target/i386/pr59021.c (.../tags/gcc_4_8_2_release)
9589
+++ b/src/gcc/testsuite/gcc.target/i386/pr59021.c (.../branches/gcc-4_8-branch)
9591
+/* { dg-do compile } */
9592
+/* { dg-options "-O2 -mavx -mvzeroupper" } */
9594
+extern void abort (void);
9602
+typedef double v4df __attribute__ ((vector_size (32)));
9604
+extern int foo (v4df, int i1, int i2, int i3, int i4, int i5, struct S s);
9606
+void bar (v4df v, struct S s)
9608
+ int r = foo (v, 1, 2, 3, 4, 5, s);
9613
+/* { dg-final { scan-assembler-not "vzeroupper" } } */
9614
Index: gcc/testsuite/gcc.target/i386/pr59034-2.c
9615
===================================================================
9616
--- a/src/gcc/testsuite/gcc.target/i386/pr59034-2.c (.../tags/gcc_4_8_2_release)
9617
+++ b/src/gcc/testsuite/gcc.target/i386/pr59034-2.c (.../branches/gcc-4_8-branch)
9619
+/* { dg-do compile { target { ! { ia32 } } } } */
9620
+/* { dg-require-effective-target maybe_x32 } */
9621
+/* { dg-options "-O -mx32 -mtune=corei7 -maddress-mode=long" } */
9623
+extern int foo(int, ...);
9625
+ long double l = 1.2345E6;
9629
Index: gcc/testsuite/gcc.target/i386/pr59794-3.c
9630
===================================================================
9631
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-3.c (.../tags/gcc_4_8_2_release)
9632
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-3.c (.../branches/gcc-4_8-branch)
9634
+/* PR target/59794 */
9635
+/* { dg-prune-output "ABI for passing parameters" } */
9636
+/* { dg-options "-O2 -mno-avx" } */
9637
+/* { dg-skip-if "no AVX vector" { *-*-mingw* } } */
9639
+typedef int __v8si __attribute__ ((__vector_size__ (32)));
9643
+extern void bar (__v8si);
9647
+ bar (x); /* { dg-message "warning: AVX vector argument without AVX enabled changes the ABI" } */
9649
Index: gcc/testsuite/gcc.target/i386/pr59839.c
9650
===================================================================
9651
--- a/src/gcc/testsuite/gcc.target/i386/pr59839.c (.../tags/gcc_4_8_2_release)
9652
+++ b/src/gcc/testsuite/gcc.target/i386/pr59839.c (.../branches/gcc-4_8-branch)
9654
+/* PR target/59839 */
9655
+/* { dg-do compile } */
9656
+/* { dg-options "-O0 -mavx2" } */
9658
+#include <x86intrin.h>
9661
+test (const float *x)
9663
+ __m256i i = _mm256_set1_epi32 (1);
9664
+ __m256 d = _mm256_i32gather_ps (x, i, 1);
9666
Index: gcc/testsuite/gcc.target/i386/xop-frczX.c
9667
===================================================================
9668
--- a/src/gcc/testsuite/gcc.target/i386/xop-frczX.c (.../tags/gcc_4_8_2_release)
9669
+++ b/src/gcc/testsuite/gcc.target/i386/xop-frczX.c (.../branches/gcc-4_8-branch)
9671
+/* { dg-do run } */
9672
+/* { dg-require-effective-target xop } */
9673
+/* { dg-options "-O2 -mxop" } */
9675
+#include "xop-check.h"
9677
+#include <x86intrin.h>
9680
+check_mm_vmfrcz_sd (__m128d __A, __m128d __B)
9682
+ union128d a, b, c;
9687
+ c.x = _mm_frcz_sd (__A, __B);
9688
+ d[0] = b.a[0] - (int)b.a[0] ;
9690
+ if (check_union128d (c, d))
9695
+check_mm_vmfrcz_ss (__m128 __A, __m128 __B)
9702
+ c.x = _mm_frcz_ss (__A, __B);
9703
+ f[0] = b.a[0] - (int)b.a[0] ;
9707
+ if (check_union128 (c, f))
9718
+ for (i = 0; i < 4; i++)
9723
+ for (i = 0; i < 2; i++)
9726
+ d.a[i] = i + 7.987654321;
9728
+ check_mm_vmfrcz_ss (a.x, b.x);
9729
+ check_mm_vmfrcz_sd (c.x, d.x);
9731
Index: gcc/testsuite/gcc.target/i386/pr59794-7.c
9732
===================================================================
9733
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-7.c (.../tags/gcc_4_8_2_release)
9734
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-7.c (.../branches/gcc-4_8-branch)
9736
+/* PR target/59794 */
9737
+/* { dg-options "-O2 -mno-avx" } */
9738
+/* { dg-skip-if "no AVX vector" { *-*-mingw* } } */
9740
+typedef int __v8si __attribute__ ((__vector_size__ (32)));
9746
+{ /* { dg-warning "AVX vector return without AVX enabled changes the ABI" } */
9749
Index: gcc/testsuite/gcc.target/i386/pr59625.c
9750
===================================================================
9751
--- a/src/gcc/testsuite/gcc.target/i386/pr59625.c (.../tags/gcc_4_8_2_release)
9752
+++ b/src/gcc/testsuite/gcc.target/i386/pr59625.c (.../branches/gcc-4_8-branch)
9754
+/* PR target/59625 */
9755
+/* { dg-do compile } */
9756
+/* { dg-options "-O2 -mtune=atom" } */
9761
+ asm goto ("" : : : : lab);
9762
+ asm goto ("" : : : : lab);
9763
+ asm goto ("" : : : : lab);
9764
+ asm goto ("" : : : : lab);
9765
+ asm goto ("" : : : : lab);
9766
+ asm goto ("" : : : : lab);
9767
+ asm goto ("" : : : : lab);
9768
+ asm goto ("" : : : : lab);
9769
+ asm goto ("" : : : : lab);
9770
+ asm goto ("" : : : : lab);
9771
+ asm goto ("" : : : : lab);
9772
+ asm goto ("" : : : : lab);
9773
+ asm goto ("" : : : : lab);
9774
+ asm goto ("" : : : : lab);
9775
+ asm goto ("" : : : : lab);
9776
+ asm goto ("" : : : : lab);
9777
+ asm goto ("" : : : : lab);
9778
+ asm goto ("" : : : : lab);
9779
+ asm goto ("" : : : : lab);
9780
+ asm goto ("" : : : : lab);
9786
+/* Verify we don't consider asm goto as a jump for four jumps limit
9787
+ optimization. asm goto doesn't have to contain a jump at all,
9788
+ the branching to labels can happen through different means. */
9789
+/* { dg-final { scan-assembler-not "(p2align\[^\n\r\]*\[\n\r]*\[^\n\r\]*){8}p2align" } } */
9790
Index: gcc/testsuite/gcc.target/i386/sse2-movapd-2.c
9791
===================================================================
9792
--- a/src/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c (.../tags/gcc_4_8_2_release)
9793
+++ b/src/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c (.../branches/gcc-4_8-branch)
9798
- double e[2] __attribute__ ((aligned (8))) = {0.0};
9799
+ double e[2] __attribute__ ((aligned (16))) = {0.0};
9801
u.x = _mm_set_pd (2134.3343,1234.635654);
9803
Index: gcc/testsuite/gcc.target/i386/sse-5.c
9804
===================================================================
9805
--- a/src/gcc/testsuite/gcc.target/i386/sse-5.c (.../tags/gcc_4_8_2_release)
9806
+++ b/src/gcc/testsuite/gcc.target/i386/sse-5.c (.../branches/gcc-4_8-branch)
9808
/* { dg-do compile } */
9809
/* { dg-require-effective-target ia32 } */
9810
-/* { dg-options "-Winline -Wno-psabi -O2 -mno-sse" } */
9811
+/* { dg-prune-output "ABI for passing parameters" } */
9812
+/* { dg-options "-Winline -O2 -mno-sse" } */
9814
typedef double v2df __attribute__ ((vector_size (16)));
9816
Index: gcc/testsuite/gcc.target/i386/pr39162.c
9817
===================================================================
9818
--- a/src/gcc/testsuite/gcc.target/i386/pr39162.c (.../tags/gcc_4_8_2_release)
9819
+++ b/src/gcc/testsuite/gcc.target/i386/pr39162.c (.../branches/gcc-4_8-branch)
9821
/* { dg-do compile } */
9822
-/* { dg-options "-O2 -Wno-psabi -msse2 -mno-avx" } */
9823
+/* { dg-prune-output "ABI for passing parameters" } */
9824
+/* { dg-options "-O2 -msse2 -mno-avx" } */
9825
/* { dg-additional-options "-mabi=sysv" { target x86_64-*-mingw* } } */
9827
typedef long long __m256i __attribute__ ((__vector_size__ (32), __may_alias__));
9833
bar (__m256i x) /* { dg-warning "AVX" "" } */
9838
Index: gcc/testsuite/gcc.target/i386/pr58137.c
9839
===================================================================
9840
--- a/src/gcc/testsuite/gcc.target/i386/pr58137.c (.../tags/gcc_4_8_2_release)
9841
+++ b/src/gcc/testsuite/gcc.target/i386/pr58137.c (.../branches/gcc-4_8-branch)
9843
+/* { dg-do compile } */
9844
+/* { dg-options "-O3 -mavx2" } */
9846
+typedef unsigned int U32;
9853
+typedef struct sv SV;
9858
+typedef struct xrv XRV;
9860
+extern XRV * PL_xrv_root;
9865
+ register XRV* xrv;
9866
+ register XRV* xrvend;
9867
+ xrv = PL_xrv_root;
9868
+ xrvend = &xrv[200 / sizeof (XRV) - 1];
9869
+ while (xrv < xrvend)
9871
+ xrv->xrv_rv = (SV*)(xrv + 1);
9876
Index: gcc/testsuite/gcc.target/i386/pr59794-4.c
9877
===================================================================
9878
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-4.c (.../tags/gcc_4_8_2_release)
9879
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-4.c (.../branches/gcc-4_8-branch)
9881
+/* PR target/59794 */
9882
+/* { dg-do compile { target { ia32 } } } */
9883
+/* { dg-options "-O2 -mno-mmx" } */
9884
+/* { dg-skip-if "no MMX vector" { *-*-mingw* } } */
9886
+typedef int __v2si __attribute__ ((__vector_size__ (8)));
9892
+{ /* { dg-warning "MMX vector return without MMX enabled changes the ABI" } */
9895
Index: gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c
9896
===================================================================
9897
--- a/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c (.../tags/gcc_4_8_2_release)
9898
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c (.../branches/gcc-4_8-branch)
9900
/* { dg-do compile { target lp64 } } */
9901
-/* { dg-options "-O2 -mavx -mabi=ms -mtune=generic -dp" } */
9902
+/* { dg-options "-O2 -mavx -mabi=ms -maccumulate-outgoing-args -dp" } */
9904
typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));
9906
Index: gcc/testsuite/gcc.target/i386/pr30315.c
9907
===================================================================
9908
--- a/src/gcc/testsuite/gcc.target/i386/pr30315.c (.../tags/gcc_4_8_2_release)
9909
+++ b/src/gcc/testsuite/gcc.target/i386/pr30315.c (.../branches/gcc-4_8-branch)
9911
/* { dg-do compile } */
9912
/* { dg-options "-O2" } */
9913
-/* { dg-final { scan-assembler-times "cmp" 4 } } */
9914
+/* { dg-final { scan-assembler-not "cmp" } } */
9916
extern void abort (void);
9920
#define PLUSCCONLY(T, t) PLUSCCONLY1(T, t, a) PLUSCCONLY1(T, t, b)
9922
-#define MINUSCC(T, t) \
9923
-T minuscc##t (T a, T b) \
9925
- T difference = a - b; \
9926
- if (difference > a) \
9928
- return difference; \
9931
-#define DECCC(T, t) \
9932
-T deccc##t (T a, T b) \
9934
- T difference = a - b; \
9935
- if (difference > a) \
9937
- return difference; \
9940
-#define MINUSCCONLY(T, t) \
9941
-void minuscconly##t (T a, T b) \
9943
- T difference = a - b; \
9944
- if (difference > a) \
9948
#define TEST(T, t) \
9953
- MINUSCCONLY(T, t) \
9957
TEST (unsigned long, l)
9958
TEST (unsigned int, i)
9964
-#define MINUSCCZEXT \
9965
-unsigned long minuscczext (unsigned int a, unsigned int b) \
9967
- unsigned int difference = a - b; \
9968
- if (difference > a) \
9970
- return difference; \
9974
Index: gcc/testsuite/gcc.target/i386/pr43869.c
9975
===================================================================
9976
--- a/src/gcc/testsuite/gcc.target/i386/pr43869.c (.../tags/gcc_4_8_2_release)
9977
+++ b/src/gcc/testsuite/gcc.target/i386/pr43869.c (.../branches/gcc-4_8-branch)
9979
/* { dg-do compile { target lp64 } } */
9980
+/* { dg-options "-maccumulate-outgoing-args" } */
9982
int __attribute__((__noinline__))
9983
bugged(float f1, float f2, float f3, float f4,
9984
Index: gcc/testsuite/gcc.target/i386/pr43546.c
9985
===================================================================
9986
--- a/src/gcc/testsuite/gcc.target/i386/pr43546.c (.../tags/gcc_4_8_2_release)
9987
+++ b/src/gcc/testsuite/gcc.target/i386/pr43546.c (.../branches/gcc-4_8-branch)
9989
+/* PR target/43546 */
9990
+/* { dg-do compile } */
9991
+/* { dg-options "-O1" } */
9992
+/* { dg-additional-options "-mpreferred-stack-boundary=2 -msseregparm -msse" { target ia32 } } */
9994
+extern void bar (double);
10001
Index: gcc/testsuite/gcc.target/i386/pr43662.c
10002
===================================================================
10003
--- a/src/gcc/testsuite/gcc.target/i386/pr43662.c (.../tags/gcc_4_8_2_release)
10004
+++ b/src/gcc/testsuite/gcc.target/i386/pr43662.c (.../branches/gcc-4_8-branch)
10006
/* { dg-do compile { target lp64 } } */
10007
-/* { dg-options "-O2" } */
10008
+/* { dg-options "-O2 -maccumulate-outgoing-args" } */
10010
void __attribute__ ((ms_abi)) foo (void)
10012
Index: gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c
10013
===================================================================
10014
--- a/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c (.../tags/gcc_4_8_2_release)
10015
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c (.../branches/gcc-4_8-branch)
10020
- double e [4] __attribute__ ((aligned (8))) = {41124.234,2344.2354,8653.65635,856.43576};
10021
+ double e [4] __attribute__ ((aligned (32))) = {41124.234,2344.2354,8653.65635,856.43576};
10025
Index: gcc/testsuite/gcc.target/i386/nest-1.c
10026
===================================================================
10027
--- a/src/gcc/testsuite/gcc.target/i386/nest-1.c (.../tags/gcc_4_8_2_release)
10028
+++ b/src/gcc/testsuite/gcc.target/i386/nest-1.c (.../branches/gcc-4_8-branch)
10030
+/* { dg-do compile { target llp64 } } */
10031
+/* { dg-options "" } */
10035
+ void nested (void)
10037
+ char arr[(1U << 31) + 4U];
10044
Index: gcc/testsuite/gcc.target/i386/pr59794-1.c
10045
===================================================================
10046
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-1.c (.../tags/gcc_4_8_2_release)
10047
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-1.c (.../branches/gcc-4_8-branch)
10049
+/* PR target/59794 */
10050
+/* { dg-do compile { target { ia32 } } } */
10051
+/* { dg-options "-O2 -mno-mmx" } */
10052
+/* { dg-skip-if "no MMX vector" { *-*-mingw* } } */
10054
+typedef int __v2si __attribute__ ((__vector_size__ (8)));
10058
+extern void bar (__v2si);
10062
+ bar (x); /* { dg-message "warning: MMX vector argument without MMX enabled changes the ABI" } */
10064
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c
10065
===================================================================
10066
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c (.../tags/gcc_4_8_2_release)
10067
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c (.../branches/gcc-4_8-branch)
10069
/* Test for cross x86_64<->w64 abi standard calls.
10071
/* { dg-do compile } */
10072
-/* { dg-options "-mno-sse" } */
10073
+/* { dg-options "-mno-sse -maccumulate-outgoing-args" } */
10074
#include "callabi.h"
10077
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c
10078
===================================================================
10079
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c (.../tags/gcc_4_8_2_release)
10080
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c (.../branches/gcc-4_8-branch)
10083
/* Origin: Kai Tietz <kai.tietz@onevision.com> */
10084
/* { dg-do run } */
10085
-/* { dg-options "-std=gnu99" } */
10086
+/* { dg-options "-std=gnu99 -maccumulate-outgoing-args" } */
10087
#include "callabi.h"
10089
extern __SIZE_TYPE__ strlen (const char *);
10090
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c
10091
===================================================================
10092
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c (.../tags/gcc_4_8_2_release)
10093
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c (.../branches/gcc-4_8-branch)
10096
/* Origin: Kai Tietz <kai.tietz@onevision.com> */
10097
/* { dg-do run } */
10098
-/* { dg-options "-std=gnu99" } */
10099
+/* { dg-options "-std=gnu99 -maccumulate-outgoing-args" } */
10100
#include "callabi.h"
10102
extern void abort (void);
10103
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-3.c
10104
===================================================================
10105
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-3.c (.../tags/gcc_4_8_2_release)
10106
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-3.c (.../branches/gcc-4_8-branch)
10109
/* Origin: Kai Tietz <kai.tietz@onevision.com> */
10110
/* { dg-do run } */
10111
-/* { dg-options "-std=gnu99" } */
10112
+/* { dg-options "-std=gnu99 -maccumulate-outgoing-args" } */
10113
#include "callabi.h"
10115
extern void abort (void);
10116
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c
10117
===================================================================
10118
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c (.../tags/gcc_4_8_2_release)
10119
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c (.../branches/gcc-4_8-branch)
10121
/* Test for cross x86_64<->w64 abi va_list calls. */
10122
/* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
10123
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
10124
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
10125
/* { dg-additional-sources "vaarg-4b.c" } */
10127
extern __SIZE_TYPE__ __attribute__ ((sysv_abi)) strlen (const char *);
10128
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c
10129
===================================================================
10130
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c (.../tags/gcc_4_8_2_release)
10131
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c (.../branches/gcc-4_8-branch)
10133
/* Test for cross x86_64<->w64 abi va_list calls. */
10134
/* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
10135
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
10136
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
10137
/* { dg-additional-sources "vaarg-5b.c" } */
10139
extern void __attribute__ ((sysv_abi)) abort (void);
10140
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c
10141
===================================================================
10142
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c (.../tags/gcc_4_8_2_release)
10143
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c (.../branches/gcc-4_8-branch)
10145
/* Test for cross x86_64<->w64 abi va_list calls. */
10146
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
10147
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
10149
#include <stdarg.h>
10151
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c
10152
===================================================================
10153
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c (.../tags/gcc_4_8_2_release)
10154
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c (.../branches/gcc-4_8-branch)
10156
/* Test for cross x86_64<->w64 abi va_list calls. */
10157
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
10158
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
10160
#include <stdarg.h>
10162
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c
10163
===================================================================
10164
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c (.../tags/gcc_4_8_2_release)
10165
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c (.../branches/gcc-4_8-branch)
10167
/* { dg-do compile } */
10168
-/* { dg-options "-O2 -mabi=sysv" } */
10169
+/* { dg-options "-O2 -mabi=sysv -maccumulate-outgoing-args" } */
10171
__attribute__ ((ms_abi))
10173
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c
10174
===================================================================
10175
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c (.../tags/gcc_4_8_2_release)
10176
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c (.../branches/gcc-4_8-branch)
10178
/* { dg-do compile } */
10179
-/* { dg-options "-O2 -mabi=sysv" } */
10180
+/* { dg-options "-O2 -mabi=sysv -maccumulate-outgoing-args" } */
10182
extern int glb1, gbl2, gbl3;
10184
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c
10185
===================================================================
10186
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c (.../tags/gcc_4_8_2_release)
10187
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c (.../branches/gcc-4_8-branch)
10190
/* Origin: Kai Tietz <kai.tietz@onevision.com> */
10191
/* { dg-do run } */
10192
-/* { dg-options "-std=gnu99 -ffast-math" } */
10193
+/* { dg-options "-std=gnu99 -ffast-math -maccumulate-outgoing-args" } */
10194
#include "callabi.h"
10196
extern void abort (void);
10197
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c
10198
===================================================================
10199
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c (.../tags/gcc_4_8_2_release)
10200
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c (.../branches/gcc-4_8-branch)
10202
/* Test for cross x86_64<->w64 abi standard calls via variable. */
10203
/* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
10204
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
10205
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
10206
/* { dg-additional-sources "func-indirect-2b.c" } */
10208
extern void __attribute__ ((sysv_abi)) abort (void);
10209
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c
10210
===================================================================
10211
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c (.../tags/gcc_4_8_2_release)
10212
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c (.../branches/gcc-4_8-branch)
10215
/* Origin: Kai Tietz <kai.tietz@onevision.com> */
10216
/* { dg-do run } */
10217
-/* { dg-options "-std=gnu99 -ffast-math" } */
10218
+/* { dg-options "-std=gnu99 -ffast-math -maccumulate-outgoing-args" } */
10219
#include "callabi.h"
10221
extern void abort (void);
10222
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c
10223
===================================================================
10224
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c (.../tags/gcc_4_8_2_release)
10225
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c (.../branches/gcc-4_8-branch)
10227
/* Test for cross x86_64<->w64 abi standard calls. */
10228
/* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
10229
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
10230
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
10231
/* { dg-additional-sources "func-2b.c" } */
10233
extern void __attribute__ ((sysv_abi)) abort (void);
10234
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c
10235
===================================================================
10236
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c (.../tags/gcc_4_8_2_release)
10237
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c (.../branches/gcc-4_8-branch)
10239
/* Test for cross x86_64<->w64 abi standard calls via variable. */
10240
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
10241
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
10243
typedef int (*func)(void *, char *, char *, short, long long);
10245
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c
10246
===================================================================
10247
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c (.../tags/gcc_4_8_2_release)
10248
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c (.../branches/gcc-4_8-branch)
10250
/* Test for cross x86_64<->w64 abi standard calls. */
10251
-/* { dg-options "-mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
10252
+/* { dg-options "-mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
10254
long double func_cross (long double a, double b, float c, long d, int e,
10256
Index: gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c
10257
===================================================================
10258
--- a/src/gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c (.../tags/gcc_4_8_2_release)
10259
+++ b/src/gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c (.../branches/gcc-4_8-branch)
10261
-/* This checks the availability of the XL compiler intrinsics for
10262
- transactional execution with the expected prototypes. */
10264
-/* { dg-do compile } */
10265
-/* { dg-options "-O3 -march=zEC12 -mzarch" } */
10267
-#include <htmxlintrin.h>
10275
- struct __htm_tdb *tdb_struct;
10276
- void * const tdb = tdb_struct;
10278
- unsigned char code;
10280
- result = __TM_simple_begin ();
10281
- result = __TM_begin (tdb);
10282
- result = __TM_end ();
10284
- __TM_named_abort (42);
10285
- __TM_non_transactional_store (&g, 42);
10286
- result = __TM_nesting_depth (tdb);
10288
- result = __TM_is_user_abort (tdb);
10289
- result = __TM_is_named_user_abort (tdb, &code);
10290
- result = __TM_is_illegal (tdb);
10291
- result = __TM_is_footprint_exceeded (tdb);
10292
- result = __TM_is_nested_too_deep (tdb);
10293
- result = __TM_is_conflict (tdb);
10294
- result = __TM_is_failure_persistent (result);
10295
- result = __TM_failure_address (tdb);
10296
- result = __TM_failure_code (tdb);
10298
Index: gcc/testsuite/gcc.target/s390/htm-1.c
10299
===================================================================
10300
--- a/src/gcc/testsuite/gcc.target/s390/htm-1.c (.../tags/gcc_4_8_2_release)
10301
+++ b/src/gcc/testsuite/gcc.target/s390/htm-1.c (.../branches/gcc-4_8-branch)
10303
-/* This checks the availability of the low-level builtins introduced
10304
- for transactional execution. */
10306
-/* { dg-do compile } */
10307
-/* { dg-options "-O3 -march=zEC12 -mzarch" } */
10309
-#include <stdint.h>
10310
-#include <htmintrin.h>
10314
-struct __htm_tdb global_tdb;
10317
-foo (struct __htm_tdb* tdb, int reg, int *mem, uint64_t *mem64)
10323
- cc = __builtin_tbegin (0);
10324
- cc = __builtin_tbegin (tdb);
10325
- cc = __builtin_tbegin (&global_tdb);
10327
- cc = __builtin_tbegin_nofloat (0);
10328
- cc = __builtin_tbegin_nofloat (&global_tdb);
10330
- cc = __builtin_tbegin_retry (0, 42);
10331
- cc = __builtin_tbegin_retry (0, reg);
10332
- cc = __builtin_tbegin_retry (0, *mem);
10333
- cc = __builtin_tbegin_retry (0, global);
10334
- cc = __builtin_tbegin_retry (tdb, 42);
10335
- cc = __builtin_tbegin_retry (&global_tdb, 42);
10337
- cc = __builtin_tbegin_retry_nofloat (0, 42);
10338
- cc = __builtin_tbegin_retry_nofloat (0, reg);
10339
- cc = __builtin_tbegin_retry_nofloat (0, *mem);
10340
- cc = __builtin_tbegin_retry_nofloat (0, global);
10341
- cc = __builtin_tbegin_retry_nofloat (&global_tdb, 42);
10343
- __builtin_tbeginc ();
10345
- n = __builtin_tx_nesting_depth();
10347
- __builtin_non_tx_store(&g, 23);
10348
- __builtin_non_tx_store(mem64, 23);
10349
- __builtin_non_tx_store(&g, reg);
10350
- __builtin_non_tx_store(&g, *mem);
10351
- __builtin_non_tx_store(&g, global);
10353
- __builtin_tabort (42 + 255);
10354
- __builtin_tabort (reg);
10355
- /* { dg-final { scan-assembler-times "tabort\t255" 1 } } */
10356
- __builtin_tabort (reg + 255);
10357
- __builtin_tabort (*mem);
10358
- __builtin_tabort (global);
10359
- /* Here global + 255 gets reloaded into a reg. Better would be to
10360
- just reload global or *mem and get the +255 for free as address
10362
- __builtin_tabort (*mem + 255);
10363
- __builtin_tabort (global + 255);
10365
- __builtin_tend();
10367
- __builtin_tx_assist (23);
10368
- __builtin_tx_assist (reg);
10369
- __builtin_tx_assist (*mem);
10370
- __builtin_tx_assist (global);
10373
-/* Make sure the tdb NULL argument ends up as immediate value in the
10375
-/* { dg-final { scan-assembler-times "tbegin\t0," 10 } } */
10376
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c
10377
===================================================================
10378
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c (.../tags/gcc_4_8_2_release)
10379
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c (.../branches/gcc-4_8-branch)
10381
+/* Functional tests for the function hotpatching feature. */
10383
+/* { dg-do run } */
10384
+/* { dg-options "-O3 -mzarch -mhotpatch" } */
10386
+#include <stdio.h>
10390
+ printf("hello, world!\n");
10393
+inline void hp2(void)
10395
+ printf("hello, world!\n");
10398
+__attribute__ ((always_inline))
10399
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
10401
+ printf("hello, world!\n");
10402
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
10408
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c
10409
===================================================================
10410
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c (.../tags/gcc_4_8_2_release)
10411
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c (.../branches/gcc-4_8-branch)
10413
+/* Functional tests for the function hotpatching feature. */
10415
+/* { dg-do run } */
10416
+/* { dg-options "-O3 -mzarch -mhotpatch=0" } */
10418
+#include <stdio.h>
10422
+ printf("hello, world!\n");
10425
+inline void hp2(void)
10427
+ printf("hello, world!\n");
10430
+__attribute__ ((always_inline))
10431
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
10433
+ printf("hello, world!\n");
10434
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
10440
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c
10441
===================================================================
10442
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c (.../tags/gcc_4_8_2_release)
10443
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c (.../branches/gcc-4_8-branch)
10445
+/* Functional tests for the function hotpatching feature. */
10447
+/* { dg-do run } */
10448
+/* { dg-options "-O3 -mzarch -mhotpatch=1" } */
10450
+#include <stdio.h>
10454
+ printf("hello, world!\n");
10457
+inline void hp2(void)
10459
+ printf("hello, world!\n");
10462
+__attribute__ ((always_inline))
10463
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
10465
+ printf("hello, world!\n");
10466
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
10472
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c
10473
===================================================================
10474
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c (.../tags/gcc_4_8_2_release)
10475
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c (.../branches/gcc-4_8-branch)
10477
+/* Functional tests for the function hotpatching feature. */
10479
+/* { dg-do compile } */
10480
+/* { dg-options "-O3 -mzarch -mhotpatch=-1" } */
10487
+/* { dg-excess-errors "argument to '-mhotpatch=' should be a non-negative integer" } */
10488
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c
10489
===================================================================
10490
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c (.../tags/gcc_4_8_2_release)
10491
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c (.../branches/gcc-4_8-branch)
10493
+/* Functional tests for the function hotpatching feature. */
10495
+/* { dg-do compile } */
10496
+/* { dg-options "-O3 -mzarch -mhotpatch=1000000" } */
10498
+#include <stdio.h>
10502
+ printf("hello, world!\n");
10505
+__attribute__ ((hotpatch(1000000)))
10508
+ printf("hello, world!\n");
10511
+__attribute__ ((hotpatch(1000001)))
10513
+{ /* { dg-error "requested 'hotpatch' attribute is not a non-negative integer constant or too large .max. 1000000." } */
10514
+ printf("hello, world!\n");
10521
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c
10522
===================================================================
10523
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c (.../tags/gcc_4_8_2_release)
10524
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c (.../branches/gcc-4_8-branch)
10526
+/* Functional tests for the function hotpatching feature. */
10528
+/* { dg-do compile } */
10529
+/* { dg-options "-O3 -mzarch -mhotpatch=1000001" } */
10536
+/* { dg-excess-errors "argument to '-mhotpatch=' is too large .max. 1000000." } */
10537
Index: gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c
10538
===================================================================
10539
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c (.../tags/gcc_4_8_2_release)
10540
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c (.../branches/gcc-4_8-branch)
10542
+/* This checks the availability of the low-level builtins introduced
10543
+ for transactional execution. */
10545
+/* { dg-do compile } */
10546
+/* { dg-require-effective-target htm } */
10547
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
10549
+#include <stdint.h>
10550
+#include <htmintrin.h>
10554
+struct __htm_tdb global_tdb;
10557
+foo (struct __htm_tdb* tdb, int reg, int *mem, uint64_t *mem64)
10563
+ __builtin_tbegin ((void *)0);
10564
+ __builtin_tbegin ((void *)-99999);
10565
+ __builtin_tbegin ((void *)99999);
10566
+ while (__builtin_tbegin ((void *)0) != 0)
10569
+ cc = __builtin_tbegin ((void *)0x12345678);
10570
+ cc = __builtin_tbegin (tdb);
10571
+ cc = __builtin_tbegin (&global_tdb);
10572
+ cc = __builtin_tbegin ((void *)(long long)(reg + 0x12345678));
10573
+ cc = __builtin_tbegin ((void *)(long long)(reg));
10575
+ __builtin_tbegin_nofloat ((void *)0);
10576
+ __builtin_tbegin_nofloat ((void *)-99999);
10577
+ __builtin_tbegin_nofloat ((void *)99999);
10578
+ cc = __builtin_tbegin_nofloat ((void *)0x12345678);
10579
+ cc = __builtin_tbegin_nofloat (tdb);
10580
+ cc = __builtin_tbegin_nofloat (&global_tdb);
10581
+ cc = __builtin_tbegin_nofloat ((void *)(long long)(reg + 0x12345678));
10582
+ cc = __builtin_tbegin_nofloat ((void *)(long long)(reg));
10584
+ __builtin_tbegin_retry ((void *)0, 0);
10585
+ cc = __builtin_tbegin_retry ((void *)0, 1);
10586
+ cc = __builtin_tbegin_retry ((void *)0, -1);
10587
+ cc = __builtin_tbegin_retry ((void *)0, 42);
10588
+ cc = __builtin_tbegin_retry ((void *)0, reg);
10589
+ cc = __builtin_tbegin_retry ((void *)0, *mem);
10590
+ cc = __builtin_tbegin_retry ((void *)0, global);
10591
+ cc = __builtin_tbegin_retry (tdb, 42);
10592
+ cc = __builtin_tbegin_retry (&global_tdb, 42);
10593
+ cc = __builtin_tbegin_retry ((void *)0x12345678, global);
10594
+ cc = __builtin_tbegin_retry (
10595
+ (void *)(long long) (reg + 0x12345678), global + 1);
10596
+ cc = __builtin_tbegin_retry (
10597
+ (void *)(long long)(reg), global - 1);
10599
+ __builtin_tbegin_retry_nofloat ((void *)0, 0);
10600
+ cc = __builtin_tbegin_retry_nofloat ((void *)0, 1);
10601
+ cc = __builtin_tbegin_retry_nofloat ((void *)0, -1);
10602
+ cc = __builtin_tbegin_retry_nofloat ((void *)0, 42);
10603
+ cc = __builtin_tbegin_retry_nofloat ((void *)0, reg);
10604
+ cc = __builtin_tbegin_retry_nofloat ((void *)0, *mem);
10605
+ cc = __builtin_tbegin_retry_nofloat ((void *)0, global);
10606
+ cc = __builtin_tbegin_retry_nofloat (tdb, 42);
10607
+ cc = __builtin_tbegin_retry_nofloat (&global_tdb, 42);
10608
+ cc = __builtin_tbegin_retry_nofloat ((void *)0x12345678, global);
10609
+ cc = __builtin_tbegin_retry_nofloat (
10610
+ (void *)(long long) (reg + 0x12345678), global + 1);
10611
+ cc = __builtin_tbegin_retry_nofloat (
10612
+ (void *)(long long)(reg), global - 1);
10614
+ __builtin_tbeginc ();
10616
+ __builtin_tx_nesting_depth ();
10617
+ n = __builtin_tx_nesting_depth ();
10619
+ __builtin_non_tx_store (mem64, 0);
10621
+ const uint64_t val_var = 0x1122334455667788;
10623
+ __builtin_non_tx_store (mem64, val_var);
10625
+ __builtin_non_tx_store (mem64, (uint64_t)reg);
10626
+ __builtin_non_tx_store (mem64, g);
10627
+ __builtin_non_tx_store ((uint64_t *)0, 0);
10628
+ __builtin_non_tx_store ((uint64_t *)0x12345678, 0);
10629
+ __builtin_non_tx_store (&g, 23);
10630
+ __builtin_non_tx_store (&g, reg);
10631
+ __builtin_non_tx_store (&g, *mem);
10632
+ __builtin_non_tx_store (&g, global);
10634
+ __builtin_tend();
10636
+ __builtin_tx_assist (0);
10637
+ __builtin_tx_assist (1);
10638
+ __builtin_tx_assist (reg);
10639
+ __builtin_tx_assist (*mem);
10640
+ __builtin_tx_assist (global);
10643
+/* The taborts must go into separate function since they are
10649
+ __builtin_tabort (256);
10655
+ __builtin_tabort (reg);
10661
+ /* { dg-final { scan-assembler-times "tabort\t255" 1 } } */
10662
+ __builtin_tabort (reg + 255);
10666
+tabort4 (int *mem)
10668
+ __builtin_tabort (*mem);
10674
+ __builtin_tabort (global);
10678
+tabort6 (int *mem)
10680
+ /* Here global + 255 gets reloaded into a reg. Better would be to
10681
+ just reload global or *mem and get the +255 for free as address
10683
+ __builtin_tabort (*mem + 255);
10689
+ __builtin_tabort (global + 255);
10695
+ __builtin_tabort (-1);
10699
+/* Make sure the tdb NULL argument ends up as immediate value in the
10701
+/* { dg-final { scan-assembler-times "tbegin\t0," 17 } } */
10702
+/* { dg-final { scan-assembler-times "tbegin\t" 41 } } */
10703
+/* Check number of occurences of certain instructions. */
10704
+/* { dg-final { scan-assembler-times "tbeginc\t" 1 } } */
10705
+/* { dg-final { scan-assembler-times "tabort\t" 8 } } */
10706
+/* { dg-final { scan-assembler "ppa\t" } } */
10707
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c
10708
===================================================================
10709
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c (.../tags/gcc_4_8_2_release)
10710
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c (.../branches/gcc-4_8-branch)
10712
+/* Functional tests for the function hotpatching feature. */
10714
+/* { dg-do run } */
10715
+/* { dg-options "-O3 -mzarch -mno-hotpatch" } */
10717
+#include <stdio.h>
10719
+__attribute__ ((hotpatch))
10722
+ printf("hello, world!\n");
10725
+__attribute__ ((hotpatch))
10726
+inline void hp2(void)
10728
+ printf("hello, world!\n");
10731
+__attribute__ ((hotpatch))
10732
+__attribute__ ((always_inline))
10733
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
10735
+ printf("hello, world!\n");
10736
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
10738
+__attribute__ ((hotpatch(0)))
10741
+ printf("hello, world!\n");
10744
+__attribute__ ((hotpatch(0)))
10745
+inline void hp5(void)
10747
+ printf("hello, world!\n");
10750
+__attribute__ ((hotpatch(0)))
10751
+__attribute__ ((always_inline))
10752
+void hp6(void) /* { dg-warning "always_inline function might not be inlinable" } */
10754
+ printf("hello, world!\n");
10755
+} /* { dg-warning "function 'hp6' with the 'always_inline' attribute is not hotpatchable" } */
10757
+__attribute__ ((hotpatch(1)))
10760
+ printf("hello, world!\n");
10763
+__attribute__ ((hotpatch(1)))
10764
+inline void hp8(void)
10766
+ printf("hello, world!\n");
10769
+__attribute__ ((hotpatch(1)))
10770
+__attribute__ ((always_inline))
10771
+void hp9(void) /* { dg-warning "always_inline function might not be inlinable" } */
10773
+ printf("hello, world!\n");
10774
+} /* { dg-warning "function 'hp9' with the 'always_inline' attribute is not hotpatchable" } */
10780
Index: gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c
10781
===================================================================
10782
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c (.../tags/gcc_4_8_2_release)
10783
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c (.../branches/gcc-4_8-branch)
10785
+/* { dg-do compile } */
10786
+/* { dg-require-effective-target htm } */
10787
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
10789
+void must_not_compile1 (void)
10791
+ __builtin_tabort (0); /* { dg-error "Invalid transaction abort code:" } */
10794
+void must_not_compile2 (void)
10796
+ __builtin_tabort (255); /* { dg-error "Invalid transaction abort code:" } */
10798
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c
10799
===================================================================
10800
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c (.../tags/gcc_4_8_2_release)
10801
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c (.../branches/gcc-4_8-branch)
10803
+/* Functional tests for the function hotpatching feature. */
10805
+/* { dg-do run } */
10806
+/* { dg-options "-O3 -mzarch -mhotpatch" } */
10808
+#include <stdio.h>
10812
+ int nested1(void) /* { dg-warning "hotpatching is not compatible with nested functions" } */
10815
+ __attribute__ ((hotpatch))
10816
+ int nested2(void) /* { dg-warning "hotpatching is not compatible with nested functions" } */
10819
+ return nested1() - nested2();
10826
Index: gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c
10827
===================================================================
10828
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c (.../tags/gcc_4_8_2_release)
10829
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c (.../branches/gcc-4_8-branch)
10831
+/* This checks the availability of the XL compiler intrinsics for
10832
+ transactional execution with the expected prototypes. */
10834
+/* { dg-do compile } */
10835
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
10837
+#include <htmxlintrin.h>
10845
+ struct __htm_tdb *tdb_struct;
10846
+ void * const tdb = tdb_struct;
10848
+ unsigned char code;
10850
+ result = __TM_simple_begin ();
10851
+ result = __TM_begin (tdb);
10852
+ result = __TM_end ();
10854
+ __TM_named_abort (42);
10855
+ __TM_non_transactional_store (&g, 42);
10856
+ result = __TM_nesting_depth (tdb);
10858
+ result = __TM_is_user_abort (tdb);
10859
+ result = __TM_is_named_user_abort (tdb, &code);
10860
+ result = __TM_is_illegal (tdb);
10861
+ result = __TM_is_footprint_exceeded (tdb);
10862
+ result = __TM_is_nested_too_deep (tdb);
10863
+ result = __TM_is_conflict (tdb);
10864
+ result = __TM_is_failure_persistent (result);
10865
+ result = __TM_failure_address (tdb);
10866
+ result = __TM_failure_code (tdb);
10868
Index: gcc/testsuite/gcc.target/s390/s390.exp
10869
===================================================================
10870
--- a/src/gcc/testsuite/gcc.target/s390/s390.exp (.../tags/gcc_4_8_2_release)
10871
+++ b/src/gcc/testsuite/gcc.target/s390/s390.exp (.../branches/gcc-4_8-branch)
10873
# Load support procs.
10874
load_lib gcc-dg.exp
10876
+# Return 1 if htm (etnd - extract nesting depth) instructions can be
10878
+proc check_effective_target_htm { } {
10879
+ if { ![check_runtime s390_check_htm [subst {
10882
+ unsigned int nd = 77;
10883
+ asm (".insn rre,0xb2ec0000,%0,0" : "=d" (nd));
10886
+ }]] } { return 0 } else { return 1 }
10889
# If a testcase doesn't have special options, use these.
10890
global DEFAULT_CFLAGS
10891
if ![info exists DEFAULT_CFLAGS] then {
10892
Index: gcc/testsuite/gcc.target/s390/hotpatch-1.c
10893
===================================================================
10894
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-1.c (.../tags/gcc_4_8_2_release)
10895
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-1.c (.../branches/gcc-4_8-branch)
10897
+/* Functional tests for the function hotpatching feature. */
10899
+/* { dg-do run } */
10900
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
10902
+#include <stdio.h>
10906
+ printf("hello, world!\n");
10914
+/* Check number of occurences of certain instructions. */
10915
+/* { dg-final { scan-assembler-times "nopr\t%r7" 12 } } */
10916
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
10917
Index: gcc/testsuite/gcc.target/s390/hotpatch-2.c
10918
===================================================================
10919
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-2.c (.../tags/gcc_4_8_2_release)
10920
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-2.c (.../branches/gcc-4_8-branch)
10922
+/* Functional tests for the function hotpatching feature. */
10924
+/* { dg-do run } */
10925
+/* { dg-options "-O3 -mzarch -mhotpatch=1 --save-temps" } */
10927
+#include <stdio.h>
10931
+ printf("hello, world!\n");
10939
+/* Check number of occurences of certain instructions. */
10940
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
10941
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
10942
Index: gcc/testsuite/gcc.target/s390/hotpatch-3.c
10943
===================================================================
10944
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-3.c (.../tags/gcc_4_8_2_release)
10945
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-3.c (.../branches/gcc-4_8-branch)
10947
+/* Functional tests for the function hotpatching feature. */
10949
+/* { dg-do run } */
10950
+/* { dg-options "-O3 -mzarch -mhotpatch=0 --save-temps" } */
10952
+#include <stdio.h>
10956
+ printf("hello, world!\n");
10964
+/* Check number of occurences of certain instructions. */
10965
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
10966
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
10967
Index: gcc/testsuite/gcc.target/s390/hotpatch-4.c
10968
===================================================================
10969
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-4.c (.../tags/gcc_4_8_2_release)
10970
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-4.c (.../branches/gcc-4_8-branch)
10972
+/* Functional tests for the function hotpatching feature. */
10974
+/* { dg-do run } */
10975
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
10977
+#include <stdio.h>
10979
+inline void hp1(void)
10981
+ printf("hello, world!\n");
10984
+__attribute__ ((always_inline))
10985
+void hp2(void) /* { dg-warning "always_inline function might not be inlinable" } */
10987
+ printf("hello, world!\n");
10988
+} /* { dg-warning "function 'hp2' with the 'always_inline' attribute is not hotpatchable" } */
10995
+/* Check number of occurences of certain instructions. */
10996
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
10997
+/* { dg-final { scan-assembler-not "nop\t0" } } */
10998
Index: gcc/testsuite/gcc.target/s390/hotpatch-5.c
10999
===================================================================
11000
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-5.c (.../tags/gcc_4_8_2_release)
11001
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-5.c (.../branches/gcc-4_8-branch)
11003
+/* Functional tests for the function hotpatching feature. */
11005
+/* { dg-do run } */
11006
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
11008
+#include <stdio.h>
11010
+__attribute__ ((hotpatch))
11013
+ printf("hello, world!\n");
11021
+/* Check number of occurences of certain instructions. */
11022
+/* { dg-final { scan-assembler-times "nopr\t%r7" 12 } } */
11023
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
11024
Index: gcc/testsuite/gcc.target/s390/hotpatch-6.c
11025
===================================================================
11026
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-6.c (.../tags/gcc_4_8_2_release)
11027
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-6.c (.../branches/gcc-4_8-branch)
11029
+/* Functional tests for the function hotpatching feature. */
11031
+/* { dg-do run } */
11032
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
11034
+#include <stdio.h>
11036
+__attribute__ ((hotpatch(1)))
11039
+ printf("hello, world!\n");
11047
+/* Check number of occurences of certain instructions. */
11048
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
11049
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
11050
Index: gcc/testsuite/gcc.target/s390/htm-builtins-1.c
11051
===================================================================
11052
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-1.c (.../tags/gcc_4_8_2_release)
11053
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-1.c (.../branches/gcc-4_8-branch)
11055
+/* Functional tests of the htm __builtin_... macros. */
11057
+/* { dg-do run } */
11058
+/* { dg-require-effective-target htm } */
11059
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
11061
+/* ---------------------------- included header files ---------------------- */
11063
+#include <stdio.h>
11064
+#include <string.h>
11065
+#include <stdint.h>
11066
+#include <htmintrin.h>
11068
+/* ---------------------------- local definitions -------------------------- */
11070
+#define DEFAULT_MAX_REPETITIONS 5
11071
+#define DEFAULT_REQUIRED_QUORUM ((DEFAULT_MAX_REPETITIONS) - 1)
11072
+#define NUM_WARMUP_RUNS 10
11074
+/* ---------------------------- local macros ------------------------------- */
11076
+#define TEST_DF_REP(name) \
11077
+ { #name, name, DEFAULT_MAX_REPETITIONS, DEFAULT_REQUIRED_QUORUM }
11078
+#define TEST_NO_REP(name) { #name, name, 1, 1 }
11080
+/* ---------------------------- local types -------------------------------- */
11082
+typedef int (*test_func_t)(void);
11086
+ const char *name;
11087
+ test_func_t test_func;
11088
+ int max_repetitions;
11089
+ int required_quorum;
11090
+} test_table_entry_t;
11092
+/* ---------------------------- local variables ---------------------------- */
11094
+__attribute__ ((aligned(256))) static struct __htm_tdb local_tdb256;
11095
+static struct __htm_tdb local_tdb;
11096
+static int do_dump_tdb = 0;
11098
+/* ---------------------------- exported variables (globals) --------------- */
11100
+__attribute__ ((aligned(256))) struct
11105
+} global = { 1.0, 2.5, 0.0 };
11107
+__attribute__ ((aligned(256))) struct
11109
+ volatile uint64_t c1;
11110
+ volatile uint64_t c2;
11111
+ volatile uint64_t c3;
11112
+} counters = { 0, 0, 0 };
11114
+/* ---------------------------- local helper functions --------------------- */
11116
+static void dump_tdb (struct __htm_tdb *tdb)
11118
+ unsigned char *p;
11122
+ if (do_dump_tdb == 0)
11126
+ p = (unsigned char *)tdb;
11127
+ for (i = 0; i < 16; i++)
11129
+ fprintf (stderr, "0x%02x ", i * 16);
11130
+ for (j = 0; j < 16; j++)
11132
+ fprintf (stderr, "%02x", (int)p[i * 16 + j]);
11135
+ fprintf (stderr, " ");
11139
+ fprintf (stderr, " ");
11142
+ fprintf (stderr, "\n");
11148
+/* ---------------------------- local test functions ----------------------- */
11150
+/* Check values of the constants defined in htmintrin.h. */
11151
+static int test_constants (void)
11153
+ if (_HTM_TBEGIN_STARTED != 0)
11155
+ return 100 * _HTM_TBEGIN_STARTED + 1;
11157
+ if (_HTM_TBEGIN_INDETERMINATE != 1)
11159
+ return 100 * _HTM_TBEGIN_INDETERMINATE + 2;
11161
+ if (_HTM_TBEGIN_TRANSIENT != 2)
11163
+ return 100 * _HTM_TBEGIN_TRANSIENT + 3;
11165
+ if (_HTM_TBEGIN_PERSISTENT != 3)
11167
+ return 100 * _HTM_TBEGIN_PERSISTENT + 4;
11173
+static int test_tbegin_ntstg_tend (void)
11179
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
11181
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
11183
+ rc = __builtin_tend ();
11186
+ return 100 * rc + 5;
11188
+ if (counters.c1 != 1)
11190
+ return 100 * counters.c1 + 2;
11192
+ if (counters.c2 != 2)
11194
+ return 100 * counters.c2 + 3;
11199
+ return 100 * rc + 4;
11205
+static int test_tbegin_ntstg_tabort (void)
11212
+ if (__builtin_tbegin ((void *)0) == 0)
11214
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
11217
+ __builtin_tabort (256);
11220
+ if (counters.c1 != 1)
11222
+ return 100 * counters.c1 + 2;
11224
+ if (counters.c2 != 0)
11226
+ return 100 * counters.c2 + 3;
11230
+ return 100 * f + 4;
11236
+static int test_tbegin_nofloat (void)
11242
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
11244
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
11246
+ rc = __builtin_tend ();
11249
+ return 100 * rc + 5;
11251
+ if (counters.c1 != 1)
11253
+ return 100 * counters.c1 + 2;
11255
+ if (counters.c2 != 2)
11257
+ return 100 * counters.c2 + 3;
11262
+ return 100 * rc + 4;
11268
+static int test_tbegin_retry (void)
11275
+ if ((rc = __builtin_tbegin_retry ((void *)0, 5)) == 0)
11279
+ do_abort = (counters.c1 == 0) ? 1 : 0;
11280
+ __builtin_non_tx_store (
11281
+ (uint64_t *)&counters.c1, counters.c1 + 1);
11282
+ if (do_abort == 1)
11284
+ __builtin_tabort (256);
11286
+ counters.c2 = counters.c2 + 10;
11287
+ __builtin_non_tx_store ((uint64_t *)&counters.c3, 3);
11288
+ rc = __builtin_tend ();
11291
+ return 100 * rc + 5;
11293
+ if (counters.c1 != 2)
11295
+ return 100 * counters.c1 + 2;
11297
+ if (counters.c2 != 10)
11299
+ return 100 * counters.c2 + 3;
11301
+ if (counters.c3 != 3)
11303
+ return 100 * counters.c3 + 6;
11308
+ return 100 * rc + 4;
11314
+static int test_tbegin_retry_nofloat (void)
11321
+ if ((rc = __builtin_tbegin_retry_nofloat ((void *)0, 5)) == 0)
11325
+ do_abort = (counters.c1 == 0) ? 1 : 0;
11326
+ __builtin_non_tx_store (
11327
+ (uint64_t *)&counters.c1, counters.c1 + 1);
11328
+ if (do_abort == 1)
11330
+ __builtin_tabort (256);
11332
+ counters.c2 = counters.c2 + 10;
11333
+ __builtin_non_tx_store ((uint64_t *)&counters.c3, 3);
11334
+ rc = __builtin_tend ();
11337
+ return 100 * rc + 5;
11339
+ if (counters.c1 != 2)
11341
+ return 100 * counters.c1 + 2;
11343
+ if (counters.c2 != 10)
11345
+ return 100 * counters.c2 + 3;
11347
+ if (counters.c3 != 3)
11349
+ return 100 * counters.c3 + 6;
11354
+ return 100 * rc + 4;
11360
+static int test_tbegin_aborts (void)
11366
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
11369
+ __builtin_tabort (256);
11372
+ else if (rc != 2)
11381
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
11384
+ __builtin_tabort (257);
11387
+ else if (rc != 3)
11389
+ return 100 * rc + 6;
11393
+ return 100 * f + 7;
11395
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
11397
+ global.float_3 = global.float_1 + global.float_2;
11398
+ rc = __builtin_tend ();
11401
+ return 100 * rc + 8;
11406
+ return 100 * rc + 9;
11408
+ if (global.float_3 != global.float_1 + global.float_2)
11410
+ return 100 * rc + 10;
11416
+static __attribute__((noinline)) void indirect_abort(int abort_code)
11418
+ __builtin_tabort (abort_code);
11423
+static int test_tbegin_indirect_aborts (void)
11429
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
11432
+ indirect_abort(256);
11435
+ else if (rc != 2)
11437
+ return 100 * rc + 3;
11441
+ return 100 * rc + 4;
11444
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
11447
+ indirect_abort(257);
11450
+ else if (rc != 3)
11452
+ return 100 * rc + 6;
11456
+ return 100 * f + 7;
11462
+static int test_tbegin_nofloat_aborts (void)
11466
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
11468
+ __builtin_tabort (256);
11471
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
11473
+ __builtin_tabort (257);
11476
+ else if (rc != 3)
11478
+ return 1000 * rc + 6;
11484
+static int test_tbegin_nofloat_indirect_aborts (void)
11488
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
11490
+ indirect_abort (256);
11493
+ if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
11495
+ indirect_abort (257);
11498
+ else if (rc != 3)
11500
+ return 1000 * rc + 6;
11507
+int _test_tbegin_retry_aborts (int retries, uint64_t abort_code)
11512
+ if ((rc = __builtin_tbegin_retry ((void *)0, retries)) == 0)
11514
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, counters.c1 + 1);
11515
+ __builtin_tabort (abort_code);
11520
+ if ((abort_code & 1) == 0)
11524
+ return 100 * rc + 2003;
11526
+ else if (counters.c1 != (uint64_t)retries + 1)
11528
+ return 1000 * counters.c1 + 100 * retries + 4;
11535
+ return 100 * rc + 3005;
11537
+ else if (counters.c1 != 1)
11539
+ return 1000 * counters.c1 + 100 * retries + 6;
11547
+static int test_tbegin_retry_aborts (void)
11552
+ for (retries = 1; retries <= 3; retries++)
11554
+ rc = _test_tbegin_retry_aborts (retries, 256);
11557
+ return 10000 + rc;
11560
+ for (retries = 1; retries <= 3; retries++)
11562
+ rc = _test_tbegin_retry_aborts (retries, 257);
11565
+ return 20000 + rc;
11568
+ if ((rc = __builtin_tbegin_retry ((void *)0, 5)) == 0)
11570
+ global.float_3 = global.float_1 + global.float_2;
11571
+ rc = __builtin_tend ();
11574
+ return 30000 + 100 * rc + 6;
11579
+ return 30000 + 100 * rc + 7;
11585
+static int _test_tbegin_retry_nofloat_aborts (int retries, uint64_t abort_code)
11590
+ if ((rc = __builtin_tbegin_retry_nofloat ((void *)0, retries)) == 0)
11592
+ __builtin_non_tx_store ((uint64_t *)&counters.c1, counters.c1 + 1);
11593
+ __builtin_tabort (abort_code);
11598
+ if ((abort_code & 1) == 0)
11602
+ return 100 * rc + 2003;
11604
+ else if (counters.c1 != (uint64_t)retries + 1)
11606
+ return 1000 * counters.c1 + 100 * retries + 4;
11613
+ return 100 * rc + 3005;
11615
+ else if (counters.c1 != 1)
11617
+ return 1000 * counters.c1 + 100 * retries + 6;
11625
+static int test_tbegin_retry_nofloat_aborts (void)
11630
+ for (retries = 1; retries <= 3; retries++)
11632
+ rc = _test_tbegin_retry_nofloat_aborts (retries, 256);
11635
+ return 10 * retries + rc;
11638
+ for (retries = 1; retries <= 3; retries++)
11640
+ rc = _test_tbegin_retry_nofloat_aborts (retries, 257);
11643
+ return 10000 + 10 * retries + rc;
11650
+static int test_tbegin_tdb (void)
11654
+ local_tdb.format = 0;
11655
+ if ((rc = __builtin_tbegin (&local_tdb)) == 0)
11657
+ rc = __builtin_tend ();
11660
+ return 100 * rc + 1;
11662
+ if (local_tdb.format != 0)
11664
+ dump_tdb (&local_tdb);
11665
+ return 100 * local_tdb.format + 2;
11670
+ return 100 * rc + 3;
11672
+ local_tdb.format = 0;
11673
+ if ((rc = __builtin_tbegin (&local_tdb)) == 0)
11675
+ __builtin_tabort (257);
11682
+ return 100 * rc + 5;
11684
+ if (local_tdb.format != 1)
11686
+ dump_tdb (&local_tdb);
11687
+ return 100 * local_tdb.format + 6;
11690
+ local_tdb256.format = 0;
11691
+ if ((rc = __builtin_tbegin (&local_tdb256)) == 0)
11693
+ rc = __builtin_tend ();
11696
+ return 1100 * rc + 1;
11698
+ if (local_tdb256.format != 0)
11700
+ dump_tdb (&local_tdb256);
11701
+ return 1100 * local_tdb256.format + 2;
11706
+ return 1100 * rc + 3;
11708
+ local_tdb256.format = 0;
11709
+ if ((rc = __builtin_tbegin (&local_tdb256)) == 0)
11711
+ __builtin_tabort (257);
11718
+ return 2100 * rc + 5;
11720
+ if (local_tdb256.format != 1)
11722
+ dump_tdb (&local_tdb256);
11723
+ return 2100 * local_tdb256.format + 6;
11730
+static int test_tbegin_nofloat_tdb (void)
11734
+ local_tdb.format = 0;
11735
+ if ((rc = __builtin_tbegin_nofloat (&local_tdb)) == 0)
11737
+ rc = __builtin_tend ();
11740
+ return 100 * rc + 1;
11742
+ if (local_tdb.format != 0)
11744
+ dump_tdb (&local_tdb);
11745
+ return 100 * local_tdb.format + 2;
11752
+ local_tdb.format = 0;
11753
+ if ((rc = __builtin_tbegin_nofloat (&local_tdb)) == 0)
11755
+ __builtin_tabort (257);
11762
+ return 100 * rc + 5;
11764
+ if (local_tdb.format != 1)
11766
+ dump_tdb (&local_tdb);
11767
+ return 100 * local_tdb.format + 6;
11770
+ local_tdb256.format = 0;
11771
+ if ((rc = __builtin_tbegin_nofloat (&local_tdb256)) == 0)
11773
+ rc = __builtin_tend ();
11776
+ return 1100 * rc + 1;
11778
+ if (local_tdb256.format != 0)
11780
+ dump_tdb (&local_tdb256);
11781
+ return 1100 * local_tdb256.format + 2;
11788
+ local_tdb256.format = 0;
11789
+ if ((rc = __builtin_tbegin_nofloat (&local_tdb256)) == 0)
11791
+ __builtin_tabort (257);
11798
+ return 2100 * rc + 5;
11800
+ if (local_tdb256.format != 1)
11802
+ dump_tdb (&local_tdb256);
11803
+ return 2100 * local_tdb256.format + 6;
11810
+static int test_tbegin_retry_tdb (void)
11814
+ local_tdb256.format = 0;
11815
+ if ((rc = __builtin_tbegin_retry (&local_tdb256, 2)) == 0)
11817
+ rc = __builtin_tend ();
11820
+ return 1100 * rc + 1;
11822
+ if (local_tdb256.format != 0)
11824
+ dump_tdb (&local_tdb256);
11825
+ return 1100 * local_tdb256.format + 2;
11832
+ local_tdb256.format = 0;
11833
+ if ((rc = __builtin_tbegin_retry (&local_tdb256, 2)) == 0)
11835
+ __builtin_tabort (257);
11842
+ return 2100 * rc + 5;
11844
+ if (local_tdb256.format != 1)
11846
+ dump_tdb (&local_tdb256);
11847
+ return 2100 * local_tdb256.format + 6;
11854
+static int test_tbegin_retry_nofloat_tdb (void)
11858
+ local_tdb.format = 0;
11859
+ if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb, 2)) == 0)
11861
+ rc = __builtin_tend ();
11864
+ return 100 * rc + 1;
11866
+ if (local_tdb.format != 0)
11868
+ dump_tdb (&local_tdb);
11869
+ return 100 * local_tdb.format + 2;
11874
+ return 100 * rc + 3;
11876
+ local_tdb.format = 0;
11877
+ if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb, 2)) == 0)
11879
+ __builtin_tabort (257);
11886
+ return 100 * rc + 5;
11888
+ if (local_tdb.format != 1)
11890
+ dump_tdb (&local_tdb);
11891
+ return 100 * local_tdb.format + 6;
11894
+ local_tdb256.format = 0;
11895
+ if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb256, 2)) == 0)
11897
+ rc = __builtin_tend ();
11900
+ return 1100 * rc + 1;
11902
+ if (local_tdb256.format != 0)
11904
+ dump_tdb (&local_tdb256);
11905
+ return 1100 * local_tdb256.format + 2;
11910
+ return 1100 * rc + 3;
11912
+ local_tdb256.format = 0;
11913
+ if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb256, 2)) == 0)
11915
+ __builtin_tabort (257);
11922
+ return 2100 * rc + 5;
11924
+ if (local_tdb256.format != 1)
11926
+ dump_tdb (&local_tdb256);
11927
+ return 2100 * local_tdb256.format + 6;
11934
+static int test_etnd (void)
11941
+ if ((rc = __builtin_tbegin ((void *)0)) == 0)
11943
+ counters.c1 = __builtin_tx_nesting_depth ();
11944
+ if (__builtin_tbegin ((void *)0) == 0)
11946
+ counters.c2 = __builtin_tx_nesting_depth ();
11947
+ if (__builtin_tbegin ((void *)0) == 0)
11949
+ counters.c3 = __builtin_tx_nesting_depth ();
11950
+ __builtin_tend ();
11952
+ __builtin_tend ();
11954
+ __builtin_tend ();
11958
+ return 100 * rc + 1;
11960
+ if (counters.c1 != 1)
11962
+ return 100 * counters.c1 + 2;
11964
+ if (counters.c2 != 2)
11966
+ return 100 * counters.c2 + 3;
11968
+ if (counters.c3 != 3)
11970
+ return 100 * counters.c3 + 4;
11976
+static int test_tbeginc (void)
11981
+ __builtin_tbeginc ();
11983
+ rc = __builtin_tend ();
11986
+ return 10000 * rc + 1;
11988
+ if (counters.c1 != 1)
11990
+ return 100000 * counters.c1 + 3;
11996
+/* ---------------------------- local testing framework functions ---------- */
11998
+static int run_one_test (const test_table_entry_t *test_entry)
12000
+ int do_print_passes;
12005
+ /* Warmup run to get all necessary data and instruction pages into the page
12011
+ for (run = 0; run < NUM_WARMUP_RUNS; run++)
12013
+ test_entry->test_func ();
12017
+ do_print_passes = (
12018
+ test_entry->required_quorum != 1 ||
12019
+ test_entry->max_repetitions != 1);
12020
+ printf ("RRR RUN %s\n", test_entry->name);
12021
+ if (do_print_passes == 1)
12024
+ " (requires %d successful out of %d runs)\n",
12025
+ test_entry->required_quorum,
12026
+ test_entry->max_repetitions);
12030
+ for (rc = 0, i = 0; i < test_entry->max_repetitions; i++)
12032
+ if (do_print_passes == 1)
12043
+ rc = test_entry->test_func ();
12046
+ if (do_print_passes == 1)
12048
+ printf (" success");
12051
+ if (succeeded >= test_entry->required_quorum)
12058
+ printf (" failed (rc = %d)", rc);
12061
+ if (do_print_passes == 1 || rc != 0)
12065
+ if (succeeded >= test_entry->required_quorum)
12067
+ printf ("+++ OK %s\n", test_entry->name);
12073
+ printf ("--- FAIL %s\n", test_entry->name);
12075
+ return (rc != 0) ? rc : -1;
12079
+static int run_all_tests (const test_table_entry_t *test_table)
12081
+ const test_table_entry_t *test;
12085
+ rc = 0, test = &test_table[0];
12086
+ test->test_func != NULL && rc == 0; test++)
12088
+ rc = run_one_test (test);
12094
+/* ---------------------------- interface functions ------------------------ */
12098
+ const test_table_entry_t test_table[] = {
12099
+ TEST_NO_REP (test_constants),
12100
+ TEST_DF_REP (test_tbegin_ntstg_tend),
12101
+ TEST_DF_REP (test_tbegin_ntstg_tabort),
12102
+ TEST_DF_REP (test_tbegin_nofloat),
12103
+ TEST_NO_REP (test_tbegin_retry),
12104
+ TEST_NO_REP (test_tbegin_retry_nofloat),
12105
+ TEST_DF_REP (test_tbegin_aborts),
12106
+ TEST_DF_REP (test_tbegin_indirect_aborts),
12107
+ TEST_DF_REP (test_tbegin_nofloat_aborts),
12108
+ TEST_DF_REP (test_tbegin_nofloat_indirect_aborts),
12109
+ TEST_NO_REP (test_tbegin_retry_aborts),
12110
+ TEST_NO_REP (test_tbegin_retry_nofloat_aborts),
12111
+ TEST_DF_REP (test_tbegin_tdb),
12112
+ TEST_DF_REP (test_tbegin_nofloat_tdb),
12113
+ TEST_NO_REP (test_tbegin_retry_tdb),
12114
+ TEST_NO_REP (test_tbegin_retry_nofloat_tdb),
12115
+ TEST_DF_REP (test_etnd),
12116
+ TEST_DF_REP (test_tbeginc),
12117
+ { (void *)0, 0, 0 }
12123
+ rc = run_all_tests (test_table);
12128
Index: gcc/testsuite/gcc.target/s390/hotpatch-7.c
12129
===================================================================
12130
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-7.c (.../tags/gcc_4_8_2_release)
12131
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-7.c (.../branches/gcc-4_8-branch)
12133
+/* Functional tests for the function hotpatching feature. */
12135
+/* { dg-do run } */
12136
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
12138
+#include <stdio.h>
12140
+__attribute__ ((hotpatch(0)))
12143
+ printf("hello, world!\n");
12151
+/* Check number of occurences of certain instructions. */
12152
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
12153
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
12154
Index: gcc/testsuite/gcc.target/s390/htm-builtins-2.c
12155
===================================================================
12156
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-2.c (.../tags/gcc_4_8_2_release)
12157
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-2.c (.../branches/gcc-4_8-branch)
12159
+/* Functional tests of the htm __TM_... macros. */
12161
+/* { dg-do run } */
12162
+/* { dg-require-effective-target htm } */
12163
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
12165
+/* ---------------------------- included header files ---------------------- */
12167
+#include <stdio.h>
12168
+#include <string.h>
12169
+#include <inttypes.h>
12170
+#include <htmxlintrin.h>
12172
+/* ---------------------------- local definitions -------------------------- */
12174
+#define DEFAULT_MAX_REPETITIONS 5
12175
+#define DEFAULT_REQUIRED_QUORUM ((DEFAULT_MAX_REPETITIONS) - 1)
12176
+#define DEFAULT_ABORT_ADDRESS (0x12345678u)
12178
+/* ---------------------------- local macros ------------------------------- */
12180
+#define TEST_DF_REP(name) \
12181
+ { #name, name, DEFAULT_MAX_REPETITIONS, DEFAULT_REQUIRED_QUORUM }
12182
+#define TEST_NO_REP(name) { #name, name, 1, 1 }
12184
+/* ---------------------------- local types -------------------------------- */
12186
+typedef int (*test_func_t)(void);
12190
+ const char *name;
12191
+ test_func_t test_func;
12192
+ int max_repetitions;
12193
+ int required_quorum;
12194
+} test_table_entry_t;
12198
+ ABORT_T_SYSTEM = 0,
12199
+ ABORT_T_USER = 1,
12204
+ ABORT_T_NONE = 0,
12206
+ ABORT_T_FOOTPRINT_EXCEEDED,
12207
+ ABORT_T_NESTED_TOO_DEEP,
12208
+ ABORT_T_CONFLICT,
12210
+ ABORT_T_INVALID_ABORT_CODE
12213
+/* ---------------------------- local variables ---------------------------- */
12215
+__attribute__ ((aligned(256))) static struct __htm_tdb local_tdb256;
12216
+static struct __htm_tdb local_tdb;
12218
+static abort_t const abort_classes[] =
12220
+ ABORT_T_INVALID_ABORT_CODE,
12228
+ ABORT_T_FOOTPRINT_EXCEEDED,
12230
+ ABORT_T_FOOTPRINT_EXCEEDED,
12231
+ ABORT_T_CONFLICT,
12232
+ ABORT_T_CONFLICT,
12236
+ ABORT_T_NESTED_TOO_DEEP,
12243
+static size_t num_abort_classes = sizeof(abort_classes) / sizeof(abort_t);
12245
+/* ---------------------------- exported variables (globals) --------------- */
12247
+int global_int = 0;
12248
+uint64_t global_u64 = 0;
12249
+float global_float_1 = 1.0;
12250
+float global_float_2 = 2.5;
12251
+float global_float_3 = 0.0;
12252
+__attribute__ ((aligned(256))) struct
12254
+ volatile uint64_t c1;
12255
+ volatile uint64_t c2;
12256
+ volatile uint64_t c3;
12257
+} counters = { 0, 0, 0 };
12259
+/* ---------------------------- local helper functions --------------------- */
12261
+static void dump_tdb(struct __htm_tdb *tdb)
12263
+ unsigned char *p;
12267
+ p = (unsigned char *)tdb;
12268
+ for (i = 0; i < 16; i++)
12270
+ fprintf(stderr, "0x%02x ", i * 16);
12271
+ for (j = 0; j < 16; j++)
12273
+ fprintf(stderr, "%02x", (int)p[i * 16 + j]);
12276
+ fprintf(stderr, " ");
12280
+ fprintf(stderr, " ");
12283
+ fprintf(stderr, "\n");
12289
+static void make_fake_tdb(struct __htm_tdb *tdb)
12291
+ memset(tdb, 0, sizeof(*tdb));
12293
+ tdb->nesting_depth = 1;
12294
+ tdb->atia = DEFAULT_ABORT_ADDRESS;
12295
+ tdb->abort_code = 11;
12300
+static int check_abort_code_in_tdb(struct __htm_tdb *tdb, uint64_t abort_code)
12305
+ if (abort_code != 0)
12309
+ addr = __TM_failure_address(&local_tdb);
12310
+ if (addr != DEFAULT_ABORT_ADDRESS)
12316
+ long long tdb_abort_code;
12318
+ tdb_abort_code = __TM_failure_code(tdb);
12319
+ if ((uint64_t)tdb_abort_code != abort_code)
12322
+ stderr, "tm_ac %" PRIu64 ", ac %" PRIu64
12323
+ ", tdb_ac %" PRIu64 "\n",
12324
+ (uint64_t)tdb_abort_code, abort_code,
12325
+ (uint64_t)tdb->abort_code);
12329
+ expect_rc = (abort_code >= 256) ? 1 : 0;
12330
+ rc = __TM_is_user_abort(tdb);
12331
+ if (rc != expect_rc)
12333
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
12337
+ unsigned char code;
12340
+ rc = __TM_is_named_user_abort(tdb, &code);
12341
+ if (rc != expect_rc)
12344
+ stderr, "rc %ld, expect_rc %ld\n", rc,
12348
+ if (expect_rc == 1 && code != abort_code - 256)
12353
+ if (abort_code > (uint64_t)num_abort_classes)
12355
+ abort_code = (uint64_t)num_abort_classes;
12357
+ expect_rc = (abort_classes[abort_code] == ABORT_T_ILLEGAL) ? 1 : 0;
12358
+ rc = __TM_is_illegal(tdb);
12359
+ if (rc != expect_rc)
12362
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
12366
+ (abort_classes[abort_code] == ABORT_T_FOOTPRINT_EXCEEDED) ?
12368
+ rc = __TM_is_footprint_exceeded(tdb);
12369
+ if (rc != expect_rc)
12372
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
12376
+ (abort_classes[abort_code] == ABORT_T_NESTED_TOO_DEEP) ? 1 : 0;
12377
+ rc = __TM_is_nested_too_deep(tdb);
12378
+ if (rc != expect_rc)
12381
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
12384
+ expect_rc = (abort_classes[abort_code] == ABORT_T_CONFLICT) ? 1 : 0;
12385
+ rc = __TM_is_conflict(tdb);
12386
+ if (rc != expect_rc)
12389
+ fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
12396
+/* ---------------------------- local test functions ----------------------- */
12398
+/* Not a test; make sure that the involved global cachelines are reserved for
12400
+static int init_cache(void)
12402
+ make_fake_tdb(&local_tdb);
12403
+ make_fake_tdb(&local_tdb256);
12406
+ global_float_1 = 1.0;
12407
+ global_float_2 = 2.5;
12408
+ global_float_3 = 0.0;
12416
+static int test_abort_classification(void)
12420
+ make_fake_tdb(&local_tdb);
12421
+ for (i = 0; i <= 256; i++)
12425
+ local_tdb.abort_code = (uint64_t)i;
12426
+ rc = check_abort_code_in_tdb(&local_tdb, (uint64_t)i);
12429
+ return 100 * i + rc;
12436
+static int test_cc_classification(void)
12440
+ rc = __TM_is_failure_persistent(0);
12445
+ rc = __TM_is_failure_persistent(1);
12450
+ rc = __TM_is_failure_persistent(2);
12455
+ rc = __TM_is_failure_persistent(3);
12464
+static int test_tbegin_ntstg_tend(void)
12470
+ if ((rc = __TM_simple_begin()) == 0)
12472
+ __TM_non_transactional_store((uint64_t *)&counters.c1, 1);
12477
+ return 100 * rc + 5;
12479
+ if (counters.c1 != 1)
12481
+ return 100 * counters.c1 + 2;
12483
+ if (counters.c2 != 2)
12485
+ return 100 * counters.c2 + 3;
12490
+ return 100 * rc + 4;
12496
+static int test_tbegin_ntstg_tabort(void)
12498
+ register float f;
12503
+ if (__TM_simple_begin() == 0)
12505
+ __TM_non_transactional_store((uint64_t *)&counters.c1, 1);
12508
+ __TM_named_abort(0);
12511
+ if (counters.c1 != 1)
12513
+ return 100 * counters.c1 + 2;
12515
+ if (counters.c2 != 0)
12517
+ return 100 * counters.c2 + 3;
12521
+ return 100 * f + 4;
12527
+static int test_tbegin_aborts(void)
12533
+ if ((rc = __TM_simple_begin()) == 0)
12539
+ else if (rc != 2)
12548
+ if ((rc = __TM_simple_begin()) == 0)
12551
+ __TM_named_abort(3);
12554
+ else if (rc != 3)
12556
+ return 100 * rc + 6;
12560
+ return 100 * f + 7;
12562
+ if ((rc = __TM_simple_begin()) == 0)
12564
+ global_float_3 = global_float_1 + global_float_2;
12568
+ return 100 * rc + 8;
12573
+ return 100 * rc + 9;
12575
+ if (global_float_3 != global_float_1 + global_float_2)
12577
+ return 100 * rc + 10;
12583
+static int test_tbegin_tdb(void)
12587
+ local_tdb.format = 0;
12588
+ if ((rc = __TM_begin(&local_tdb)) == 0)
12593
+ return 100 * rc + 1;
12595
+ if (local_tdb.format != 0)
12597
+ dump_tdb(&local_tdb);
12598
+ return 100 * local_tdb.format + 2;
12603
+ return 100 * rc + 3;
12605
+ local_tdb.format = 0;
12606
+ if ((rc = __TM_begin(&local_tdb)) == 0)
12608
+ __TM_named_abort(1);
12615
+ return 100 * rc + 5;
12617
+ if (local_tdb.format != 1)
12619
+ dump_tdb(&local_tdb);
12620
+ return 100 * local_tdb.format + 6;
12623
+ local_tdb256.format = 0;
12624
+ if ((rc = __TM_begin(&local_tdb256)) == 0)
12629
+ return 1100 * rc + 1;
12631
+ if (local_tdb256.format != 0)
12633
+ dump_tdb(&local_tdb256);
12634
+ return 1100 * local_tdb256.format + 2;
12639
+ return 1100 * rc + 3;
12641
+#if 1 /*!!!does not work*/
12642
+ local_tdb256.format = 0;
12643
+ if ((rc = __TM_begin(&local_tdb256)) == 0)
12645
+ __TM_named_abort(1);
12652
+ return 2100 * rc + 5;
12654
+ if (local_tdb256.format != 1)
12656
+ dump_tdb(&local_tdb256);
12657
+ return 2100 * local_tdb256.format + 6;
12665
+static int test_etnd(void)
12672
+ make_fake_tdb(&local_tdb);
12673
+ local_tdb.nesting_depth = 0;
12674
+ nd = __TM_nesting_depth(&local_tdb);
12679
+ local_tdb.nesting_depth = 7;
12680
+ nd = __TM_nesting_depth(&local_tdb);
12685
+ local_tdb.format = 0;
12686
+ nd = __TM_nesting_depth(&local_tdb);
12696
+ if ((rc = __TM_simple_begin()) == 0)
12698
+ counters.c1 = __TM_nesting_depth(0);
12699
+ if (__TM_simple_begin() == 0)
12701
+ counters.c2 = __TM_nesting_depth(0);
12702
+ if (__TM_simple_begin() == 0)
12704
+ counters.c3 = __TM_nesting_depth(0);
12713
+ return 100 * rc + 1;
12715
+ if (counters.c1 != 1)
12717
+ return 100 * counters.c1 + 2;
12719
+ if (counters.c2 != 2)
12721
+ return 100 * counters.c2 + 3;
12723
+ if (counters.c3 != 3)
12725
+ return 100 * counters.c3 + 4;
12731
+/* ---------------------------- local testing framework functions ---------- */
12733
+static int run_one_test(const test_table_entry_t *test_entry)
12735
+ int do_print_passes;
12740
+ do_print_passes = (
12741
+ test_entry->required_quorum != 1 ||
12742
+ test_entry->max_repetitions != 1);
12743
+ printf("RRR RUN %s\n", test_entry->name);
12744
+ if (do_print_passes == 1)
12747
+ " (requires %d successful out of %d runs)\n",
12748
+ test_entry->required_quorum,
12749
+ test_entry->max_repetitions);
12753
+ for (rc = 0, i = 0; i < test_entry->max_repetitions; i++)
12755
+ if (do_print_passes == 1)
12766
+ rc = test_entry->test_func();
12769
+ if (do_print_passes == 1)
12771
+ printf(" success");
12774
+ if (succeeded >= test_entry->required_quorum)
12781
+ printf(" failed (rc = %d)", rc);
12784
+ if (do_print_passes == 1 || rc != 0)
12788
+ if (succeeded >= test_entry->required_quorum)
12790
+ printf("+++ OK %s\n", test_entry->name);
12796
+ printf("--- FAIL %s\n", test_entry->name);
12798
+ return (rc != 0) ? rc : -1;
12802
+static int run_all_tests(const test_table_entry_t *test_table)
12804
+ const test_table_entry_t *test;
12808
+ rc = 0, test = &test_table[0];
12809
+ test->test_func != NULL && rc == 0; test++)
12811
+ rc = run_one_test(test);
12817
+/* ---------------------------- interface functions ------------------------ */
12821
+ const test_table_entry_t test_table[] = {
12822
+ TEST_NO_REP(init_cache),
12823
+ TEST_NO_REP(test_abort_classification),
12824
+ TEST_NO_REP(test_cc_classification),
12825
+ TEST_DF_REP(test_tbegin_ntstg_tend),
12826
+ TEST_DF_REP(test_tbegin_ntstg_tabort),
12827
+ TEST_DF_REP(test_tbegin_aborts),
12828
+ TEST_DF_REP(test_tbegin_tdb),
12829
+ TEST_DF_REP(test_etnd),
12830
+ { (void *)0, 0, 0 }
12836
+ rc = run_all_tests(test_table);
12841
Index: gcc/testsuite/gcc.target/s390/hotpatch-8.c
12842
===================================================================
12843
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-8.c (.../tags/gcc_4_8_2_release)
12844
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-8.c (.../branches/gcc-4_8-branch)
12846
+/* Functional tests for the function hotpatching feature. */
12848
+/* { dg-do run } */
12849
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
12851
+#include <stdio.h>
12853
+__attribute__ ((hotpatch))
12854
+inline void hp1(void)
12856
+ printf("hello, world!\n");
12859
+__attribute__ ((hotpatch))
12860
+__attribute__ ((always_inline))
12861
+void hp2(void) /* { dg-warning "always_inline function might not be inlinable" } */
12863
+ printf("hello, world!\n");
12864
+} /* { dg-warning "function 'hp2' with the 'always_inline' attribute is not hotpatchable" } */
12871
+/* Check number of occurences of certain instructions. */
12872
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
12873
+/* { dg-final { scan-assembler-not "nop\t0" } } */
12874
Index: gcc/testsuite/gcc.target/s390/hotpatch-9.c
12875
===================================================================
12876
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-9.c (.../tags/gcc_4_8_2_release)
12877
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-9.c (.../branches/gcc-4_8-branch)
12879
+/* Functional tests for the function hotpatching feature. */
12881
+/* { dg-do run } */
12882
+/* { dg-options "-O3 -mzarch -mhotpatch=1 --save-temps" } */
12884
+#include <stdio.h>
12886
+__attribute__ ((hotpatch(2)))
12889
+ printf("hello, world!\n");
12897
+/* Check number of occurences of certain instructions. */
12898
+/* { dg-final { scan-assembler-times "nopr\t%r7" 2 } } */
12899
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
12900
Index: gcc/testsuite/gcc.target/s390/hotpatch-10.c
12901
===================================================================
12902
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-10.c (.../tags/gcc_4_8_2_release)
12903
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-10.c (.../branches/gcc-4_8-branch)
12905
+/* Functional tests for the function hotpatching feature. */
12907
+/* { dg-do run } */
12908
+/* { dg-options "-O3 -mzarch -mno-hotpatch --save-temps" } */
12910
+#include <stdio.h>
12912
+__attribute__ ((hotpatch(2)))
12915
+ printf("hello, world!\n");
12923
+/* Check number of occurences of certain instructions. */
12924
+/* { dg-final { scan-assembler-times "nopr\t%r7" 2 } } */
12925
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
12926
Index: gcc/testsuite/gcc.target/s390/hotpatch-11.c
12927
===================================================================
12928
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-11.c (.../tags/gcc_4_8_2_release)
12929
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-11.c (.../branches/gcc-4_8-branch)
12931
+/* Functional tests for the function hotpatching feature. */
12933
+/* { dg-do run } */
12934
+/* { dg-options "-O3 -mzarch -mhotpatch -mno-hotpatch --save-temps" } */
12936
+#include <stdio.h>
12940
+ printf("hello, world!\n");
12948
+/* Check number of occurences of certain instructions. */
12949
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
12950
+/* { dg-final { scan-assembler-not "nop\t0" } } */
12951
Index: gcc/testsuite/gcc.target/s390/hotpatch-12.c
12952
===================================================================
12953
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-12.c (.../tags/gcc_4_8_2_release)
12954
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-12.c (.../branches/gcc-4_8-branch)
12956
+/* Functional tests for the function hotpatching feature. */
12958
+/* { dg-do run } */
12959
+/* { dg-options "-O3 -mzarch -mno-hotpatch -mhotpatch=1 --save-temps" } */
12961
+#include <stdio.h>
12965
+ printf("hello, world!\n");
12973
+/* Check number of occurences of certain instructions. */
12974
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
12975
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
12976
Index: gcc/testsuite/gcc.target/mips/bswap-1.c
12977
===================================================================
12978
--- a/src/gcc/testsuite/gcc.target/mips/bswap-1.c (.../tags/gcc_4_8_2_release)
12979
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-1.c (.../branches/gcc-4_8-branch)
12981
+/* { dg-options "isa_rev>=2" } */
12982
+/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
12984
+NOMIPS16 unsigned short
12985
+foo (unsigned short x)
12987
+ return ((x << 8) & 0xff00) | ((x >> 8) & 0xff);
12990
+/* { dg-final { scan-assembler "\twsbh\t" } } */
12991
Index: gcc/testsuite/gcc.target/mips/bswap-2.c
12992
===================================================================
12993
--- a/src/gcc/testsuite/gcc.target/mips/bswap-2.c (.../tags/gcc_4_8_2_release)
12994
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-2.c (.../branches/gcc-4_8-branch)
12996
+/* { dg-options "isa_rev>=2" } */
12998
+NOMIPS16 unsigned short
12999
+foo (unsigned short x)
13001
+ return __builtin_bswap16 (x);
13004
+/* { dg-final { scan-assembler "\twsbh\t" } } */
13005
Index: gcc/testsuite/gcc.target/mips/pr59137.c
13006
===================================================================
13007
--- a/src/gcc/testsuite/gcc.target/mips/pr59137.c (.../tags/gcc_4_8_2_release)
13008
+++ b/src/gcc/testsuite/gcc.target/mips/pr59137.c (.../branches/gcc-4_8-branch)
13010
+/* { dg-do run } */
13011
+/* { dg-options "-mno-plt" } */
13013
+extern void abort (void);
13021
+struct lispstruct Cnil_body;
13022
+struct lispstruct Ct_body;
13025
+struct lispstruct * __attribute__ ((noinline))
13026
+fLlistp (struct lispstruct *x0)
13028
+ if (x0 == &Cnil_body
13029
+ || (((unsigned long) x0 >= 0x80000000) ? 0
13030
+ : (!x0->e ? (x0 != &Cnil_body) : x0->t)))
13040
+ if (fLlistp ((struct lispstruct *) 0xa0000001) != &Cnil_body)
13044
Index: gcc/testsuite/gcc.target/mips/bswap-3.c
13045
===================================================================
13046
--- a/src/gcc/testsuite/gcc.target/mips/bswap-3.c (.../tags/gcc_4_8_2_release)
13047
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-3.c (.../branches/gcc-4_8-branch)
13049
+/* { dg-options "isa_rev>=2" } */
13050
+/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
13052
+NOMIPS16 unsigned int
13053
+foo (unsigned int x)
13055
+ return (((x << 24) & 0xff000000)
13056
+ | ((x << 8) & 0xff0000)
13057
+ | ((x >> 8) & 0xff00)
13058
+ | ((x >> 24) & 0xff));
13061
+/* { dg-final { scan-assembler "\twsbh\t" } } */
13062
+/* { dg-final { scan-assembler "\tror\t" } } */
13063
Index: gcc/testsuite/gcc.target/mips/bswap-4.c
13064
===================================================================
13065
--- a/src/gcc/testsuite/gcc.target/mips/bswap-4.c (.../tags/gcc_4_8_2_release)
13066
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-4.c (.../branches/gcc-4_8-branch)
13068
+/* { dg-options "isa_rev>=2" } */
13070
+NOMIPS16 unsigned int
13071
+foo (unsigned int x)
13073
+ return __builtin_bswap32 (x);
13076
+/* { dg-final { scan-assembler "\twsbh\t" } } */
13077
+/* { dg-final { scan-assembler "\tror\t" } } */
13078
Index: gcc/testsuite/gcc.target/mips/bswap-5.c
13079
===================================================================
13080
--- a/src/gcc/testsuite/gcc.target/mips/bswap-5.c (.../tags/gcc_4_8_2_release)
13081
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-5.c (.../branches/gcc-4_8-branch)
13083
+/* { dg-options "isa_rev>=2 -mgp64" } */
13084
+/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
13086
+typedef unsigned long long uint64_t;
13091
+ return (((x << 56) & 0xff00000000000000ull)
13092
+ | ((x << 40) & 0xff000000000000ull)
13093
+ | ((x << 24) & 0xff0000000000ull)
13094
+ | ((x << 8) & 0xff00000000ull)
13095
+ | ((x >> 8) & 0xff000000)
13096
+ | ((x >> 24) & 0xff0000)
13097
+ | ((x >> 40) & 0xff00)
13098
+ | ((x >> 56) & 0xff));
13101
+/* { dg-final { scan-assembler "\tdsbh\t" } } */
13102
+/* { dg-final { scan-assembler "\tdshd\t" } } */
13103
Index: gcc/testsuite/gcc.target/mips/bswap-6.c
13104
===================================================================
13105
--- a/src/gcc/testsuite/gcc.target/mips/bswap-6.c (.../tags/gcc_4_8_2_release)
13106
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-6.c (.../branches/gcc-4_8-branch)
13108
+/* { dg-options "isa_rev>=2 -mgp64" } */
13110
+typedef unsigned long long uint64_t;
13115
+ return __builtin_bswap64 (x);
13118
+/* { dg-final { scan-assembler "\tdsbh\t" } } */
13119
+/* { dg-final { scan-assembler "\tdshd\t" } } */
13120
Index: gcc/testsuite/gcc.target/sh/pr51244-19.c
13121
===================================================================
13122
--- a/src/gcc/testsuite/gcc.target/sh/pr51244-19.c (.../tags/gcc_4_8_2_release)
13123
+++ b/src/gcc/testsuite/gcc.target/sh/pr51244-19.c (.../branches/gcc-4_8-branch)
13124
@@ -22,11 +22,16 @@
13125
unwanted sequences. Thus, if we see any movt insns, something is not
13126
working as expected. This test requires -O2 because the T bit stores
13127
in question will be eliminated in additional insn split passes after
13131
+ Notice: When this test case was initially added, the T bit optimization
13132
+ was buggy and this test case resulted in wrong code. The movt
13133
+ instructions actually have to be present in this case to get
13135
/* { dg-do compile { target "sh*-*-*" } } */
13136
/* { dg-options "-O2" } */
13137
/* { dg-skip-if "" { "sh*-*-*" } { "-m5*" } { "" } } */
13138
-/* { dg-final { scan-assembler-not "movt" } } */
13139
+/* { dg-final { scan-assembler "movt" } } */
13143
Index: gcc/testsuite/gcc.target/sh/pr54089-3.c
13144
===================================================================
13145
--- a/src/gcc/testsuite/gcc.target/sh/pr54089-3.c (.../tags/gcc_4_8_2_release)
13146
+++ b/src/gcc/testsuite/gcc.target/sh/pr54089-3.c (.../branches/gcc-4_8-branch)
13148
/* { dg-options "-O1" } */
13149
/* { dg-skip-if "" { "sh*-*-*" } { "*" } { "-m1*" "-m2" "-m2e*" } } */
13150
/* { dg-final { scan-assembler-not "and" } } */
13151
-/* { dg-final { scan-assembler-not "31" } } */
13152
+/* { dg-final { scan-assembler-not "#31" } } */
13155
test00 (unsigned int a, int* b, int c, int* d, unsigned int e)
13156
Index: gcc/testsuite/go.test/go-test.exp
13157
===================================================================
13158
--- a/src/gcc/testsuite/go.test/go-test.exp (.../tags/gcc_4_8_2_release)
13159
+++ b/src/gcc/testsuite/go.test/go-test.exp (.../branches/gcc-4_8-branch)
13160
@@ -333,17 +333,16 @@
13163
if { ( [file tail $test] == "select2.go" \
13164
- || [file tail $test] == "stack.go" ) \
13165
+ || [file tail $test] == "stack.go" \
13166
+ || [file tail $test] == "peano.go" ) \
13167
&& ! [check_effective_target_split_stack] } {
13168
- # chan/select2.go fails on targets without split stack,
13169
- # because they allocate a large stack segment that blows
13170
- # out the memory calculations.
13171
+ # These tests fails on targets without split stack.
13176
- if { [file tail $test] == "rotate.go" } {
13177
- # This test produces a temporary file that takes too long
13178
+ if [string match "*go.test/test/rotate\[0123\].go" $test] {
13179
+ # These tests produces a temporary file that takes too long
13180
# to compile--5 minutes on my laptop without optimization.
13181
# When compiling without optimization it tests nothing
13182
# useful, since the point of the test is to see whether
13183
Index: gcc/testsuite/gfortran.dg/shape_8.f90
13184
===================================================================
13185
--- a/src/gcc/testsuite/gfortran.dg/shape_8.f90 (.../tags/gcc_4_8_2_release)
13186
+++ b/src/gcc/testsuite/gfortran.dg/shape_8.f90 (.../branches/gcc-4_8-branch)
13188
+! { dg-do compile }
13190
+! PR 60450: [4.7/4.8 Regression] ICE with SHAPE intrinsic
13192
+! Contributed by Dave Allured <dave.allured@noaa.gov>
13194
+ real, allocatable :: x(:,:)
13195
+ allocate (x(3,2), source=99.)
13196
+ print *, shape (x / 10.0)
13198
Index: gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90
13199
===================================================================
13200
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90 (.../tags/gcc_4_8_2_release)
13201
+++ b/src/gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90 (.../branches/gcc-4_8-branch)
13203
+! { dg-do compile }
13205
+! PR fortran/58803
13207
+! Contributed by Vittorio Zecca
13209
+! Was before ICEing due to a double free
13212
+ procedure(real), pointer, nopass :: f1, f2
13215
Index: gcc/testsuite/gfortran.dg/gomp/pr59467.f90
13216
===================================================================
13217
--- a/src/gcc/testsuite/gfortran.dg/gomp/pr59467.f90 (.../tags/gcc_4_8_2_release)
13218
+++ b/src/gcc/testsuite/gfortran.dg/gomp/pr59467.f90 (.../branches/gcc-4_8-branch)
13220
+! PR libgomp/59467
13221
+! { dg-do compile }
13222
+! { dg-options "-fopenmp" }
13224
+ INTEGER :: a, b, t
13227
+ !$OMP PARALLEL REDUCTION(+:b)
13228
+ !$OMP SINGLE ! { dg-error "is not threadprivate or private in outer context" }
13229
+ !$OMP ATOMIC WRITE
13231
+ !$OMP END SINGLE COPYPRIVATE (a)
13233
+ !$OMP END PARALLEL
13236
+ !$OMP PARALLEL REDUCTION(+:b)
13238
+ !$OMP ATOMIC WRITE
13240
+ !$OMP END SINGLE COPYPRIVATE (b)
13241
+ !$OMP END PARALLEL
13244
Index: gcc/testsuite/gfortran.dg/allocate_class_3.f90
13245
===================================================================
13246
--- a/src/gcc/testsuite/gfortran.dg/allocate_class_3.f90 (.../tags/gcc_4_8_2_release)
13247
+++ b/src/gcc/testsuite/gfortran.dg/allocate_class_3.f90 (.../branches/gcc-4_8-branch)
13250
+! Tests the fix for PR59414, comment #3, in which the allocate
13251
+! expressions were not correctly being stripped to provide the
13252
+! vpointer as an lhs to the pointer assignment of the vptr from
13253
+! the SOURCE expression.
13255
+! Contributed by Antony Lewis <antony@cosmologist.info>
13257
+module ObjectLists
13264
+ type Object_array_pointer
13265
+ class(t), pointer :: p(:)
13270
+ subroutine AddArray1 (P, Pt)
13272
+ class(Object_array_pointer) :: Pt
13275
+ class is (Object_array_pointer)
13276
+ if (associated (Pt%P)) deallocate (Pt%P)
13277
+ allocate(Pt%P(1:SIZE(P)), source=P)
13281
+ subroutine AddArray2 (P, Pt)
13283
+ class(Object_array_pointer) :: Pt
13286
+ type is (Object_array_pointer)
13287
+ if (associated (Pt%P)) deallocate (Pt%P)
13288
+ allocate(Pt%P(1:SIZE(P)), source=P)
13292
+ subroutine AddArray3 (P, Pt)
13294
+ class(Object_array_pointer) :: Pt
13297
+ class is (Object_array_pointer)
13298
+ if (associated (Pt%P)) deallocate (Pt%P)
13299
+ allocate(Pt%P(1:4), source=P)
13303
+ subroutine AddArray4 (P, Pt)
13305
+ class(Object_array_pointer) :: Pt
13308
+ class is (Object_array_pointer)
13309
+ if (associated (Pt%P)) deallocate (Pt%P)
13310
+ allocate(Pt%P(1:SIZE(P)), source=P)
13316
+ type(Object_array_pointer), pointer :: Pt
13317
+ class(t), pointer :: P(:)
13319
+ allocate (P(2), source = [t(1),t(2)])
13320
+ allocate (Pt, source = Object_array_pointer(NULL()))
13321
+ call AddArray1 (P, Pt)
13322
+ select type (x => Pt%p)
13324
+ if (any (x%i .ne. [1,2])) call abort
13329
+ allocate (P(3), source = [t(3),t(4),t(5)])
13330
+ allocate (Pt, source = Object_array_pointer(NULL()))
13331
+ call AddArray2 (P, Pt)
13332
+ select type (x => Pt%p)
13334
+ if (any (x%i .ne. [3,4,5])) call abort
13339
+ allocate (Pt, source = Object_array_pointer(NULL()))
13340
+ call AddArray3 (t(6), Pt)
13341
+ select type (x => Pt%p)
13343
+ if (any (x%i .ne. [6,6,6,6])) call abort
13347
+ allocate (Pt, source = Object_array_pointer(NULL()))
13348
+ call AddArray4 ([t(7), t(8)], Pt)
13349
+ select type (x => Pt%p)
13351
+ if (any (x%i .ne. [7,8])) call abort
13356
Index: gcc/testsuite/gfortran.dg/reshape_6.f90
13357
===================================================================
13358
--- a/src/gcc/testsuite/gfortran.dg/reshape_6.f90 (.../tags/gcc_4_8_2_release)
13359
+++ b/src/gcc/testsuite/gfortran.dg/reshape_6.f90 (.../branches/gcc-4_8-branch)
13361
+! { dg-do compile }
13362
+! PR fortran/58989
13366
+ real(8), dimension(4,4) :: fluxes
13367
+ real(8), dimension(2,2,2,2) :: f
13368
+ integer, dimension(3) :: dmmy
13369
+ integer, parameter :: indx(4)=(/2,2,2,2/)
13375
+ f = reshape(fluxes,(/dmmy,2/)) ! Caused an ICE
13376
+ f = reshape(fluxes,(/2,2,2,2/)) ! Works as expected
13377
+ f = reshape(fluxes,indx) ! Works as expected
13380
Index: gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90
13381
===================================================================
13382
--- a/src/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90 (.../tags/gcc_4_8_2_release)
13383
+++ b/src/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90 (.../branches/gcc-4_8-branch)
13385
+! { dg-do compile }
13387
+! PR fortran/58007
13388
+! Unresolved fiixup while loading a module.
13390
+! This tests that the specification expression A%MAX_DEGREE in module BSR is
13391
+! correctly loaded and resolved in program MAIN.
13393
+! Original testcase from Daniel Shapiro <shapero@uw.edu>
13396
+ type :: sparse_matrix
13397
+ integer :: max_degree
13404
+ type, extends(sparse_matrix) :: bsr_matrix
13411
+ function get_neighbors (A)
13412
+ type(bsr_matrix), intent(in) :: A
13413
+ integer :: get_neighbors(A%max_degree)
13421
Index: gcc/testsuite/gfortran.dg/init_flag_12.f90
13422
===================================================================
13423
--- a/src/gcc/testsuite/gfortran.dg/init_flag_12.f90 (.../tags/gcc_4_8_2_release)
13424
+++ b/src/gcc/testsuite/gfortran.dg/init_flag_12.f90 (.../branches/gcc-4_8-branch)
13426
+! { dg-do compile }
13427
+! { dg-options "-fno-automatic -finit-local-zero" }
13429
+! PR 55907: [4.7/4.8/4.9 Regression] ICE with -fno-automatic -finit-local-zero
13431
+! Contributed by J.R. Garcia <garcia.espinosa.jr@gmail.com>
13433
+subroutine cchaine (i)
13436
+ character(len=i) :: chaine
13437
+ write(*,*) chaine
13439
Index: gcc/testsuite/gfortran.dg/derived_external_function_1.f90
13440
===================================================================
13441
--- a/src/gcc/testsuite/gfortran.dg/derived_external_function_1.f90 (.../tags/gcc_4_8_2_release)
13442
+++ b/src/gcc/testsuite/gfortran.dg/derived_external_function_1.f90 (.../branches/gcc-4_8-branch)
13446
+! PR fortran/58771
13448
+! Contributed by Vittorio Secca <zeccav@gmail.com>
13450
+! ICEd on the write statement with f() because the derived type backend
13451
+! declaration not built.
13459
+type(t) function f() result(ff)
13465
+ character (20) :: line1, line2
13467
+ write (line1, *) f()
13468
+ write (line2, *) 42_4
13469
+ if (line1 .ne. line2) call abort
13471
Index: gcc/testsuite/gfortran.dg/implicit_pure_4.f90
13472
===================================================================
13473
--- a/src/gcc/testsuite/gfortran.dg/implicit_pure_4.f90 (.../tags/gcc_4_8_2_release)
13474
+++ b/src/gcc/testsuite/gfortran.dg/implicit_pure_4.f90 (.../branches/gcc-4_8-branch)
13476
+! { dg-do compile }
13478
+! PR fortran/60543
13479
+! PR fortran/60283
13483
+ REAL(8) FUNCTION random()
13484
+ CALL RANDOM_NUMBER(random)
13485
+ END FUNCTION random
13486
+ REAL(8) FUNCTION random2()
13490
+ CALL RANDOM_NUMBER(random2)
13494
+ END FUNCTION random2
13497
+! { dg-final { scan-module-absence "m" "IMPLICIT_PURE" } }
13498
Index: gcc/testsuite/gfortran.dg/null_6.f90
13499
===================================================================
13500
--- a/src/gcc/testsuite/gfortran.dg/null_6.f90 (.../tags/gcc_4_8_2_release)
13501
+++ b/src/gcc/testsuite/gfortran.dg/null_6.f90 (.../branches/gcc-4_8-branch)
13504
subroutine test_PR34547_3 ()
13505
integer, allocatable :: i(:)
13507
+ print *, NULL(i) ! { dg-error "Invalid context for NULL" }
13508
end subroutine test_PR34547_3
13509
Index: gcc/testsuite/gfortran.dg/fmt_en.f90
13510
===================================================================
13511
--- a/src/gcc/testsuite/gfortran.dg/fmt_en.f90 (.../tags/gcc_4_8_2_release)
13512
+++ b/src/gcc/testsuite/gfortran.dg/fmt_en.f90 (.../branches/gcc-4_8-branch)
13515
+! PR60128 Invalid outputs with EN descriptors
13516
+! Test case provided by Walt Brainerd.
13519
+ integer :: n_tst = 0, n_cnt = 0
13522
+ call checkfmt("(en15.2)", -.44444, " -444.44E-03")
13524
+! Test for the bug in comment 6.
13525
+ call checkfmt("(en15.0)", 1.0, " 1.E+00")
13526
+ call checkfmt("(en15.0)", 1.00000012, " 1.E+00")
13527
+ call checkfmt("(en15.0)", 0.99999994, " 1.E+00")
13528
+ call checkfmt("(en15.0)", 10.0, " 10.E+00")
13529
+ call checkfmt("(en15.0)", 10.0000010, " 10.E+00")
13530
+ call checkfmt("(en15.0)", 9.99999905, " 10.E+00")
13531
+ call checkfmt("(en15.0)", 100.0, " 100.E+00")
13532
+ call checkfmt("(en15.0)", 100.000008, " 100.E+00")
13533
+ call checkfmt("(en15.0)", 99.9999924, " 100.E+00")
13534
+ call checkfmt("(en15.0)", 1000.0, " 1.E+03")
13535
+ call checkfmt("(en15.0)", 1000.00006, " 1.E+03")
13536
+ call checkfmt("(en15.0)", 999.999939, " 1.E+03")
13537
+ call checkfmt("(en15.0)", 9.5, " 10.E+00")
13538
+ call checkfmt("(en15.0)", 9.50000095, " 10.E+00")
13539
+ call checkfmt("(en15.0)", 9.49999905, " 9.E+00")
13540
+ call checkfmt("(en15.0)", 99.5, " 100.E+00")
13541
+ call checkfmt("(en15.0)", 99.5000076, " 100.E+00")
13542
+ call checkfmt("(en15.0)", 99.4999924, " 99.E+00")
13543
+ call checkfmt("(en15.0)", 999.5, " 1.E+03")
13544
+ call checkfmt("(en15.0)", 999.500061, " 1.E+03")
13545
+ call checkfmt("(en15.0)", 999.499939, " 999.E+00")
13546
+ call checkfmt("(en15.0)", 9500.0, " 10.E+03")
13547
+ call checkfmt("(en15.0)", 9500.00098, " 10.E+03")
13548
+ call checkfmt("(en15.0)", 9499.99902, " 9.E+03")
13549
+ call checkfmt("(en15.1)", 9950.0, " 10.0E+03")
13550
+ call checkfmt("(en15.2)", 9995.0, " 10.00E+03")
13551
+ call checkfmt("(en15.3)", 9999.5, " 10.000E+03")
13552
+ call checkfmt("(en15.1)", 9.5, " 9.5E+00")
13553
+ call checkfmt("(en15.1)", 9.50000095, " 9.5E+00")
13554
+ call checkfmt("(en15.1)", 9.49999905, " 9.5E+00")
13555
+ call checkfmt("(en15.1)", 0.099951, " 100.0E-03")
13556
+ call checkfmt("(en15.1)", 0.009951, " 10.0E-03")
13557
+ call checkfmt("(en15.1)", 0.000999951," 1.0E-03")
13559
+ call checkfmt("(en15.0)", -1.0, " -1.E+00")
13560
+ call checkfmt("(en15.0)", -1.00000012, " -1.E+00")
13561
+ call checkfmt("(en15.0)", -0.99999994, " -1.E+00")
13562
+ call checkfmt("(en15.0)", -10.0, " -10.E+00")
13563
+ call checkfmt("(en15.0)", -10.0000010, " -10.E+00")
13564
+ call checkfmt("(en15.0)", -9.99999905, " -10.E+00")
13565
+ call checkfmt("(en15.0)", -100.0, " -100.E+00")
13566
+ call checkfmt("(en15.0)", -100.000008, " -100.E+00")
13567
+ call checkfmt("(en15.0)", -99.9999924, " -100.E+00")
13568
+ call checkfmt("(en15.0)", -1000.0, " -1.E+03")
13569
+ call checkfmt("(en15.0)", -1000.00006, " -1.E+03")
13570
+ call checkfmt("(en15.0)", -999.999939, " -1.E+03")
13571
+ call checkfmt("(en15.0)", -9.5, " -10.E+00")
13572
+ call checkfmt("(en15.0)", -9.50000095, " -10.E+00")
13573
+ call checkfmt("(en15.0)", -9.49999905, " -9.E+00")
13574
+ call checkfmt("(en15.0)", -99.5, " -100.E+00")
13575
+ call checkfmt("(en15.0)", -99.5000076, " -100.E+00")
13576
+ call checkfmt("(en15.0)", -99.4999924, " -99.E+00")
13577
+ call checkfmt("(en15.0)", -999.5, " -1.E+03")
13578
+ call checkfmt("(en15.0)", -999.500061, " -1.E+03")
13579
+ call checkfmt("(en15.0)", -999.499939, " -999.E+00")
13580
+ call checkfmt("(en15.0)", -9500.0, " -10.E+03")
13581
+ call checkfmt("(en15.0)", -9500.00098, " -10.E+03")
13582
+ call checkfmt("(en15.0)", -9499.99902, " -9.E+03")
13583
+ call checkfmt("(en15.1)", -9950.0, " -10.0E+03")
13584
+ call checkfmt("(en15.2)", -9995.0, " -10.00E+03")
13585
+ call checkfmt("(en15.3)", -9999.5, " -10.000E+03")
13586
+ call checkfmt("(en15.1)", -9.5, " -9.5E+00")
13587
+ call checkfmt("(en15.1)", -9.50000095, " -9.5E+00")
13588
+ call checkfmt("(en15.1)", -9.49999905, " -9.5E+00")
13589
+ call checkfmt("(en15.1)", -0.099951, " -100.0E-03")
13590
+ call checkfmt("(en15.1)", -0.009951, " -10.0E-03")
13591
+ call checkfmt("(en15.1)", -0.000999951," -1.0E-03")
13593
+ call checkfmt("(en15.1)", 987350., " 987.4E+03")
13594
+ call checkfmt("(en15.2)", 98735., " 98.74E+03")
13595
+ call checkfmt("(en15.3)", 9873.5, " 9.874E+03")
13596
+ call checkfmt("(en15.1)", 987650., " 987.6E+03")
13597
+ call checkfmt("(en15.2)", 98765., " 98.76E+03")
13598
+ call checkfmt("(en15.3)", 9876.5, " 9.876E+03")
13599
+ call checkfmt("(en15.1)", 3.125E-02, " 31.2E-03")
13600
+ call checkfmt("(en15.1)", 9.375E-02, " 93.8E-03")
13601
+ call checkfmt("(en15.2)", 1.5625E-02, " 15.62E-03")
13602
+ call checkfmt("(en15.2)", 4.6875E-02, " 46.88E-03")
13603
+ call checkfmt("(en15.3)", 7.8125E-03, " 7.812E-03")
13604
+ call checkfmt("(en15.3)", 2.34375E-02, " 23.438E-03")
13605
+ call checkfmt("(en15.3)", 9.765625E-04," 976.562E-06")
13606
+ call checkfmt("(en15.6)", 2.9296875E-03," 2.929688E-03")
13608
+ call checkfmt("(en15.1)", -987350., " -987.4E+03")
13609
+ call checkfmt("(en15.2)", -98735., " -98.74E+03")
13610
+ call checkfmt("(en15.3)", -9873.5, " -9.874E+03")
13611
+ call checkfmt("(en15.1)", -987650., " -987.6E+03")
13612
+ call checkfmt("(en15.2)", -98765., " -98.76E+03")
13613
+ call checkfmt("(en15.3)", -9876.5, " -9.876E+03")
13614
+ call checkfmt("(en15.1)", -3.125E-02, " -31.2E-03")
13615
+ call checkfmt("(en15.1)", -9.375E-02, " -93.8E-03")
13616
+ call checkfmt("(en15.2)", -1.5625E-02, " -15.62E-03")
13617
+ call checkfmt("(en15.2)", -4.6875E-02, " -46.88E-03")
13618
+ call checkfmt("(en15.3)", -7.8125E-03, " -7.812E-03")
13619
+ call checkfmt("(en15.3)", -2.34375E-02, " -23.438E-03")
13620
+ call checkfmt("(en15.3)", -9.765625E-04," -976.562E-06")
13621
+ call checkfmt("(en15.6)", -2.9296875E-03," -2.929688E-03")
13623
+ !print *, n_tst, n_cnt
13624
+ if (n_cnt /= 0) call abort
13627
+ subroutine checkfmt(fmt, x, cmp)
13628
+ use ISO_FORTRAN_ENV
13630
+ integer, parameter :: j(size(real_kinds)+4)=[REAL_KINDS, [4, 4, 4, 4]]
13632
+ character(len=*), intent(in) :: fmt
13633
+ real, intent(in) :: x
13634
+ character(len=*), intent(in) :: cmp
13635
+ character(len=20) :: s
13636
+ do i=1,size(real_kinds)
13638
+ write(s, fmt) real(x,kind=j(1))
13639
+ else if (i == 2) then
13640
+ write(s, fmt) real(x,kind=j(2))
13641
+ else if (i == 3) then
13642
+ write(s, fmt) real(x,kind=j(3))
13643
+ else if (i == 4) then
13644
+ write(s, fmt) real(x,kind=j(4))
13646
+ n_tst = n_tst + 1
13647
+ if (s /= cmp) then
13648
+ print "(a,1x,a,' expected: ',1x,a)", fmt, s, cmp
13649
+ n_cnt = n_cnt + 1
13655
Index: gcc/testsuite/gfortran.dg/constructor_9.f90
13656
===================================================================
13657
--- a/src/gcc/testsuite/gfortran.dg/constructor_9.f90 (.../tags/gcc_4_8_2_release)
13658
+++ b/src/gcc/testsuite/gfortran.dg/constructor_9.f90 (.../branches/gcc-4_8-branch)
13660
+! { dg-do compile }
13661
+! { dg-options "-Wall" }
13663
+! PR 58471: [4.8/4.9 Regression] ICE on invalid with missing type constructor and -Wall
13665
+! Contributed by Andrew Benson <abensonca@gmail.com>
13672
+ module procedure mdedc ! { dg-error "is neither function nor subroutine" }
13676
+ type(cfmde), pointer :: cfd
13677
+ cfd=cfmde() ! { dg-error "Can't convert" }
13681
+! { dg-final { cleanup-modules "cf" } }
13682
Index: gcc/testsuite/gfortran.dg/round_3.f08
13683
===================================================================
13684
--- a/src/gcc/testsuite/gfortran.dg/round_3.f08 (.../tags/gcc_4_8_2_release)
13685
+++ b/src/gcc/testsuite/gfortran.dg/round_3.f08 (.../branches/gcc-4_8-branch)
13686
@@ -16,19 +16,44 @@
13687
call checkfmt("(RU,1P,G6.0E2)", 2.0, "2.E+00")
13688
call checkfmt("(RU,1P,G10.4E2)", 2.3456e5, "2.3456E+05")
13690
- call checkfmt("(RU,F2.0)", 0.09, "1.") ! 0.
13691
+ call checkfmt("(RC,G10.2)", 99.5, " 0.10E+03") ! pr59774
13692
+ call checkfmt("(RC,G10.2)", 995., " 0.10E+04") ! pr59774
13693
+ call checkfmt("(RC,G10.3)", 999.5, " 0.100E+04") ! pr59774
13694
+ call checkfmt("(RC,G10.3)", 9995., " 0.100E+05") ! pr59774
13695
+ call checkfmt("(RU,G10.2)", .099, " 0.10 ") ! pr59774
13696
+ call checkfmt("(RC,G10.1)", .095, " 0.1 ") ! pr59774
13697
+ call checkfmt("(RU,G10.3)", .0999, " 0.100 ") ! pr59774
13698
+ call checkfmt("(RC,G10.2)", .0995, " 0.10 ") ! pr59774
13700
+ call checkfmt("(RU,G9.3)", 891.1, " 892.") ! pr59836
13701
+ call checkfmt("(RD,G9.3)", -891.1, "-892.") ! pr59836
13703
+ call checkfmt("(RU,F6.4)", 0.00006, "0.0001")! 0.
13704
+ call checkfmt("(RU,F5.3)", 0.0007, "0.001") ! 0.
13705
+ call checkfmt("(RU,F4.2)", 0.008, "0.01") ! 0.
13706
+ call checkfmt("(RU,F3.1)", 0.09, "0.1") ! 0.
13708
+ call checkfmt("(RU,F2.0)", 0.09, "1.") ! 0.
13709
call checkfmt("(RD,F3.0)", -0.09, "-1.") ! -0.
13710
- call checkfmt("(RU,F2.0)", 2.0, "2.") ! 3.
13711
- call checkfmt("(RD,F3.0)", -2.0, "-2.") ! -3.
13712
- call checkfmt("(RU,F6.4)", 2.0, "2.0000") ! 2.0001
13713
- call checkfmt("(RD,F7.4)", -2.0, "-2.0000") ! -2.0001
13714
- call checkfmt("(RU,1P,E6.0E2)", 2.0, "2.E+00") ! 3.E+00
13715
+ call checkfmt("(RU,F2.0)", 0.9, "1.") ! pr59836
13716
+ call checkfmt("(RC,F2.0)", 0.4, "0.") ! pr59836
13717
+ call checkfmt("(RC,F2.0)", 0.5, "1.") ! pr59836
13718
+ call checkfmt("(RC,F2.0)", 0.6, "1.") ! pr59836
13719
+ call checkfmt("(RD,F3.0)", -0.9, "-1.") ! pr59836
13720
+ call checkfmt("(RC,F3.0)", -0.4, "-0.") ! pr59836
13721
+ call checkfmt("(RC,F3.0)", -0.5, "-1.") ! pr59836
13722
+ call checkfmt("(RC,F3.0)", -0.6, "-1.") ! pr59836
13723
+ call checkfmt("(RU,F2.0)", 2.0, "2.") ! 3.
13724
+ call checkfmt("(RD,F3.0)", -2.0, "-2.") ! -3.
13725
+ call checkfmt("(RU,F6.4)", 2.0, "2.0000") ! 2.0001
13726
+ call checkfmt("(RD,F7.4)", -2.0, "-2.0000") ! -2.0001
13727
+ call checkfmt("(RU,1P,E6.0E2)", 2.0, "2.E+00") ! 3.E+00
13728
call checkfmt("(RD,1P,E7.0E2)", -2.0, "-2.E+00") ! -3.E+00
13729
- call checkfmt("(RU,1P,E7.1E2)", 2.5, "2.5E+00") ! 2.6E+00
13730
+ call checkfmt("(RU,1P,E7.1E2)", 2.5, "2.5E+00") ! 2.6E+00
13731
call checkfmt("(RD,1P,E8.1E2)", -2.5, "-2.5E+00") ! -2.6E+00
13732
call checkfmt("(RU,1P,E10.4E2)", 2.5, "2.5000E+00") ! 2.5001E+00
13733
call checkfmt("(RD,1P,E11.4E2)", -2.5, "-2.5000E+00") ! -2.5001E+00
13734
- call checkfmt("(RU,1P,G6.0E2)", 2.0, "2.E+00") ! 3.E+00
13735
+ call checkfmt("(RU,1P,G6.0E2)", 2.0, "2.E+00") ! 3.E+00
13736
call checkfmt("(RD,1P,G7.0E2)", -2.0, "-2.E+00") ! -3.E+00
13737
call checkfmt("(RU,1P,G10.4E2)", 2.3456e5, "2.3456E+05") ! 2.3457E+05
13738
call checkfmt("(RD,1P,G11.4E2)", -2.3456e5, "-2.3456E+05") ! -2.3457E+05
13739
Index: gcc/testsuite/gfortran.dg/default_initialization_7.f90
13740
===================================================================
13741
--- a/src/gcc/testsuite/gfortran.dg/default_initialization_7.f90 (.../tags/gcc_4_8_2_release)
13742
+++ b/src/gcc/testsuite/gfortran.dg/default_initialization_7.f90 (.../branches/gcc-4_8-branch)
13744
+! { dg-do compile }
13746
+! PR fortran/57033
13747
+! ICE on a structure constructor of an extended derived type whose parent
13748
+! type last component has a default initializer
13750
+! Contributed by Tilo Schwarz <tilo@tilo-schwarz.de>
13756
+ logical :: f = .false.
13759
+type, extends(m) :: me
13766
Index: gcc/testsuite/gfortran.dg/proc_ptr_46.f90
13767
===================================================================
13768
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_46.f90 (.../tags/gcc_4_8_2_release)
13769
+++ b/src/gcc/testsuite/gfortran.dg/proc_ptr_46.f90 (.../branches/gcc-4_8-branch)
13771
+! { dg-do compile }
13773
+! PR fortran/49397
13775
+! Invalid per IR F08/0060 and F2008Corr2, C729
13778
+! Print *,f() ! << Valid when uncommented
13781
+ Procedure(Real),Pointer :: p
13782
+ p => f ! { dg-error "Procedure pointer target 'f' at .1. must be either an intrinsic, host or use associated, referenced or have the EXTERNAL attribute" }
13785
Index: gcc/testsuite/gfortran.dg/pr52370.f90
13786
===================================================================
13787
--- a/src/gcc/testsuite/gfortran.dg/pr52370.f90 (.../tags/gcc_4_8_2_release)
13788
+++ b/src/gcc/testsuite/gfortran.dg/pr52370.f90 (.../branches/gcc-4_8-branch)
13790
+! PR fortran/52370
13791
+! { dg-do compile }
13792
+! { dg-options "-O1 -Wall" }
13796
+ subroutine foo(a,b)
13797
+ real, intent(out) :: a
13798
+ real, dimension(:), optional, intent(out) :: b
13800
+ if (present(b)) then
13803
+ end subroutine foo
13804
+end module pr52370
13810
+end program prg52370
13811
Index: gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90
13812
===================================================================
13813
--- a/src/gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90 (.../tags/gcc_4_8_2_release)
13814
+++ b/src/gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90 (.../branches/gcc-4_8-branch)
13816
+! { dg-do compile }
13817
+! { dg-options "-ffrontend-optimize" }
13819
+! PR fortran/60341
13820
+! An unguarded union access was wrongly enabling a frontend optimization on a
13821
+! string comparison, leading to an ICE.
13823
+! Original testcase from Steve Chapel <steve.chapel@a2pg.com>.
13824
+! Reduced by Steven G. Kargl <kargl@gcc.gnu.org>.
13827
+ subroutine modelg(ncm)
13829
+ integer, parameter :: pc = 30, pm = pc - 1
13831
+ character*4 catt(pm,2)
13832
+ integer ncm,iatt(pm,pc)
13834
+ if (catt(i,1)//catt(i,2).eq.'central') exit
13838
Index: gcc/testsuite/gfortran.dg/list_read_12.f90
13839
===================================================================
13840
--- a/src/gcc/testsuite/gfortran.dg/list_read_12.f90 (.../tags/gcc_4_8_2_release)
13841
+++ b/src/gcc/testsuite/gfortran.dg/list_read_12.f90 (.../branches/gcc-4_8-branch)
13844
+! PR58324 Bogus end of file condition
13846
+open(99, access='stream', form='unformatted')
13850
+open(99, access='sequential', form='formatted')
13851
+read(99, *, iostat=ios) i
13852
+if (ios /= 0) call abort
13854
Index: gcc/testsuite/gfortran.dg/generic_28.f90
13855
===================================================================
13856
--- a/src/gcc/testsuite/gfortran.dg/generic_28.f90 (.../tags/gcc_4_8_2_release)
13857
+++ b/src/gcc/testsuite/gfortran.dg/generic_28.f90 (.../branches/gcc-4_8-branch)
13859
+! { dg-do compile }
13861
+! PR 58998: [4.8/4.9 Regression] Generic interface problem with gfortran
13863
+! Contributed by Paul van Delst
13866
+ procedure iargc_8
13871
+ integer(8) function iargc_8()
13873
+ iargc_8 = iargc()
13877
Index: gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90
13878
===================================================================
13879
--- a/src/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90 (.../tags/gcc_4_8_2_release)
13880
+++ b/src/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90 (.../branches/gcc-4_8-branch)
13882
+! { dg-do compile }
13884
+! PR fortran/58007
13885
+! Unresolved fixup while loading a module.
13887
+! This tests that the specification expression A%MAX_DEGREE in module BSR is
13888
+! correctly loaded and resolved in program MAIN.
13890
+! Original testcase from Daniel Shapiro <shapero@uw.edu>
13891
+! Reduced by Tobias Burnus <burnus@net-b.de> and Janus Weil <janus@gcc.gnu.org>
13894
+ type :: sparse_matrix
13895
+ integer :: max_degree
13898
+ subroutine init_interface (A)
13899
+ class(sparse_matrix), intent(in) :: A
13901
+ real function get_value_interface()
13911
+ type, extends(sparse_matrix) :: bsr_matrix
13913
+ procedure :: get_neighbors
13916
+ function get_neighbors (A)
13917
+ class(bsr_matrix), intent(in) :: A
13918
+ integer :: get_neighbors(A%max_degree)
13926
Index: gcc/testsuite/gfortran.dg/null_5.f90
13927
===================================================================
13928
--- a/src/gcc/testsuite/gfortran.dg/null_5.f90 (.../tags/gcc_4_8_2_release)
13929
+++ b/src/gcc/testsuite/gfortran.dg/null_5.f90 (.../branches/gcc-4_8-branch)
13931
end subroutine test_PR34547_1
13933
subroutine test_PR34547_2 ()
13934
- print *, null () ! { dg-error "in data transfer statement requires MOLD" }
13935
+ print *, null () ! { dg-error "Invalid context" }
13936
end subroutine test_PR34547_2
13938
subroutine test_PR34547_3 ()
13939
Index: gcc/testsuite/gfortran.dg/proc_ptr_43.f90
13940
===================================================================
13941
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_43.f90 (.../tags/gcc_4_8_2_release)
13942
+++ b/src/gcc/testsuite/gfortran.dg/proc_ptr_43.f90 (.../branches/gcc-4_8-branch)
13944
+! { dg-do compile }
13946
+! PR 58099: [4.8/4.9 Regression] [F03] over-zealous procedure-pointer error checking
13948
+! Contributed by Daniel Price <daniel.price@monash.edu>
13951
+ procedure(real), pointer :: wfunc
13957
+ pure real function w_cubic(q2)
13958
+ real, intent(in) :: q2
13963
Index: gcc/testsuite/gfortran.dg/typebound_generic_15.f90
13964
===================================================================
13965
--- a/src/gcc/testsuite/gfortran.dg/typebound_generic_15.f90 (.../tags/gcc_4_8_2_release)
13966
+++ b/src/gcc/testsuite/gfortran.dg/typebound_generic_15.f90 (.../branches/gcc-4_8-branch)
13968
+! { dg-do compile }
13970
+! PR 60231: [4.8/4.9 Regression] ICE on undefined generic
13972
+! Contributed by Antony Lewis <antony@cosmologist.info>
13978
+ procedure :: Add1 ! { dg-error "must be a module procedure" }
13979
+ procedure :: Add2 ! { dg-error "must be a module procedure" }
13980
+ generic :: Add => Add1, Add2 ! { dg-error "are ambiguous" }
13985
+! { dg-final { cleanup-modules "Objects" } }
13986
Index: gcc/testsuite/gfortran.dg/extends_15.f90
13987
===================================================================
13988
--- a/src/gcc/testsuite/gfortran.dg/extends_15.f90 (.../tags/gcc_4_8_2_release)
13989
+++ b/src/gcc/testsuite/gfortran.dg/extends_15.f90 (.../branches/gcc-4_8-branch)
13991
+! { dg-do compile }
13993
+! PR 58355: [4.7/4.8/4.9 Regression] [F03] ICE with TYPE, EXTENDS before parent TYPE defined
13995
+! Contributed by Andrew Benson <abensonca@gmail.com>
14000
+ type, extends(t1) :: t2 ! { dg-error "has not been previously defined" }
14006
+! { dg-final { cleanup-modules "ct" } }
14007
Index: gcc/testsuite/gfortran.dg/optional_class_1.f90
14008
===================================================================
14009
--- a/src/gcc/testsuite/gfortran.dg/optional_class_1.f90 (.../tags/gcc_4_8_2_release)
14010
+++ b/src/gcc/testsuite/gfortran.dg/optional_class_1.f90 (.../branches/gcc-4_8-branch)
14014
+! PR fortran/57445
14016
+! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
14018
+! Spurious assert was added at revision 192495
14026
+ subroutine opt(xa, xc, xaa, xca)
14027
+ type(t), allocatable, intent(out), optional :: xa
14028
+ class(t), allocatable, intent(out), optional :: xc
14029
+ type(t), allocatable, intent(out), optional :: xaa(:)
14030
+ class(t), allocatable, intent(out), optional :: xca(:)
14031
+ if (present (xca)) call foo_opt(xca=xca)
14032
+ end subroutine opt
14033
+ subroutine foo_opt(xa, xc, xaa, xca)
14034
+ type(t), allocatable, intent(out), optional :: xa
14035
+ class(t), allocatable, intent(out), optional :: xc
14036
+ type(t), allocatable, intent(out), optional :: xaa(:)
14037
+ class(t), allocatable, intent(out), optional :: xca(:)
14038
+ if (present (xca)) then
14039
+ if (allocated (xca)) deallocate (xca)
14040
+ allocate (xca(3), source = [t(9),t(99),t(999)])
14042
+ end subroutine foo_opt
14045
+ class(t), allocatable :: xca(:)
14046
+ allocate (xca(1), source = t(42))
14047
+ select type (xca)
14049
+ if (any (xca%i .ne. [42])) call abort
14051
+ call opt (xca = xca)
14052
+ select type (xca)
14054
+ if (any (xca%i .ne. [9,99,999])) call abort
14057
Index: gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90
14058
===================================================================
14059
--- a/src/gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90 (.../tags/gcc_4_8_2_release)
14060
+++ b/src/gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90 (.../branches/gcc-4_8-branch)
14064
+! PR 59654: [4.8/4.9 Regression] [OOP] Broken function table with complex OO use case
14066
+! Contributed by Thomas Clune <Thomas.L.Clune@nasa.gov>
14068
+module TestResult_mod
14072
+ integer :: numRun = 0
14075
+ procedure, nopass :: getNumRun
14080
+ subroutine run (this)
14081
+ class (TestResult) :: this
14082
+ this%numRun = this%numRun + 1
14085
+ subroutine getNumRun()
14091
+module BaseTestRunner_mod
14094
+ type :: BaseTestRunner
14096
+ procedure, nopass :: norun
14101
+ function norun () result(result)
14102
+ use TestResult_mod, only: TestResult
14103
+ type (TestResult) :: result
14109
+module TestRunner_mod
14110
+ use BaseTestRunner_mod, only: BaseTestRunner
14116
+ use TestRunner_mod, only: BaseTestRunner
14117
+ use TestResult_mod, only: TestResult
14120
+ type (TestResult) :: result
14122
+ call runtest (result)
14126
+ subroutine runtest (result)
14127
+ use TestResult_mod, only: TestResult
14128
+ class (TestResult) :: result
14129
+ call result%run()
14130
+ if (result%numRun /= 1) call abort()
14135
+! { dg-final { cleanup-modules "TestResult_mod BaseTestRunner_mod TestRunner_mod" } }
14136
Index: gcc/testsuite/gfortran.dg/proc_ptr_45.f90
14137
===================================================================
14138
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_45.f90 (.../tags/gcc_4_8_2_release)
14139
+++ b/src/gcc/testsuite/gfortran.dg/proc_ptr_45.f90 (.../branches/gcc-4_8-branch)
14141
+! { dg-do compile }
14143
+! PR fortran/49397
14145
+! Valid per IR F08/0060 and F2008Corr2, C729
14151
+ Procedure(Real),Pointer :: p
14165
Index: gcc/testsuite/gfortran.dg/pr59700.f90
14166
===================================================================
14167
--- a/src/gcc/testsuite/gfortran.dg/pr59700.f90 (.../tags/gcc_4_8_2_release)
14168
+++ b/src/gcc/testsuite/gfortran.dg/pr59700.f90 (.../branches/gcc-4_8-branch)
14171
+! PR59700 Test case by Steve Kargl
14176
+ character(len=80) msg
14177
+ integer, parameter :: fd = 10
14178
+ integer i1, i2, i3, i4
14179
+ real x1, x2, x3, x4
14183
+ open(unit=fd, status='scratch')
14184
+ write(fd, '(A)') '1 2 3.4 q'
14188
+ read(fd, *, err=10, iomsg=msg) i1, i2, i3, i4
14189
+10 if (msg /= 'Bad integer for item 3 in list input') call abort
14192
+ read(fd, *, err=20, iomsg=msg) x1, x2, x3, x4
14193
+20 if (msg /= 'Bad real number in item 4 of list input') call abort
14196
+ read(fd, *, err=30, iomsg=msg) i1, x2, x1, a
14197
+30 if (msg /= 'Bad logical value while reading item 4') call abort
14199
+ read(fd, *, err=31, iomsg=msg) i1, x2, a, x1
14200
+31 if (msg /= 'Bad repeat count in item 3 of list input') call abort
14202
+ open(unit=fd, status='scratch')
14203
+ write(fd, '(A)') '(1, 2) (3.4, q)'
14206
+ read(fd, *, err=40, iomsg=msg) c1, c2
14207
+40 if (msg /= 'Bad floating point number for item 2') call abort
14210
Index: gcc/testsuite/gfortran.dg/ichar_3.f90
14211
===================================================================
14212
--- a/src/gcc/testsuite/gfortran.dg/ichar_3.f90 (.../tags/gcc_4_8_2_release)
14213
+++ b/src/gcc/testsuite/gfortran.dg/ichar_3.f90 (.../branches/gcc-4_8-branch)
14215
+! { dg-do compile }
14217
+! PR fortran/59599
14218
+! The call to ichar was triggering an ICE.
14220
+! Original testcase from Fran Martinez Fadrique <fmartinez@gmv.com>
14222
+character(1) cpk(2)
14225
+res = ichar( cpk, kind=1 )
14226
+print *, ichar( cpk, kind=1 )
14228
Index: gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90
14229
===================================================================
14230
--- a/src/gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90 (.../tags/gcc_4_8_2_release)
14231
+++ b/src/gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90 (.../branches/gcc-4_8-branch)
14233
+! { dg-do compile }
14235
+! PR 59493: [OOP] ICE: Segfault on Class(*) pointer association
14237
+! Contributed by Hossein Talebi <talebi.hossein@gmail.com>
14244
+ class(ty_mytype1), allocatable, target:: cla1
14245
+ class(*), pointer :: ptr
14250
Index: gcc/testsuite/gfortran.dg/fmt_g_1.f90
14251
===================================================================
14252
--- a/src/gcc/testsuite/gfortran.dg/fmt_g_1.f90 (.../tags/gcc_4_8_2_release)
14253
+++ b/src/gcc/testsuite/gfortran.dg/fmt_g_1.f90 (.../branches/gcc-4_8-branch)
14256
+! PR59771 Cleanup handling of Gw.0 and Gw.0Ee format
14257
+! Test case prepared by Dominique d'Humieres <dominiq@lps.ens.fr>
14259
+ character(len=60) :: buffer, buffer1
14261
+ write (buffer ,'(6(1X,1PG9.0e2))') 0.0, 0.04, 0.06, 0.4, 0.6, 243.0
14262
+ write (buffer1,'(6(1X,1PE9.0e2))') 0.0, 0.04, 0.06, 0.4, 0.6, 243.0
14264
+ if (buffer /= buffer1) call abort
14266
Index: gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90
14267
===================================================================
14268
--- a/src/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90 (.../tags/gcc_4_8_2_release)
14269
+++ b/src/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90 (.../branches/gcc-4_8-branch)
14273
+! PR fortran/59906
14275
+! Contributed by H Anlauf <anlauf@gmx.de>
14277
+! Failed generate character scalar for scalarized loop for elemantal call.
14284
+ subroutine y(str)
14285
+ character(len=*), intent(in) :: str
14286
+ character(len=len_trim(str)) :: str_aux
14287
+ character(len=3) :: str3 = 'abc'
14291
+ ! Compiled but did not give correct result
14292
+ if (any (str_cmp((/'aaa','bbb'/), str) .neqv. [.FALSE.,.TRUE.])) call abort
14294
+ ! Did not compile
14295
+ if (any (str_cmp((/'bbb', 'aaa'/), str_aux) .neqv. [.TRUE.,.FALSE.])) call abort
14298
+ if (any (str_cmp((/'bbb', 'aaa'/), str3) .neqv. [.FALSE.,.FALSE.])) call abort
14299
+ if (any (str_cmp((/'bbb', 'aaa'/), 'aaa') .neqv. [.FALSE.,.TRUE.])) call abort
14303
+ elemental logical function str_cmp(str1, str2)
14304
+ character(len=*), intent(in) :: str1
14305
+ character(len=*), intent(in) :: str2
14306
+ str_cmp = (str1 == str2)
14307
+ end function str_cmp
14310
Index: gcc/testsuite/gcc.c-torture/execute/20140212-1.c
14311
===================================================================
14312
--- a/src/gcc/testsuite/gcc.c-torture/execute/20140212-1.c (.../tags/gcc_4_8_2_release)
14313
+++ b/src/gcc/testsuite/gcc.c-torture/execute/20140212-1.c (.../branches/gcc-4_8-branch)
14315
+/* PR rtl-optimization/60116 */
14316
+/* Reported by Zhendong Su <su@cs.ucdavis.edu> */
14318
+extern void abort (void);
14320
+int a, b, c, d = 1, e, f = 1, h, i, k;
14334
+ l = ~g + (long long) e && 1;
14352
Index: gcc/testsuite/gcc.c-torture/execute/pr58984.c
14353
===================================================================
14354
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr58984.c (.../tags/gcc_4_8_2_release)
14355
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr58984.c (.../branches/gcc-4_8-branch)
14357
+/* PR tree-optimization/58984 */
14359
+struct S { int f0 : 8; int : 6; int f1 : 5; };
14360
+struct T { char f0; int : 6; int f1 : 5; };
14362
+int a, *c = &a, e, n, b, m;
14367
+ const unsigned short *f[36];
14368
+ for (; e < 2; e++)
14370
+ const unsigned short **i = &f[0];
14384
+ const unsigned short *f[36];
14385
+ for (; e < 2; e++)
14387
+ const unsigned short **i = &f[0];
14401
+ struct S o = { 1, 1 };
14405
+ __builtin_abort ();
14407
+ struct T p = { 1, 1 };
14411
+ __builtin_abort ();
14414
Index: gcc/testsuite/gcc.c-torture/execute/pr60454.c
14415
===================================================================
14416
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr60454.c (.../tags/gcc_4_8_2_release)
14417
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr60454.c (.../branches/gcc-4_8-branch)
14419
+#ifdef __UINT32_TYPE__
14420
+typedef __UINT32_TYPE__ uint32_t;
14422
+typedef unsigned uint32_t;
14425
+#define __fake_const_swab32(x) ((uint32_t)( \
14426
+ (((uint32_t)(x) & (uint32_t)0x000000ffUL) << 24) | \
14427
+ (((uint32_t)(x) & (uint32_t)0x0000ff00UL) << 8) | \
14428
+ (((uint32_t)(x) & (uint32_t)0x000000ffUL) << 8) | \
14429
+ (((uint32_t)(x) & (uint32_t)0x0000ff00UL) ) | \
14430
+ (((uint32_t)(x) & (uint32_t)0xff000000UL) >> 24)))
14432
+/* Previous version of bswap optimization would detect byte swap when none
14433
+ happen. This test aims at catching such wrong detection to avoid
14436
+__attribute__ ((noinline, noclone)) uint32_t
14437
+fake_swap32 (uint32_t in)
14439
+ return __fake_const_swab32 (in);
14444
+ if (sizeof (uint32_t) * __CHAR_BIT__ != 32)
14446
+ if (fake_swap32 (0x12345678UL) != 0x78567E12UL)
14447
+ __builtin_abort ();
14450
Index: gcc/testsuite/gcc.c-torture/execute/pr60017.c
14451
===================================================================
14452
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr60017.c (.../tags/gcc_4_8_2_release)
14453
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr60017.c (.../branches/gcc-4_8-branch)
14455
+/* PR target/60017 */
14457
+extern void abort (void);
14472
+struct S1 x = { 1, {{2, 3}, {4, 5}}, {{6, 7}, {8, 9}} };
14474
+struct S1 func (void)
14481
+ struct S1 ret = func ();
14483
+ if (ret.m2[1].m1 != 9)
14488
Index: gcc/testsuite/gcc.c-torture/execute/20131127-1.c
14489
===================================================================
14490
--- a/src/gcc/testsuite/gcc.c-torture/execute/20131127-1.c (.../tags/gcc_4_8_2_release)
14491
+++ b/src/gcc/testsuite/gcc.c-torture/execute/20131127-1.c (.../branches/gcc-4_8-branch)
14493
+/* PR middle-end/59138 */
14494
+/* Testcase by John Regehr <regehr@cs.utah.edu> */
14496
+extern void abort (void);
14509
+struct S0 b = { 1 }, c, d, e;
14511
+struct S0 fn1() { return c; }
14527
Index: gcc/testsuite/gcc.c-torture/execute/pr59358.c
14528
===================================================================
14529
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59358.c (.../tags/gcc_4_8_2_release)
14530
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59358.c (.../branches/gcc-4_8-branch)
14532
+/* PR tree-optimization/59358 */
14534
+__attribute__((noinline, noclone)) int
14535
+foo (int *x, int y)
14538
+ if (y > z && y <= 16)
14548
+ for (i = 1; i < 17; i++)
14550
+ int j = foo (&i, 16);
14552
+ if (i >= 8 && i <= 15)
14553
+ k = 16 + (i - 8) * 2;
14554
+ else if (i >= 4 && i <= 7)
14555
+ k = 16 + (i - 4) * 4;
14561
+ __builtin_abort ();
14566
+ k = 8 + (i - 4) * 2;
14572
+ __builtin_abort ();
14576
Index: gcc/testsuite/gcc.c-torture/execute/pr60062.c
14577
===================================================================
14578
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr60062.c (.../tags/gcc_4_8_2_release)
14579
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr60062.c (.../branches/gcc-4_8-branch)
14581
+/* PR target/60062 */
14586
+foo (const char *p1, int p2)
14588
+ if (__builtin_strcmp (p1, "hello") != 0)
14589
+ __builtin_abort ();
14593
+bar (const char *p1)
14595
+ if (__builtin_strcmp (p1, "hello") != 0)
14596
+ __builtin_abort ();
14599
+__attribute__((optimize (0))) int
14602
+ foo ("hello", a);
14606
Index: gcc/testsuite/gcc.c-torture/execute/pr59014-2.c
14607
===================================================================
14608
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c (.../tags/gcc_4_8_2_release)
14609
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c (.../branches/gcc-4_8-branch)
14611
+/* PR tree-optimization/59014 */
14613
+__attribute__((noinline, noclone)) long long int
14614
+foo (long long int x, long long int y)
14616
+ if (((int) x | (int) y) != 0)
14624
+ if (sizeof (long long) == sizeof (int))
14626
+ int shift_half = sizeof (int) * __CHAR_BIT__ / 2;
14627
+ long long int x = (3LL << shift_half) << shift_half;
14628
+ long long int y = (5LL << shift_half) << shift_half;
14629
+ long long int z = foo (x, y);
14630
+ if (z != ((8LL << shift_half) << shift_half))
14631
+ __builtin_abort ();
14634
Index: gcc/testsuite/gcc.c-torture/execute/pr59101.c
14635
===================================================================
14636
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59101.c (.../tags/gcc_4_8_2_release)
14637
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59101.c (.../branches/gcc-4_8-branch)
14639
+/* PR target/59101 */
14641
+__attribute__((noinline, noclone)) int
14644
+ return (~a & 4102790424LL) > 0 | 6;
14650
+ if (foo (0) != 7)
14651
+ __builtin_abort ();
14654
Index: gcc/testsuite/gcc.c-torture/execute/pr58831.c
14655
===================================================================
14656
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr58831.c (.../tags/gcc_4_8_2_release)
14657
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr58831.c (.../branches/gcc-4_8-branch)
14659
+#include <assert.h>
14661
+int a, *b, c, d, f, **i, p, q, *r;
14664
+static int __attribute__((noinline, noclone))
14665
+fn1 (int *p1, int **p2)
14677
+static int ** __attribute__((noinline, noclone))
14680
+ for (f = 0; f != 42; f++)
14682
+ int *g[3] = {0, 0, 0};
14683
+ for (o = 0; o; o--)
14686
+ int **h[1] = { &g[2] };
14699
Index: gcc/testsuite/gcc.c-torture/execute/pr58726.c
14700
===================================================================
14701
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr58726.c (.../tags/gcc_4_8_2_release)
14702
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr58726.c (.../branches/gcc-4_8-branch)
14704
+/* PR rtl-optimization/58726 */
14707
+union { int f1; int f2 : 1; } b;
14712
+ return p < 0 ? p : a;
14718
+ if (sizeof (short) * __CHAR_BIT__ != 16
14719
+ || sizeof (int) * __CHAR_BIT__ != 32)
14722
+ unsigned short d;
14724
+ d = e == 0 ? b.f1 : 0;
14726
+ if (c != (short) 56374)
14727
+ __builtin_abort ();
14730
Index: gcc/testsuite/gcc.c-torture/execute/pr59014.c
14731
===================================================================
14732
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59014.c (.../tags/gcc_4_8_2_release)
14733
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59014.c (.../branches/gcc-4_8-branch)
14735
+/* PR tree-optimization/59014 */
14737
+int a = 2, b, c, d;
14743
+ if ((b > 0) | (a & 1))
14757
+ __builtin_abort ();
14760
Index: gcc/testsuite/gcc.c-torture/execute/pr60072.c
14761
===================================================================
14762
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr60072.c (.../tags/gcc_4_8_2_release)
14763
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr60072.c (.../branches/gcc-4_8-branch)
14765
+/* PR target/60072 */
14769
+__attribute__ ((optimize (1)))
14770
+static int *foo (int *p)
14781
Index: gcc/testsuite/gcc.c-torture/execute/pr59388.c
14782
===================================================================
14783
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59388.c (.../tags/gcc_4_8_2_release)
14784
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59388.c (.../branches/gcc-4_8-branch)
14786
+/* PR tree-optimization/59388 */
14789
+struct S { unsigned int f:1; } b;
14794
+ a = (0 < b.f) | b.f;
14797
Index: gcc/testsuite/gcc.c-torture/compile/pr58970-1.c
14798
===================================================================
14799
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr58970-1.c (.../tags/gcc_4_8_2_release)
14800
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr58970-1.c (.../branches/gcc-4_8-branch)
14802
+/* PR middle-end/58970 */
14804
+struct T { int b : 1; };
14805
+struct S { struct T t[1]; };
14808
+foo (int x, struct S *s)
14813
Index: gcc/testsuite/gcc.c-torture/compile/pr59803.c
14814
===================================================================
14815
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr59803.c (.../tags/gcc_4_8_2_release)
14816
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr59803.c (.../branches/gcc-4_8-branch)
14818
+/* PR target/59803 */
14820
+extern void baz (void) __attribute__ ((__noreturn__));
14821
+struct A { int g, h; };
14822
+extern struct A a;
14823
+struct B { unsigned char i, j, k, l, m; };
14841
+ if (x->i != e) baz ();
14842
+ if (x->k != c) baz ();
14843
+ if (x->j != a.h) baz ();
14845
Index: gcc/testsuite/gcc.c-torture/compile/pr58997.c
14846
===================================================================
14847
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr58997.c (.../tags/gcc_4_8_2_release)
14848
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr58997.c (.../branches/gcc-4_8-branch)
14850
+/* PR rtl-optimization/58997 */
14861
+ d = a ? c : 1 % a;
14869
Index: gcc/testsuite/gcc.c-torture/compile/pr58970-2.c
14870
===================================================================
14871
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr58970-2.c (.../tags/gcc_4_8_2_release)
14872
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr58970-2.c (.../branches/gcc-4_8-branch)
14874
+/* PR middle-end/58970 */
14876
+struct T { char a : 8; char b : 1; };
14877
+struct S { char x; struct T t[1]; };
14880
+foo (int x, struct S *s)
14885
Index: gcc/testsuite/gcc.c-torture/compile/pr59362.c
14886
===================================================================
14887
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr59362.c (.../tags/gcc_4_8_2_release)
14888
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr59362.c (.../branches/gcc-4_8-branch)
14890
+/* PR tree-optimization/59362 */
14893
+foo (char *r, int s)
14895
+ r = __builtin___stpcpy_chk (r, "abc", __builtin_object_size (r, 1));
14897
+ r = __builtin___stpcpy_chk (r, "d", __builtin_object_size (r, 1));
14907
+ b = __builtin_object_size (0, 0);
14908
+ a = __builtin___stpcpy_chk (0, "", b);
14909
+ b = __builtin_object_size (a, 0);
14911
Index: gcc/testsuite/gnat.dg/opt32.adb
14912
===================================================================
14913
--- a/src/gcc/testsuite/gnat.dg/opt32.adb (.../tags/gcc_4_8_2_release)
14914
+++ b/src/gcc/testsuite/gnat.dg/opt32.adb (.../branches/gcc-4_8-branch)
14916
+-- { dg-do compile }
14917
+-- { dg-options "-O2" }
14919
+with Ada.Containers; use Ada.Containers;
14920
+with Ada.Containers.Vectors;
14922
+function Opt32 return Natural is
14924
+ package My_Vectors
14925
+ is new Vectors (Index_Type => Natural, Element_Type => Integer);
14930
+ function Sign_Changes return Natural is
14931
+ Cur : Cursor := To_Cursor (V, 0);
14932
+ R : Natural := 0;
14933
+ Negative : Boolean;
14935
+ Negative := Element (Cur) < 0;
14938
+ Cur := Next (Cur);
14939
+ exit when R > 100;
14941
+ if (Element (Cur) < 0) /= Negative then
14942
+ Negative := not Negative;
14951
+ return Sign_Changes;
14953
Index: gcc/testsuite/gcc.dg/pr58668.c
14954
===================================================================
14955
--- a/src/gcc/testsuite/gcc.dg/pr58668.c (.../tags/gcc_4_8_2_release)
14956
+++ b/src/gcc/testsuite/gcc.dg/pr58668.c (.../branches/gcc-4_8-branch)
14958
+/* PR rtl-optimization/58668 */
14959
+/* { dg-do compile } */
14960
+/* { dg-options "-O2" } */
14961
+/* { dg-additional-options "-mthumb" { target { { arm*-*-* } && arm_thumb2_ok } } } */
14963
+void *fn1 (void *);
14964
+void *fn2 (void *, const char *);
14965
+void fn3 (void *);
14966
+void fn4 (void *, int);
14972
+ if (!(a = fn1 (x)))
14973
+ return (void *) 0;
14974
+ if (!(b = fn2 (a, "w")))
14977
+ return (void *) 0;
14983
Index: gcc/testsuite/gcc.dg/pr57518.c
14984
===================================================================
14985
--- a/src/gcc/testsuite/gcc.dg/pr57518.c (.../tags/gcc_4_8_2_release)
14986
+++ b/src/gcc/testsuite/gcc.dg/pr57518.c (.../branches/gcc-4_8-branch)
14988
-/* PR rtl-optimization/57130 */
14989
+/* PR rtl-optimization/57518 */
14991
/* { dg-do compile } */
14992
/* { dg-options "-O2 -fdump-rtl-ira" } */
14993
-/* { dg-final { scan-rtl-dump-not "REG_EQUIV.*mem.*\"ip\"" "ira" } } */
14994
+/* { dg-final { scan-rtl-dump-not "REG_EQUIV\[^\n\]*mem\[^\n\]*\"ip\".*subreg" "ira" } } */
14998
Index: gcc/testsuite/gcc.dg/builtin-object-size-14.c
14999
===================================================================
15000
--- a/src/gcc/testsuite/gcc.dg/builtin-object-size-14.c (.../tags/gcc_4_8_2_release)
15001
+++ b/src/gcc/testsuite/gcc.dg/builtin-object-size-14.c (.../branches/gcc-4_8-branch)
15003
+/* { dg-do run } */
15004
+/* { dg-options "-O2" } */
15006
+extern void abort (void);
15007
+extern char *strncpy(char *, const char *, __SIZE_TYPE__);
15014
+ char all[8+16+4];
15017
+void __attribute__((noinline,noclone))
15021
+ __builtin_strncpy(vi, u->vi, sizeof(u->vi));
15022
+ if (__builtin_object_size (u->all, 1) != -1)
15031
Index: gcc/testsuite/gcc.dg/gomp/pr58809.c
15032
===================================================================
15033
--- a/src/gcc/testsuite/gcc.dg/gomp/pr58809.c (.../tags/gcc_4_8_2_release)
15034
+++ b/src/gcc/testsuite/gcc.dg/gomp/pr58809.c (.../branches/gcc-4_8-branch)
15036
+/* PR middle-end/58809 */
15037
+/* { dg-do compile } */
15038
+/* { dg-options "-fopenmp -O" } */
15041
+#pragma omp threadprivate (i)
15046
+#pragma omp parallel copyin (i) reduction (&&:j)
15049
Index: gcc/testsuite/gcc.dg/20050922-1.c
15050
===================================================================
15051
--- a/src/gcc/testsuite/gcc.dg/20050922-1.c (.../tags/gcc_4_8_2_release)
15052
+++ b/src/gcc/testsuite/gcc.dg/20050922-1.c (.../branches/gcc-4_8-branch)
15054
/* { dg-do run } */
15055
/* { dg-options "-O1 -std=c99" } */
15057
-#include <stdlib.h>
15058
+extern void abort (void);
15060
#if __INT_MAX__ == 2147483647
15061
typedef unsigned int uint32_t;
15062
Index: gcc/testsuite/gcc.dg/pr46309.c
15063
===================================================================
15064
--- a/src/gcc/testsuite/gcc.dg/pr46309.c (.../tags/gcc_4_8_2_release)
15065
+++ b/src/gcc/testsuite/gcc.dg/pr46309.c (.../branches/gcc-4_8-branch)
15067
/* PR tree-optimization/46309 */
15068
-/* { dg-do compile } */
15069
+/* { dg-do compile { target { ! { cris*-*-* } } } } */
15070
/* { dg-options "-O2 -fdump-tree-reassoc-details" } */
15071
/* The transformation depends on BRANCH_COST being greater than 1
15072
(see the notes in the PR), so try to force that. */
15073
Index: gcc/testsuite/gcc.dg/pr60485-2.c
15074
===================================================================
15075
--- a/src/gcc/testsuite/gcc.dg/pr60485-2.c (.../tags/gcc_4_8_2_release)
15076
+++ b/src/gcc/testsuite/gcc.dg/pr60485-2.c (.../branches/gcc-4_8-branch)
15078
+/* { dg-do run } */
15079
+/* { dg-options "-O2" } */
15081
+extern void abort (void);
15102
+ /* prevert fowrprop from creating an offsetted sd constraint and
15103
+ preserve the pointer offsetting constraint. */
15109
+ /* z should point to i (and non-local/escaped). */
15116
Index: gcc/testsuite/gcc.dg/atomic-store-6.c
15117
===================================================================
15118
--- a/src/gcc/testsuite/gcc.dg/atomic-store-6.c (.../tags/gcc_4_8_2_release)
15119
+++ b/src/gcc/testsuite/gcc.dg/atomic-store-6.c (.../branches/gcc-4_8-branch)
15121
+/* { dg-do run } */
15122
+/* { dg-require-effective-target sync_int_128_runtime } */
15123
+/* { dg-options "-mcx16" { target { i?86-*-* x86_64-*-* } } } */
15129
+ __atomic_store_16(&i, -1, 0);
15131
+ __builtin_abort();
15134
Index: gcc/testsuite/gcc.dg/guality/pr59776.c
15135
===================================================================
15136
--- a/src/gcc/testsuite/gcc.dg/guality/pr59776.c (.../tags/gcc_4_8_2_release)
15137
+++ b/src/gcc/testsuite/gcc.dg/guality/pr59776.c (.../branches/gcc-4_8-branch)
15139
+/* PR debug/59776 */
15140
+/* { dg-do run } */
15141
+/* { dg-options "-g" } */
15143
+#include "../nop.h"
15145
+struct S { float f, g; };
15147
+__attribute__((noinline, noclone)) void
15150
+ struct S s1, s2; /* { dg-final { gdb-test pr59776.c:17 "s1.f" "5.0" } } */
15151
+ s1 = *p; /* { dg-final { gdb-test pr59776.c:17 "s1.g" "6.0" } } */
15152
+ s2 = s1; /* { dg-final { gdb-test pr59776.c:17 "s2.f" "0.0" } } */
15153
+ *(int *) &s2.f = 0; /* { dg-final { gdb-test pr59776.c:17 "s2.g" "6.0" } } */
15154
+ asm volatile (NOP : : : "memory"); /* { dg-final { gdb-test pr59776.c:20 "s1.f" "5.0" } } */
15155
+ asm volatile (NOP : : : "memory"); /* { dg-final { gdb-test pr59776.c:20 "s1.g" "6.0" } } */
15156
+ s2 = s1; /* { dg-final { gdb-test pr59776.c:20 "s2.f" "5.0" } } */
15157
+ asm volatile (NOP : : : "memory"); /* { dg-final { gdb-test pr59776.c:20 "s2.g" "6.0" } } */
15158
+ asm volatile (NOP : : : "memory");
15164
+ struct S x = { 5.0f, 6.0f };
15168
Index: gcc/testsuite/gcc.dg/pr59827.c
15169
===================================================================
15170
--- a/src/gcc/testsuite/gcc.dg/pr59827.c (.../tags/gcc_4_8_2_release)
15171
+++ b/src/gcc/testsuite/gcc.dg/pr59827.c (.../branches/gcc-4_8-branch)
15173
+/* PR middle-end/59827 */
15174
+/* { dg-do compile } */
15177
+foo (int p[2][]) /* { dg-error "array type has incomplete element type" } */
15186
+ foo (p); /* { dg-error "type of formal parameter 1 is incomplete" } */
15188
Index: gcc/testsuite/gcc.dg/strlenopt-4gf.c
15189
===================================================================
15190
--- a/src/gcc/testsuite/gcc.dg/strlenopt-4gf.c (.../tags/gcc_4_8_2_release)
15191
+++ b/src/gcc/testsuite/gcc.dg/strlenopt-4gf.c (.../branches/gcc-4_8-branch)
15193
#include "strlenopt-4.c"
15195
/* { dg-final { scan-tree-dump-times "strlen \\(" 1 "strlen" } } */
15196
-/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 4 "strlen" } } */
15197
-/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 1 "strlen" } } */
15198
+/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 0 "strlen" } } */
15199
+/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 0 "strlen" } } */
15200
/* { dg-final { scan-tree-dump-times "__strcat_chk \\(" 0 "strlen" } } */
15201
/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
15202
-/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 5 "strlen" } } */
15203
-/* { dg-final { scan-tree-dump-times "memcpy \\(" 0 "strlen" } } */
15204
-/* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
15205
+/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 0 "strlen" } } */
15206
+/* { dg-final { scan-tree-dump-times "memcpy \\(" 4 "strlen" } } */
15207
+/* { dg-final { scan-tree-dump-times "strcpy \\(" 1 "strlen" } } */
15208
/* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
15209
-/* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
15210
+/* { dg-final { scan-tree-dump-times "stpcpy \\(" 5 "strlen" } } */
15211
/* { dg-final { cleanup-tree-dump "strlen" } } */
15212
Index: gcc/testsuite/gcc.dg/pr59351.c
15213
===================================================================
15214
--- a/src/gcc/testsuite/gcc.dg/pr59351.c (.../tags/gcc_4_8_2_release)
15215
+++ b/src/gcc/testsuite/gcc.dg/pr59351.c (.../branches/gcc-4_8-branch)
15217
+/* { dg-do compile } */
15218
+/* { dg-options "-std=c99 -Wpedantic" } */
15223
+ return sizeof ((int[]) {}); /* { dg-warning "ISO C forbids empty initializer braces" } */
15225
Index: gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c
15226
===================================================================
15227
--- a/src/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c (.../tags/gcc_4_8_2_release)
15228
+++ b/src/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c (.../branches/gcc-4_8-branch)
15230
/* { dg-do compile } */
15231
/* { dg-options "-O2 -Wall" } */
15232
/* { dg-options "-O2 -Wall -mabi=altivec" { target { { powerpc*-*-linux* } && ilp32 } } } */
15233
+/* { dg-options "-O2 -Wall -msse2" { target { i?86-*-* x86_64-*-* } } } */
15235
typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
15237
Index: gcc/testsuite/gcc.dg/builtin-object-size-8.c
15238
===================================================================
15239
--- a/src/gcc/testsuite/gcc.dg/builtin-object-size-8.c (.../tags/gcc_4_8_2_release)
15240
+++ b/src/gcc/testsuite/gcc.dg/builtin-object-size-8.c (.../branches/gcc-4_8-branch)
15242
-/* { dg-do run { xfail *-*-* } } */
15243
+/* { dg-do run } */
15244
/* { dg-options "-O2" } */
15246
typedef __SIZE_TYPE__ size_t;
15247
Index: gcc/testsuite/gcc.dg/20050922-2.c
15248
===================================================================
15249
--- a/src/gcc/testsuite/gcc.dg/20050922-2.c (.../tags/gcc_4_8_2_release)
15250
+++ b/src/gcc/testsuite/gcc.dg/20050922-2.c (.../branches/gcc-4_8-branch)
15252
/* { dg-do run } */
15253
/* { dg-options "-O1 -std=c99" } */
15255
-#include <stdlib.h>
15256
+extern void abort (void);
15257
+extern void exit (int);
15259
#if __INT_MAX__ == 2147483647
15260
typedef unsigned int uint32_t;
15261
Index: gcc/testsuite/gcc.dg/pr59860.c
15262
===================================================================
15263
--- a/src/gcc/testsuite/gcc.dg/pr59860.c (.../tags/gcc_4_8_2_release)
15264
+++ b/src/gcc/testsuite/gcc.dg/pr59860.c (.../branches/gcc-4_8-branch)
15266
+/* { dg-do compile } */
15267
+/* { dg-options "-O" } */
15269
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * __attribute__ ((__nothrow__ , __leaf__))
15270
+strcat (char *__restrict __dest, const char *__restrict __src)
15272
+ return __builtin___strcat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
15274
+static char raw_decode;
15275
+void foo (char **argv, char *outfilename)
15277
+ if (**argv == 'r')
15279
+ strcat (outfilename, raw_decode ? ".raw" : ".wav");
15281
Index: gcc/testsuite/gcc.dg/pr59011.c
15282
===================================================================
15283
--- a/src/gcc/testsuite/gcc.dg/pr59011.c (.../tags/gcc_4_8_2_release)
15284
+++ b/src/gcc/testsuite/gcc.dg/pr59011.c (.../branches/gcc-4_8-branch)
15286
+/* PR middle-end/59011 */
15287
+/* { dg-do compile } */
15288
+/* { dg-options "-std=gnu99" } */
15308
Index: gcc/testsuite/gcc.dg/pr58805.c
15309
===================================================================
15310
--- a/src/gcc/testsuite/gcc.dg/pr58805.c (.../tags/gcc_4_8_2_release)
15311
+++ b/src/gcc/testsuite/gcc.dg/pr58805.c (.../branches/gcc-4_8-branch)
15313
+/* { dg-do compile } */
15314
+/* { dg-options "-O2 -ftree-tail-merge -fdump-tree-pre" } */
15316
+/* Type that matches the 'p' constraint. */
15317
+#define TYPE void *
15320
+void bar (TYPE *r)
15323
+ __asm__ ("" : "=&p" (t), "=p" (*r));
15327
+foo (int n, TYPE *x, TYPE *y)
15335
+/* { dg-final { scan-tree-dump-times "__asm__" 2 "pre"} } */
15336
+/* { dg-final { cleanup-tree-dump "pre" } } */
15337
Index: gcc/testsuite/gcc.dg/strlenopt-14gf.c
15338
===================================================================
15339
--- a/src/gcc/testsuite/gcc.dg/strlenopt-14gf.c (.../tags/gcc_4_8_2_release)
15340
+++ b/src/gcc/testsuite/gcc.dg/strlenopt-14gf.c (.../branches/gcc-4_8-branch)
15341
@@ -11,14 +11,14 @@
15343
/* { dg-final { scan-tree-dump-times "strlen \\(" 4 "strlen" } } */
15344
/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 0 "strlen" } } */
15345
-/* { dg-final { scan-tree-dump-times "__mempcpy_chk \\(" 2 "strlen" } } */
15346
+/* { dg-final { scan-tree-dump-times "__mempcpy_chk \\(" 0 "strlen" } } */
15347
/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 0 "strlen" } } */
15348
/* { dg-final { scan-tree-dump-times "__strcat_chk \\(" 0 "strlen" } } */
15349
/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
15350
-/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 3 "strlen" } } */
15351
-/* { dg-final { scan-tree-dump-times "memcpy \\(" 0 "strlen" } } */
15352
-/* { dg-final { scan-tree-dump-times "mempcpy \\(" 0 "strlen" } } */
15353
+/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 0 "strlen" } } */
15354
+/* { dg-final { scan-tree-dump-times "memcpy \\(" 1 "strlen" } } */
15355
+/* { dg-final { scan-tree-dump-times "mempcpy \\(" 2 "strlen" } } */
15356
/* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
15357
/* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
15358
-/* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
15359
+/* { dg-final { scan-tree-dump-times "stpcpy \\(" 2 "strlen" } } */
15360
/* { dg-final { cleanup-tree-dump "strlen" } } */
15361
Index: gcc/testsuite/gcc.dg/torture/pr57425-2.c
15362
===================================================================
15363
--- a/src/gcc/testsuite/gcc.dg/torture/pr57425-2.c (.../tags/gcc_4_8_2_release)
15364
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57425-2.c (.../branches/gcc-4_8-branch)
15366
+/* { dg-do run } */
15368
+extern void abort (void) __attribute__((noreturn));
15378
+ asm ("": "=r" (c):"0" (c));
15380
+ asm ("": "=r" (c):"0" (c));
15387
+ asm ("": "=r" (c):"0" (c));
15389
+ asm ("": "=r" (c):"0" (c));
15397
Index: gcc/testsuite/gcc.dg/torture/pr57425-3.c
15398
===================================================================
15399
--- a/src/gcc/testsuite/gcc.dg/torture/pr57425-3.c (.../tags/gcc_4_8_2_release)
15400
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57425-3.c (.../branches/gcc-4_8-branch)
15402
+/* { dg-do run } */
15404
+extern void abort (void) __attribute__((noreturn));
15414
+ asm ("": "=r" (c):"0" (c));
15416
+ asm ("": "=r" (c):"0" (c));
15423
+ asm ("": "=r" (c):"0" (c));
15425
+ asm ("": "=r" (c):"0" (c));
15433
Index: gcc/testsuite/gcc.dg/torture/pr59047.c
15434
===================================================================
15435
--- a/src/gcc/testsuite/gcc.dg/torture/pr59047.c (.../tags/gcc_4_8_2_release)
15436
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59047.c (.../branches/gcc-4_8-branch)
15438
+/* { dg-do run } */
15440
+extern void abort (void);
15449
+int b, c, *d, e, f;
15454
+ for (; b < 1; ++b)
15456
+ for (e = 0; e < 1; e = 1)
15477
Index: gcc/testsuite/gcc.dg/torture/pr58956.c
15478
===================================================================
15479
--- a/src/gcc/testsuite/gcc.dg/torture/pr58956.c (.../tags/gcc_4_8_2_release)
15480
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58956.c (.../branches/gcc-4_8-branch)
15482
+/* { dg-do run } */
15484
+extern void abort (void);
15489
+} a = {1}, b, g, *c = &b, **f = &c;
15491
+int *d, **e = &d, h;
15498
+ __builtin_unreachable ();
15512
Index: gcc/testsuite/gcc.dg/torture/pr60183.c
15513
===================================================================
15514
--- a/src/gcc/testsuite/gcc.dg/torture/pr60183.c (.../tags/gcc_4_8_2_release)
15515
+++ b/src/gcc/testsuite/gcc.dg/torture/pr60183.c (.../branches/gcc-4_8-branch)
15517
+/* { dg-do run } */
15519
+/* Large so an out-of-bound read will crash. */
15520
+unsigned char c[0x30001] = { 1 };
15524
+foo (unsigned long *x, unsigned char *y)
15527
+ unsigned long w = x[0];
15528
+ for (i = 0; i < j; i++)
15538
+__attribute__ ((noinline, noclone)) void
15539
+bar (unsigned long *x)
15547
+ unsigned long a[2] = { 0, -1UL };
15548
+ asm volatile (""::"r" (c):"memory");
15552
+ __builtin_abort ();
15555
Index: gcc/testsuite/gcc.dg/torture/pr57517.c
15556
===================================================================
15557
--- a/src/gcc/testsuite/gcc.dg/torture/pr57517.c (.../tags/gcc_4_8_2_release)
15558
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57517.c (.../branches/gcc-4_8-branch)
15560
+/* { dg-do compile } */
15562
+int x[1024], y[1024], z[1024], w[1024];
15566
+ for (i = 1; i < 1024; ++i)
15573
+ z[i] = (a + b) + (c + d);
15576
Index: gcc/testsuite/gcc.dg/torture/pr59891.c
15577
===================================================================
15578
--- a/src/gcc/testsuite/gcc.dg/torture/pr59891.c (.../tags/gcc_4_8_2_release)
15579
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59891.c (.../branches/gcc-4_8-branch)
15588
+ return (0 ? a : 0) ? : 0 % 0; /* { dg-warning "division by zero" } */
15590
Index: gcc/testsuite/gcc.dg/torture/pr59164.c
15591
===================================================================
15592
--- a/src/gcc/testsuite/gcc.dg/torture/pr59164.c (.../tags/gcc_4_8_2_release)
15593
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59164.c (.../branches/gcc-4_8-branch)
15595
+/* { dg-do compile } */
15609
+ for (a=1; a <= 4; a++)
15611
+ f = fn1(0 < c[a][0]);
15616
Index: gcc/testsuite/gcc.dg/torture/pr58779.c
15617
===================================================================
15618
--- a/src/gcc/testsuite/gcc.dg/torture/pr58779.c (.../tags/gcc_4_8_2_release)
15619
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58779.c (.../branches/gcc-4_8-branch)
15621
+/* { dg-do run } */
15628
+ short d = (c <= 0) ^ e;
15629
+ if ((unsigned int) a - (a || d) <= (unsigned int) a)
15630
+ __builtin_abort ();
15633
Index: gcc/testsuite/gcc.dg/torture/pr59139.c
15634
===================================================================
15635
--- a/src/gcc/testsuite/gcc.dg/torture/pr59139.c (.../tags/gcc_4_8_2_release)
15636
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59139.c (.../branches/gcc-4_8-branch)
15638
+/* { dg-do compile } */
15640
+int a, b, c, d, e;
15641
+int fn1(p1, p2) { return p2 == 0 ? p1 : 1 % p2; }
15646
+ for (;; c = (unsigned short)c)
15651
+ e = fn1(2, c && 1);
15652
+ d = c == 0 ? e : c;
15658
Index: gcc/testsuite/gcc.dg/torture/pr58079.c
15659
===================================================================
15660
--- a/src/gcc/testsuite/gcc.dg/torture/pr58079.c (.../tags/gcc_4_8_2_release)
15661
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58079.c (.../branches/gcc-4_8-branch)
15663
+/* { dg-options "-mlong-calls" { target mips*-*-* } } */
15665
+typedef unsigned char u8;
15666
+typedef unsigned short u16;
15667
+typedef unsigned int __kernel_size_t;
15668
+typedef __kernel_size_t size_t;
15669
+struct list_head {
15670
+ struct list_head *next;
15673
+struct dmx_ts_feed {
15674
+ int is_filtering;
15676
+struct dmx_section_feed {
15682
+typedef int (*dmx_ts_cb) (
15683
+ const u8 * buffer1,
15684
+ size_t buffer1_length,
15685
+ const u8 * buffer2,
15686
+ size_t buffer2_length
15689
+struct dvb_demux_feed {
15691
+ struct dmx_ts_feed ts;
15692
+ struct dmx_section_feed sec;
15700
+ struct list_head list_head;
15703
+struct dvb_demux {
15704
+ int (*stop_feed)(struct dvb_demux_feed *feed);
15705
+ struct list_head feed_list;
15711
+__attribute__((always_inline))
15713
+payload(const u8 *tsp)
15715
+ if (tsp[3] & 0x20) {
15716
+ return 184 - 1 - tsp[4];
15723
+__attribute__((always_inline))
15725
+dvb_dmx_swfilter_payload(struct dvb_demux_feed *feed, const u8 *buf)
15727
+ int count = payload(buf);
15731
+ return feed->cb.ts(&buf[p], count, ((void *)0), 0);
15736
+__attribute__((always_inline))
15738
+dvb_dmx_swfilter_packet_type(struct dvb_demux_feed *feed, const u8 *buf)
15740
+ switch (feed->type) {
15742
+ if (feed->ts_type & 1) {
15743
+ dvb_dmx_swfilter_payload(feed, buf);
15745
+ if (dvb_dmx_swfilter_section_packet(feed, buf) < 0)
15746
+ feed->feed.sec.seclen = feed->feed.sec.secbufp = 0;
15752
+dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf)
15754
+ struct dvb_demux_feed *feed;
15755
+ int dvr_done = 0;
15757
+ for (feed = ({ const typeof( ((typeof(*feed) *)0)->list_head ) *__mptr = ((&demux->feed_list)->next); (typeof(*feed) *)( (char *)__mptr - __builtin_offsetof(typeof(*feed),list_head) );}); __builtin_prefetch(feed->list_head.next), &feed->list_head != (&demux->feed_list); feed = ({ const typeof( ((typeof(*feed) *)0)->list_head ) *__mptr = (feed->list_head.next); (typeof(*feed) *)( (char *)__mptr - __builtin_offsetof(typeof(*feed),list_head) );})) {
15758
+ if (((((feed)->type == 0) && ((feed)->feed.ts.is_filtering) && (((feed)->ts_type & (1 | 8)) == 1))) && (dvr_done++))
15759
+ dvb_dmx_swfilter_packet_type(feed, buf);
15760
+ else if (feed->pid == 0x2000)
15761
+ feed->cb.ts(buf, 188, ((void *)0), 0);
15764
+void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, size_t count)
15766
+ while (count--) {
15767
+ dvb_dmx_swfilter_packet(demux, buf);
15770
Index: gcc/testsuite/gcc.dg/torture/pr58830.c
15771
===================================================================
15772
--- a/src/gcc/testsuite/gcc.dg/torture/pr58830.c (.../tags/gcc_4_8_2_release)
15773
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58830.c (.../branches/gcc-4_8-branch)
15775
+/* { dg-do run } */
15776
+/* { dg-additional-options "-ftree-pre -ftree-partial-pre" } */
15778
+extern void abort (void);
15780
+int b, c, d, f, g, h, i, j[6], *l = &b, *m, n, *o, r;
15792
+ h = c || (r = 0);
15794
+ for (f = 0; f < 2; f++)
15802
+ for (q = -8; q >= 5; q++)
15813
+ if (j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[0]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ^ (k & 15)] != 0)
15817
Index: gcc/testsuite/gcc.dg/torture/pr59715.c
15818
===================================================================
15819
--- a/src/gcc/testsuite/gcc.dg/torture/pr59715.c (.../tags/gcc_4_8_2_release)
15820
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59715.c (.../branches/gcc-4_8-branch)
15822
+/* { dg-do run } */
15824
+extern void abort (void);
15835
+ c = a == 0 ? 1 : 1 % a;
15843
Index: gcc/testsuite/gcc.dg/torture/pr60115.c
15844
===================================================================
15845
--- a/src/gcc/testsuite/gcc.dg/torture/pr60115.c (.../tags/gcc_4_8_2_release)
15846
+++ b/src/gcc/testsuite/gcc.dg/torture/pr60115.c (.../branches/gcc-4_8-branch)
15848
+/* { dg-do run } */
15862
Index: gcc/testsuite/gcc.dg/torture/pr59903.c
15863
===================================================================
15864
--- a/src/gcc/testsuite/gcc.dg/torture/pr59903.c (.../tags/gcc_4_8_2_release)
15865
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59903.c (.../branches/gcc-4_8-branch)
15867
+/* { dg-do compile } */
15869
+int a, b, c, d, e, f, g, h, i[3], l, m, n, o, p, q, r;
15882
+ return p1 || ((p1 > 0) > (e << 1));
15886
+fn2 (struct S0 p1)
15889
+ struct S0 t = {0,0,0,0};
15895
+ for (m = 0; m < 4; m++)
15896
+ for (p1.f0 = 0; p1.f0 < 3; p1.f0++)
15900
+ o = b || 1 >> b ? 0 : a < 0;
15902
+ if ((g < fn1 ((1 ^ (q & 1)) | n)) ^ u)
15904
+ s = j.f3 > 0 ? j.f3 : j.f3 << 1;
15905
+ r = l = s && p1.f1 * c;
15917
+ struct S0 v = {0,0,0,0};
15923
Index: gcc/testsuite/gcc.dg/torture/pr58143-1.c
15924
===================================================================
15925
--- a/src/gcc/testsuite/gcc.dg/torture/pr58143-1.c (.../tags/gcc_4_8_2_release)
15926
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58143-1.c (.../branches/gcc-4_8-branch)
15928
+/* { dg-do run } */
15929
+/* { dg-additional-options "-fstrict-overflow" } */
15931
+extern void abort (void);
15933
+int a, b, c, d, e, f, g, h = 1, i;
15937
+ return p < 0 && a < - __INT_MAX__ - 1 - p ? 0 : 1;
15943
+ i = h ? 0 : 1 % h;
15944
+ for (j = 0; j < 1; j++)
15945
+ for (d = 0; d; d++)
15953
+ for (; b >= 0; b--)
15954
+ for (c = 1; c >= 0; c--)
15959
+ for (f = 0; f < 1; f++)
15979
Index: gcc/testsuite/gcc.dg/torture/pr58143-2.c
15980
===================================================================
15981
--- a/src/gcc/testsuite/gcc.dg/torture/pr58143-2.c (.../tags/gcc_4_8_2_release)
15982
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58143-2.c (.../branches/gcc-4_8-branch)
15984
+/* { dg-do run } */
15985
+/* { dg-additional-options "-fstrict-overflow" } */
15987
+int a, b, d, e, f, *g, h, i;
15990
+char foo (unsigned char p)
15997
+ for (h = 0; h < 3; h = foo (h))
16000
+ for (f = 0; f < 1; f++)
16002
+ i = a && 0 < -__INT_MAX__ - h ? 0 : 1;
16018
Index: gcc/testsuite/gcc.dg/torture/pr58941.c
16019
===================================================================
16020
--- a/src/gcc/testsuite/gcc.dg/torture/pr58941.c (.../tags/gcc_4_8_2_release)
16021
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58941.c (.../branches/gcc-4_8-branch)
16023
+/* { dg-do run } */
16025
+extern void abort (void);
16029
+ unsigned char data[1000];
16037
+int condition = 3;
16042
+ SData *pData = (SData*)(msg.data);
16043
+ unsigned int i = 0;
16044
+ for (i = 0; i < 1; i++)
16047
+ if(condition & 1)
16048
+ pData->d[i] |= 0x55;
16049
+ if(condition & 2)
16050
+ pData->d[i] |= 0xaa;
16052
+ if (pData->d[0] != 0xff)
16056
Index: gcc/testsuite/gcc.dg/torture/pr57488.c
16057
===================================================================
16058
--- a/src/gcc/testsuite/gcc.dg/torture/pr57488.c (.../tags/gcc_4_8_2_release)
16059
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57488.c (.../branches/gcc-4_8-branch)
16061
+/* { dg-do run } */
16063
+extern void abort (void);
16065
+int i, j, *pj = &j, **ppj = &pj;
16068
+short s, *ps = &s, k;
16070
+unsigned short u, *pu = &u, **ppu = &pu;
16074
+unsigned char v = 48;
16087
+void __attribute__((noinline))
16090
+ for (; i <= 3; i++)
16095
+ for (k = 1; k >= 0; k--)
16099
+ for (l = 1; l < 5; l++)
16102
+ for (m = 6; m; m--)
16119
Index: gcc/testsuite/gcc.dg/torture/pr57569.c
16120
===================================================================
16121
--- a/src/gcc/testsuite/gcc.dg/torture/pr57569.c (.../tags/gcc_4_8_2_release)
16122
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57569.c (.../branches/gcc-4_8-branch)
16124
+/* { dg-do run } */
16126
+extern void abort (void) __attribute__((noreturn));
16128
+struct S { int f0; } a;
16130
+int b, e, *d = &b, f;
16136
+ int ***h = &g[6][3];
16137
+ for (; e < 9; e++) {
16139
+ for (; f < 6; f++)
16149
+ struct S c[4][10] = {};
16161
Index: gcc/testsuite/gcc.dg/torture/pr58143-3.c
16162
===================================================================
16163
--- a/src/gcc/testsuite/gcc.dg/torture/pr58143-3.c (.../tags/gcc_4_8_2_release)
16164
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58143-3.c (.../branches/gcc-4_8-branch)
16166
+/* { dg-do run } */
16167
+/* { dg-additional-options "-fstrict-overflow" } */
16169
+int a, b, c, d, e;
16174
+ for (b = 4; b > -30; b--)
16178
+ e = a > __INT_MAX__ - b;
16184
Index: gcc/testsuite/gcc.dg/torture/pr59288.c
16185
===================================================================
16186
--- a/src/gcc/testsuite/gcc.dg/torture/pr59288.c (.../tags/gcc_4_8_2_release)
16187
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59288.c (.../branches/gcc-4_8-branch)
16189
+/* { dg-do compile } */
16194
+ long int i, j, k;
16195
+ for (i = 0, j = 0, k = 0; i < 512; i = (int) i + 1, j = (int) j + 1, k = (int) k + 3)
16196
+ d[i] = j ^ (i * 3) ^ (2 * k + 2);
16198
Index: gcc/testsuite/gcc.dg/torture/pr57425-1.c
16199
===================================================================
16200
--- a/src/gcc/testsuite/gcc.dg/torture/pr57425-1.c (.../tags/gcc_4_8_2_release)
16201
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57425-1.c (.../branches/gcc-4_8-branch)
16203
+/* { dg-do run } */
16205
+extern void abort (void) __attribute__((noreturn));
16218
+ union setconflict a;
16221
+ asm ("": "=r" (c):"0" (c));
16223
+ asm ("": "=r" (c):"0" (c));
16227
+ union setconflict a;
16230
+ asm ("": "=r" (c):"0" (c));
16232
+ asm ("": "=r" (c):"0" (c));
16240
Index: gcc/testsuite/gcc.dg/torture/pr59330.c
16241
===================================================================
16242
--- a/src/gcc/testsuite/gcc.dg/torture/pr59330.c (.../tags/gcc_4_8_2_release)
16243
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59330.c (.../branches/gcc-4_8-branch)
16245
+/* { dg-do run } */
16247
+void free(void *ptr)
16262
Index: gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c
16263
===================================================================
16264
--- a/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c (.../tags/gcc_4_8_2_release)
16265
+++ b/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c (.../branches/gcc-4_8-branch)
16267
+/* { dg-do run } */
16268
+/* { dg-options "-O3" } */
16270
+int a, c, e[5][2];
16276
+ for (d = 0; d < 2; d++)
16277
+ if (a ? 0 : e[c + 3][d] & e[c + 4][d])
16281
Index: gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c
16282
===================================================================
16283
--- a/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c (.../tags/gcc_4_8_2_release)
16284
+++ b/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c (.../branches/gcc-4_8-branch)
16286
+/* { dg-do run } */
16287
+/* { dg-options "-O3 -fdump-tree-pcom-details" } */
16289
+int b, f, d[5][2];
16295
+ for (c = 0; c < 2; c++)
16296
+ if (d[b + 3][c] & d[b + 4][c])
16302
+/* { dg-final { scan-tree-dump "Executing predictive commoning" "pcom" } } */
16303
+/* { dg-final { cleanup-tree-dump "pcom" } } */
16304
Index: gcc/testsuite/gcc.dg/strlenopt-4.c
16305
===================================================================
16306
--- a/src/gcc/testsuite/gcc.dg/strlenopt-4.c (.../tags/gcc_4_8_2_release)
16307
+++ b/src/gcc/testsuite/gcc.dg/strlenopt-4.c (.../branches/gcc-4_8-branch)
16308
@@ -66,16 +66,10 @@
16312
-/* For targets providing a movstr pattern strcat is already decomposed
16313
- into strlen + strcpy by fold_builtin_strcat. */
16315
-/* { dg-final { scan-tree-dump-times "strlen \\(" 3 "strlen" { target { ! s390*-*-* } } } } */
16316
-/* { dg-final { scan-tree-dump-times "strlen \\(" 6 "strlen" { target s390*-*-* } } } */
16317
+/* { dg-final { scan-tree-dump-times "strlen \\(" 3 "strlen" } } */
16318
/* { dg-final { scan-tree-dump-times "memcpy \\(" 4 "strlen" } } */
16319
-/* { dg-final { scan-tree-dump-times "strcpy \\(" 3 "strlen" { target { ! s390*-*-* } } } } */
16320
-/* { dg-final { scan-tree-dump-times "strcpy \\(" 6 "strlen" { target s390*-*-* } } } */
16321
-/* { dg-final { scan-tree-dump-times "strcat \\(" 3 "strlen" { target { ! s390*-*-* } } } } */
16322
-/* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" { target s390*-*-* } } } */
16323
+/* { dg-final { scan-tree-dump-times "strcpy \\(" 3 "strlen" } } */
16324
+/* { dg-final { scan-tree-dump-times "strcat \\(" 3 "strlen" } } */
16325
/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
16326
/* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
16327
/* { dg-final { cleanup-tree-dump "strlen" } } */
16328
Index: gcc/testsuite/gcc.dg/pr56824.c
16329
===================================================================
16330
--- a/src/gcc/testsuite/gcc.dg/pr56824.c (.../tags/gcc_4_8_2_release)
16331
+++ b/src/gcc/testsuite/gcc.dg/pr56824.c (.../branches/gcc-4_8-branch)
16333
+/* PR preprocessor/56824 */
16334
+/* { dg-do compile } */
16335
+/* { dg-options "-Waggregate-return" } */
16337
+struct S { int i; };
16338
+struct S foo (void);
16340
+#pragma GCC diagnostic push
16341
+#pragma GCC diagnostic ignored "-Waggregate-return"
16350
+#pragma GCC diagnostic pop
16351
Index: gcc/testsuite/gcc.dg/ipa/pr55260.c
16352
===================================================================
16353
--- a/src/gcc/testsuite/gcc.dg/ipa/pr55260.c (.../tags/gcc_4_8_2_release)
16354
+++ b/src/gcc/testsuite/gcc.dg/ipa/pr55260.c (.../branches/gcc-4_8-branch)
16356
+/* { dg-do compile } */
16357
+/* { dg-options "-O2 -fno-inline -fipa-cp-clone" } */
16371
+list_heads *fn1(string, int *, unsigned);
16372
+void fn2(malv *p1, list_heads *p2, unsigned p3) {
16373
+ string a = p1->nantstr;
16374
+ fn1(a, p1->nant, p3);
16377
+void fn3(unsigned p1) { fn2(0, 0, p1); }
16379
+list_heads *fn1(string p1, int *p2, unsigned p3) {
16394
Index: gcc/testsuite/gcc.dg/ipa/pr59610.c
16395
===================================================================
16396
--- a/src/gcc/testsuite/gcc.dg/ipa/pr59610.c (.../tags/gcc_4_8_2_release)
16397
+++ b/src/gcc/testsuite/gcc.dg/ipa/pr59610.c (.../branches/gcc-4_8-branch)
16399
+/* { dg-do compile } */
16400
+/* { dg-options "-O2" } */
16402
+struct A { int a; };
16405
+__attribute__((optimize (0))) void
16406
+foo (void *p, struct A x)
16410
Index: gcc/testsuite/gcc.dg/pr60485-1.c
16411
===================================================================
16412
--- a/src/gcc/testsuite/gcc.dg/pr60485-1.c (.../tags/gcc_4_8_2_release)
16413
+++ b/src/gcc/testsuite/gcc.dg/pr60485-1.c (.../branches/gcc-4_8-branch)
16415
+/* { dg-do run } */
16416
+/* { dg-options "-O2" } */
16418
+extern void abort (void);
16444
Index: gcc/testsuite/gcc.dg/strlenopt-1f.c
16445
===================================================================
16446
--- a/src/gcc/testsuite/gcc.dg/strlenopt-1f.c (.../tags/gcc_4_8_2_release)
16447
+++ b/src/gcc/testsuite/gcc.dg/strlenopt-1f.c (.../branches/gcc-4_8-branch)
16449
#include "strlenopt-1.c"
16451
/* { dg-final { scan-tree-dump-times "strlen \\(" 2 "strlen" } } */
16452
-/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 3 "strlen" } } */
16453
-/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 1 "strlen" } } */
16454
+/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 0 "strlen" } } */
16455
+/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 0 "strlen" } } */
16456
/* { dg-final { scan-tree-dump-times "__strcat_chk \\(" 0 "strlen" } } */
16457
/* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
16458
/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 0 "strlen" } } */
16459
-/* { dg-final { scan-tree-dump-times "memcpy \\(" 0 "strlen" } } */
16460
-/* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
16461
+/* { dg-final { scan-tree-dump-times "memcpy \\(" 3 "strlen" } } */
16462
+/* { dg-final { scan-tree-dump-times "strcpy \\(" 1 "strlen" } } */
16463
/* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
16464
/* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
16465
/* { dg-final { cleanup-tree-dump "strlen" } } */
16466
Index: gcc/testsuite/gcc.dg/vect/pr60382.c
16467
===================================================================
16468
--- a/src/gcc/testsuite/gcc.dg/vect/pr60382.c (.../tags/gcc_4_8_2_release)
16469
+++ b/src/gcc/testsuite/gcc.dg/vect/pr60382.c (.../branches/gcc-4_8-branch)
16471
+#include "tree-vect.h"
16473
+int a, b, c, e, f;
16478
+ for (b = 0; b < 3; b++)
16481
+ for (c = 0; c < 4; c++)
16486
+ for (a = 0; a < 2; a++)
16502
+/* { dg-final { cleanup-tree-dump "vect" } } */
16503
Index: gcc/testsuite/gcc.dg/vect/pr60276.c
16504
===================================================================
16505
--- a/src/gcc/testsuite/gcc.dg/vect/pr60276.c (.../tags/gcc_4_8_2_release)
16506
+++ b/src/gcc/testsuite/gcc.dg/vect/pr60276.c (.../branches/gcc-4_8-branch)
16508
+/* { dg-do run } */
16510
+extern void abort (void);
16513
+foo (int *out, const int *lp, unsigned samples)
16516
+ for (x = 0, target = 0; x < (int)samples; x += 2, target++)
16518
+ out[x] = lp[target];
16519
+ out[x - 1] = out[x - 2] + out[x];
16524
+foo_novec (int *out, const int *lp, unsigned samples)
16527
+ for (x = 0, target = 0; x < (int)samples; x += 2, target++)
16529
+ out[x] = lp[target];
16530
+ out[x - 1] = out[x - 2] + out[x];
16531
+ __asm__ volatile ("" : : : "memory");
16537
+ const int lp[25] = {
16545
+ int out[49] = {0};
16546
+ int out2[49] = {0};
16549
+ foo (out + 2, lp + 1, 48);
16550
+ foo_novec (out2 + 2, lp + 1, 48);
16552
+ for (s = 0; s < 49; s++)
16553
+ if (out[s] != out2[s])
16559
+/* { dg-final { cleanup-tree-dump "vect" } } */
16560
Index: gcc/testsuite/gcc.dg/pr53060.c
16561
===================================================================
16562
--- a/src/gcc/testsuite/gcc.dg/pr53060.c (.../tags/gcc_4_8_2_release)
16563
+++ b/src/gcc/testsuite/gcc.dg/pr53060.c (.../branches/gcc-4_8-branch)
16566
/* Ignore a warning that is irrelevant to the purpose of this test. */
16567
/* { dg-prune-output ".*GCC vector returned by reference.*" } */
16568
+/* { dg-prune-output "changes the ABI" } */
16569
Index: gcc/testsuite/ChangeLog
16570
===================================================================
16571
--- a/src/gcc/testsuite/ChangeLog (.../tags/gcc_4_8_2_release)
16572
+++ b/src/gcc/testsuite/ChangeLog (.../branches/gcc-4_8-branch)
16574
+2014-03-20 Tobias Burnus <burnus@net-b.de>
16578
+ * gfortran.dg/implicit_pure_4.f90: New.
16580
+2014-03-17 Mikael Pettersson <mikpelinux@gmail.com>
16581
+ Committed by Bill Schmidt <wschmidt@linux.vnet.ibm.com>
16583
+ Backport from mainline:
16585
+ 2013-06-16 Joern Rennecke <joern.rennecke@embecosm.com>
16587
+ PR rtl-optimization/57425
16588
+ PR rtl-optimization/57569
16589
+ * gcc.dg/torture/pr57425-1.c, gcc.dg/torture/pr57425-2.c: New files.
16590
+ * gcc.dg/torture/pr57425-3.c, gcc.dg/torture/pr57569.c: Likewise.
16592
+2014-03-17 Richard Biener <rguenther@suse.de>
16594
+ Backport from mainline
16595
+ 2014-03-11 Richard Biener <rguenther@suse.de>
16597
+ PR tree-optimization/60429
16598
+ PR tree-optimization/60485
16599
+ * gcc.dg/pr60485-1.c: New testcase.
16600
+ * gcc.dg/pr60485-2.c: Likewise.
16602
+2014-03-15 Dominique d'Humieres <dominiq@lps.ens.fr>
16604
+ Backport from mainline
16605
+ PR libfortran/60128
16606
+ * gfortran.dg/fmt_en.f90: New test.
16608
+2014-03-15 Jerry DeLisle <jvdelisle@gcc.gnu>
16610
+ Backport from mainline
16611
+ PR libfortran/58324
16612
+ * gfortran.dg/list_read_12.f90: New test.
16614
+2014-03-13 Joey Ye <joey.ye@arm.com>
16616
+ Backport from mainline
16617
+ 2014-03-12 Thomas Preud'homme <thomas.preudhomme@arm.com>
16619
+ PR tree-optimization/60454
16620
+ * gcc.c-torture/execute/pr60454.c: New test.
16622
+2014-03-08 Janus Weil <janus@gcc.gnu.org>
16625
+ * gfortran.dg/shape_8.f90: New.
16627
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
16629
+ Backport from mainline
16630
+ 2014-02-19 Jakub Jelinek <jakub@redhat.com>
16633
+ * g++.dg/ext/builtin-bswap1.C: New test.
16634
+ * c-c++-common/pr37743.c: New test.
16636
+ PR preprocessor/58844
16637
+ * c-c++-common/cpp/pr58844-1.c: New test.
16638
+ * c-c++-common/cpp/pr58844-2.c: New test.
16640
+ 2014-02-13 Jakub Jelinek <jakub@redhat.com>
16643
+ * gcc.target/i386/pr43546.c: New test.
16645
+ 2014-02-12 Jakub Jelinek <jakub@redhat.com>
16648
+ * c-c++-common/pr60101.c: New test.
16650
+ 2014-02-11 Jakub Jelinek <jakub@redhat.com>
16653
+ * gfortran.dg/pr52370.f90: New test.
16656
+ * gcc.dg/guality/pr59776.c: New test.
16658
+ 2014-02-07 Jakub Jelinek <jakub@redhat.com>
16660
+ PR preprocessor/56824
16661
+ * gcc.dg/pr56824.c: New test.
16663
+ 2014-02-06 Jakub Jelinek <jakub@redhat.com>
16666
+ * gcc.c-torture/execute/pr60062.c: New test.
16667
+ * gcc.c-torture/execute/pr60072.c: New test.
16669
+ 2014-02-04 Jakub Jelinek <jakub@redhat.com>
16672
+ * c-c++-common/torture/pr60026.c: New test.
16674
+ 2014-02-05 Jakub Jelinek <jakub@redhat.com>
16676
+ PR middle-end/57499
16677
+ * g++.dg/torture/pr57499.C: New test.
16679
+ 2014-03-03 Jakub Jelinek <jakub@redhat.com>
16681
+ PR preprocessor/60400
16682
+ * c-c++-common/cpp/pr60400.c: New test.
16683
+ * c-c++-common/cpp/pr60400-1.h: New file.
16684
+ * c-c++-common/cpp/pr60400-2.h: New file.
16686
+2014-03-04 Richard Biener <rguenther@suse.de>
16688
+ PR tree-optimization/60382
16689
+ * gcc.dg/vect/pr60382.c: New testcase.
16691
+2014-03-02 Mikael Morin <mikael@gcc.gnu.org>
16694
+ * gfortran.dg/str_comp_optimize_1.f90: New test.
16696
+2014-02-25 Richard Biener <rguenther@suse.de>
16698
+ Backport from mainline
16699
+ 2014-02-21 Richard Biener <rguenther@suse.de>
16701
+ PR tree-optimization/60276
16702
+ * gcc.dg/vect/pr60276.c: New testcase.
16704
+2014-02-25 Richard Biener <rguenther@suse.de>
16706
+ Backport from mainline
16707
+ 2014-02-14 Richard Biener <rguenther@suse.de>
16709
+ PR tree-optimization/60183
16710
+ * gcc.dg/torture/pr60183.c: New testcase.
16712
+2014-02-24 Fabien Chêne <fabien@gcc.gnu.org>
16715
+ * g++.dg/template/using27.C: New.
16716
+ * g++.dg/template/using28.C: New.
16717
+ * g++.dg/template/using29.C: New.
16719
+2014-02-23 David Holsgrove <david.holsgrove@xilinx.com>
16721
+ * gcc/testsuite/gcc.target/microblaze/others/mem_reload.c: New test.
16723
+2014-02-22 Mikael Morin <mikael@gcc.gnu.org>
16726
+ * gfortran.dg/ichar_3.f90: New test.
16728
+2014-02-21 Steven G. Kargl <kargl@gcc.gnu.org>
16730
+ Backport from mainline
16732
+ * gfortran.dg/pr59700.f90: New test.
16734
+2014-02-21 Martin Jambor <mjambor@suse.cz>
16737
+ * gcc.dg/ipa/pr55260.c: New test.
16739
+2014-02-19 Tobias Burnus <burnus@net-b.de>
16742
+ * gfortran.dg/proc_ptr_45.f90: New.
16743
+ * gfortran.dg/proc_ptr_46.f90: New.
16745
+2014-02-19 Uros Bizjak <ubizjak@gmail.com>
16747
+ Backport from mainline
16748
+ 2014-02-19 Uros Bizjak <ubizjak@gmail.com>
16751
+ * gcc.target/i386/pr39162.c: Add dg-prune-output.
16752
+ (dg-options): Remove -Wno-psabi.
16753
+ * gcc.target/i386/pr59794-2.c: Ditto.
16754
+ * gcc.target/i386/sse-5.c: Ditto.
16756
+2014-02-19 Janus Weil <janus@gcc.gnu.org>
16758
+ Backports from mainline:
16759
+ 2014-02-17 Janus Weil <janus@gcc.gnu.org>
16762
+ * gfortran.dg/init_flag_12.f90: New.
16764
+ 2014-02-18 Janus Weil <janus@gcc.gnu.org>
16767
+ * gfortran.dg/typebound_generic_15.f90: New.
16769
+2014-02-18 Kai Tietz <ktietz@redhat.com>
16772
+ * gcc.target/i386/nest-1.c: New testcase.
16774
+2014-02-18 Eric Botcazou <ebotcazou@adacore.com>
16776
+ * gnat.dg/opt32.adb: New test.
16778
+2014-02-15 Jerry DeLisle <jvdelisle@gcc.gnu>
16779
+ Dominique d'Humieres <dominiq@lps.ens.fr>
16781
+ Backport from mainline
16782
+ PR libfortran/59771
16783
+ PR libfortran/59774
16784
+ PR libfortran/59836
16785
+ * gfortran.dg/fmt_g_1.f90: New test.
16786
+ * gfortran.dg/round_3.f08: New cases added.
16788
+2014-02-13 Dominik Vogt <vogt@linux.vnet.ibm.com>
16790
+ * gcc.target/s390/hotpatch-compile-8.c: New test.
16792
+2014-02-12 Eric Botcazou <ebotcazou@adacore.com>
16794
+ * gcc.c-torture/execute/20140212-1.c: New test.
16796
+2014-02-10 Richard Biener <rguenther@suse.de>
16798
+ Backport from mainline
16799
+ 2014-01-30 Richard Biener <rguenther@suse.de>
16801
+ PR tree-optimization/59903
16802
+ * gcc.dg/torture/pr59903.c: New testcase.
16804
+ 2014-02-10 Richard Biener <rguenther@suse.de>
16806
+ PR tree-optimization/60115
16807
+ * gcc.dg/torture/pr60115.c: New testcase.
16809
+2014-02-09 Janus Weil <janus@gcc.gnu.org>
16811
+ Backport from mainline
16812
+ 2013-10-21 Tobias Burnus <burnus@net-b.de>
16816
+ * gfortran.dg/proc_ptr_comp_38.f90: New.
16818
+2014-02-08 Mikael Morin <mikael@gcc.gnu.org>
16821
+ * gfortran.dg/default_initialization_7.f90: New test.
16823
+2014-02-07 Paul Thomas <pault@gcc.gnu.org>
16826
+ * gfortran.dg/elemental_subroutine_9.f90 : New test
16828
+2014-02-04 Uros Bizjak <ubizjak@gmail.com>
16830
+ Backport from mainline
16831
+ 2014-02-02 Uros Bizjak <ubizjak@gmail.com>
16834
+ * gcc.c-torture/execute/pr60017.c: New test.
16836
+2014-02-01 Paul Thomas <pault@gcc.gnu.org>
16839
+ * gfortran.dg/allocate_class_3.f90 : New test
16841
+2014-01-30 David Holsgrove <david.holsgrove@xilinx.com>
16843
+ Backport from mainline.
16844
+ * gcc.target/microblaze/isa/fcmp4.c: New.
16846
+2014-01-26 Mikael Morin <mikael@gcc.gnu.org>
16849
+ * gfortran.dg/unresolved_fixup_1.f90: New test.
16850
+ * gfortran.dg/unresolved_fixup_2.f90: New test.
16852
+2014-01-24 H.J. Lu <hongjiu.lu@intel.com>
16854
+ Backport from mainline.
16855
+ 2014-01-23 H.J. Lu <hongjiu.lu@intel.com>
16858
+ * gcc.target/i386/pr59929.c: New test.
16860
+2014-01-24 Paolo Carlini <paolo.carlini@oracle.com>
16863
+ * g++.dg/ext/timevar2.C: New.
16865
+2014-01-23 David Holsgrove <david.holsgrove@xilinx.com>
16867
+ Backport from mainline.
16868
+ * gcc.target/microblaze/others/builtin-trap.c: New test.
16870
+2014-01-23 Marek Polacek <polacek@redhat.com>
16872
+ Backport from mainline
16873
+ 2013-10-21 Marek Polacek <polacek@redhat.com>
16875
+ PR middle-end/58809
16876
+ * gcc.dg/gomp/pr58809.c: New test.
16878
+2014-01-23 Jakub Jelinek <jakub@redhat.com>
16880
+ PR middle-end/58809
16881
+ * c-c++-common/gomp/pr58809.c: New test.
16883
+2014-01-22 Marek Polacek <polacek@redhat.com>
16885
+ Backport from mainline
16886
+ 2014-01-22 Marek Polacek <polacek@redhat.com>
16889
+ * gcc.dg/torture/pr59891.c: New test.
16891
+2014-01-21 Jakub Jelinek <jakub@redhat.com>
16893
+ PR middle-end/59860
16894
+ * gcc.dg/strlenopt-4.c: Expect the same counts on s390*-* as on all
16897
+2014-01-20 Richard Biener <rguenther@suse.de>
16899
+ PR middle-end/59860
16900
+ * gcc.dg/pr59860.c: New testcase.
16902
+2014-01-20 Marek Polacek <polacek@redhat.com>
16904
+ Backported from mainline
16905
+ 2014-01-17 Marek Polacek <polacek@redhat.com>
16908
+ * g++.dg/diagnostic/pr59838.C: New test.
16910
+2014-01-19 Paul Thomas <pault@gcc.gnu.org>
16912
+ Backport from mainline
16913
+ 2013-12-01 Paul Thomas <pault@gcc.gnu.org>
16916
+ * gfortran.dg/null_5.f90 : Include new error.
16917
+ * gfortran.dg/null_6.f90 : Include new error.
16919
+2014-01-17 H.J. Lu <hongjiu.lu@intel.com>
16921
+ Backport from mainline
16922
+ 2014-01-15 H.J. Lu <hongjiu.lu@intel.com>
16925
+ * c-c++-common/convert-vec-1.c: Also prune ABI change for
16927
+ * g++.dg/cpp0x/constexpr-53094-2.C: Likewise.
16928
+ * g++.dg/ext/attribute-test-1.C: Likewise.
16929
+ * g++.dg/ext/attribute-test-2.C: Likewise.
16930
+ * g++.dg/ext/attribute-test-3.C: Likewise.
16931
+ * g++.dg/ext/attribute-test-4.C: Likewise.
16932
+ * g++.dg/torture/pr38565.C: Likewise.
16933
+ * gcc.dg/pr53060.c: Likewise.
16934
+ * c-c++-common/scal-to-vec2.c: Add -msse2 for x86.
16935
+ * c-c++-common/vector-compare-2.c: Likewise.
16936
+ * gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c: Likewise.
16937
+ * g++.dg/conversion/simd1.C: Add -msse2 for x86. Adjust
16938
+ dg-message line number.
16940
+2014-01-17 H.J. Lu <hongjiu.lu@intel.com>
16942
+ Backport from mainline
16943
+ 2014-01-14 H.J. Lu <hongjiu.lu@intel.com>
16946
+ * gcc.target/i386/pr39162.c (y): New __m256i variable.
16947
+ (bar): Change return type to void. Set y to x.
16948
+ * gcc.target/i386/pr59794-1.c: New testcase.
16949
+ * gcc.target/i386/pr59794-2.c: Likewise.
16950
+ * gcc.target/i386/pr59794-3.c: Likewise.
16951
+ * gcc.target/i386/pr59794-4.c: Likewise.
16952
+ * gcc.target/i386/pr59794-5.c: Likewise.
16953
+ * gcc.target/i386/pr59794-6.c: Likewise.
16954
+ * gcc.target/i386/pr59794-7.c: Likewise.
16956
+2014-01-17 Matthias Klose <doko@ubuntu.com>
16958
+ Backport from the trunk:
16959
+ 2014-01-09 Uros Bizjak <ubizjak@gmail.com>
16960
+ * go.test/go-test.exp (go-gc-tests): Don't run peano.go on systems
16961
+ which don't support -fsplit-stack. Skip rotate[0123].go tests.
16963
+2014-01-15 Kugan Vivekanandarajah <kuganv@linaro.org>
16965
+ Backport from mainline
16966
+ 2014-01-15 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
16967
+ Kugan Vivekanandarajah <kuganv@linaro.org>
16970
+ * g++.dg/pr59695.C: New testcase.
16972
+2014-01-17 Terry Guo <terry.guo@arm.com>
16974
+ * gcc.target/arm/pr59826.c: New test.
16976
+2014-01-16 Jakub Jelinek <jakub@redhat.com>
16979
+ * gcc.target/i386/pr59839.c: New test.
16982
+ * gcc.target/i386/pr9771-1.c (main): Rename to...
16983
+ (real_main): ... this. Add __asm name "main".
16984
+ (ASMNAME, ASMNAME2, STRING): Define.
16986
+2014-01-16 Marek Polacek <polacek@redhat.com>
16988
+ Backported from mainline
16989
+ 2014-01-16 Marek Polacek <polacek@redhat.com>
16991
+ PR middle-end/59827
16992
+ * gcc.dg/pr59827.c: New test.
16994
+2014-01-15 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
16997
+ * gcc.c-torture/compile/pr59803.c: New testcase.
16999
+2014-01-10 Yufeng Zhang <yufeng.zhang@arm.com>
17001
+ * gcc.target/arm/neon/vst1Q_laneu64-1.c: New test.
17003
+2014-01-10 Hans-Peter Nilsson <hp@axis.com>
17005
+ * gcc.dg/pr46309.c: Disable for cris*-*-*.
17007
+2014-01-10 Paolo Carlini <paolo.carlini@oracle.com>
17011
+ * g++.dg/cpp0x/variadic144.C: New.
17012
+ * g++.dg/cpp0x/variadic145.C: Likewise.
17014
+2014-01-10 Richard Biener <rguenther@suse.de>
17016
+ PR tree-optimization/59715
17017
+ * gcc.dg/torture/pr59715.c: New testcase.
17019
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
17021
+ * gcc.target/mips/bswap-1.c, gcc.target/mips/bswap-2.c,
17022
+ gcc.target/mips/bswap-3.c, gcc.target/mips/bswap-4.c,
17023
+ gcc.target/mips/bswap-5.c, gcc.target/mips/bswap-6.c: New tests.
17025
+2014-01-09 Richard Sandiford <rdsandiford@googlemail.com>
17027
+ PR rtl-optimization/59137
17028
+ * gcc.target/mips/pr59137.c: New test.
17030
+2014-01-09 Richard Biener <rguenther@suse.de>
17032
+ Backport from mainline
17033
+ 2013-11-18 Richard Biener <rguenther@suse.de>
17035
+ PR tree-optimization/59125
17036
+ PR tree-optimization/54570
17037
+ * gcc.dg/builtin-object-size-8.c: Un-xfail.
17038
+ * gcc.dg/builtin-object-size-14.c: New testcase.
17039
+ * gcc.dg/strlenopt-14gf.c: Adjust.
17040
+ * gcc.dg/strlenopt-1f.c: Likewise.
17041
+ * gcc.dg/strlenopt-4gf.c: Likewise.
17043
+ 2013-12-03 Jakub Jelinek <jakub@redhat.com>
17045
+ PR tree-optimization/59362
17046
+ * gcc.c-torture/compile/pr59362.c: New test.
17048
+2014-01-09 Richard Earnshaw <rearnsha@arm.com>
17050
+ PR rtl-optimization/54300
17051
+ * gcc.target/arm/pr54300.C: New test.
17053
+2014-01-08 Martin Jambor <mjambor@suse.cz>
17056
+ * gcc.dg/ipa/pr59610.c: New test.
17058
+2014-01-07 Jakub Jelinek <jakub@redhat.com>
17060
+ PR rtl-optimization/58668
17061
+ * gcc.dg/pr58668.c: New test.
17063
+ Backported from mainline
17064
+ 2013-12-16 Jakub Jelinek <jakub@redhat.com>
17066
+ PR middle-end/58956
17067
+ PR middle-end/59470
17068
+ * gcc.target/i386/pr59470.c: New test.
17070
+2014-01-04 Janus Weil <janus@gcc.gnu.org>
17072
+ Backport from mainline
17073
+ 2014-01-02 Janus Weil <janus@gcc.gnu.org>
17076
+ * gfortran.dg/dynamic_dispatch_12.f90: New.
17078
+2014-01-03 Joseph Myers <joseph@codesourcery.com>
17080
+ * gcc.target/powerpc/rs6000-ldouble-3.c: New test.
17082
+2014-01-03 Jakub Jelinek <jakub@redhat.com>
17085
+ * gcc.target/i386/pr59625.c: New test.
17087
+2014-01-01 Jakub Jelinek <jakub@redhat.com>
17089
+ PR rtl-optimization/59647
17090
+ * g++.dg/opt/pr59647.C: New test.
17092
+2013-12-31 Janus Weil <janus@gcc.gnu.org>
17094
+ Backport from mainline
17095
+ 2013-12-30 Janus Weil <janus@gcc.gnu.org>
17098
+ * gfortran.dg/generic_28.f90: New.
17100
+2013-12-20 Jakub Jelinek <jakub@redhat.com>
17103
+ * g++.dg/tree-prof/pr59255.C: New test.
17105
+2013-12-19 James Greenhalgh <james.greenhalgh@arm.com>
17107
+ Backport from Mainline
17108
+ 2013-05-01 James Greenhalgh <james.greenhalgh@arm.com>
17110
+ * gcc.target/aarch64/scalar_intrinsics.c (force_simd): New.
17111
+ (test_vceqd_s64): Force arguments to SIMD registers.
17112
+ (test_vceqzd_s64): Likewise.
17113
+ (test_vcged_s64): Likewise.
17114
+ (test_vcled_s64): Likewise.
17115
+ (test_vcgezd_s64): Likewise.
17116
+ (test_vcged_u64): Likewise.
17117
+ (test_vcgtd_s64): Likewise.
17118
+ (test_vcltd_s64): Likewise.
17119
+ (test_vcgtzd_s64): Likewise.
17120
+ (test_vcgtd_u64): Likewise.
17121
+ (test_vclezd_s64): Likewise.
17122
+ (test_vcltzd_s64): Likewise.
17123
+ (test_vtst_s64): Likewise.
17124
+ (test_vtst_u64): Likewise.
17126
+2013-12-19 Dominik Vogt <vogt@linux.vnet.ibm.com>
17127
+ Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
17129
+ Backport from mainline
17130
+ 2013-12-19 Dominik Vogt <vogt@linux.vnet.ibm.com>
17131
+ * gcc/testsuite/gcc.target/s390/hotpatch-1.c: New test
17132
+ * gcc/testsuite/gcc.target/s390/hotpatch-2.c: New test
17133
+ * gcc/testsuite/gcc.target/s390/hotpatch-3.c: New test
17134
+ * gcc/testsuite/gcc.target/s390/hotpatch-4.c: New test
17135
+ * gcc/testsuite/gcc.target/s390/hotpatch-5.c: New test
17136
+ * gcc/testsuite/gcc.target/s390/hotpatch-6.c: New test
17137
+ * gcc/testsuite/gcc.target/s390/hotpatch-7.c: New test
17138
+ * gcc/testsuite/gcc.target/s390/hotpatch-8.c: New test
17139
+ * gcc/testsuite/gcc.target/s390/hotpatch-9.c: New test
17140
+ * gcc/testsuite/gcc.target/s390/hotpatch-10.c: New test
17141
+ * gcc/testsuite/gcc.target/s390/hotpatch-11.c: New test
17142
+ * gcc/testsuite/gcc.target/s390/hotpatch-12.c: New test
17143
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c: New test
17144
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c: New test
17145
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c: New test
17146
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c: New test
17147
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c: New test
17148
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c: New test
17149
+ * gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c: New test
17151
+2013-12-18 Janus Weil <janus@gcc.gnu.org>
17153
+ Backport from mainline
17154
+ 2013-12-15 Janus Weil <janus@gcc.gnu.org>
17157
+ * gfortran.dg/unlimited_polymorphic_15.f90: New.
17159
+2013-12-15 Uros Bizjak <ubizjak@gmail.com>
17161
+ PR testsuite/58630
17162
+ * gcc.target/i386/pr43662.c (dg-options):
17163
+ Add -maccumulate-outgoing-args.
17164
+ * gcc.target/i386/pr43869.c (dg-options): Ditto.
17165
+ * gcc.target/i386/pr57003.c (dg-options): Ditto.
17166
+ * gcc.target/i386/avx-vzeroupper-16.c (dg-options):
17167
+ Remove -mtune=generic and add -maccumulate-outgoing-args instead.
17168
+ * gcc.target/i386/avx-vzeroupper-17.c (dg-options): Ditto.
17169
+ * gcc.target/i386/avx-vzeroupper-18.c (dg-options): Ditto.
17170
+ * gcc.target/x86_64/abi/callabi/func-1.c (dg-options):
17171
+ Add -maccumulate-outgoing-args.
17172
+ * gcc.target/x86_64/abi/callabi/func-2a.c (dg-options): Ditto.
17173
+ * gcc.target/x86_64/abi/callabi/func-2b.c (dg-options): Ditto.
17174
+ * gcc.target/x86_64/abi/callabi/func-indirect.c (dg-options): Ditto.
17175
+ * gcc.target/x86_64/abi/callabi/func-indirect-2a.c (dg-options): Ditto.
17176
+ * gcc.target/x86_64/abi/callabi/func-indirect-2b.c (dg-options): Ditto.
17177
+ * gcc.target/x86_64/abi/callabi/leaf-1.c (dg-options): Ditto.
17178
+ * gcc.target/x86_64/abi/callabi/leaf-2.c (dg-options): Ditto.
17179
+ * gcc.target/x86_64/abi/callabi/pr38891.c (dg-options): Ditto.
17180
+ * gcc.target/x86_64/abi/callabi/vaarg-1.c (dg-options): Ditto.
17181
+ * gcc.target/x86_64/abi/callabi/vaarg-2.c (dg-options): Ditto.
17182
+ * gcc.target/x86_64/abi/callabi/vaarg-3.c (dg-options): Ditto.
17183
+ * gcc.target/x86_64/abi/callabi/vaarg-4a.c (dg-options): Ditto.
17184
+ * gcc.target/x86_64/abi/callabi/vaarg-4b.c (dg-options): Ditto.
17185
+ * gcc.target/x86_64/abi/callabi/vaarg-5a.c (dg-options): Ditto.
17186
+ * gcc.target/x86_64/abi/callabi/vaarg-5b.c (dg-options): Ditto.
17188
+2013-12-12 Jakub Jelinek <jakub@redhat.com>
17190
+ PR middle-end/59470
17191
+ * g++.dg/opt/pr59470.C: New test.
17194
+ * gfortran.dg/gomp/pr59467.f90: New test.
17195
+ * c-c++-common/gomp/pr59467.c: New test.
17197
+2013-12-12 Uros Bizjak <ubizjak@gmail.com>
17199
+ Backport from mainline
17200
+ 2013-12-12 Ryan Mansfield <rmansfield@qnx.com>
17202
+ PR testsuite/59442
17203
+ * gcc.target/i386/sse2-movapd-1.c: Fix alignment attributes.
17204
+ * gcc.target/i386/sse2-movapd-2.c: Likewise.
17205
+ * gcc.target/i386/avx-vmovapd-256-1.c: Likewise.
17206
+ * gcc.target/i386/avx-vmovapd-256-2.c: Likewise.
17208
+2013-12-08 Uros Bizjak <ubizjak@gmail.com>
17210
+ Backport from mainline
17211
+ 2013-12-06 Uros Bizjak <ubizjak@gmail.com>
17214
+ * gcc.target/i386/pr59405.c: New test.
17216
+2013-12-06 Jakub Jelinek <jakub@redhat.com>
17218
+ PR tree-optimization/59388
17219
+ * gcc.c-torture/execute/pr59388.c: New test.
17221
+2013-12-06 Richard Biener <rguenther@suse.de>
17223
+ Backport from mainline
17224
+ 2013-11-28 Richard Biener <rguenther@suse.de>
17226
+ PR tree-optimization/59330
17227
+ * gcc.dg/torture/pr59330.c: New testcase.
17229
+2013-12-06 Richard Biener <rguenther@suse.de>
17231
+ Backport from mainline
17232
+ 2013-11-27 Richard Biener <rguenther@suse.de>
17234
+ PR tree-optimization/59288
17235
+ * gcc.dg/torture/pr59288.c: New testcase.
17237
+ 2013-11-19 Richard Biener <rguenther@suse.de>
17239
+ PR tree-optimization/59164
17240
+ * gcc.dg/torture/pr59164.c: New testcase.
17242
+ 2013-09-05 Richard Biener <rguenther@suse.de>
17244
+ PR tree-optimization/58137
17245
+ * gcc.target/i386/pr58137.c: New testcase.
17247
+2013-12-06 Oleg Endo <olegendo@gcc.gnu.org>
17251
+ * gcc.target/sh/pr51244-19.c: Adjust test case.
17253
+2013-12-05 Richard Biener <rguenther@suse.de>
17255
+ Backport from mainline
17256
+ 2013-11-19 Richard Biener <rguenther@suse.de>
17258
+ PR middle-end/58956
17259
+ * gcc.dg/torture/pr58956.c: New testcase.
17261
+2013-12-04 Jakub Jelinek <jakub@redhat.com>
17264
+ * g++.dg/cpp0x/constexpr-template6.C: New test.
17266
+ PR rtl-optimization/58726
17267
+ * gcc.c-torture/execute/pr58726.c: New test.
17270
+ * g++.dg/torture/pr59163.C: New test.
17272
+2013-12-03 Marek Polacek <polacek@redhat.com>
17274
+ Backport from mainline
17275
+ 2013-12-03 Marek Polacek <polacek@redhat.com>
17278
+ * gcc.dg/pr59351.c: New test.
17280
+2013-12-03 Jakub Jelinek <jakub@redhat.com>
17282
+ PR middle-end/59011
17283
+ * gcc.dg/pr59011.c: New test.
17286
+ * g++.dg/opt/pr58864.C: New test.
17288
+2013-12-02 Jakub Jelinek <jakub@redhat.com>
17290
+ PR tree-optimization/59358
17291
+ * gcc.c-torture/execute/pr59358.c: New test.
17293
+2013-12-02 Richard Biener <rguenther@suse.de>
17295
+ PR tree-optimization/59139
17296
+ * gcc.dg/torture/pr59139.c: New testcase.
17298
+2013-11-27 Tom de Vries <tom@codesourcery.com>
17299
+ Marc Glisse <marc.glisse@inria.fr>
17302
+ * c-c++-common/pr59032.c: New testcase.
17304
+2013-11-27 Tom de Vries <tom@codesourcery.com>
17305
+ Marc Glisse <marc.glisse@inria.fr>
17307
+ PR middle-end/59037
17308
+ * c-c++-common/pr59037.c: New testcase.
17310
+2013-11-30 Paul Thomas <pault@gcc.gnu.org>
17312
+ Backport from mainline
17313
+ 2013-11-04 Paul Thomas <pault@gcc.gnu.org>
17316
+ * gfortran.dg/optional_class_1.f90 : New test
17318
+2013-11-29 Jakub Jelinek <jakub@redhat.com>
17321
+ * c-c++-common/pr59280.c: New test.
17323
+2013-11-28 Jakub Jelinek <jakub@redhat.com>
17326
+ * g++.dg/gomp/pr59297.C: New test.
17328
+2013-11-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
17330
+ Backport from mainline
17331
+ 2013-11-28 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
17333
+ * gcc.target/arm/vrinta-ce.c: New testcase.
17335
+2013-11-28 Uros Bizjak <ubizjak@gmail.com>
17337
+ Backport from mainline
17338
+ 2013-11-23 Uros Bizjak <ubizjak@gmail.com>
17341
+ * config/i386/i386.c (bdesc_multi_arg) <IX86_BUILTIN_VFRCZSS>:
17342
+ Declare as MULTI_ARG_1_SF instruction.
17343
+ <IX86_BUILTIN_VFRCZSD>: Decleare as MULTI_ARG_1_DF instruction.
17344
+ * config/i386/sse.md (*xop_vmfrcz<mode>2): Rename
17345
+ from *xop_vmfrcz_<mode>.
17346
+ * config/i386/xopintrin.h (_mm_frcz_ss): Use __builtin_ia32_movss
17347
+ to merge scalar result with __A.
17348
+ (_mm_frcz_sd): Use __builtin_ia32_movsd to merge scalar
17351
+2013-11-28 Terry Guo <terry.guo@arm.com>
17353
+ Backport mainline r205391
17354
+ 2013-11-26 Terry Guo <terry.guo@arm.com>
17356
+ * gcc.target/arm/thumb1-pic-high-reg.c: New case.
17357
+ * gcc.target/arm/thumb1-pic-single-base.c: New case.
17359
+2013-11-27 Jakub Jelinek <jakub@redhat.com>
17361
+ Backported from mainline
17362
+ 2013-11-27 Jakub Jelinek <jakub@redhat.com>
17364
+ PR tree-optimization/59014
17365
+ * gcc.c-torture/execute/pr59014-2.c: New test.
17367
+ 2013-11-26 Jakub Jelinek <jakub@redhat.com>
17369
+ PR tree-optimization/59014
17370
+ * gcc.c-torture/execute/pr59014.c: New test.
17372
+2013-11-27 Eric Botcazou <ebotcazou@adacore.com>
17374
+ * gcc.c-torture/execute/20131127-1.c: New test.
17376
+2013-11-25 Vidya Praveen <vidyapraveen@arm.com>
17378
+ Backport from mainline
17379
+ 2013-10-21 Vidya Praveen <vidyapraveen@arm.com>
17381
+ * gcc.dg/20050922-1.c: Remove stdlib.h and declare abort().
17382
+ * gcc.dg/20050922-1.c: Remove stdlib.h and declare abort() and exit().
17384
+2013-11-20 Dominik Vogt <vogt@linux.vnet.ibm.com>
17386
+ Backport from mainline
17387
+ * gcc.target/s390/htm-1.c: Rename to ...
17388
+ * gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c: ... this
17390
+ * gcc.target/s390/htm-xl-intrin-1.c: Rename to ...
17391
+ * gcc.target/s390/htm-builtins-compile-3.c: ... this one.
17392
+ * gcc.target/s390/htm-builtins-compile-2.c: New testcase.
17393
+ * gcc.target/s390/htm-builtins-1.c: New testcase.
17394
+ * gcc.target/s390/htm-builtins-2.c: New testcase.
17395
+ * gcc.target/s390/s390.exp: Add check for htm machine.
17397
+2013-11-19 Richard Biener <rguenther@suse.de>
17399
+ PR tree-optimization/57517
17400
+ * gfortran.fortran-torture/compile/pr57517.f90: New testcase.
17401
+ * gcc.dg/torture/pr57517.c: Likewise.
17403
+2013-11-19 Richard Biener <rguenther@suse.de>
17405
+ Backport from mainline
17406
+ 2013-11-05 Richard Biener <rguenther@suse.de>
17408
+ PR middle-end/58941
17409
+ * gcc.dg/torture/pr58941.c: New testcase.
17411
+2013-11-18 Richard Biener <rguenther@suse.de>
17413
+ Backport from mainline
17414
+ 2013-10-21 Richard Biener <rguenther@suse.de>
17416
+ PR tree-optimization/58794
17417
+ * c-c++-common/torture/pr58794-1.c: New testcase.
17418
+ * c-c++-common/torture/pr58794-2.c: Likewise.
17420
+ 2013-10-21 Richard Biener <rguenther@suse.de>
17422
+ PR middle-end/58742
17423
+ * c-c++-common/fold-divmul-1.c: New testcase.
17425
+ 2013-11-06 Richard Biener <rguenther@suse.de>
17427
+ PR tree-optimization/58653
17428
+ * gcc.dg/tree-ssa/predcom-6.c: New testcase.
17429
+ * gcc.dg/tree-ssa/predcom-7.c: Likewise.
17431
+ PR tree-optimization/59047
17432
+ * gcc.dg/torture/pr59047.c: New testcase.
17434
+ 2013-10-15 Richard Biener <rguenther@suse.de>
17436
+ PR tree-optimization/58143
17437
+ * gcc.dg/torture/pr58143-1.c: New testcase.
17438
+ * gcc.dg/torture/pr58143-2.c: Likewise.
17439
+ * gcc.dg/torture/pr58143-3.c: Likewise.
17441
+2013-11-17 Janus Weil <janus@gcc.gnu.org>
17443
+ Backport from mainline
17444
+ 2013-11-07 Janus Weil <janus@gcc.gnu.org>
17447
+ * gfortran.dg/constructor_9.f90: New.
17449
+2013-11-16 Janus Weil <janus@gcc.gnu.org>
17451
+ Backport from mainline
17452
+ 2013-09-20 Janus Weil <janus@gcc.gnu.org>
17455
+ * gfortran.dg/proc_ptr_43.f90: New.
17457
+2013-11-16 Paul Thomas <pault@gcc.gnu.org>
17460
+ * gfortran.dg/derived_external_function_1.f90 : New test
17462
+2013-11-14 Uros Bizjak <ubizjak@gmail.com>
17464
+ Backport from mainline
17465
+ 2013-11-06 Uros Bizjak <ubizjak@gmail.com>
17468
+ * gcc.target/i386/pr59021.c: New test.
17470
+2013-11-14 Jakub Jelinek <jakub@redhat.com>
17473
+ * gcc.c-torture/execute/pr59101.c: New test.
17475
+2013-11-11 Jakub Jelinek <jakub@redhat.com>
17477
+ Backported from mainline
17478
+ 2013-11-06 Jakub Jelinek <jakub@redhat.com>
17480
+ PR middle-end/58970
17481
+ * gcc.c-torture/compile/pr58970-1.c: New test.
17482
+ * gcc.c-torture/compile/pr58970-2.c: New test.
17484
+ 2013-11-05 Jakub Jelinek <jakub@redhat.com>
17486
+ PR rtl-optimization/58997
17487
+ * gcc.c-torture/compile/pr58997.c: New test.
17489
+2013-11-10 Wei Mi <wmi@google.com>
17491
+ * gcc.dg/pr57518.c: Backport regex fix from r200720.
17493
+2013-11-07 H.J. Lu <hongjiu.lu@intel.com>
17495
+ Backport from mainline
17496
+ 2013-11-07 H.J. Lu <hongjiu.lu@intel.com>
17499
+ * gcc.target/i386/pr59034-1.c: New test.
17500
+ * gcc.target/i386/pr59034-2.c: Likewise.
17502
+2013-11-06 Wei Mi <wmi@google.com>
17504
+ PR regression/58985
17505
+ * gcc.dg/pr57518.c: Add subreg in regexp pattern.
17507
+2013-11-05 Steven G. Kargl <kargl@gcc.gnu.org>
17510
+ * gfortran.dg/reshape_6.f90: New test.
17512
+2013-11-05 Jakub Jelinek <jakub@redhat.com>
17514
+ PR tree-optimization/58984
17515
+ * gcc.c-torture/execute/pr58984.c: New test.
17517
+2013-11-04 Marek Polacek <polacek@redhat.com>
17519
+ Backport from mainline
17520
+ 2013-11-04 Marek Polacek <polacek@redhat.com>
17523
+ * g++.dg/diagnostic/pr58979.C: New test.
17525
+2013-11-03 H.J. Lu <hongjiu.lu@intel.com>
17527
+ Backport from mainline
17528
+ 2013-10-12 H.J. Lu <hongjiu.lu@intel.com>
17531
+ * gcc.target/i386/pr58690.c: New test
17533
+2013-11-02 Janus Weil <janus@gcc.gnu.org>
17535
+ Backport from mainline
17536
+ 2013-09-23 Janus Weil <janus@gcc.gnu.org>
17539
+ * gfortran.dg/extends_15.f90: New.
17541
+2013-10-29 Uros Bizjak <ubizjak@gmail.com>
17543
+ Backport from mainline
17544
+ 2013-08-08 Richard Sandiford <rdsandiford@googlemail.com>
17546
+ PR rtl-optimization/58079
17547
+ * gcc.dg/torture/pr58079.c: New test.
17549
+2013-10-28 Tom de Vries <tom@codesourcery.com>
17551
+ * gcc.target/arm/require-pic-register-loc.c: New test.
17553
+2013-10-26 Uros Bizjak <ubizjak@gmail.com>
17555
+ Backport from mainline
17556
+ 2013-10-22 Uros Bizjak <ubizjak@gmail.com>
17559
+ * gcc.target/i386/pr30315.c: Remove MINUSCC, DECCC, MINUSCCONLY
17560
+ and MINUSCCZEXT defines. Update scan-assembler dg directive.
17561
+ * gcc.dg/torture/pr58779.c: New test.
17563
+2013-10-25 Richard Henderson <rth@redhat.com>
17566
+ * gcc.dg/atomic-store-6.c: New.
17568
+2013-10-25 Tom de Vries <tom@codesourcery.com>
17571
+ * g++.dg/tm/noexcept-6.C: New test.
17573
+2013-10-25 Eric Botcazou <ebotcazou@adacore.com>
17575
+ * gcc.c-torture/execute/pr58831.c: New test.
17577
+2013-10-23 Tom de Vries <tom@codesourcery.com>
17579
+ PR tree-optimization/58805
17580
+ * gcc.dg/pr58805.c: New test.
17582
+2013-10-23 Richard Biener <rguenther@suse.de>
17584
+ * gcc.dg/torture/pr58830.c: New testcase.
17586
+ Backport from mainline
17587
+ 2013-06-24 Richard Biener <rguenther@suse.de>
17589
+ PR tree-optimization/57488
17590
+ * gcc.dg/torture/pr57488.c: New testcase.
17592
+2013-10-19 Oleg Endo <olegendo@gcc.gnu.org>
17594
+ * gcc.target/sh/pr54089-3.c: Fix test for load of constant 31.
17596
+2013-10-17 Paolo Carlini <paolo.carlini@oracle.com>
17599
+ * g++.dg/cpp0x/lambda/lambda-nsdmi5.C: New
17601
+2013-10-16 Paolo Carlini <paolo.carlini@oracle.com>
17604
+ * g++.dg/cpp0x/decltype57.C: New.
17605
+ * g++.dg/cpp0x/enum18.C: Revert r174385 changes.
17607
2013-10-16 Release Manager
17609
* GCC 4.8.2 released.
17610
@@ -39,9 +1072,9 @@
17611
Backport from mainline
17612
2013-06-27 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
17614
- * gcc.target/s390/htm-1.c: New file.
17615
- * gcc.target/s390/htm-nofloat-1.c: New file.
17616
- * gcc.target/s390/htm-xl-intrin-1.c: New file.
17617
+ * gcc.target/s390/htm-1.c: New file.
17618
+ * gcc.target/s390/htm-nofloat-1.c: New file.
17619
+ * gcc.target/s390/htm-xl-intrin-1.c: New file.
17621
2013-10-04 Tobias Burnus <burnus@net-b.de>
17623
@@ -307,8 +1340,8 @@
17624
Backport from mainline
17625
2013-08-12 Perez Read <netfirewall@gmail.com>
17628
- * gcc.target/i386/movabs-1.c: New test.
17630
+ * gcc.target/i386/movabs-1.c: New test.
17632
2013-08-11 Janus Weil <janus@gcc.gnu.org>
17634
@@ -494,7 +1527,7 @@
17635
2013-06-19 Wei Mi <wmi@google.com>
17637
PR rtl-optimization/57518
17638
- * testsuite/gcc.dg/pr57518.c: New test.
17639
+ * gcc.dg/pr57518.c: New test.
17641
2013-06-11 Tobias Burnus <burnus@net-b.de>
17643
@@ -623,8 +1656,8 @@
17645
2013-05-09 Martin Jambor <mjambor@suse.cz>
17647
- PR middle-end/56988
17648
- * gcc.dg/ipa/pr56988.c: New test.
17649
+ PR middle-end/56988
17650
+ * gcc.dg/ipa/pr56988.c: New test.
17652
2013-05-08 Marc Glisse <marc.glisse@inria.fr>
17654
@@ -701,7 +1734,7 @@
17655
2013-04-25 Marek Polacek <polacek@redhat.com>
17657
PR tree-optimization/57066
17658
- * gcc.dg/torture/builtin-logb-1.c: Adjust testcase.
17659
+ * gcc.dg/torture/builtin-logb-1.c: Adjust testcase.
17661
2013-05-02 Jakub Jelinek <jakub@redhat.com>
17663
@@ -727,8 +1760,8 @@
17664
Backport from mainline
17665
2013-04-24 Vladimir Makarov <vmakarov@redhat.com>
17667
- PR rtl-optimizations/57046
17668
- * gcc.target/i386/pr57046.c: New test.
17669
+ PR rtl-optimizations/57046
17670
+ * gcc.target/i386/pr57046.c: New test.
17672
2013-05-02 Vladimir Makarov <vmakarov@redhat.com>
17674
@@ -735,8 +1768,8 @@
17675
Backport from mainline
17676
2013-04-22 Vladimir Makarov <vmakarov@redhat.com>
17679
- * gcc.target/i386/pr57018.c: New test.
17681
+ * gcc.target/i386/pr57018.c: New test.
17683
2013-05-02 Vladimir Makarov <vmakarov@redhat.com>
17685
@@ -743,8 +1776,8 @@
17686
Backport from mainline
17687
2013-04-18 Jakub Jelinek <jakub@redhat.com>
17689
- PR rtl-optimization/56999
17690
- * g++.dg/opt/pr56999.C: New test.
17691
+ PR rtl-optimization/56999
17692
+ * g++.dg/opt/pr56999.C: New test.
17694
2013-05-02 Vladimir Makarov <vmakarov@redhat.com>
17696
@@ -751,8 +1784,8 @@
17697
Backport from mainline
17698
2013-04-19 Vladimir Makarov <vmakarov@redhat.com>
17700
- PR rtl-optimization/56847
17701
- * gcc.dg/pr56847.c: New test.
17702
+ PR rtl-optimization/56847
17703
+ * gcc.dg/pr56847.c: New test.
17705
2013-05-02 Ian Bolton <ian.bolton@arm.com>
17707
@@ -1102,7 +2135,7 @@
17708
2013-03-29 Tobias Burnus <burnus@net-b.de>
17711
- * testsuite/gfortran.dg/fmt_cache_3.f90: New.
17712
+ * gfortran.dg/fmt_cache_3.f90: New.
17714
2013-04-02 Richard Biener <rguenther@suse.de>
17716
@@ -1636,7 +2669,7 @@
17717
2013-02-20 Jan Hubicka <jh@suse.cz>
17719
PR tree-optimization/56265
17720
- * testsuite/g++.dg/ipa/devirt-11.C: New testcase.
17721
+ * g++.dg/ipa/devirt-11.C: New testcase.
17723
2013-02-20 Richard Biener <rguenther@suse.de>
17725
@@ -1823,11 +2856,9 @@
17727
Avoid instrumenting duplicated memory access in the same basic block
17728
* c-c++-common/asan/no-redundant-instrumentation-1.c: New test.
17729
- * testsuite/c-c++-common/asan/no-redundant-instrumentation-2.c:
17731
- * testsuite/c-c++-common/asan/no-redundant-instrumentation-3.c:
17733
- * testsuite/c-c++-common/asan/inc.c: Likewise.
17734
+ * c-c++-common/asan/no-redundant-instrumentation-2.c: Likewise.
17735
+ * c-c++-common/asan/no-redundant-instrumentation-3.c: Likewise.
17736
+ * c-c++-common/asan/inc.c: Likewise.
17738
2013-02-12 Vladimir Makarov <vmakarov@redhat.com>
17740
Index: gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90
17741
===================================================================
17742
--- a/src/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90 (.../tags/gcc_4_8_2_release)
17743
+++ b/src/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90 (.../branches/gcc-4_8-branch)
17745
+SUBROUTINE cal_helicity (uh, ph, phb, wavg, ims, ime, its, ite)
17746
+ INTEGER, INTENT( IN ) :: ims, ime, its, ite
17747
+ REAL, DIMENSION( ims:ime), INTENT( IN ) :: ph, phb, wavg
17748
+ REAL, DIMENSION( ims:ime), INTENT( INOUT ) :: uh
17752
+ zu = (ph(i ) + phb(i)) + (ph(i-1) + phb(i-1))
17753
+ IF (wavg(i) .GT. 0) THEN
17754
+ uh(i) = uh(i) + zu
17757
+END SUBROUTINE cal_helicity
17758
Index: gcc/testsuite/g++.dg/ext/attribute-test-2.C
17759
===================================================================
17760
--- a/src/gcc/testsuite/g++.dg/ext/attribute-test-2.C (.../tags/gcc_4_8_2_release)
17761
+++ b/src/gcc/testsuite/g++.dg/ext/attribute-test-2.C (.../branches/gcc-4_8-branch)
17764
/* Ignore a warning that is irrelevant to the purpose of this test. */
17765
/* { dg-prune-output ".*GCC vector returned by reference.*" } */
17766
+/* { dg-prune-output "changes the ABI" } */
17767
Index: gcc/testsuite/g++.dg/ext/attribute-test-3.C
17768
===================================================================
17769
--- a/src/gcc/testsuite/g++.dg/ext/attribute-test-3.C (.../tags/gcc_4_8_2_release)
17770
+++ b/src/gcc/testsuite/g++.dg/ext/attribute-test-3.C (.../branches/gcc-4_8-branch)
17773
/* Ignore a warning that is irrelevant to the purpose of this test. */
17774
/* { dg-prune-output ".*GCC vector returned by reference.*" } */
17775
+/* { dg-prune-output "changes the ABI" } */
17776
Index: gcc/testsuite/g++.dg/ext/traits1.C
17777
===================================================================
17778
--- a/src/gcc/testsuite/g++.dg/ext/traits1.C (.../tags/gcc_4_8_2_release)
17779
+++ b/src/gcc/testsuite/g++.dg/ext/traits1.C (.../branches/gcc-4_8-branch)
17783
+template<bool = __has_nothrow_assign(void)> struct A {};
17785
Index: gcc/testsuite/g++.dg/ext/attribute-test-4.C
17786
===================================================================
17787
--- a/src/gcc/testsuite/g++.dg/ext/attribute-test-4.C (.../tags/gcc_4_8_2_release)
17788
+++ b/src/gcc/testsuite/g++.dg/ext/attribute-test-4.C (.../branches/gcc-4_8-branch)
17791
/* Ignore a warning that is irrelevant to the purpose of this test. */
17792
/* { dg-prune-output ".*GCC vector returned by reference.*" } */
17793
+/* { dg-prune-output "changes the ABI" } */
17794
Index: gcc/testsuite/g++.dg/ext/stmtexpr15.C
17795
===================================================================
17796
--- a/src/gcc/testsuite/g++.dg/ext/stmtexpr15.C (.../tags/gcc_4_8_2_release)
17797
+++ b/src/gcc/testsuite/g++.dg/ext/stmtexpr15.C (.../branches/gcc-4_8-branch)
17800
+// { dg-options "" }
17804
+ int x[({ return; })]; // { dg-error "non-integral" }
17806
Index: gcc/testsuite/g++.dg/ext/vector25.C
17807
===================================================================
17808
--- a/src/gcc/testsuite/g++.dg/ext/vector25.C (.../tags/gcc_4_8_2_release)
17809
+++ b/src/gcc/testsuite/g++.dg/ext/vector25.C (.../branches/gcc-4_8-branch)
17811
+volatile int i __attribute__((vector_size(8)));
17817
Index: gcc/testsuite/g++.dg/ext/builtin-bswap1.C
17818
===================================================================
17819
--- a/src/gcc/testsuite/g++.dg/ext/builtin-bswap1.C (.../tags/gcc_4_8_2_release)
17820
+++ b/src/gcc/testsuite/g++.dg/ext/builtin-bswap1.C (.../branches/gcc-4_8-branch)
17823
+// { dg-do compile }
17825
+#if defined(__UINT32_TYPE__) && defined(__INT32_TYPE__)
17827
+void foo (__UINT32_TYPE__);
17828
+void foo (__INT32_TYPE__);
17831
+bar (__UINT32_TYPE__ x)
17833
+ foo (__builtin_bswap32 (x));
17844
Index: gcc/testsuite/g++.dg/ext/attrib48.C
17845
===================================================================
17846
--- a/src/gcc/testsuite/g++.dg/ext/attrib48.C (.../tags/gcc_4_8_2_release)
17847
+++ b/src/gcc/testsuite/g++.dg/ext/attrib48.C (.../branches/gcc-4_8-branch)
17851
+typedef unsigned L __attribute__ ((aligned));
17852
+typedef unsigned L __attribute__ ((aligned));
17855
Index: gcc/testsuite/g++.dg/ext/vector27.C
17856
===================================================================
17857
--- a/src/gcc/testsuite/g++.dg/ext/vector27.C (.../tags/gcc_4_8_2_release)
17858
+++ b/src/gcc/testsuite/g++.dg/ext/vector27.C (.../branches/gcc-4_8-branch)
17864
+ int v __attribute__((vector_size(8)));
17865
+ v = v || v; // { dg-bogus "" "" { xfail *-*-* } }
17867
Index: gcc/testsuite/g++.dg/ext/timevar2.C
17868
===================================================================
17869
--- a/src/gcc/testsuite/g++.dg/ext/timevar2.C (.../tags/gcc_4_8_2_release)
17870
+++ b/src/gcc/testsuite/g++.dg/ext/timevar2.C (.../branches/gcc-4_8-branch)
17873
+// { dg-options "-ftime-report" }
17874
+// { dg-prune-output "wall" }
17875
+// { dg-prune-output "times" }
17876
+// { dg-prune-output "TOTAL" }
17877
+// { dg-prune-output "checks" }
17879
+namespace detail {
17880
+namespace indirect_traits {}
17881
+using namespace indirect_traits;
17883
+using namespace detail;
17886
Index: gcc/testsuite/g++.dg/ext/attribute-test-1.C
17887
===================================================================
17888
--- a/src/gcc/testsuite/g++.dg/ext/attribute-test-1.C (.../tags/gcc_4_8_2_release)
17889
+++ b/src/gcc/testsuite/g++.dg/ext/attribute-test-1.C (.../branches/gcc-4_8-branch)
17892
/* Ignore a warning that is irrelevant to the purpose of this test. */
17893
/* { dg-prune-output ".*GCC vector returned by reference.*" } */
17894
+/* { dg-prune-output "changes the ABI" } */
17895
Index: gcc/testsuite/g++.dg/opt/pr59647.C
17896
===================================================================
17897
--- a/src/gcc/testsuite/g++.dg/opt/pr59647.C (.../tags/gcc_4_8_2_release)
17898
+++ b/src/gcc/testsuite/g++.dg/opt/pr59647.C (.../branches/gcc-4_8-branch)
17900
+// PR rtl-optimization/59647
17901
+// { dg-do compile }
17902
+// { dg-options "-O2 -fno-tree-vrp" }
17903
+// { dg-additional-options "-msse2 -mfpmath=sse" { target { { i?86-*-* x86_64-*-* } && ia32 } } }
17929
+ unsigned b = x->f5 ();
17930
+ f1 (b - 1 - f3 (x->f5 () - 1U));
17932
Index: gcc/testsuite/g++.dg/opt/pr59470.C
17933
===================================================================
17934
--- a/src/gcc/testsuite/g++.dg/opt/pr59470.C (.../tags/gcc_4_8_2_release)
17935
+++ b/src/gcc/testsuite/g++.dg/opt/pr59470.C (.../branches/gcc-4_8-branch)
17937
+// PR middle-end/59470
17939
+// { dg-options "-O2 -fstack-protector" }
17940
+// { dg-additional-options "-fPIC" { target fpic } }
17941
+// { dg-require-effective-target fstack_protector }
17946
+ A () throw () : a1 (0) {}
17951
+ unsigned int b1 () throw ();
17954
+__attribute__((noinline, noclone)) unsigned int
17957
+ asm volatile ("" : : : "memory");
17964
+ void c2 (const A *, unsigned int);
17967
+__attribute__((noinline, noclone)) void
17968
+C::c2 (const A *, unsigned int)
17970
+ asm volatile ("" : : : "memory");
17987
+ virtual int f1 (const char * s, int n);
17994
+ G & g3 (const char * ws, int len)
17996
+ if (__builtin_expect (!g2, true)
17997
+ && __builtin_expect (this->g1->f1 (ws, len) != len, false))
18003
+struct H : public A
18013
+ H () : h1 (0), h2 (0), h4 (0), h5 (0), h6 (0), h8 (false) {}
18014
+ void h9 (const D &) __attribute__((noinline, noclone));
18021
+ __builtin_memset (h7, 0, sizeof (h7));
18022
+ asm volatile ("" : : : "memory");
18030
+ const unsigned int i = b.b1 ();
18031
+ const A **j = x.d1->c1;
18045
+ return static_cast <const H *>(j[i]);
18048
+__attribute__((noinline, noclone)) int
18049
+bar (char *x, unsigned long v, const char *y, int z, bool w)
18051
+ asm volatile ("" : : "r" (x), "r" (v), "r" (y) : "memory");
18052
+ asm volatile ("" : : "r" (z), "r" (w) : "memory");
18056
+__attribute__((noinline, noclone)) void
18057
+baz (void *z, const char *g, unsigned int h, char s, E &e, char *n, char *c, int &l)
18059
+ asm volatile ("" : : "r" (z), "r" (g), "r" (h) : "memory");
18060
+ asm volatile ("" : : "r" (s), "r" (&e), "r" (n) : "memory");
18061
+ asm volatile ("" : : "r" (c), "r" (&l) : "memory");
18063
+ __builtin_abort ();
18065
+ asm ("" : "+r" (i));
18067
+ __builtin_exit (0);
18070
+__attribute__((noinline, noclone)) G
18071
+test (void *z, G s, E &x, char, long v)
18073
+ const D &d = x.e3;
18074
+ const H *h = foo (d);
18075
+ const char *q = h->h7;
18076
+ const int f = x.e2;
18077
+ const int i = 5 * sizeof (long);
18078
+ char *c = static_cast <char *>(__builtin_alloca (i));
18079
+ const int b = f & 74;
18080
+ const bool e = (b != 64 && b != 8);
18081
+ const unsigned long u = ((v > 0 || !e) ? (unsigned long) v : -(unsigned long) v);
18082
+ int l = bar (c + i, u, q, f, e);
18086
+ char *c2 = static_cast <char *>(__builtin_alloca ((l + 1) * 2));
18087
+ baz (z, h->h1, h->h2, h->h6, x, c2 + 2, c, l);
18090
+ if (__builtin_expect (e, true))
18093
+ else if ((f & 4096) && v)
18096
+ const bool m = f & 176;
18101
+ const int w = x.e1;
18104
+ char * c3 = static_cast <char *>(__builtin_alloca (w));
18107
+ return s.g3 (c, l);
18122
+ test (0, g, e, 0, 0);
18123
+ __builtin_abort ();
18125
Index: gcc/testsuite/g++.dg/opt/pr58864.C
18126
===================================================================
18127
--- a/src/gcc/testsuite/g++.dg/opt/pr58864.C (.../tags/gcc_4_8_2_release)
18128
+++ b/src/gcc/testsuite/g++.dg/opt/pr58864.C (.../branches/gcc-4_8-branch)
18130
+// PR target/58864
18131
+// { dg-do compile }
18132
+// { dg-options "-Os" }
18133
+// { dg-additional-options "-march=i686" { target { { i?86-*-* x86_64-*-* } && ia32 } } }
18135
+struct A { A (); ~A (); };
18136
+struct B { B (); };
18151
Index: gcc/testsuite/g++.dg/tree-prof/pr59255.C
18152
===================================================================
18153
--- a/src/gcc/testsuite/g++.dg/tree-prof/pr59255.C (.../tags/gcc_4_8_2_release)
18154
+++ b/src/gcc/testsuite/g++.dg/tree-prof/pr59255.C (.../branches/gcc-4_8-branch)
18157
+// { dg-options "-O2 -std=c++11" }
18161
+ __attribute__((noinline, noclone)) ~S () noexcept (true)
18166
+ void (*fn) (int);
18169
+__attribute__((noinline, noclone)) void
18179
+ for (int i = 0; i < 100; i++)
18185
Index: gcc/testsuite/g++.dg/gomp/for-20.C
18186
===================================================================
18187
--- a/src/gcc/testsuite/g++.dg/gomp/for-20.C (.../tags/gcc_4_8_2_release)
18188
+++ b/src/gcc/testsuite/g++.dg/gomp/for-20.C (.../branches/gcc-4_8-branch)
18191
+// { dg-do compile }
18192
+// { dg-options -fopenmp }
18194
+int foo() { return 0; }
18196
+template<typename T> void bar()
18198
+#pragma omp parallel for
18199
+ for (T i = foo(); i < 8; ++i) {}
18206
Index: gcc/testsuite/g++.dg/gomp/pr59297.C
18207
===================================================================
18208
--- a/src/gcc/testsuite/g++.dg/gomp/pr59297.C (.../tags/gcc_4_8_2_release)
18209
+++ b/src/gcc/testsuite/g++.dg/gomp/pr59297.C (.../branches/gcc-4_8-branch)
18212
+// { dg-do compile }
18213
+// { dg-options "-fopenmp" }
18215
+template <typename T>
18219
+ const T &operator[] (int) const;
18224
+ int &operator () (A <int>);
18228
+foo (B &x, int &z)
18231
+ #pragma omp atomic
18233
+ #pragma omp atomic
18236
Index: gcc/testsuite/g++.dg/diagnostic/pr59838.C
18237
===================================================================
18238
--- a/src/gcc/testsuite/g++.dg/diagnostic/pr59838.C (.../tags/gcc_4_8_2_release)
18239
+++ b/src/gcc/testsuite/g++.dg/diagnostic/pr59838.C (.../branches/gcc-4_8-branch)
18242
+// { dg-do compile }
18244
+enum E { a, b = (E) a }; // { dg-error "conversion to incomplete type" }
18245
Index: gcc/testsuite/g++.dg/diagnostic/pr58979.C
18246
===================================================================
18247
--- a/src/gcc/testsuite/g++.dg/diagnostic/pr58979.C (.../tags/gcc_4_8_2_release)
18248
+++ b/src/gcc/testsuite/g++.dg/diagnostic/pr58979.C (.../branches/gcc-4_8-branch)
18251
+// { dg-do compile }
18253
+int i = 0->*0; // { dg-error "invalid type argument of" }
18254
Index: gcc/testsuite/g++.dg/conversion/simd1.C
18255
===================================================================
18256
--- a/src/gcc/testsuite/g++.dg/conversion/simd1.C (.../tags/gcc_4_8_2_release)
18257
+++ b/src/gcc/testsuite/g++.dg/conversion/simd1.C (.../branches/gcc-4_8-branch)
18259
/* { dg-do compile } */
18260
+/* { dg-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
18262
/* Test overload resolution of vector types.
18263
From Janis Johnson and Paolo Bonzini, based on PR/16882 */
18267
vss = vld(i, vscp); /* { dg-error "no matching function for call" } */
18268
- // { dg-message "candidate" "candidate note" { target *-*-* } 19 }
18269
+ // { dg-message "candidate" "candidate note" { target *-*-* } 20 }
18270
vss = vld(i, vssp);
18271
vss = vld(i, cvssp);
18273
Index: gcc/testsuite/g++.dg/tls/thread_local8.C
18274
===================================================================
18275
--- a/src/gcc/testsuite/g++.dg/tls/thread_local8.C (.../tags/gcc_4_8_2_release)
18276
+++ b/src/gcc/testsuite/g++.dg/tls/thread_local8.C (.../branches/gcc-4_8-branch)
18279
+// { dg-options "-std=c++11" }
18280
+// { dg-require-alias "" }
18281
+// { dg-require-effective-target tls }
18282
+// { dg-final { scan-assembler "_ZTH12foo_instance" { target tls_native } } }
18289
+thread_local foo foo_instance;
18290
Index: gcc/testsuite/g++.dg/tls/thread_local-ice2.C
18291
===================================================================
18292
--- a/src/gcc/testsuite/g++.dg/tls/thread_local-ice2.C (.../tags/gcc_4_8_2_release)
18293
+++ b/src/gcc/testsuite/g++.dg/tls/thread_local-ice2.C (.../branches/gcc-4_8-branch)
18296
+// { dg-options "-std=c++11" }
18297
+// { dg-require-effective-target tls }
18302
+ i; // { dg-error "" }
18305
+thread_local A a(0);
18306
Index: gcc/testsuite/g++.dg/tm/pr60004.C
18307
===================================================================
18308
--- a/src/gcc/testsuite/g++.dg/tm/pr60004.C (.../tags/gcc_4_8_2_release)
18309
+++ b/src/gcc/testsuite/g++.dg/tm/pr60004.C (.../branches/gcc-4_8-branch)
18311
+// { dg-do compile }
18312
+// { dg-options "-fgnu-tm" }
18316
+ __transaction_atomic {
18321
Index: gcc/testsuite/g++.dg/tm/noexcept-6.C
18322
===================================================================
18323
--- a/src/gcc/testsuite/g++.dg/tm/noexcept-6.C (.../tags/gcc_4_8_2_release)
18324
+++ b/src/gcc/testsuite/g++.dg/tm/noexcept-6.C (.../branches/gcc-4_8-branch)
18326
+// { dg-do compile }
18327
+// { dg-options "-fno-exceptions -fgnu-tm -O -std=c++0x -fdump-tree-tmlower" }
18331
+ static constexpr bool v() { return true; }
18336
+template<typename T> int foo()
18338
+ return __transaction_atomic noexcept(T::v()) (global + 1);
18343
+ return foo<TrueFalse>();
18346
+/* { dg-final { scan-tree-dump-times "eh_must_not_throw" 0 "tmlower" } } */
18347
+/* { dg-final { scan-tree-dump-times "__transaction_atomic" 1 "tmlower" } } */
18348
+/* { dg-final { cleanup-tree-dump "tmlower" } } */
18349
Index: gcc/testsuite/g++.dg/pr59695.C
18350
===================================================================
18351
--- a/src/gcc/testsuite/g++.dg/pr59695.C (.../tags/gcc_4_8_2_release)
18352
+++ b/src/gcc/testsuite/g++.dg/pr59695.C (.../branches/gcc-4_8-branch)
18355
+/* PR target/59695 */
18356
+/* { dg-do run } */
18357
+/* { dg-options "-O0" } */
18359
+#define DEFINE_VIRTUALS_FNS(i) virtual void xxx##i () {} \
18360
+ virtual void foo1_##i () {}\
18361
+ virtual void foo2_##i () {}\
18362
+ virtual void foo3_##i () {}\
18363
+ virtual void foo4_##i () {}\
18364
+ virtual void foo5_##i () {}\
18365
+ virtual void foo6_##i () {}\
18366
+ virtual void foo7_##i () {}\
18367
+ virtual void foo8_##i () {}\
18368
+ virtual void foo9_##i () {}\
18369
+ virtual void foo10_##i () {}\
18370
+ virtual void foo11_##i () {}\
18371
+ virtual void foo12_##i () {}\
18372
+ virtual void foo13_##i () {}\
18373
+ virtual void foo14_##i () {}\
18374
+ virtual void foo15_##i () {}\
18375
+ virtual void foo16_##i () {}\
18376
+ virtual void foo17_##i () {}\
18377
+ virtual void foo18_##i () {}\
18378
+ virtual void foo19_##i () {}\
18379
+ virtual void foo20_##i () {}\
18380
+ virtual void foo21_##i () {}\
18381
+ virtual void foo22_##i () {}\
18383
+class base_class_2
18387
+ /* Define lots of virtual functions */
18388
+ DEFINE_VIRTUALS_FNS (1)
18389
+ DEFINE_VIRTUALS_FNS (2)
18390
+ DEFINE_VIRTUALS_FNS (3)
18391
+ DEFINE_VIRTUALS_FNS (4)
18392
+ DEFINE_VIRTUALS_FNS (5)
18393
+ DEFINE_VIRTUALS_FNS (6)
18394
+ DEFINE_VIRTUALS_FNS (7)
18395
+ DEFINE_VIRTUALS_FNS (8)
18396
+ DEFINE_VIRTUALS_FNS (9)
18397
+ DEFINE_VIRTUALS_FNS (10)
18398
+ DEFINE_VIRTUALS_FNS (11)
18399
+ DEFINE_VIRTUALS_FNS (12)
18400
+ DEFINE_VIRTUALS_FNS (13)
18401
+ DEFINE_VIRTUALS_FNS (14)
18402
+ DEFINE_VIRTUALS_FNS (15)
18403
+ DEFINE_VIRTUALS_FNS (16)
18404
+ DEFINE_VIRTUALS_FNS (17)
18405
+ DEFINE_VIRTUALS_FNS (18)
18406
+ DEFINE_VIRTUALS_FNS (19)
18407
+ DEFINE_VIRTUALS_FNS (20)
18410
+ virtual ~base_class_2 ();
18413
+base_class_2::base_class_2()
18417
+base_class_2::~base_class_2 ()
18421
+class base_class_1
18424
+ virtual ~base_class_1();
18428
+base_class_1::base_class_1()
18432
+base_class_1::~base_class_1()
18436
+class base_Impl_class :
18437
+ virtual public base_class_2, public base_class_1
18440
+ base_Impl_class ();
18441
+ virtual ~base_Impl_class ();
18444
+base_Impl_class::base_Impl_class ()
18448
+base_Impl_class::~base_Impl_class ()
18453
+class test_cls : public base_Impl_class
18457
+ virtual ~test_cls();
18460
+test_cls::test_cls()
18464
+test_cls::~test_cls()
18470
+ test_cls *test = new test_cls;
18471
+ base_class_2 *p1 = test;
18473
+ /* PR59695 destructor thunk offsets are not setup
18474
+ correctly resulting in crash. */
18479
Index: gcc/testsuite/g++.dg/cpp0x/initlist79.C
18480
===================================================================
18481
--- a/src/gcc/testsuite/g++.dg/cpp0x/initlist79.C (.../tags/gcc_4_8_2_release)
18482
+++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist79.C (.../branches/gcc-4_8-branch)
18485
+// { dg-require-effective-target c++11 }
18487
+#include <initializer_list>
18491
+std::initializer_list<volatile A> x = {{}};
18492
Index: gcc/testsuite/g++.dg/cpp0x/enum_base2.C
18493
===================================================================
18494
--- a/src/gcc/testsuite/g++.dg/cpp0x/enum_base2.C (.../tags/gcc_4_8_2_release)
18495
+++ b/src/gcc/testsuite/g++.dg/cpp0x/enum_base2.C (.../branches/gcc-4_8-branch)
18498
+// { dg-require-effective-target c++11 }
18500
+template<typename... T> struct A
18502
+ enum E : T {}; // { dg-error "parameter pack" }
18506
Index: gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C
18507
===================================================================
18508
--- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C (.../tags/gcc_4_8_2_release)
18509
+++ b/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C (.../branches/gcc-4_8-branch)
18512
+// { dg-do compile { target c++11 } }
18516
+ int i = [] { return decltype(i)(); }();
18518
Index: gcc/testsuite/g++.dg/cpp0x/variadic149.C
18519
===================================================================
18520
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic149.C (.../tags/gcc_4_8_2_release)
18521
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic149.C (.../branches/gcc-4_8-branch)
18524
+// { dg-options "-std=c++11 -g -fabi-version=2" }
18526
+template<int...> struct A {};
18528
+template<> struct A<0>
18530
+ typedef enum { e } B;
18534
Index: gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C
18535
===================================================================
18536
--- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C (.../tags/gcc_4_8_2_release)
18537
+++ b/src/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C (.../branches/gcc-4_8-branch)
18539
// { dg-options "-std=gnu++11" }
18540
// Ignore warning on some powerpc-ibm-aix configurations.
18541
// { dg-prune-output "non-standard ABI extension" }
18542
+// { dg-prune-output "changes the ABI" }
18544
typedef float __attribute__ ((vector_size (4 * sizeof (float)))) V4;
18545
constexpr V4 build (float x, float y, float z) { return (V4){ x, y, z, 0 };}
18546
Index: gcc/testsuite/g++.dg/cpp0x/defaulted48.C
18547
===================================================================
18548
--- a/src/gcc/testsuite/g++.dg/cpp0x/defaulted48.C (.../tags/gcc_4_8_2_release)
18549
+++ b/src/gcc/testsuite/g++.dg/cpp0x/defaulted48.C (.../branches/gcc-4_8-branch)
18552
+// { dg-require-effective-target c++11 }
18554
+template<int> struct A
18559
+template<typename> struct B : A<0>, A<1>
18564
+struct C : B<bool>
18568
Index: gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C
18569
===================================================================
18570
--- a/src/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C (.../tags/gcc_4_8_2_release)
18571
+++ b/src/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C (.../branches/gcc-4_8-branch)
18574
+// { dg-require-effective-target c++11 }
18577
+template <typename> using __allocator_base = B;
18578
+template <typename> class F : __allocator_base<int> {};
18580
+template <typename, typename = F<int> > class G : C {};
18581
+template <typename> class D;
18583
+ using Container = G<D<char>>;
18585
+ A(D<char> const &);
18586
+ Container m_elements;
18588
+template <template <class, class> class C, class A = F<D<int>>>
18589
+void doSomething(C<D<char>, A> &);
18590
+A::A(D<char> const &) : A() { doSomething(m_elements); }
18591
Index: gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C
18592
===================================================================
18593
--- a/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C (.../tags/gcc_4_8_2_release)
18594
+++ b/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C (.../branches/gcc-4_8-branch)
18597
+// { dg-require-effective-target c++11 }
18606
Index: gcc/testsuite/g++.dg/cpp0x/variadic144.C
18607
===================================================================
18608
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic144.C (.../tags/gcc_4_8_2_release)
18609
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic144.C (.../branches/gcc-4_8-branch)
18612
+// { dg-do compile { target c++11 } }
18614
+template<typename T> struct baz { };
18615
+template<typename T> T bar();
18617
+template<typename T, typename ... U>
18618
+baz<decltype(bar<T>()(bar<U> ...))> // { dg-error "cannot be used" }
18623
+ foo<int>(); // { dg-error "no matching" }
18626
Index: gcc/testsuite/g++.dg/cpp0x/enum18.C
18627
===================================================================
18628
--- a/src/gcc/testsuite/g++.dg/cpp0x/enum18.C (.../tags/gcc_4_8_2_release)
18629
+++ b/src/gcc/testsuite/g++.dg/cpp0x/enum18.C (.../branches/gcc-4_8-branch)
18634
- ev.e::~e_u(); // { dg-error "e_u. has not been declared" }
18635
+ ev.e::~e_u(); // { dg-error "" }
18637
Index: gcc/testsuite/g++.dg/cpp0x/noexcept22.C
18638
===================================================================
18639
--- a/src/gcc/testsuite/g++.dg/cpp0x/noexcept22.C (.../tags/gcc_4_8_2_release)
18640
+++ b/src/gcc/testsuite/g++.dg/cpp0x/noexcept22.C (.../branches/gcc-4_8-branch)
18643
+// { dg-require-effective-target c++11 }
18645
+constexpr bool foo () { return noexcept (true); }
18646
+template <typename T>
18649
+ void bar (V &) noexcept (foo ()) {}
18651
+template <typename T>
18652
+struct W : public V <int>
18654
+ void bar (W &x) { V <int>::bar (x); }
18663
Index: gcc/testsuite/g++.dg/cpp0x/initlist76.C
18664
===================================================================
18665
--- a/src/gcc/testsuite/g++.dg/cpp0x/initlist76.C (.../tags/gcc_4_8_2_release)
18666
+++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist76.C (.../branches/gcc-4_8-branch)
18669
+// { dg-require-effective-target c++11 }
18672
+int&& j{{ i }}; // { dg-error "too many braces" }
18673
Index: gcc/testsuite/g++.dg/cpp0x/access02.C
18674
===================================================================
18675
--- a/src/gcc/testsuite/g++.dg/cpp0x/access02.C (.../tags/gcc_4_8_2_release)
18676
+++ b/src/gcc/testsuite/g++.dg/cpp0x/access02.C (.../branches/gcc-4_8-branch)
18679
+// { dg-require-effective-target c++11 }
18685
+struct foo_argument
18687
+ template<class Ret, class C, class Arg>
18688
+ static Arg test(Ret (C::*)(Arg));
18690
+ typedef decltype(test(&T::template foo<>)) type;
18693
+template<class T, class>
18694
+struct dependent { typedef T type; };
18699
+ template<class Ignore = void>
18700
+ auto foo(int i) -> decltype(declval<
18701
+ typename dependent<T&, Ignore>::type
18702
+ >().foo_impl(i));
18705
+struct derived : base<derived>
18707
+ friend struct base<derived>;
18709
+ int foo_impl(int i);
18714
+ foo_argument<derived>::type var = 0;
18717
Index: gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C
18718
===================================================================
18719
--- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C (.../tags/gcc_4_8_2_release)
18720
+++ b/src/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C (.../branches/gcc-4_8-branch)
18723
+// { dg-do compile }
18724
+// { dg-options "-std=c++11" }
18726
+template <typename>
18729
+ constexpr A (int) {}
18730
+ virtual void foo ()
18732
+ constexpr A<void> a (0);
18742
Index: gcc/testsuite/g++.dg/cpp0x/initlist78.C
18743
===================================================================
18744
--- a/src/gcc/testsuite/g++.dg/cpp0x/initlist78.C (.../tags/gcc_4_8_2_release)
18745
+++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist78.C (.../branches/gcc-4_8-branch)
18748
+// { dg-require-effective-target c++11 }
18758
+vector v({}); // { dg-error "" }
18759
Index: gcc/testsuite/g++.dg/cpp0x/variadic148.C
18760
===================================================================
18761
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic148.C (.../tags/gcc_4_8_2_release)
18762
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic148.C (.../branches/gcc-4_8-branch)
18765
+// { dg-require-effective-target c++11 }
18767
+template<typename T> struct X {};
18768
+template<template<typename...> class D, typename ...U> int test(D<U...>*);
18769
+int n = test<X, int>(0); // { dg-error "no match" }
18770
Index: gcc/testsuite/g++.dg/cpp0x/nsdmi9.C
18771
===================================================================
18772
--- a/src/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C (.../tags/gcc_4_8_2_release)
18773
+++ b/src/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C (.../branches/gcc-4_8-branch)
18776
+// { dg-require-effective-target c++11 }
18788
Index: gcc/testsuite/g++.dg/cpp0x/deleted3.C
18789
===================================================================
18790
--- a/src/gcc/testsuite/g++.dg/cpp0x/deleted3.C (.../tags/gcc_4_8_2_release)
18791
+++ b/src/gcc/testsuite/g++.dg/cpp0x/deleted3.C (.../branches/gcc-4_8-branch)
18794
+// { dg-require-effective-target c++11 }
18798
+ template<typename T> A(T) = delete;
18801
+template<> A::A<int>(int) {}
18804
Index: gcc/testsuite/g++.dg/cpp0x/variadic150.C
18805
===================================================================
18806
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic150.C (.../tags/gcc_4_8_2_release)
18807
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic150.C (.../branches/gcc-4_8-branch)
18810
+// { dg-require-effective-target c++11 }
18812
+template<typename..., int> void foo();
18816
+ foo<0>; // { dg-error "" }
18818
Index: gcc/testsuite/g++.dg/cpp0x/static_assert9.C
18819
===================================================================
18820
--- a/src/gcc/testsuite/g++.dg/cpp0x/static_assert9.C (.../tags/gcc_4_8_2_release)
18821
+++ b/src/gcc/testsuite/g++.dg/cpp0x/static_assert9.C (.../branches/gcc-4_8-branch)
18824
+// { dg-require-effective-target c++11 }
18827
+static_assert(f, "");
18829
+static_assert(A::~A, ""); // { dg-error "non-static member function" }
18830
Index: gcc/testsuite/g++.dg/cpp0x/variadic145.C
18831
===================================================================
18832
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic145.C (.../tags/gcc_4_8_2_release)
18833
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic145.C (.../branches/gcc-4_8-branch)
18836
+// { dg-do compile { target c++11 } }
18838
+template <typename> void declval();
18839
+template <typename> void forward();
18840
+template <typename> class D;
18841
+template <typename _Functor, typename... _Bound_args>
18842
+class D <_Functor(_Bound_args...)> {
18843
+ template <typename... _Args, decltype(declval<_Functor>)>
18844
+ void operator()(...) {
18845
+ 0(forward<_Args>...);
18848
Index: gcc/testsuite/g++.dg/cpp0x/decltype57.C
18849
===================================================================
18850
--- a/src/gcc/testsuite/g++.dg/cpp0x/decltype57.C (.../tags/gcc_4_8_2_release)
18851
+++ b/src/gcc/testsuite/g++.dg/cpp0x/decltype57.C (.../branches/gcc-4_8-branch)
18854
+// { dg-do compile { target c++11 } }
18859
+ decltype(i.I::~I())* p;
18861
Index: gcc/testsuite/g++.dg/cpp0x/variadic147.C
18862
===================================================================
18863
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic147.C (.../tags/gcc_4_8_2_release)
18864
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic147.C (.../branches/gcc-4_8-branch)
18867
+// { dg-require-effective-target c++11 }
18869
+template<char, char...> struct A;
18871
+template<typename> struct B;
18873
+template<char... C> struct B<A<C...>> {};
18876
Index: gcc/testsuite/g++.dg/eh/uncaught1.C
18877
===================================================================
18878
--- a/src/gcc/testsuite/g++.dg/eh/uncaught1.C (.../tags/gcc_4_8_2_release)
18879
+++ b/src/gcc/testsuite/g++.dg/eh/uncaught1.C (.../branches/gcc-4_8-branch)
18882
static Check const data[] = {
18883
{ 0, 0, false }, // construct [0]
18884
- { 1, 0, true }, // [1] = [0]
18885
+ { 1, 0, false }, // [1] = [0]
18886
{ 0, 0, true }, // destruct [0]
18887
{ 2, 1, true }, // [2] = [1]
18888
{ 2, 2, true }, // destruct [2]
18889
Index: gcc/testsuite/g++.dg/eh/uncaught4.C
18890
===================================================================
18891
--- a/src/gcc/testsuite/g++.dg/eh/uncaught4.C (.../tags/gcc_4_8_2_release)
18892
+++ b/src/gcc/testsuite/g++.dg/eh/uncaught4.C (.../branches/gcc-4_8-branch)
18897
+#include <exception>
18899
+#define assert(E) if (!(E)) __builtin_abort();
18904
+ assert( !std::uncaught_exception() );
18907
+ } catch (int i) {
18908
+ assert( !std::uncaught_exception() );
18918
+ } catch (int i) {
18919
+ assert( !std::uncaught_exception() );
18921
+ assert( !std::uncaught_exception() );
18923
Index: gcc/testsuite/g++.dg/inherit/virtual11.C
18924
===================================================================
18925
--- a/src/gcc/testsuite/g++.dg/inherit/virtual11.C (.../tags/gcc_4_8_2_release)
18926
+++ b/src/gcc/testsuite/g++.dg/inherit/virtual11.C (.../branches/gcc-4_8-branch)
18929
+// { dg-do compile }
18930
+// { dg-options "-fdump-tree-gimple " }
18933
+ virtual int add (int a, int b) {return a+ b;}
18936
+class D : public B {
18939
+int foo (int a, int b) {
18941
+ return d.add(a, b);
18943
+// { dg-final { scan-tree-dump-not "OBJ_TYPE_REF" "gimple" } }
18944
+// { dg-final { cleanup-tree-dump "gimple" } }
18945
Index: gcc/testsuite/g++.dg/torture/pr38565.C
18946
===================================================================
18947
--- a/src/gcc/testsuite/g++.dg/torture/pr38565.C (.../tags/gcc_4_8_2_release)
18948
+++ b/src/gcc/testsuite/g++.dg/torture/pr38565.C (.../branches/gcc-4_8-branch)
18950
// { dg-do compile }
18951
// Ignore warning on some powerpc-linux configurations.
18952
// { dg-prune-output "non-standard ABI extension" }
18953
+// { dg-prune-output "changes the ABI" }
18954
#define vector __attribute__((vector_size(16) ))
18955
vector unsigned int f(int a)
18957
Index: gcc/testsuite/g++.dg/torture/pr57499.C
18958
===================================================================
18959
--- a/src/gcc/testsuite/g++.dg/torture/pr57499.C (.../tags/gcc_4_8_2_release)
18960
+++ b/src/gcc/testsuite/g++.dg/torture/pr57499.C (.../branches/gcc-4_8-branch)
18962
+// PR middle-end/57499
18963
+// { dg-do compile }
18967
+ ~S () __attribute__ ((noreturn)) {} // { dg-warning "function does return" }
18976
Index: gcc/testsuite/g++.dg/torture/pr59163.C
18977
===================================================================
18978
--- a/src/gcc/testsuite/g++.dg/torture/pr59163.C (.../tags/gcc_4_8_2_release)
18979
+++ b/src/gcc/testsuite/g++.dg/torture/pr59163.C (.../branches/gcc-4_8-branch)
18981
+// PR target/59163
18984
+struct A { float a[4]; };
18985
+struct B { int b; A a; };
18987
+__attribute__((noinline, noclone)) void
18990
+ if (a.a[0] != 36.0f || a.a[1] != 42.0f || a.a[2] != 48.0f || a.a[3] != 54.0f)
18991
+ __builtin_abort ();
18994
+__attribute__((noinline, noclone)) void
18999
+ for (i = 0; i < 4; i++)
19008
+ B b = { 5, { 6, 7, 8, 9 } };
19011
Index: gcc/testsuite/g++.dg/template/ref7.C
19012
===================================================================
19013
--- a/src/gcc/testsuite/g++.dg/template/ref7.C (.../tags/gcc_4_8_2_release)
19014
+++ b/src/gcc/testsuite/g++.dg/template/ref7.C (.../branches/gcc-4_8-branch)
19018
+typedef const char *const& ProtocolIdType;
19020
+template <ProtocolIdType protocolId>
19022
+ typedef int ProtocolVersion;
19024
+ ProtocolVersion GetProtocolVersion();
19027
+template <ProtocolIdType protocolId>
19028
+typename C<protocolId>::ProtocolVersion C<protocolId>::D::GetProtocolVersion()
19032
Index: gcc/testsuite/g++.dg/template/using28.C
19033
===================================================================
19034
--- a/src/gcc/testsuite/g++.dg/template/using28.C (.../tags/gcc_4_8_2_release)
19035
+++ b/src/gcc/testsuite/g++.dg/template/using28.C (.../branches/gcc-4_8-branch)
19041
+ static const int block_size = 1;
19044
+template <typename T> struct A {
19048
+template <typename T> struct B : public A<T> {
19049
+ using typename A<T>::type;
19050
+ static const int block_size = type::block_size;
19053
+template class B<int>;
19054
Index: gcc/testsuite/g++.dg/template/shadow1.C
19055
===================================================================
19056
--- a/src/gcc/testsuite/g++.dg/template/shadow1.C (.../tags/gcc_4_8_2_release)
19057
+++ b/src/gcc/testsuite/g++.dg/template/shadow1.C (.../branches/gcc-4_8-branch)
19061
+template<template<int I> class A> // { dg-message "shadows" }
19062
+class A {}; // { dg-error "declaration" }
19063
Index: gcc/testsuite/g++.dg/template/partial14.C
19064
===================================================================
19065
--- a/src/gcc/testsuite/g++.dg/template/partial14.C (.../tags/gcc_4_8_2_release)
19066
+++ b/src/gcc/testsuite/g++.dg/template/partial14.C (.../branches/gcc-4_8-branch)
19070
+template <class T>
19073
+ template <T a, T b>
19074
+ struct Implementation {};
19076
+ typedef typename Implementation<0, 0>::Typedef Type;
19079
+template <class T>
19081
+struct C<T>::Implementation<0, b> { typedef void Typedef; };
19083
+template class C<unsigned>;
19084
Index: gcc/testsuite/g++.dg/template/using27.C
19085
===================================================================
19086
--- a/src/gcc/testsuite/g++.dg/template/using27.C (.../tags/gcc_4_8_2_release)
19087
+++ b/src/gcc/testsuite/g++.dg/template/using27.C (.../branches/gcc-4_8-branch)
19093
+ typedef int nested_type;
19096
+template <class T>
19102
+template <class T>
19105
+ using typename A<T>::type;
19106
+ typename type::nested_type x;
19109
+template <class T>
19112
+ using typename B<T>::type;
19113
+ typename type::nested_type y;
19118
+ using C<int>::type;
19119
+ type::nested_type z;
19122
Index: gcc/testsuite/g++.dg/template/using29.C
19123
===================================================================
19124
--- a/src/gcc/testsuite/g++.dg/template/using29.C (.../tags/gcc_4_8_2_release)
19125
+++ b/src/gcc/testsuite/g++.dg/template/using29.C (.../branches/gcc-4_8-branch)
19130
+struct print_arg { };
19132
+struct const_holder {
19133
+ static const int CONSTANT = 42;
19136
+template <typename T>
19141
+template <class T>
19142
+struct test_case : public identity<T> {
19143
+ using typename identity<T>::type;
19144
+ print_arg<type::CONSTANT> printer;
19147
+template struct test_case<const_holder>;
19148
Index: gcc/testsuite/g++.dg/template/partial15.C
19149
===================================================================
19150
--- a/src/gcc/testsuite/g++.dg/template/partial15.C (.../tags/gcc_4_8_2_release)
19151
+++ b/src/gcc/testsuite/g++.dg/template/partial15.C (.../branches/gcc-4_8-branch)
19156
+template<typename D> struct complex { };
19158
+template<typename Tp>
19160
+pow(const complex<Tp>& x, const complex<Tp>& y) { return complex<Tp>(); }
19162
+template<typename T, typename U>
19163
+struct promote_2 { typedef T type; };
19165
+template<typename Tp, typename Up>
19166
+complex<typename promote_2<Tp, Up>::type>
19167
+pow(const complex<Tp>& x, const complex<Up>& y);
19169
+complex<double> (*powcc)(const complex<double>&, const complex<double>&) = pow;
19172
Index: gcc/testsuite/c-c++-common/cpp/pr60400-1.h
19173
===================================================================
19174
--- a/src/gcc/testsuite/c-c++-common/cpp/pr60400-1.h (.../tags/gcc_4_8_2_release)
19175
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr60400-1.h (.../branches/gcc-4_8-branch)
19177
+??=ifndef PR60400_1_H
19178
+??=define PR60400_1_H
19180
Index: gcc/testsuite/c-c++-common/cpp/pr60400-2.h
19181
===================================================================
19182
--- a/src/gcc/testsuite/c-c++-common/cpp/pr60400-2.h (.../tags/gcc_4_8_2_release)
19183
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr60400-2.h (.../branches/gcc-4_8-branch)
19185
+??=ifndef PR60400_2_H
19186
+??=define PR60400_2_H
19187
+??=include "pr60400-1.h"
19189
Index: gcc/testsuite/c-c++-common/cpp/pr60400.c
19190
===================================================================
19191
--- a/src/gcc/testsuite/c-c++-common/cpp/pr60400.c (.../tags/gcc_4_8_2_release)
19192
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr60400.c (.../branches/gcc-4_8-branch)
19194
+/* PR preprocessor/60400 */
19195
+/* { dg-do compile } */
19196
+/* { dg-options "-trigraphs -Wtrigraphs" } */
19198
+??=include "pr60400-1.h"
19199
+??=include "pr60400-2.h"
19201
+/* { dg-warning "trigraph" "" { target *-*-* } 1 } */
19202
+/* { dg-warning "trigraph" "" { target *-*-* } 2 } */
19203
+/* { dg-warning "trigraph" "" { target *-*-* } 3 } */
19204
+/* { dg-warning "trigraph" "" { target *-*-* } 4 } */
19205
+/* { dg-warning "trigraph" "" { target *-*-* } 5 } */
19206
+/* { dg-warning "trigraph" "" { target *-*-* } 6 } */
19207
Index: gcc/testsuite/c-c++-common/cpp/pr58844-1.c
19208
===================================================================
19209
--- a/src/gcc/testsuite/c-c++-common/cpp/pr58844-1.c (.../tags/gcc_4_8_2_release)
19210
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr58844-1.c (.../branches/gcc-4_8-branch)
19212
+/* PR preprocessor/58844 */
19213
+/* { dg-do compile } */
19214
+/* { dg-options "-ftrack-macro-expansion=0" } */
19216
+#define A x######x
19218
+#define A x######x /* { dg-message "previous definition" } */
19219
+#define A x##x /* { dg-warning "redefined" } */
19220
Index: gcc/testsuite/c-c++-common/cpp/pr58844-2.c
19221
===================================================================
19222
--- a/src/gcc/testsuite/c-c++-common/cpp/pr58844-2.c (.../tags/gcc_4_8_2_release)
19223
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr58844-2.c (.../branches/gcc-4_8-branch)
19225
+/* PR preprocessor/58844 */
19226
+/* { dg-do compile } */
19227
+/* { dg-options "-ftrack-macro-expansion=2" } */
19229
+#define A x######x
19231
+#define A x######x /* { dg-message "previous definition" } */
19232
+#define A x##x /* { dg-warning "redefined" } */
19233
Index: gcc/testsuite/c-c++-common/convert-vec-1.c
19234
===================================================================
19235
--- a/src/gcc/testsuite/c-c++-common/convert-vec-1.c (.../tags/gcc_4_8_2_release)
19236
+++ b/src/gcc/testsuite/c-c++-common/convert-vec-1.c (.../branches/gcc-4_8-branch)
19238
/* { dg-do compile } */
19239
+/* { dg-prune-output "changes the ABI" } */
19240
typedef float v2sf __attribute__ ((vector_size (8)));
19241
v2sf sub (void) { return (v2sf) 0.0; } /* { dg-error "can't convert" } */
19242
Index: gcc/testsuite/c-c++-common/pr60101.c
19243
===================================================================
19244
--- a/src/gcc/testsuite/c-c++-common/pr60101.c (.../tags/gcc_4_8_2_release)
19245
+++ b/src/gcc/testsuite/c-c++-common/pr60101.c (.../branches/gcc-4_8-branch)
19248
+/* { dg-do compile } */
19249
+/* { dg-options "-O2 -Wall" } */
19251
+extern int *a, b, *c, *d;
19254
+foo (double _Complex *x, double _Complex *y, double _Complex *z, unsigned int l, int w)
19256
+ unsigned int e = (unsigned int) a[3];
19257
+ double _Complex (*v)[l][4][e][l][4] = (double _Complex (*)[l][4][e][l][4]) z;
19258
+ double _Complex (*f)[l][b][l] = (double _Complex (*)[l][b][l]) y;
19259
+ unsigned int g = c[0] * c[1] * c[2];
19260
+ unsigned int h = d[0] + c[0] * (d[1] + c[1] * d[2]);
19263
+ for (i = 0; i < e; i++)
19265
+ int j = e * d[3] + i;
19267
+ unsigned int n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11;
19268
+ float _Complex s = 0.;
19269
+ unsigned int t = 0;
19271
+ for (n0 = 0; n0 < l; n0++)
19272
+ for (n1 = 0; n1 < l; n1++)
19273
+ for (n2 = 0; n2 < l; n2++)
19274
+ for (n3 = 0; n3 < l; n3++)
19275
+ for (n4 = 0; n4 < l; n4++)
19276
+ for (n5 = 0; n5 < l; n5++)
19277
+ for (n6 = 0; n6 < l; n6++)
19278
+ for (n7 = 0; n7 < l; n7++)
19279
+ for (n8 = 0; n8 < l; n8++)
19280
+ for (n9 = 0; n9 < l; n9++)
19281
+ for (n10 = 0; n10 < l; n10++)
19282
+ for (n11 = 0; n11 < l; n11++)
19286
+ += f[n0][n4][j][n8] * f[n1][n5][j][n9] * ~(f[n2][n6][w][n10]) * ~(f[n3][n7][w][n11])
19287
+ * (+0.25 * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n10][0][i][n4][1]
19288
+ * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n6][1][i][n0][0]
19289
+ + 0.25 * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n10][0][i][n4][1]
19290
+ * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
19291
+ - 0.5 * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n10][0][i][n4][1]
19292
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
19293
+ + 0.25 * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n3][0][i][n4][1]
19294
+ * v[0][n7][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n11][1][i][n0][0]
19295
+ - 0.5 * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n3][0][i][n4][1]
19296
+ * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
19297
+ + 0.25 * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n3][0][i][n4][1]
19298
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
19299
+ + 0.25 * v[0][n3][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n10][0][i][n4][1]
19300
+ * v[0][n6][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0]
19301
+ - 0.5 * v[0][n3][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n10][0][i][n4][1]
19302
+ * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
19303
+ + 0.25 * v[0][n3][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n10][0][i][n4][1]
19304
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
19305
+ + 0.25 * v[0][n3][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n2][0][i][n4][1]
19306
+ * v[0][n6][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0]
19307
+ + 0.25 * v[0][n3][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n2][0][i][n4][1]
19308
+ * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
19309
+ - 0.5 * v[0][n3][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n2][0][i][n4][1]
19310
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
19311
+ + 0.25 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
19312
+ * v[0][n6][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0]
19313
+ - 0.5 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
19314
+ * v[0][n6][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0]
19315
+ - 0.5 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
19316
+ * v[0][n7][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n11][1][i][n0][0]
19317
+ + 0.25 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
19318
+ * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n6][1][i][n0][0]
19319
+ + 1. * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
19320
+ * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
19321
+ - 0.5 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
19322
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
19323
+ - 0.5 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
19324
+ * v[0][n6][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0]
19325
+ + 0.25 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
19326
+ * v[0][n6][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0]
19327
+ + 0.25 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
19328
+ * v[0][n7][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n11][1][i][n0][0]
19329
+ - 0.5 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
19330
+ * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n6][1][i][n0][0]
19331
+ - 0.5 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
19332
+ * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
19333
+ + 1. * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
19334
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
19335
+ + 0.5 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
19336
+ * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0] * v[0][n10][0][i][n8][0]
19337
+ - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
19338
+ * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0] * v[0][n10][0][i][n8][0]
19339
+ - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
19340
+ * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n0][0] * v[0][n10][0][i][n1][0]
19341
+ + 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
19342
+ * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n10][0][i][n0][0]
19343
+ + 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
19344
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n0][0] * v[0][n10][0][i][n1][0]
19345
+ - 0.5 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
19346
+ * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n10][0][i][n0][0]
19347
+ - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1]
19348
+ * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0] * v[0][n3][0][i][n8][0]
19349
+ - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1]
19350
+ * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n0][0] * v[0][n3][0][i][n1][0]);
19353
+ int u = (j - w + b) % b;
19354
+ int q = (j >= w ? +1 : -1);
19359
Index: gcc/testsuite/c-c++-common/pr59037.c
19360
===================================================================
19361
--- a/src/gcc/testsuite/c-c++-common/pr59037.c (.../tags/gcc_4_8_2_release)
19362
+++ b/src/gcc/testsuite/c-c++-common/pr59037.c (.../branches/gcc-4_8-branch)
19364
+/* { dg-do compile } */
19365
+/* { dg-options "-O3" } */
19367
+typedef int v4si __attribute__ ((vector_size (16)));
19370
+main (int argc, char** argv)
19372
+ v4si x = {0,1,2,3};
19373
+ x = (v4si) {(x)[3], (x)[2], (x)[1], (x)[0]};
19376
Index: gcc/testsuite/c-c++-common/pr59280.c
19377
===================================================================
19378
--- a/src/gcc/testsuite/c-c++-common/pr59280.c (.../tags/gcc_4_8_2_release)
19379
+++ b/src/gcc/testsuite/c-c++-common/pr59280.c (.../branches/gcc-4_8-branch)
19382
+/* { dg-do compile } */
19384
+void bar (char *) __attribute__((constructor(foo))); /* { dg-error "constructor priorities must be integers|was not declared|constructor priorities are not supported" } */
19385
Index: gcc/testsuite/c-c++-common/pr37743.c
19386
===================================================================
19387
--- a/src/gcc/testsuite/c-c++-common/pr37743.c (.../tags/gcc_4_8_2_release)
19388
+++ b/src/gcc/testsuite/c-c++-common/pr37743.c (.../branches/gcc-4_8-branch)
19391
+/* This needs to be run only on targets where __UINT32_TYPE__ is defined
19392
+ to unsigned int. */
19393
+/* { dg-do compile { target *-*-linux-gnu* } } */
19394
+/* { dg-options "-Wformat" } */
19396
+int foo (const char *, ...) __attribute__ ((format (printf, 1, 2)));
19399
+bar (unsigned int x)
19401
+ foo ("%x", __builtin_bswap32 (x));
19403
Index: gcc/testsuite/c-c++-common/fold-divmul-1.c
19404
===================================================================
19405
--- a/src/gcc/testsuite/c-c++-common/fold-divmul-1.c (.../tags/gcc_4_8_2_release)
19406
+++ b/src/gcc/testsuite/c-c++-common/fold-divmul-1.c (.../branches/gcc-4_8-branch)
19408
+/* { dg-do compile } */
19409
+/* { dg-options "-fdump-tree-original" } */
19412
+fx (int *b, int *e)
19414
+ return b + (e - b);
19417
+/* { dg-final { scan-tree-dump-not "/\\\[ex\\\]" "original" } } */
19418
+/* { dg-final { cleanup-tree-dump "original" } } */
19419
Index: gcc/testsuite/c-c++-common/torture/pr58794-1.c
19420
===================================================================
19421
--- a/src/gcc/testsuite/c-c++-common/torture/pr58794-1.c (.../tags/gcc_4_8_2_release)
19422
+++ b/src/gcc/testsuite/c-c++-common/torture/pr58794-1.c (.../branches/gcc-4_8-branch)
19424
+/* { dg-do compile } */
19442
+static int *c[1][2] = {{0, (int *)&a.g.f2}};
19448
+ for (d = 0; d < 1; d++)
19449
+ for (b.g.f1.f = 0; b.g.f1.f < 1; b.g.f1.f++)
19450
+ *c[b.g.f1.f][d + 1] = 0;
19453
Index: gcc/testsuite/c-c++-common/torture/pr58794-2.c
19454
===================================================================
19455
--- a/src/gcc/testsuite/c-c++-common/torture/pr58794-2.c (.../tags/gcc_4_8_2_release)
19456
+++ b/src/gcc/testsuite/c-c++-common/torture/pr58794-2.c (.../branches/gcc-4_8-branch)
19458
+/* { dg-do compile } */
19467
+static int *c[1][2] = {{0, (int *)&a.f}};
19468
+static unsigned int d;
19473
+ for (; d < 1; d++)
19474
+ for (; b < 1; b++)
19475
+ *c[b][d + 1] = 0;
19479
Index: gcc/testsuite/c-c++-common/torture/pr60026.c
19480
===================================================================
19481
--- a/src/gcc/testsuite/c-c++-common/torture/pr60026.c (.../tags/gcc_4_8_2_release)
19482
+++ b/src/gcc/testsuite/c-c++-common/torture/pr60026.c (.../branches/gcc-4_8-branch)
19484
+/* PR ipa/60026 */
19485
+/* { dg-do compile } */
19487
+struct S { int f; } a;
19489
+__attribute__((optimize (0)))
19490
+struct S foo (int x, struct S y)
19501
+ struct S c = {0};
19512
Index: gcc/testsuite/c-c++-common/vector-compare-2.c
19513
===================================================================
19514
--- a/src/gcc/testsuite/c-c++-common/vector-compare-2.c (.../tags/gcc_4_8_2_release)
19515
+++ b/src/gcc/testsuite/c-c++-common/vector-compare-2.c (.../branches/gcc-4_8-branch)
19517
/* { dg-do compile } */
19518
/* { dg-options "-fno-common" { target hppa*-*-hpux* } } */
19519
/* { dg-options "-mabi=altivec" { target { { powerpc*-*-linux* } && ilp32 } } } */
19520
+/* { dg-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
19521
/* Ignore warning on some powerpc-ibm-aix configurations. */
19522
/* { dg-prune-output "non-standard ABI extension" } */
19524
Index: gcc/testsuite/c-c++-common/gomp/pr58809.c
19525
===================================================================
19526
--- a/src/gcc/testsuite/c-c++-common/gomp/pr58809.c (.../tags/gcc_4_8_2_release)
19527
+++ b/src/gcc/testsuite/c-c++-common/gomp/pr58809.c (.../branches/gcc-4_8-branch)
19529
+/* PR middle-end/58809 */
19530
+/* { dg-do compile } */
19531
+/* { dg-options "-fopenmp" } */
19534
+_Complex double d;
19539
+ #pragma omp parallel reduction (&:j) /* { dg-error "has invalid type for" } */
19541
+ #pragma omp parallel reduction (|:j) /* { dg-error "has invalid type for" } */
19543
+ #pragma omp parallel reduction (^:j) /* { dg-error "has invalid type for" } */
19545
+ #pragma omp parallel reduction (min:j) /* { dg-error "has invalid type for" } */
19547
+ #pragma omp parallel reduction (max:j) /* { dg-error "has invalid type for" } */
19549
+ #pragma omp parallel reduction (&:d) /* { dg-error "has invalid type for" } */
19551
+ #pragma omp parallel reduction (|:d) /* { dg-error "has invalid type for" } */
19553
+ #pragma omp parallel reduction (^:d) /* { dg-error "has invalid type for" } */
19555
+ #pragma omp parallel reduction (min:d) /* { dg-error "has invalid type for" } */
19557
+ #pragma omp parallel reduction (max:d) /* { dg-error "has invalid type for" } */
19560
Index: gcc/testsuite/c-c++-common/gomp/pr59467.c
19561
===================================================================
19562
--- a/src/gcc/testsuite/c-c++-common/gomp/pr59467.c (.../tags/gcc_4_8_2_release)
19563
+++ b/src/gcc/testsuite/c-c++-common/gomp/pr59467.c (.../branches/gcc-4_8-branch)
19565
+/* PR libgomp/59467 */
19572
+ int x = 0, y = 0;
19573
+ #pragma omp parallel
19576
+ #pragma omp single copyprivate (x) /* { dg-error "is not threadprivate or private in outer context" } */
19578
+ #pragma omp atomic write
19581
+ #pragma omp atomic read
19583
+ #pragma omp atomic
19586
+ #pragma omp parallel
19589
+ #pragma omp single copyprivate (v) /* { dg-error "is not threadprivate or private in outer context" } */
19591
+ #pragma omp atomic write
19594
+ #pragma omp atomic read
19596
+ #pragma omp atomic
19599
+ #pragma omp parallel private (x)
19602
+ #pragma omp single copyprivate (x)
19604
+ #pragma omp atomic write
19607
+ #pragma omp atomic read
19609
+ #pragma omp atomic
19613
+ #pragma omp parallel reduction (+:x)
19615
+ #pragma omp single copyprivate (x)
19617
+ #pragma omp atomic write
19620
+ #pragma omp atomic
19623
+ #pragma omp single copyprivate (x)
19627
+ #pragma omp single copyprivate (v) /* { dg-error "is not threadprivate or private in outer context" } */
19629
+ #pragma omp atomic write
19633
Index: gcc/testsuite/c-c++-common/scal-to-vec2.c
19634
===================================================================
19635
--- a/src/gcc/testsuite/c-c++-common/scal-to-vec2.c (.../tags/gcc_4_8_2_release)
19636
+++ b/src/gcc/testsuite/c-c++-common/scal-to-vec2.c (.../branches/gcc-4_8-branch)
19638
/* { dg-do compile } */
19639
/* { dg-options "-fno-common" { target hppa*-*-hpux* } } */
19640
/* { dg-options "-mabi=altivec" { target { { powerpc*-*-linux* } && ilp32 } } } */
19641
+/* { dg-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
19642
/* Ignore warning on some powerpc-ibm-aix configurations. */
19643
/* { dg-prune-output "non-standard ABI extension" } */
19645
Index: gcc/testsuite/c-c++-common/pr59032.c
19646
===================================================================
19647
--- a/src/gcc/testsuite/c-c++-common/pr59032.c (.../tags/gcc_4_8_2_release)
19648
+++ b/src/gcc/testsuite/c-c++-common/pr59032.c (.../branches/gcc-4_8-branch)
19650
+/* { dg-do compile } */
19651
+/* { dg-options "-O2" } */
19656
+ float v __attribute__((vector_size(8)));
19663
+ float v __attribute__((vector_size(8)));
19670
+ float v __attribute__((vector_size(8)));
19677
+ float v __attribute__((vector_size(8)));
19680
Index: gcc/cp/typeck.c
19681
===================================================================
19682
--- a/src/gcc/cp/typeck.c (.../tags/gcc_4_8_2_release)
19683
+++ b/src/gcc/cp/typeck.c (.../branches/gcc-4_8-branch)
19684
@@ -4103,6 +4103,11 @@
19685
case TRUTH_ORIF_EXPR:
19686
case TRUTH_AND_EXPR:
19687
case TRUTH_OR_EXPR:
19688
+ if (TREE_CODE (type0) == VECTOR_TYPE || TREE_CODE (type1) == VECTOR_TYPE)
19690
+ sorry ("logical operation on vector type");
19691
+ return error_mark_node;
19693
result_type = boolean_type_node;
19696
@@ -5010,7 +5015,10 @@
19697
cp_truthvalue_conversion (tree expr)
19699
tree type = TREE_TYPE (expr);
19700
- if (TYPE_PTRDATAMEM_P (type))
19701
+ if (TYPE_PTRDATAMEM_P (type)
19702
+ /* Avoid ICE on invalid use of non-static member function. */
19703
+ || (TREE_CODE (expr) == FUNCTION_DECL
19704
+ && DECL_NONSTATIC_MEMBER_FUNCTION_P (expr)))
19705
return build_binary_op (EXPR_LOCATION (expr),
19706
NE_EXPR, expr, nullptr_node, 1);
19707
else if (TYPE_PTR_P (type) || TYPE_PTRMEMFUNC_P (type))
19708
@@ -5588,7 +5596,9 @@
19709
inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
19712
- inc = integer_one_node;
19713
+ inc = (TREE_CODE (argtype) == VECTOR_TYPE
19714
+ ? build_one_cst (argtype)
19715
+ : integer_one_node);
19717
inc = cp_convert (argtype, inc, complain);
19719
@@ -7194,8 +7204,7 @@
19720
side effect associated with any single compound assignment
19721
operator. -- end note ] */
19722
lhs = stabilize_reference (lhs);
19723
- if (TREE_SIDE_EFFECTS (rhs))
19724
- rhs = mark_rvalue_use (rhs);
19725
+ rhs = rvalue (rhs);
19726
rhs = stabilize_expr (rhs, &init);
19727
newrhs = cp_build_binary_op (input_location,
19728
modifycode, lhs, rhs,
19729
@@ -7611,7 +7620,7 @@
19730
/* Handle null pointer to member function conversions. */
19731
if (null_ptr_cst_p (pfn))
19733
- pfn = build_c_cast (input_location, type, pfn);
19734
+ pfn = cp_build_c_cast (type, pfn, complain);
19735
return build_ptrmemfunc1 (to_type,
19738
Index: gcc/cp/decl.c
19739
===================================================================
19740
--- a/src/gcc/cp/decl.c (.../tags/gcc_4_8_2_release)
19741
+++ b/src/gcc/cp/decl.c (.../branches/gcc-4_8-branch)
19742
@@ -1867,9 +1867,9 @@
19743
/* Merge the data types specified in the two decls. */
19744
newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
19746
- /* If merge_types produces a non-typedef type, just use the old type. */
19747
- if (TREE_CODE (newdecl) == TYPE_DECL
19748
- && newtype == DECL_ORIGINAL_TYPE (newdecl))
19749
+ /* For typedefs use the old type, as the new type's DECL_NAME points
19750
+ at newdecl, which will be ggc_freed. */
19751
+ if (TREE_CODE (newdecl) == TYPE_DECL)
19754
if (TREE_CODE (newdecl) == VAR_DECL)
19755
@@ -8193,7 +8193,9 @@
19756
abi_1_itype = error_mark_node;
19759
- size = maybe_constant_value (size);
19760
+ if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
19761
+ size = maybe_constant_value (size);
19763
if (!TREE_CONSTANT (size))
19766
@@ -11891,7 +11893,10 @@
19769
&& (DECL_CLASS_TEMPLATE_P (decl)
19770
- || DECL_TEMPLATE_TEMPLATE_PARM_P (decl)))
19771
+ /* If scope is ts_current we're defining a class, so ignore a
19772
+ template template parameter. */
19773
+ || (scope != ts_current
19774
+ && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
19775
decl = DECL_TEMPLATE_RESULT (decl);
19777
if (decl && TREE_CODE (decl) == TYPE_DECL)
19778
Index: gcc/cp/except.c
19779
===================================================================
19780
--- a/src/gcc/cp/except.c (.../tags/gcc_4_8_2_release)
19781
+++ b/src/gcc/cp/except.c (.../branches/gcc-4_8-branch)
19782
@@ -380,6 +380,9 @@
19784
tree type = body ? TREE_TYPE (body) : void_type_node;
19786
+ if (!flag_exceptions)
19789
if (cond && !value_dependent_expression_p (cond))
19791
cond = cxx_constant_value (cond);
19792
Index: gcc/cp/ChangeLog
19793
===================================================================
19794
--- a/src/gcc/cp/ChangeLog (.../tags/gcc_4_8_2_release)
19795
+++ b/src/gcc/cp/ChangeLog (.../branches/gcc-4_8-branch)
19797
+2014-02-28 Jason Merrill <jason@redhat.com>
19800
+ * typeck.c (cp_build_binary_op): Sorry on vector&&vector.
19802
+2014-02-26 Jason Merrill <jason@redhat.com>
19805
+ * pt.c (unify): Ignore alias templates when deducing a template
19806
+ template parameter.
19808
+2014-02-24 Jason Merrill <jason@redhat.com>
19811
+ * pt.c (tsubst_omp_for_iterator): Don't let substitution of the
19812
+ DECL_EXPR initialize a non-class iterator.
19814
+2014-02-24 Fabien Chêne <fabien@gcc.gnu.org>
19816
+ * parser.c (cp_parser_nonclass_name): Call strip_using_decl and
19817
+ move the code handling dependent USING_DECLs...
19818
+ * name-lookup.c (strip_using_decl): ...Here.
19820
+2014-02-21 Jason Merrill <jason@redhat.com>
19823
+ * semantics.c (expand_or_defer_fn_1): Check DECL_DEFAULTED_FN.
19826
+ * parser.c (cp_parser_enum_specifier): Call
19827
+ check_for_bare_parameter_packs.
19830
+ * pt.c (register_specialization): Copy DECL_DELETED_FN to clones.
19833
+ * pt.c (coerce_template_parms): Bail if argument packing fails.
19836
+ * mangle.c (mangle_decl): Don't make an alias for a TYPE_DECL.
19838
+2014-02-20 Jason Merrill <jason@redhat.com>
19843
+ * pt.c (template_parm_to_arg): Call convert_from_reference.
19844
+ (tsubst_template_arg): Don't strip reference refs.
19846
+2014-02-20 Kai Tietz <ktietz@redhat.com>
19849
+ * parser.c (cp_parser_functional_cast): Treat NULL_TREE
19850
+ valued type argument as error_mark_node.
19853
+ * semantics.c (finish_fname): Handle error_mark_node.
19855
+2014-02-19 Jason Merrill <jason@redhat.com>
19858
+ * pt.c (maybe_instantiate_noexcept): Don't instantiate exception
19859
+ spec from template context.
19861
+2014-01-31 Jason Merrill <jason@redhat.com>
19864
+ * decl2.c (handle_tls_init): Handle null init fn.
19867
+ * decl2.c (get_tls_init_fn): Copy DECL_EXTERNAL from the variable.
19870
+ * call.c (convert_like_real) [ck_aggr]: Set TARGET_EXPR_LIST_INIT_P.
19871
+ [ck_list]: Check for error_mark_node.
19874
+ * pt.c (fn_type_unification): Don't do DEDUCE_EXACT check
19875
+ during partial ordering.
19877
+2014-01-30 Jason Merrill <jason@redhat.com>
19880
+ * pt.c (instantiate_template_1): Save/restore local_specializations.
19882
+2014-01-29 Jason Merrill <jason@redhat.com>
19885
+ * pt.c (expand_template_argument_pack): Correct
19886
+ non_default_args_count calculation.
19889
+ * pt.c (unify_pack_expansion): Call expand_template_argument_pack.
19891
+2014-01-28 Jason Merrill <jason@redhat.com>
19894
+ * decl.c (lookup_and_check_tag): Ignore template parameters if
19895
+ scope == ts_current.
19896
+ * pt.c (check_template_shadow): Don't complain about the injected
19899
+2014-01-27 Jason Merrill <jason@redhat.com>
19902
+ * decl.c (duplicate_decls): Always use oldtype for TYPE_DECL.
19905
+ * pt.c (tsubst_copy_and_build) [TRAIT_EXPR]: Use tsubst for
19909
+ * pt.c (template_parm_to_arg): Call convert_from_reference.
19910
+ (tsubst_template_arg): Don't strip reference refs.
19913
+ * call.c (build_aggr_conv): Reject value-initialization of reference.
19916
+ * call.c (convert_like_real): Give helpful error about excess braces
19917
+ for reference binding, too.
19920
+ * typeck.c (cp_build_modify_expr): Make the RHS an rvalue before
19924
+ * typeck.c (cp_truthvalue_conversion): Use explicit comparison for
19928
+ * decl.c (compute_array_index_type): Don't call
19929
+ maybe_constant_value for a non-integral expression.
19932
+ * mangle.c (write_guarded_var_name): Handle null DECL_NAME.
19934
+2014-01-24 Paolo Carlini <paolo.carlini@oracle.com>
19937
+ * name-lookup.c (push_using_directive): Use timevar_cond_start.
19939
+2014-01-23 Jakub Jelinek <jakub@redhat.com>
19941
+ PR middle-end/58809
19942
+ * semantics.c (finish_omp_clauses): Reject MIN_EXPR, MAX_EXPR,
19943
+ BIT_AND_EXPR, BIT_IOR_EXPR and BIT_XOR_EXPR on COMPLEX_TYPEs.
19945
+2014-01-20 Marek Polacek <polacek@redhat.com>
19947
+ Backported from mainline
19948
+ 2014-01-17 Marek Polacek <polacek@redhat.com>
19951
+ * cvt.c (ocp_convert): Don't segfault on non-existing
19952
+ ENUM_UNDERLYING_TYPE.
19954
+2014-01-10 Paolo Carlini <paolo.carlini@oracle.com>
19958
+ * pt.c (type_dependent_expression_p): Handle EXPR_PACK_EXPANSION.
19960
+2013-12-12 Jason Merrill <jason@redhat.com>
19963
+ * pt.c (resolve_overloaded_unification): Discard access checks.
19965
+2013-12-05 Jason Merrill <jason@redhat.com>
19969
+ * pt.c (most_specialized_class): Use the partially instantiated
19970
+ template for deduction. Drop the TMPL parameter.
19972
+2013-12-04 Jakub Jelinek <jakub@redhat.com>
19975
+ * pt.c (tsubst_copy_and_build): Handle POINTER_PLUS_EXPR.
19977
+2013-11-27 Tom de Vries <tom@codesourcery.com>
19978
+ Marc Glisse <marc.glisse@inria.fr>
19981
+ * typeck.c (cp_build_unary_op): Allow vector increment and decrement.
19983
+2013-11-27 Tom de Vries <tom@codesourcery.com>
19984
+ Marc Glisse <marc.glisse@inria.fr>
19986
+ PR middle-end/59037
19987
+ * semantics.c (cxx_fold_indirect_ref): Don't create out-of-bounds
19990
+2013-11-28 Jakub Jelinek <jakub@redhat.com>
19993
+ * semantics.c (finish_omp_atomic): Call finish_expr_stmt
19994
+ rather than add_stmt.
19996
+2013-11-23 Easwaran Raman <eraman@google.com>
19999
+ * call.c (build_new_method_call_1): Comnpare function context
20000
+ with BASELINK_BINFO type rather than instance type before
20001
+ marking the call with LOOKUP_NONVIRTUAL.
20003
+2013-10-31 Jason Merrill <jason@redhat.com>
20006
+ * parser.c (cp_parser_late_parse_one_default_arg): Set
20007
+ TARGET_EXPR_DIRECT_INIT_P.
20009
+2013-11-11 Paolo Carlini <paolo.carlini@oracle.com>
20011
+ * cvt.c (cp_convert_to_pointer): Call build_ptrmemfunc before
20012
+ maybe_warn_zero_as_null_pointer_constant to avoid duplicate
20013
+ -Wzero-as-null-pointer-constant diagnostics.
20015
+ * typeck.c (build_ptrmemfunc): Use cp_build_c_cast.
20017
+2013-10-25 Tom de Vries <tom@codesourcery.com>
20020
+ * except.c (build_must_not_throw_expr): Handle
20023
+2013-10-17 Paolo Carlini <paolo.carlini@oracle.com>
20026
+ * semantics.c (lambda_expr_this_capture): Handle NSDMIs in the
20027
+ cp_unevaluated_operand case.
20029
+2013-10-16 Paolo Carlini <paolo.carlini@oracle.com>
20032
+ * parser.c (cp_parser_pseudo_destructor_name): Revert r174385 changes.
20034
+2013-10-16 Jason Merrill <jason@redhat.com>
20037
+ * decl2.c (dump_tu): Split out from...
20038
+ (cp_write_global_declarations): ...here. Call it in PCH mode.
20040
2013-10-16 Release Manager
20042
* GCC 4.8.2 released.
20044
===================================================================
20045
--- a/src/gcc/cp/pt.c (.../tags/gcc_4_8_2_release)
20046
+++ b/src/gcc/cp/pt.c (.../branches/gcc-4_8-branch)
20047
@@ -170,7 +170,7 @@
20048
static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
20049
static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
20050
static void regenerate_decl_from_template (tree, tree);
20051
-static tree most_specialized_class (tree, tree, tsubst_flags_t);
20052
+static tree most_specialized_class (tree, tsubst_flags_t);
20053
static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
20054
static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree);
20055
static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
20056
@@ -1419,6 +1419,8 @@
20057
= DECL_DECLARED_INLINE_P (fn);
20058
DECL_SOURCE_LOCATION (clone)
20059
= DECL_SOURCE_LOCATION (fn);
20060
+ DECL_DELETED_FN (clone)
20061
+ = DECL_DELETED_FN (fn);
20063
check_specialization_namespace (tmpl);
20065
@@ -3436,7 +3438,7 @@
20066
for (i = 0; i < num_packed; ++i, ++out_arg)
20067
TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
20068
if (non_default_args_count > 0)
20069
- non_default_args_count += num_packed;
20070
+ non_default_args_count += num_packed - 1;
20074
@@ -3491,6 +3493,11 @@
20075
|| TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
20078
+ /* Don't complain about the injected class name, as we've already
20079
+ complained about the class itself. */
20080
+ if (DECL_SELF_REFERENCE_P (decl))
20083
error ("declaration of %q+#D", decl);
20084
error (" shadows template parm %q+#D", olddecl);
20086
@@ -4261,7 +4268,7 @@
20087
if (COMPLETE_TYPE_P (inst_type)
20088
&& CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
20090
- tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
20091
+ tree spec = most_specialized_class (inst_type, tf_none);
20092
if (spec && TREE_TYPE (spec) == type)
20093
permerror (input_location,
20094
"partial specialization of %qT after instantiation "
20095
@@ -6672,6 +6679,8 @@
20096
/* Store this argument. */
20097
if (arg == error_mark_node)
20101
TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
20103
/* We are done with all of the arguments. */
20104
@@ -8572,7 +8581,7 @@
20106
/* Determine what specialization of the original template to
20108
- t = most_specialized_class (type, templ, tf_warning_or_error);
20109
+ t = most_specialized_class (type, tf_warning_or_error);
20110
if (t == error_mark_node)
20112
TYPE_BEING_DEFINED (type) = 1;
20113
@@ -12694,27 +12703,43 @@
20114
tsubst_expr ((NODE), args, complain, in_decl, \
20115
integral_constant_expression_p)
20116
tree decl, init, cond, incr;
20119
init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
20120
gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
20121
decl = TREE_OPERAND (init, 0);
20122
init = TREE_OPERAND (init, 1);
20123
- /* Do this before substituting into decl to handle 'auto'. */
20124
- init_decl = (init && TREE_CODE (init) == DECL_EXPR);
20125
- init = RECUR (init);
20126
- decl = RECUR (decl);
20128
+ tree decl_expr = NULL_TREE;
20129
+ if (init && TREE_CODE (init) == DECL_EXPR)
20131
- gcc_assert (!processing_template_decl);
20132
- init = DECL_INITIAL (decl);
20133
- DECL_INITIAL (decl) = NULL_TREE;
20134
+ /* We need to jump through some hoops to handle declarations in the
20135
+ for-init-statement, since we might need to handle auto deduction,
20136
+ but we need to keep control of initialization. */
20137
+ decl_expr = init;
20138
+ init = DECL_INITIAL (DECL_EXPR_DECL (init));
20139
+ decl = tsubst_decl (decl, args, complain);
20142
+ decl = RECUR (decl);
20143
+ init = RECUR (init);
20145
+ tree auto_node = type_uses_auto (TREE_TYPE (decl));
20146
+ if (auto_node && init)
20148
+ = do_auto_deduction (TREE_TYPE (decl), init, auto_node);
20150
gcc_assert (!type_dependent_expression_p (decl));
20152
if (!CLASS_TYPE_P (TREE_TYPE (decl)))
20156
+ /* Declare the variable, but don't let that initialize it. */
20157
+ tree init_sav = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
20158
+ DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL_TREE;
20159
+ RECUR (decl_expr);
20160
+ DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init_sav;
20163
cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
20164
incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
20165
if (TREE_CODE (incr) == MODIFY_EXPR)
20166
@@ -12731,8 +12756,14 @@
20170
- if (init && !init_decl)
20173
+ /* Declare and initialize the variable. */
20174
+ RECUR (decl_expr);
20175
+ init = NULL_TREE;
20180
for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
20182
@@ -13710,6 +13741,10 @@
20186
+ case POINTER_PLUS_EXPR:
20187
+ return fold_build_pointer_plus (RECUR (TREE_OPERAND (t, 0)),
20188
+ RECUR (TREE_OPERAND (t, 1)));
20191
RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
20192
/*address_p=*/false));
20193
@@ -14471,12 +14506,12 @@
20197
- tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
20198
- complain, in_decl);
20199
+ tree type1 = tsubst (TRAIT_EXPR_TYPE1 (t), args,
20200
+ complain, in_decl);
20202
tree type2 = TRAIT_EXPR_TYPE2 (t);
20204
- type2 = tsubst_copy (type2, args, complain, in_decl);
20205
+ type2 = tsubst (type2, args, complain, in_decl);
20207
RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
20209
@@ -14778,6 +14813,8 @@
20210
/* Instantiation of the function happens in the context of the function
20211
template, not the context of the overload resolution we're doing. */
20212
push_to_top_level ();
20213
+ struct pointer_map_t *saved_local_specializations = local_specializations;
20214
+ local_specializations = NULL;
20215
/* If there are dependent arguments, e.g. because we're doing partial
20216
ordering, make sure processing_template_decl stays set. */
20217
if (uses_template_parms (targ_ptr))
20218
@@ -14793,6 +14830,7 @@
20219
targ_ptr, complain, gen_tmpl);
20220
if (DECL_CLASS_SCOPE_P (gen_tmpl))
20221
pop_nested_class ();
20222
+ local_specializations = saved_local_specializations;
20223
pop_from_top_level ();
20225
if (fndecl == error_mark_node)
20226
@@ -15192,8 +15230,11 @@
20228
/* If we're looking for an exact match, check that what we got
20229
is indeed an exact match. It might not be if some template
20230
- parameters are used in non-deduced contexts. */
20231
- if (strict == DEDUCE_EXACT)
20232
+ parameters are used in non-deduced contexts. But don't check
20233
+ for an exact match if we have dependent template arguments;
20234
+ in that case we're doing partial ordering, and we already know
20235
+ that we have two candidates that will provide the actual type. */
20236
+ if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
20238
tree substed = TREE_TYPE (decl);
20240
@@ -15749,7 +15790,7 @@
20241
if (subargs != error_mark_node
20242
&& !any_dependent_template_arguments_p (subargs))
20244
- elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
20245
+ elem = TREE_TYPE (instantiate_template (fn, subargs, tf_none));
20246
if (try_one_overload (tparms, targs, tempargs, parm,
20247
elem, strict, sub_strict, addr_p, explain_p)
20248
&& (!goodfn || !same_type_p (goodfn, elem)))
20249
@@ -16207,6 +16248,9 @@
20250
tree pattern = PACK_EXPANSION_PATTERN (parm);
20251
tree pack, packs = NULL_TREE;
20252
int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
20254
+ packed_args = expand_template_argument_pack (packed_args);
20256
int len = TREE_VEC_LENGTH (packed_args);
20258
/* Determine the parameter packs we will be deducing from the
20259
@@ -16574,9 +16618,11 @@
20260
if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
20261
&& !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
20262
return unify_template_deduction_failure (explain_p, parm, arg);
20265
tree parmvec = TYPE_TI_ARGS (parm);
20266
+ /* An alias template name is never deduced. */
20267
+ if (TYPE_ALIAS_P (arg))
20268
+ arg = strip_typedefs (arg);
20269
tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
20270
tree full_argvec = add_to_template_args (targs, argvec);
20272
@@ -17553,7 +17599,7 @@
20276
-/* Determine which of two partial specializations of MAIN_TMPL is more
20277
+/* Determine which of two partial specializations of TMPL is more
20280
PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
20281
@@ -17569,7 +17615,7 @@
20282
two templates is more specialized. */
20285
-more_specialized_class (tree main_tmpl, tree pat1, tree pat2)
20286
+more_specialized_class (tree tmpl, tree pat1, tree pat2)
20290
@@ -17584,7 +17630,7 @@
20291
types in the arguments, and we need our dependency check functions
20292
to behave correctly. */
20293
++processing_template_decl;
20294
- targs = get_class_bindings (main_tmpl, TREE_VALUE (pat1),
20295
+ targs = get_class_bindings (tmpl, TREE_VALUE (pat1),
20296
CLASSTYPE_TI_ARGS (tmpl1),
20297
CLASSTYPE_TI_ARGS (tmpl2));
20299
@@ -17593,7 +17639,7 @@
20300
any_deductions = true;
20303
- targs = get_class_bindings (main_tmpl, TREE_VALUE (pat2),
20304
+ targs = get_class_bindings (tmpl, TREE_VALUE (pat2),
20305
CLASSTYPE_TI_ARGS (tmpl2),
20306
CLASSTYPE_TI_ARGS (tmpl1));
20308
@@ -17673,7 +17719,7 @@
20311
/* Return the innermost template arguments that, when applied to a partial
20312
- specialization of MAIN_TMPL whose innermost template parameters are
20313
+ specialization of TMPL whose innermost template parameters are
20314
TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
20317
@@ -17688,7 +17734,7 @@
20318
is bound to `double'. */
20321
-get_class_bindings (tree main_tmpl, tree tparms, tree spec_args, tree args)
20322
+get_class_bindings (tree tmpl, tree tparms, tree spec_args, tree args)
20324
int i, ntparms = TREE_VEC_LENGTH (tparms);
20326
@@ -17728,8 +17774,8 @@
20327
`T' is `A' but unify () does not check whether `typename T::X'
20329
spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
20330
- spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (main_tmpl),
20331
- spec_args, main_tmpl,
20332
+ spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
20334
tf_none, false, false);
20335
if (spec_args == error_mark_node
20336
/* We only need to check the innermost arguments; the other
20337
@@ -17877,8 +17923,8 @@
20340
/* Return the most specialized of the class template partial
20341
- specializations of TMPL which can produce TYPE, a specialization of
20342
- TMPL. The value returned is actually a TREE_LIST; the TREE_TYPE is
20343
+ specializations which can produce TYPE, a specialization of some class
20344
+ template. The value returned is actually a TREE_LIST; the TREE_TYPE is
20345
a _TYPE node corresponding to the partial specialization, while the
20346
TREE_PURPOSE is the set of template arguments that must be
20347
substituted into the TREE_TYPE in order to generate TYPE.
20348
@@ -17885,11 +17931,11 @@
20350
If the choice of partial specialization is ambiguous, a diagnostic
20351
is issued, and the error_mark_node is returned. If there are no
20352
- partial specializations of TMPL matching TYPE, then NULL_TREE is
20354
+ partial specializations matching TYPE, then NULL_TREE is
20355
+ returned, indicating that the primary template should be used. */
20358
-most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
20359
+most_specialized_class (tree type, tsubst_flags_t complain)
20361
tree list = NULL_TREE;
20363
@@ -17896,11 +17942,11 @@
20368
tree outer_args = NULL_TREE;
20370
- tmpl = most_general_template (tmpl);
20371
- args = CLASSTYPE_TI_ARGS (type);
20372
+ tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
20373
+ tree main_tmpl = most_general_template (tmpl);
20374
+ tree args = CLASSTYPE_TI_ARGS (type);
20376
/* For determining which partial specialization to use, only the
20377
innermost args are interesting. */
20378
@@ -17910,7 +17956,7 @@
20379
args = INNERMOST_TEMPLATE_ARGS (args);
20382
- for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
20383
+ for (t = DECL_TEMPLATE_SPECIALIZATIONS (main_tmpl); t; t = TREE_CHAIN (t))
20385
tree partial_spec_args;
20387
@@ -17944,8 +17990,7 @@
20389
partial_spec_args =
20390
coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
20391
- add_to_template_args (outer_args,
20392
- partial_spec_args),
20393
+ partial_spec_args,
20395
/*require_all_args=*/true,
20396
/*use_default_args=*/true);
20397
@@ -18553,6 +18598,10 @@
20399
tree fntype, spec, noex, clone;
20401
+ /* Don't instantiate a noexcept-specification from template context. */
20402
+ if (processing_template_decl)
20405
if (DECL_CLONED_FUNCTION_P (fn))
20406
fn = DECL_CLONED_FUNCTION (fn);
20407
fntype = TREE_TYPE (fn);
20408
@@ -19955,6 +20004,10 @@
20409
if (TREE_CODE (expression) == SCOPE_REF)
20412
+ /* Always dependent, on the number of arguments if nothing else. */
20413
+ if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
20416
if (BASELINK_P (expression))
20417
expression = BASELINK_FUNCTIONS (expression);
20419
Index: gcc/cp/semantics.c
20420
===================================================================
20421
--- a/src/gcc/cp/semantics.c (.../tags/gcc_4_8_2_release)
20422
+++ b/src/gcc/cp/semantics.c (.../branches/gcc-4_8-branch)
20423
@@ -2501,7 +2501,8 @@
20426
decl = fname_decl (input_location, C_RID_CODE (id), id);
20427
- if (processing_template_decl && current_function_decl)
20428
+ if (processing_template_decl && current_function_decl
20429
+ && decl != error_mark_node)
20430
decl = DECL_NAME (decl);
20433
@@ -3853,7 +3854,7 @@
20434
linkage of all functions, and as that causes writes to
20435
the data mapped in from the PCH file, it's advantageous
20436
to mark the functions at this point. */
20437
- if (!DECL_IMPLICIT_INSTANTIATION (fn))
20438
+ if (!DECL_IMPLICIT_INSTANTIATION (fn) || DECL_DEFAULTED_FN (fn))
20440
/* This function must have external linkage, as
20441
otherwise DECL_INTERFACE_KNOWN would have been
20442
@@ -4291,7 +4292,8 @@
20443
error ("%qE has invalid type for %<reduction%>", t);
20446
- else if (FLOAT_TYPE_P (TREE_TYPE (t)))
20447
+ else if (FLOAT_TYPE_P (TREE_TYPE (t))
20448
+ || TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
20450
enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
20452
@@ -4299,10 +4301,26 @@
20459
+ if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
20460
+ r_code = ERROR_MARK;
20462
+ case BIT_AND_EXPR:
20463
+ case BIT_XOR_EXPR:
20464
+ case BIT_IOR_EXPR:
20466
+ r_code = ERROR_MARK;
20468
+ case TRUTH_ANDIF_EXPR:
20469
+ case TRUTH_ORIF_EXPR:
20470
+ if (FLOAT_TYPE_P (TREE_TYPE (t)))
20471
+ r_code = ERROR_MARK;
20474
+ if (r_code == ERROR_MARK)
20476
error ("%qE has invalid type for %<reduction(%s)%>",
20477
t, operator_name_info[r_code].name);
20479
@@ -5059,7 +5077,7 @@
20481
stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node, stmt);
20484
+ finish_expr_stmt (stmt);
20488
@@ -7543,7 +7561,7 @@
20489
unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
20490
tree index = bitsize_int (indexi);
20492
- if (offset/part_widthi <= TYPE_VECTOR_SUBPARTS (op00type))
20493
+ if (offset / part_widthi < TYPE_VECTOR_SUBPARTS (op00type))
20494
return fold_build3_loc (loc,
20495
BIT_FIELD_REF, type, op00,
20496
part_width, index);
20497
@@ -9481,7 +9499,14 @@
20498
/* In unevaluated context this isn't an odr-use, so just return the
20500
if (cp_unevaluated_operand)
20501
- return lookup_name (this_identifier);
20503
+ /* In an NSDMI the fake 'this' pointer that we're using for
20504
+ parsing is in scope_chain. */
20505
+ if (LAMBDA_EXPR_EXTRA_SCOPE (lambda)
20506
+ && TREE_CODE (LAMBDA_EXPR_EXTRA_SCOPE (lambda)) == FIELD_DECL)
20507
+ return scope_chain->x_current_class_ptr;
20508
+ return lookup_name (this_identifier);
20511
/* Try to default capture 'this' if we can. */
20513
Index: gcc/cp/decl2.c
20514
===================================================================
20515
--- a/src/gcc/cp/decl2.c (.../tags/gcc_4_8_2_release)
20516
+++ b/src/gcc/cp/decl2.c (.../branches/gcc-4_8-branch)
20517
@@ -2884,7 +2884,7 @@
20518
TREE_PUBLIC (fn) = TREE_PUBLIC (var);
20519
DECL_ARTIFICIAL (fn) = true;
20520
DECL_COMDAT (fn) = DECL_COMDAT (var);
20521
- DECL_EXTERNAL (fn) = true;
20522
+ DECL_EXTERNAL (fn) = DECL_EXTERNAL (var);
20523
if (DECL_ONE_ONLY (var))
20524
make_decl_one_only (fn, cxx_comdat_group (fn));
20525
if (TREE_PUBLIC (var))
20526
@@ -3946,6 +3946,8 @@
20527
if (TREE_PUBLIC (var))
20529
tree single_init_fn = get_tls_init_fn (var);
20530
+ if (single_init_fn == NULL_TREE)
20533
= cgraph_same_body_alias (cgraph_get_create_node (fn),
20534
single_init_fn, fn);
20535
@@ -3960,6 +3962,22 @@
20536
expand_or_defer_fn (finish_function (0));
20539
+/* The entire file is now complete. If requested, dump everything
20546
+ FILE *stream = dump_begin (TDI_tu, &flags);
20550
+ dump_node (global_namespace, flags & ~TDF_SLIM, stream);
20551
+ dump_end (TDI_tu, stream);
20555
/* This routine is called at the end of compilation.
20556
Its job is to create all the code needed to initialize and
20557
destroy the global aggregates. We do the destruction
20558
@@ -3990,6 +4008,7 @@
20561
c_common_write_pch ();
20566
@@ -4359,17 +4378,8 @@
20568
/* The entire file is now complete. If requested, dump everything
20572
- FILE *stream = dump_begin (TDI_tu, &flags);
20577
- dump_node (global_namespace, flags & ~TDF_SLIM, stream);
20578
- dump_end (TDI_tu, stream);
20582
if (flag_detailed_statistics)
20584
dump_tree_statistics ();
20585
Index: gcc/cp/parser.c
20586
===================================================================
20587
--- a/src/gcc/cp/parser.c (.../tags/gcc_4_8_2_release)
20588
+++ b/src/gcc/cp/parser.c (.../branches/gcc-4_8-branch)
20589
@@ -6421,10 +6421,6 @@
20590
/* Look for the `~'. */
20591
cp_parser_require (parser, CPP_COMPL, RT_COMPL);
20593
- /* Once we see the ~, this has to be a pseudo-destructor. */
20594
- if (!processing_template_decl && !cp_parser_error_occurred (parser))
20595
- cp_parser_commit_to_tentative_parse (parser);
20597
/* Look for the type-name again. We are not responsible for
20598
checking that it matches the first type-name. */
20599
*type = cp_parser_nonclass_name (parser);
20600
@@ -14168,25 +14164,7 @@
20601
/* Look up the type-name. */
20602
type_decl = cp_parser_lookup_name_simple (parser, identifier, token->location);
20604
- if (TREE_CODE (type_decl) == USING_DECL)
20606
- if (!DECL_DEPENDENT_P (type_decl))
20607
- type_decl = strip_using_decl (type_decl);
20608
- else if (USING_DECL_TYPENAME_P (type_decl))
20610
- /* We have found a type introduced by a using
20611
- declaration at class scope that refers to a dependent
20614
- using typename :: [opt] nested-name-specifier unqualified-id ;
20616
- type_decl = make_typename_type (TREE_TYPE (type_decl),
20617
- DECL_NAME (type_decl),
20618
- typename_type, tf_error);
20619
- if (type_decl != error_mark_node)
20620
- type_decl = TYPE_NAME (type_decl);
20623
+ type_decl = strip_using_decl (type_decl);
20625
if (TREE_CODE (type_decl) != TYPE_DECL
20626
&& (objc_is_id (identifier) || objc_is_class_name (identifier)))
20627
@@ -14742,7 +14720,8 @@
20629
underlying_type = grokdeclarator (NULL, &type_specifiers, TYPENAME,
20630
/*initialized=*/0, NULL);
20631
- if (underlying_type == error_mark_node)
20632
+ if (underlying_type == error_mark_node
20633
+ || check_for_bare_parameter_packs (underlying_type))
20634
underlying_type = NULL_TREE;
20637
@@ -22209,6 +22188,9 @@
20642
+ type = error_mark_node;
20644
if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
20646
maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
20647
@@ -22576,6 +22558,9 @@
20648
&& CONSTRUCTOR_IS_DIRECT_INIT (parsed_arg))
20649
flags = LOOKUP_NORMAL;
20650
parsed_arg = digest_init_flags (TREE_TYPE (decl), parsed_arg, flags);
20651
+ if (TREE_CODE (parsed_arg) == TARGET_EXPR)
20652
+ /* This represents the whole initialization. */
20653
+ TARGET_EXPR_DIRECT_INIT_P (parsed_arg) = true;
20657
Index: gcc/cp/call.c
20658
===================================================================
20659
--- a/src/gcc/cp/call.c (.../tags/gcc_4_8_2_release)
20660
+++ b/src/gcc/cp/call.c (.../branches/gcc-4_8-branch)
20661
@@ -892,6 +892,9 @@
20663
if (i < CONSTRUCTOR_NELTS (ctor))
20664
val = CONSTRUCTOR_ELT (ctor, i)->value;
20665
+ else if (TREE_CODE (ftype) == REFERENCE_TYPE)
20666
+ /* Value-initialization of reference is ill-formed. */
20670
if (empty_ctor == NULL_TREE)
20671
@@ -5806,9 +5809,11 @@
20672
&& convs->kind != ck_ambig
20673
&& (convs->kind != ck_ref_bind
20674
|| convs->user_conv_p)
20675
- && convs->kind != ck_rvalue
20676
+ && (convs->kind != ck_rvalue
20677
+ || SCALAR_TYPE_P (totype))
20678
&& convs->kind != ck_base)
20680
+ bool complained = false;
20681
conversion *t = convs;
20683
/* Give a helpful error if this is bad because of excess braces. */
20684
@@ -5816,7 +5821,14 @@
20685
&& SCALAR_TYPE_P (totype)
20686
&& CONSTRUCTOR_NELTS (expr) > 0
20687
&& BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
20688
- permerror (loc, "too many braces around initializer for %qT", totype);
20690
+ complained = true;
20691
+ permerror (loc, "too many braces around initializer "
20692
+ "for %qT", totype);
20693
+ while (BRACE_ENCLOSED_INITIALIZER_P (expr)
20694
+ && CONSTRUCTOR_NELTS (expr) == 1)
20695
+ expr = CONSTRUCTOR_ELT (expr, 0)->value;
20698
for (; t ; t = next_conversion (t))
20700
@@ -5853,8 +5865,9 @@
20704
- permerror (loc, "invalid conversion from %qT to %qT",
20705
- TREE_TYPE (expr), totype);
20707
+ permerror (loc, "invalid conversion from %qT to %qT",
20708
+ TREE_TYPE (expr), totype);
20710
permerror (DECL_SOURCE_LOCATION (fn),
20711
" initializing argument %P of %qD", argnum, fn);
20712
@@ -5999,6 +6012,8 @@
20713
to avoid the error about taking the address of a temporary. */
20714
array = cp_build_addr_expr (array, complain);
20715
array = cp_convert (build_pointer_type (elttype), array, complain);
20716
+ if (array == error_mark_node)
20717
+ return error_mark_node;
20719
/* Build up the initializer_list object. */
20720
totype = complete_type (totype);
20721
@@ -6023,8 +6038,11 @@
20722
return fold_if_not_in_template (expr);
20724
expr = reshape_init (totype, expr, complain);
20725
- return get_target_expr_sfinae (digest_init (totype, expr, complain),
20726
+ expr = get_target_expr_sfinae (digest_init (totype, expr, complain),
20728
+ if (expr != error_mark_node)
20729
+ TARGET_EXPR_LIST_INIT_P (expr) = true;
20734
@@ -7414,7 +7432,7 @@
20735
struct z_candidate *candidates = 0, *cand;
20736
tree explicit_targs = NULL_TREE;
20737
tree basetype = NULL_TREE;
20738
- tree access_binfo;
20739
+ tree access_binfo, binfo;
20741
tree first_mem_arg = NULL_TREE;
20743
@@ -7454,6 +7472,7 @@
20744
if (!conversion_path)
20745
conversion_path = BASELINK_BINFO (fns);
20746
access_binfo = BASELINK_ACCESS_BINFO (fns);
20747
+ binfo = BASELINK_BINFO (fns);
20748
optype = BASELINK_OPTYPE (fns);
20749
fns = BASELINK_FUNCTIONS (fns);
20750
if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
20751
@@ -7697,13 +7716,13 @@
20753
/* Optimize away vtable lookup if we know that this
20754
function can't be overridden. We need to check if
20755
- the context and the instance type are the same,
20756
+ the context and the type where we found fn are the same,
20757
actually FN might be defined in a different class
20758
type because of a using-declaration. In this case, we
20759
do not want to perform a non-virtual call. */
20760
if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
20761
&& same_type_ignoring_top_level_qualifiers_p
20762
- (DECL_CONTEXT (fn), TREE_TYPE (instance))
20763
+ (DECL_CONTEXT (fn), BINFO_TYPE (binfo))
20764
&& resolves_to_fixed_type_p (instance, 0))
20765
flags |= LOOKUP_NONVIRTUAL;
20766
if (explicit_targs)
20767
Index: gcc/cp/cvt.c
20768
===================================================================
20769
--- a/src/gcc/cp/cvt.c (.../tags/gcc_4_8_2_release)
20770
+++ b/src/gcc/cp/cvt.c (.../branches/gcc-4_8-branch)
20771
@@ -203,13 +203,13 @@
20773
if (null_ptr_cst_p (expr))
20775
- if (complain & tf_warning)
20776
- maybe_warn_zero_as_null_pointer_constant (expr, loc);
20778
if (TYPE_PTRMEMFUNC_P (type))
20779
return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 0,
20780
/*c_cast_p=*/false, complain);
20782
+ if (complain & tf_warning)
20783
+ maybe_warn_zero_as_null_pointer_constant (expr, loc);
20785
/* A NULL pointer-to-data-member is represented by -1, not by
20787
tree val = (TYPE_PTRDATAMEM_P (type)
20788
@@ -743,6 +743,7 @@
20790
if ((complain & tf_warning)
20791
&& TREE_CODE (e) == INTEGER_CST
20792
+ && ENUM_UNDERLYING_TYPE (type)
20793
&& !int_fits_type_p (e, ENUM_UNDERLYING_TYPE (type)))
20794
warning_at (loc, OPT_Wconversion,
20795
"the result of the conversion is unspecified because "
20796
Index: gcc/cp/mangle.c
20797
===================================================================
20798
--- a/src/gcc/cp/mangle.c (.../tags/gcc_4_8_2_release)
20799
+++ b/src/gcc/cp/mangle.c (.../branches/gcc-4_8-branch)
20800
@@ -3478,6 +3478,7 @@
20802
if (G.need_abi_warning
20803
/* Don't do this for a fake symbol we aren't going to emit anyway. */
20804
+ && TREE_CODE (decl) != TYPE_DECL
20805
&& !DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
20806
&& !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
20808
@@ -3773,7 +3774,8 @@
20810
write_guarded_var_name (const tree variable)
20812
- if (strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
20813
+ if (DECL_NAME (variable)
20814
+ && strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
20815
/* The name of a guard variable for a reference temporary should refer
20816
to the reference, not the temporary. */
20817
write_string (IDENTIFIER_POINTER (DECL_NAME (variable)) + 4);
20818
Index: gcc/cp/cp-tree.h
20819
===================================================================
20820
--- a/src/gcc/cp/cp-tree.h (.../tags/gcc_4_8_2_release)
20821
+++ b/src/gcc/cp/cp-tree.h (.../branches/gcc-4_8-branch)
20822
@@ -344,7 +344,8 @@
20823
/* Returns true iff NODE is a BASELINK. */
20824
#define BASELINK_P(NODE) \
20825
(TREE_CODE (NODE) == BASELINK)
20826
-/* The BINFO indicating the base from which the BASELINK_FUNCTIONS came. */
20827
+/* The BINFO indicating the base in which lookup found the
20828
+ BASELINK_FUNCTIONS. */
20829
#define BASELINK_BINFO(NODE) \
20830
(((struct tree_baselink*) BASELINK_CHECK (NODE))->binfo)
20831
/* The functions referred to by the BASELINK; either a FUNCTION_DECL,
20832
Index: gcc/cp/name-lookup.c
20833
===================================================================
20834
--- a/src/gcc/cp/name-lookup.c (.../tags/gcc_4_8_2_release)
20835
+++ b/src/gcc/cp/name-lookup.c (.../branches/gcc-4_8-branch)
20836
@@ -394,7 +394,8 @@
20840
-/* Strip non dependent using declarations. */
20841
+/* Strip non dependent using declarations. If DECL is dependent,
20842
+ surreptitiously create a typename_type and return it. */
20845
strip_using_decl (tree decl)
20846
@@ -404,6 +405,23 @@
20848
while (TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
20849
decl = USING_DECL_DECLS (decl);
20851
+ if (TREE_CODE (decl) == USING_DECL && DECL_DEPENDENT_P (decl)
20852
+ && USING_DECL_TYPENAME_P (decl))
20854
+ /* We have found a type introduced by a using
20855
+ declaration at class scope that refers to a dependent
20858
+ using typename :: [opt] nested-name-specifier unqualified-id ;
20860
+ decl = make_typename_type (TREE_TYPE (decl),
20861
+ DECL_NAME (decl),
20862
+ typename_type, tf_error);
20863
+ if (decl != error_mark_node)
20864
+ decl = TYPE_NAME (decl);
20870
@@ -5605,9 +5623,9 @@
20871
push_using_directive (tree used)
20874
- timevar_start (TV_NAME_LOOKUP);
20875
+ bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
20876
ret = push_using_directive_1 (used);
20877
- timevar_stop (TV_NAME_LOOKUP);
20878
+ timevar_cond_stop (TV_NAME_LOOKUP, subtime);
20882
Index: gcc/mode-switching.c
20883
===================================================================
20884
--- a/src/gcc/mode-switching.c (.../tags/gcc_4_8_2_release)
20885
+++ b/src/gcc/mode-switching.c (.../branches/gcc-4_8-branch)
20886
@@ -568,12 +568,15 @@
20888
info[bb->index].computing = last_mode;
20889
/* Check for blocks without ANY mode requirements.
20890
- N.B. because of MODE_AFTER, last_mode might still be different
20892
+ N.B. because of MODE_AFTER, last_mode might still
20893
+ be different from no_mode, in which case we need to
20894
+ mark the block as nontransparent. */
20895
if (!any_set_required)
20897
ptr = new_seginfo (no_mode, BB_END (bb), bb->index, live_now);
20898
add_seginfo (info + bb->index, ptr);
20899
+ if (last_mode != no_mode)
20900
+ bitmap_clear_bit (transp[bb->index], j);
20903
#if defined (MODE_ENTRY) && defined (MODE_EXIT)
20904
Index: gcc/ipa-pure-const.c
20905
===================================================================
20906
--- a/src/gcc/ipa-pure-const.c (.../tags/gcc_4_8_2_release)
20907
+++ b/src/gcc/ipa-pure-const.c (.../branches/gcc-4_8-branch)
20908
@@ -588,7 +588,7 @@
20909
/* Wrapper around check_decl for loads in local more. */
20912
-check_load (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
20913
+check_load (gimple, tree op, tree, void *data)
20916
check_decl ((funct_state)data, op, false, false);
20917
@@ -600,7 +600,7 @@
20918
/* Wrapper around check_decl for stores in local more. */
20921
-check_store (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
20922
+check_store (gimple, tree op, tree, void *data)
20925
check_decl ((funct_state)data, op, true, false);
20926
@@ -612,7 +612,7 @@
20927
/* Wrapper around check_decl for loads in ipa mode. */
20930
-check_ipa_load (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
20931
+check_ipa_load (gimple, tree op, tree, void *data)
20934
check_decl ((funct_state)data, op, false, true);
20935
@@ -624,7 +624,7 @@
20936
/* Wrapper around check_decl for stores in ipa mode. */
20939
-check_ipa_store (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
20940
+check_ipa_store (gimple, tree op, tree, void *data)
20943
check_decl ((funct_state)data, op, true, true);
20945
===================================================================
20946
--- a/src/gcc/cse.c (.../tags/gcc_4_8_2_release)
20947
+++ b/src/gcc/cse.c (.../branches/gcc-4_8-branch)
20948
@@ -1824,7 +1824,7 @@
20952
-/* Function called for each rtx to check whether true dependence exist. */
20953
+/* Function called for each rtx to check whether an anti dependence exist. */
20954
struct check_dependence_data
20956
enum machine_mode mode;
20957
@@ -1837,7 +1837,7 @@
20959
struct check_dependence_data *d = (struct check_dependence_data *) data;
20960
if (*x && MEM_P (*x))
20961
- return canon_true_dependence (d->exp, d->mode, d->addr, *x, NULL_RTX);
20962
+ return canon_anti_dependence (*x, true, d->exp, d->mode, d->addr);
20966
@@ -6082,6 +6082,18 @@
20970
+ case UNSIGNED_FLOAT:
20972
+ rtx new_rtx = cse_process_notes (XEXP (x, 0), object, changed);
20973
+ /* We don't substitute negative VOIDmode constants into these rtx,
20974
+ since they would impede folding. */
20975
+ if (GET_MODE (new_rtx) != VOIDmode
20976
+ || (CONST_INT_P (new_rtx) && INTVAL (new_rtx) >= 0)
20977
+ || (CONST_DOUBLE_P (new_rtx) && CONST_DOUBLE_HIGH (new_rtx) >= 0))
20978
+ validate_change (object, &XEXP (x, 0), new_rtx, 0);
20983
i = REG_QTY (REGNO (x));
20985
Index: gcc/tree-ssa-math-opts.c
20986
===================================================================
20987
--- a/src/gcc/tree-ssa-math-opts.c (.../tags/gcc_4_8_2_release)
20988
+++ b/src/gcc/tree-ssa-math-opts.c (.../branches/gcc-4_8-branch)
20989
@@ -1718,7 +1718,9 @@
20991
if (rhs_class == GIMPLE_BINARY_RHS)
20994
struct symbolic_number n1, n2;
20995
+ unsigned HOST_WIDEST_INT mask;
20998
if (code != BIT_IOR_EXPR)
20999
@@ -1744,6 +1746,15 @@
21003
+ for (i = 0, mask = 0xff; i < n->size; i++, mask <<= BITS_PER_UNIT)
21005
+ unsigned HOST_WIDEST_INT masked1, masked2;
21007
+ masked1 = n1.n & mask;
21008
+ masked2 = n2.n & mask;
21009
+ if (masked1 && masked2 && masked1 != masked2)
21010
+ return NULL_TREE;
21012
n->n = n1.n | n2.n;
21014
if (!verify_symbolic_number_p (n, stmt))
21015
Index: gcc/sel-sched.c
21016
===================================================================
21017
--- a/src/gcc/sel-sched.c (.../tags/gcc_4_8_2_release)
21018
+++ b/src/gcc/sel-sched.c (.../branches/gcc-4_8-branch)
21019
@@ -1253,7 +1253,7 @@
21021
if (!HARD_FRAME_POINTER_IS_FRAME_POINTER)
21022
add_to_hard_reg_set (®_rename_p->unavailable_hard_regs,
21023
- Pmode, HARD_FRAME_POINTER_IS_FRAME_POINTER);
21024
+ Pmode, HARD_FRAME_POINTER_REGNUM);
21028
Index: gcc/gimple-low.c
21029
===================================================================
21030
--- a/src/gcc/gimple-low.c (.../tags/gcc_4_8_2_release)
21031
+++ b/src/gcc/gimple-low.c (.../branches/gcc-4_8-branch)
21032
@@ -238,6 +238,7 @@
21034
arg = gimple_call_arg (stmt, i);
21035
if (p == error_mark_node
21036
+ || DECL_ARG_TYPE (p) == error_mark_node
21037
|| arg == error_mark_node
21038
|| (!types_compatible_p (DECL_ARG_TYPE (p), TREE_TYPE (arg))
21039
&& !fold_convertible_p (DECL_ARG_TYPE (p), arg)))
21040
Index: gcc/tree-ssa-sink.c
21041
===================================================================
21042
--- a/src/gcc/tree-ssa-sink.c (.../tags/gcc_4_8_2_release)
21043
+++ b/src/gcc/tree-ssa-sink.c (.../branches/gcc-4_8-branch)
21044
@@ -559,7 +559,7 @@
21045
execute_sink_code (void)
21047
loop_optimizer_init (LOOPS_NORMAL);
21049
+ split_critical_edges ();
21050
connect_infinite_loops_to_exit ();
21051
memset (&sink_stats, 0, sizeof (sink_stats));
21052
calculate_dominance_info (CDI_DOMINATORS);
21053
Index: gcc/config.in
21054
===================================================================
21055
--- a/src/gcc/config.in (.../tags/gcc_4_8_2_release)
21056
+++ b/src/gcc/config.in (.../branches/gcc-4_8-branch)
21057
@@ -363,6 +363,12 @@
21061
+/* Define if your assembler supports the 'ud2' mnemonic. */
21062
+#ifndef USED_FOR_TARGET
21063
+#undef HAVE_AS_IX86_UD2
21067
/* Define if your assembler supports the lituse_jsrdirect relocation. */
21068
#ifndef USED_FOR_TARGET
21069
#undef HAVE_AS_JSRDIRECT_RELOCS
21070
@@ -375,6 +381,12 @@
21074
+/* Define if your assembler supports LEON instructions. */
21075
+#ifndef USED_FOR_TARGET
21076
+#undef HAVE_AS_LEON
21080
/* Define if the assembler won't complain about a line such as # 0 "" 2. */
21081
#ifndef USED_FOR_TARGET
21082
#undef HAVE_AS_LINE_ZERO
21084
===================================================================
21085
--- a/src/gcc/ifcvt.c (.../tags/gcc_4_8_2_release)
21086
+++ b/src/gcc/ifcvt.c (.../branches/gcc-4_8-branch)
21087
@@ -115,7 +115,11 @@
21091
- if (CALL_P (insn) || NONJUMP_INSN_P (insn))
21092
+ if ((CALL_P (insn) || NONJUMP_INSN_P (insn))
21093
+ /* Don't count USE/CLOBBER insns, flow_find_cross_jump etc.
21094
+ don't count them either and we need consistency. */
21095
+ && GET_CODE (PATTERN (insn)) != USE
21096
+ && GET_CODE (PATTERN (insn)) != CLOBBER)
21099
if (insn == BB_END (bb))
21100
@@ -505,7 +509,10 @@
21101
n_insns -= 2 * n_matching;
21104
- if (then_start && else_start)
21107
+ && then_n_insns > n_matching
21108
+ && else_n_insns > n_matching)
21110
int longest_match = MIN (then_n_insns - n_matching,
21111
else_n_insns - n_matching);
21113
===================================================================
21114
--- a/src/gcc/expr.c (.../tags/gcc_4_8_2_release)
21115
+++ b/src/gcc/expr.c (.../branches/gcc-4_8-branch)
21116
@@ -1994,12 +1994,14 @@
21117
HOST_WIDE_INT bytepos = INTVAL (XEXP (XVECEXP (src, 0, i), 1));
21118
enum machine_mode mode = GET_MODE (tmps[i]);
21119
unsigned int bytelen = GET_MODE_SIZE (mode);
21120
- unsigned int adj_bytelen = bytelen;
21121
+ unsigned int adj_bytelen;
21124
/* Handle trailing fragments that run over the size of the struct. */
21125
if (ssize >= 0 && bytepos + (HOST_WIDE_INT) bytelen > ssize)
21126
adj_bytelen = ssize - bytepos;
21128
+ adj_bytelen = bytelen;
21130
if (GET_CODE (dst) == CONCAT)
21132
@@ -2040,6 +2042,7 @@
21136
+ /* Handle trailing fragments that run over the size of the struct. */
21137
if (ssize >= 0 && bytepos + (HOST_WIDE_INT) bytelen > ssize)
21139
/* store_bit_field always takes its value from the lsb.
21140
@@ -2057,16 +2060,22 @@
21141
tmps[i] = expand_shift (RSHIFT_EXPR, mode, tmps[i],
21142
shift, tmps[i], 0);
21144
- bytelen = adj_bytelen;
21146
+ /* Make sure not to write past the end of the struct. */
21147
+ store_bit_field (dest,
21148
+ adj_bytelen * BITS_PER_UNIT, bytepos * BITS_PER_UNIT,
21149
+ bytepos * BITS_PER_UNIT, ssize * BITS_PER_UNIT - 1,
21150
+ VOIDmode, tmps[i]);
21153
/* Optimize the access just a bit. */
21155
- && (! SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (dest))
21156
- || MEM_ALIGN (dest) >= GET_MODE_ALIGNMENT (mode))
21157
- && bytepos * BITS_PER_UNIT % GET_MODE_ALIGNMENT (mode) == 0
21158
- && bytelen == GET_MODE_SIZE (mode))
21159
+ else if (MEM_P (dest)
21160
+ && (!SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (dest))
21161
+ || MEM_ALIGN (dest) >= GET_MODE_ALIGNMENT (mode))
21162
+ && bytepos * BITS_PER_UNIT % GET_MODE_ALIGNMENT (mode) == 0
21163
+ && bytelen == GET_MODE_SIZE (mode))
21164
emit_move_insn (adjust_address (dest, mode, bytepos), tmps[i]);
21167
store_bit_field (dest, bytelen * BITS_PER_UNIT, bytepos * BITS_PER_UNIT,
21168
0, 0, mode, tmps[i]);
21169
@@ -3602,12 +3611,21 @@
21170
into a new pseudo. This constant may be used in different modes,
21171
and if not, combine will put things back together for us. */
21172
trunc_y = force_reg (srcmode, trunc_y);
21173
- emit_unop_insn (ic, x, trunc_y, UNKNOWN);
21175
+ /* If x is a hard register, perform the extension into a pseudo,
21176
+ so that e.g. stack realignment code is aware of it. */
21178
+ if (REG_P (x) && HARD_REGISTER_P (x))
21179
+ target = gen_reg_rtx (dstmode);
21181
+ emit_unop_insn (ic, target, trunc_y, UNKNOWN);
21182
last_insn = get_last_insn ();
21185
+ if (REG_P (target))
21186
set_unique_reg_note (last_insn, REG_EQUAL, y);
21189
+ return emit_move_insn (x, target);
21193
@@ -4551,19 +4569,19 @@
21194
- tree_low_cst (DECL_FIELD_BIT_OFFSET (repr), 1));
21196
/* If the adjustment is larger than bitpos, we would have a negative bit
21197
- position for the lower bound and this may wreak havoc later. This can
21198
- occur only if we have a non-null offset, so adjust offset and bitpos
21199
- to make the lower bound non-negative. */
21200
+ position for the lower bound and this may wreak havoc later. Adjust
21201
+ offset and bitpos to make the lower bound non-negative in that case. */
21202
if (bitoffset > *bitpos)
21204
HOST_WIDE_INT adjust = bitoffset - *bitpos;
21206
gcc_assert ((adjust % BITS_PER_UNIT) == 0);
21207
- gcc_assert (*offset != NULL_TREE);
21211
- = size_binop (MINUS_EXPR, *offset, size_int (adjust / BITS_PER_UNIT));
21212
+ if (*offset == NULL_TREE)
21213
+ *offset = size_int (-adjust / BITS_PER_UNIT);
21216
+ = size_binop (MINUS_EXPR, *offset, size_int (adjust / BITS_PER_UNIT));
21220
@@ -4668,8 +4686,7 @@
21221
expand_insn (icode, 2, ops);
21224
- store_bit_field (mem, GET_MODE_BITSIZE (mode),
21225
- 0, 0, 0, mode, reg);
21226
+ store_bit_field (mem, GET_MODE_BITSIZE (mode), 0, 0, 0, mode, reg);
21230
@@ -4698,6 +4715,15 @@
21231
tem = get_inner_reference (to, &bitsize, &bitpos, &offset, &mode1,
21232
&unsignedp, &volatilep, true);
21234
+ /* Make sure bitpos is not negative, it can wreak havoc later. */
21237
+ gcc_assert (offset == NULL_TREE);
21238
+ offset = size_int (bitpos >> (BITS_PER_UNIT == 8
21239
+ ? 3 : exact_log2 (BITS_PER_UNIT)));
21240
+ bitpos &= BITS_PER_UNIT - 1;
21243
if (TREE_CODE (to) == COMPONENT_REF
21244
&& DECL_BIT_FIELD_TYPE (TREE_OPERAND (to, 1)))
21245
get_bit_range (&bitregion_start, &bitregion_end, to, &bitpos, &offset);
21246
Index: gcc/go/go-gcc.cc
21247
===================================================================
21248
--- a/src/gcc/go/go-gcc.cc (.../tags/gcc_4_8_2_release)
21249
+++ b/src/gcc/go/go-gcc.cc (.../branches/gcc-4_8-branch)
21250
@@ -232,6 +232,9 @@
21252
convert_expression(Btype* type, Bexpression* expr, Location);
21255
+ function_code_expression(Bfunction*, Location);
21260
@@ -334,6 +337,17 @@
21262
label_address(Blabel*, Location);
21268
+ { return this->make_function(error_mark_node); }
21271
+ function(Btype* fntype, const std::string& name, const std::string& asm_name,
21272
+ bool is_visible, bool is_declaration, bool is_inlinable,
21273
+ bool disable_split_stack, bool in_unique_section, Location);
21276
// Make a Bexpression from a tree.
21278
@@ -350,6 +364,10 @@
21280
{ return new Btype(t); }
21283
+ make_function(tree t)
21284
+ { return new Bfunction(t); }
21287
fill_in_struct(Btype*, const std::vector<Btyped_identifier>&);
21289
@@ -966,6 +984,19 @@
21290
return tree_to_expr(ret);
21293
+// Get the address of a function.
21296
+Gcc_backend::function_code_expression(Bfunction* bfunc, Location location)
21298
+ tree func = bfunc->get_tree();
21299
+ if (func == error_mark_node)
21300
+ return this->error_expression();
21302
+ tree ret = build_fold_addr_expr_loc(location.gcc_location(), func);
21303
+ return this->make_expression(ret);
21306
// An expression as a statement.
21309
@@ -1724,6 +1755,56 @@
21310
return this->make_expression(ret);
21313
+// Declare or define a new function.
21316
+Gcc_backend::function(Btype* fntype, const std::string& name,
21317
+ const std::string& asm_name, bool is_visible,
21318
+ bool is_declaration, bool is_inlinable,
21319
+ bool disable_split_stack, bool in_unique_section,
21320
+ Location location)
21322
+ tree functype = fntype->get_tree();
21323
+ if (functype != error_mark_node)
21325
+ gcc_assert(FUNCTION_POINTER_TYPE_P(functype));
21326
+ functype = TREE_TYPE(functype);
21328
+ tree id = get_identifier_from_string(name);
21329
+ if (functype == error_mark_node || id == error_mark_node)
21330
+ return this->error_function();
21332
+ tree decl = build_decl(location.gcc_location(), FUNCTION_DECL, id, functype);
21333
+ if (!asm_name.empty())
21334
+ SET_DECL_ASSEMBLER_NAME(decl, get_identifier_from_string(asm_name));
21336
+ TREE_PUBLIC(decl) = 1;
21337
+ if (is_declaration)
21338
+ DECL_EXTERNAL(decl) = 1;
21341
+ tree restype = TREE_TYPE(functype);
21343
+ build_decl(location.gcc_location(), RESULT_DECL, NULL_TREE, restype);
21344
+ DECL_ARTIFICIAL(resdecl) = 1;
21345
+ DECL_IGNORED_P(resdecl) = 1;
21346
+ DECL_CONTEXT(resdecl) = decl;
21347
+ DECL_RESULT(decl) = resdecl;
21349
+ if (!is_inlinable)
21350
+ DECL_UNINLINABLE(decl) = 1;
21351
+ if (disable_split_stack)
21353
+ tree attr = get_identifier("__no_split_stack__");
21354
+ DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
21356
+ if (in_unique_section)
21357
+ resolve_unique_section(decl, 0, 1);
21359
+ go_preserve_from_gc(decl);
21360
+ return new Bfunction(decl);
21363
// The single backend.
21365
static Gcc_backend gcc_backend;
21366
@@ -1799,3 +1880,9 @@
21368
return bv->get_tree();
21372
+function_to_tree(Bfunction* bf)
21374
+ return bf->get_tree();
21376
Index: gcc/go/ChangeLog
21377
===================================================================
21378
--- a/src/gcc/go/ChangeLog (.../tags/gcc_4_8_2_release)
21379
+++ b/src/gcc/go/ChangeLog (.../branches/gcc-4_8-branch)
21381
+2013-12-11 Ian Lance Taylor <iant@google.com>
21383
+ * go-lang.c (go_langhook_post_options): Disable sibling calls by
21386
+2013-10-16 Ian Lance Taylor <iant@google.com>
21388
+ Bring in from mainline:
21390
+ 2013-10-11 Chris Manghane <cmang@google.com>
21391
+ * go-gcc.cc (Gcc_backend::function_code_expression): New
21394
+ 2013-10-10 Chris Manghane <cmang@google.com>
21395
+ * go-gcc.cc (Backend::error_function): New function.
21396
+ (Backend::function): New function.
21397
+ (Backend::make_function): New function.
21398
+ (function_to_tree): New function.
21400
2013-10-16 Release Manager
21402
* GCC 4.8.2 released.
21403
Index: gcc/go/go-lang.c
21404
===================================================================
21405
--- a/src/gcc/go/go-lang.c (.../tags/gcc_4_8_2_release)
21406
+++ b/src/gcc/go/go-lang.c (.../branches/gcc-4_8-branch)
21407
@@ -269,6 +269,10 @@
21408
if (flag_excess_precision_cmdline == EXCESS_PRECISION_DEFAULT)
21409
flag_excess_precision_cmdline = EXCESS_PRECISION_STANDARD;
21411
+ /* Tail call optimizations can confuse uses of runtime.Callers. */
21412
+ if (!global_options_set.x_flag_optimize_sibling_calls)
21413
+ global_options.x_flag_optimize_sibling_calls = 0;
21415
/* Returning false means that the backend should be used. */
21418
Index: gcc/go/gofrontend/gogo.cc
21419
===================================================================
21420
--- a/src/gcc/go/gofrontend/gogo.cc (.../tags/gcc_4_8_2_release)
21421
+++ b/src/gcc/go/gofrontend/gogo.cc (.../branches/gcc-4_8-branch)
21422
@@ -2822,7 +2822,10 @@
21423
if (orig_fntype->is_varargs())
21424
new_fntype->set_is_varargs();
21426
- std::string name = orig_no->name() + "$recover";
21427
+ std::string name = orig_no->name();
21428
+ if (orig_fntype->is_method())
21429
+ name += "$" + orig_fntype->receiver()->type()->mangled_name(gogo);
21430
+ name += "$recover";
21431
Named_object *new_no = gogo->start_function(name, new_fntype, false,
21433
Function *new_func = new_no->func_value();
21434
@@ -2916,7 +2919,25 @@
21435
&& !orig_rec_no->var_value()->is_receiver());
21436
orig_rec_no->var_value()->set_is_receiver();
21438
- const std::string& new_receiver_name(orig_fntype->receiver()->name());
21439
+ std::string new_receiver_name(orig_fntype->receiver()->name());
21440
+ if (new_receiver_name.empty())
21442
+ // Find the receiver. It was named "r.NNN" in
21443
+ // Gogo::start_function.
21444
+ for (Bindings::const_definitions_iterator p =
21445
+ new_bindings->begin_definitions();
21446
+ p != new_bindings->end_definitions();
21449
+ const std::string& pname((*p)->name());
21450
+ if (pname[0] == 'r' && pname[1] == '.')
21452
+ new_receiver_name = pname;
21456
+ go_assert(!new_receiver_name.empty());
21458
Named_object* new_rec_no = new_bindings->lookup_local(new_receiver_name);
21459
if (new_rec_no == NULL)
21460
go_assert(saw_errors());
21461
@@ -3320,7 +3341,8 @@
21462
closure_var_(NULL), block_(block), location_(location), labels_(),
21463
local_type_count_(0), descriptor_(NULL), fndecl_(NULL), defer_stack_(NULL),
21464
is_sink_(false), results_are_named_(false), nointerface_(false),
21465
- calls_recover_(false), is_recover_thunk_(false), has_recover_thunk_(false),
21466
+ is_unnamed_type_stub_method_(false), calls_recover_(false),
21467
+ is_recover_thunk_(false), has_recover_thunk_(false),
21468
in_unique_section_(false)
21471
@@ -3819,6 +3841,81 @@
21472
*presults = results;
21475
+// Get the backend representation.
21478
+Function::get_or_make_decl(Gogo* gogo, Named_object* no)
21480
+ if (this->fndecl_ == NULL)
21482
+ std::string asm_name;
21483
+ bool is_visible = false;
21484
+ if (no->package() != NULL)
21486
+ else if (this->enclosing_ != NULL || Gogo::is_thunk(no))
21488
+ else if (Gogo::unpack_hidden_name(no->name()) == "init"
21489
+ && !this->type_->is_method())
21491
+ else if (Gogo::unpack_hidden_name(no->name()) == "main"
21492
+ && gogo->is_main_package())
21493
+ is_visible = true;
21494
+ // Methods have to be public even if they are hidden because
21495
+ // they can be pulled into type descriptors when using
21496
+ // anonymous fields.
21497
+ else if (!Gogo::is_hidden_name(no->name())
21498
+ || this->type_->is_method())
21500
+ if (!this->is_unnamed_type_stub_method_)
21501
+ is_visible = true;
21502
+ std::string pkgpath = gogo->pkgpath_symbol();
21503
+ if (this->type_->is_method()
21504
+ && Gogo::is_hidden_name(no->name())
21505
+ && Gogo::hidden_name_pkgpath(no->name()) != gogo->pkgpath())
21507
+ // This is a method we created for an unexported
21508
+ // method of an imported embedded type. We need to
21509
+ // use the pkgpath of the imported package to avoid
21510
+ // a possible name collision. See bug478 for a test
21512
+ pkgpath = Gogo::hidden_name_pkgpath(no->name());
21513
+ pkgpath = Gogo::pkgpath_for_symbol(pkgpath);
21516
+ asm_name = pkgpath;
21517
+ asm_name.append(1, '.');
21518
+ asm_name.append(Gogo::unpack_hidden_name(no->name()));
21519
+ if (this->type_->is_method())
21521
+ asm_name.append(1, '.');
21522
+ Type* rtype = this->type_->receiver()->type();
21523
+ asm_name.append(rtype->mangled_name(gogo));
21527
+ // If a function calls the predeclared recover function, we
21528
+ // can't inline it, because recover behaves differently in a
21529
+ // function passed directly to defer. If this is a recover
21530
+ // thunk that we built to test whether a function can be
21531
+ // recovered, we can't inline it, because that will mess up
21532
+ // our return address comparison.
21533
+ bool is_inlinable = !(this->calls_recover_ || this->is_recover_thunk_);
21535
+ // If this is a thunk created to call a function which calls
21536
+ // the predeclared recover function, we need to disable
21537
+ // stack splitting for the thunk.
21538
+ bool disable_split_stack = this->is_recover_thunk_;
21540
+ Btype* functype = this->type_->get_backend_fntype(gogo);
21542
+ gogo->backend()->function(functype, no->get_id(gogo), asm_name,
21543
+ is_visible, false, is_inlinable,
21544
+ disable_split_stack,
21545
+ this->in_unique_section_, this->location());
21547
+ return this->fndecl_;
21552
Block::Block(Block* enclosing, Location location)
21553
@@ -5110,6 +5207,75 @@
21558
+// Return the external identifier for this object.
21561
+Named_object::get_id(Gogo* gogo)
21563
+ go_assert(!this->is_variable() && !this->is_result_variable());
21564
+ std::string decl_name;
21565
+ if (this->is_function_declaration()
21566
+ && !this->func_declaration_value()->asm_name().empty())
21567
+ decl_name = this->func_declaration_value()->asm_name();
21568
+ else if (this->is_type()
21569
+ && Linemap::is_predeclared_location(this->type_value()->location()))
21571
+ // We don't need the package name for builtin types.
21572
+ decl_name = Gogo::unpack_hidden_name(this->name_);
21576
+ std::string package_name;
21577
+ if (this->package_ == NULL)
21578
+ package_name = gogo->package_name();
21580
+ package_name = this->package_->package_name();
21582
+ // Note that this will be misleading if this is an unexported
21583
+ // method generated for an embedded imported type. In that case
21584
+ // the unexported method should have the package name of the
21585
+ // package from which it is imported, but we are going to give
21586
+ // it our package name. Fixing this would require knowing the
21587
+ // package name, but we only know the package path. It might be
21588
+ // better to use package paths here anyhow. This doesn't affect
21589
+ // the assembler code, because we always set that name in
21590
+ // Function::get_or_make_decl anyhow. FIXME.
21592
+ decl_name = package_name + '.' + Gogo::unpack_hidden_name(this->name_);
21594
+ Function_type* fntype;
21595
+ if (this->is_function())
21596
+ fntype = this->func_value()->type();
21597
+ else if (this->is_function_declaration())
21598
+ fntype = this->func_declaration_value()->type();
21601
+ if (fntype != NULL && fntype->is_method())
21603
+ decl_name.push_back('.');
21604
+ decl_name.append(fntype->receiver()->type()->mangled_name(gogo));
21607
+ if (this->is_type())
21609
+ unsigned int index;
21610
+ const Named_object* in_function = this->type_value()->in_function(&index);
21611
+ if (in_function != NULL)
21613
+ decl_name += '$' + Gogo::unpack_hidden_name(in_function->name());
21617
+ snprintf(buf, sizeof buf, "%u", index);
21618
+ decl_name += '$';
21619
+ decl_name += buf;
21623
+ return decl_name;
21628
Bindings::Bindings(Bindings* enclosing)
21629
Index: gcc/go/gofrontend/runtime.def
21630
===================================================================
21631
--- a/src/gcc/go/gofrontend/runtime.def (.../tags/gcc_4_8_2_release)
21632
+++ b/src/gcc/go/gofrontend/runtime.def (.../branches/gcc-4_8-branch)
21634
P1(STRING), R1(SLICE))
21637
+// Complex division.
21638
+DEF_GO_RUNTIME(COMPLEX64_DIV, "__go_complex64_div",
21639
+ P2(COMPLEX64, COMPLEX64), R1(COMPLEX64))
21640
+DEF_GO_RUNTIME(COMPLEX128_DIV, "__go_complex128_div",
21641
+ P2(COMPLEX128, COMPLEX128), R1(COMPLEX128))
21644
DEF_GO_RUNTIME(MAKESLICE1, "__go_make_slice1", P2(TYPE, UINTPTR), R1(SLICE))
21645
DEF_GO_RUNTIME(MAKESLICE2, "__go_make_slice2", P3(TYPE, UINTPTR, UINTPTR),
21646
Index: gcc/go/gofrontend/gogo.h
21647
===================================================================
21648
--- a/src/gcc/go/gofrontend/gogo.h (.../tags/gcc_4_8_2_release)
21649
+++ b/src/gcc/go/gofrontend/gogo.h (.../branches/gcc-4_8-branch)
21656
// This file declares the basic classes used to hold the internal
21657
// representation of Go which is built by the parser.
21658
@@ -952,6 +953,15 @@
21659
this->nointerface_ = true;
21662
+ // Record that this function is a stub method created for an unnamed
21665
+ set_is_unnamed_type_stub_method()
21667
+ go_assert(this->is_method());
21668
+ this->is_unnamed_type_stub_method_ = true;
21671
// Add a new field to the closure variable.
21673
add_closure_field(Named_object* var, Location loc)
21674
@@ -1089,17 +1099,13 @@
21675
this->descriptor_ = descriptor;
21678
- // Return the function's decl given an identifier.
21680
- get_or_make_decl(Gogo*, Named_object*, tree id);
21681
+ // Return the backend representation.
21683
+ get_or_make_decl(Gogo*, Named_object*);
21685
// Return the function's decl after it has been built.
21689
- go_assert(this->fndecl_ != NULL);
21690
- return this->fndecl_;
21692
+ get_decl() const;
21694
// Set the function decl to hold a tree of the function code.
21696
@@ -1170,7 +1176,7 @@
21697
// The function descriptor, if any.
21698
Expression* descriptor_;
21699
// The function decl.
21701
+ Bfunction* fndecl_;
21702
// The defer stack variable. A pointer to this variable is used to
21703
// distinguish the defer stack for one function from another. This
21704
// is NULL unless we actually need a defer stack.
21705
@@ -1181,6 +1187,9 @@
21706
bool results_are_named_ : 1;
21707
// True if this method should not be included in the type descriptor.
21708
bool nointerface_ : 1;
21709
+ // True if this function is a stub method created for an unnamed
21711
+ bool is_unnamed_type_stub_method_ : 1;
21712
// True if this function calls the predeclared recover function.
21713
bool calls_recover_ : 1;
21714
// True if this a thunk built for a function which calls recover.
21715
@@ -1265,9 +1274,9 @@
21716
has_descriptor() const
21717
{ return this->descriptor_ != NULL; }
21719
- // Return a decl for the function given an identifier.
21721
- get_or_make_decl(Gogo*, Named_object*, tree id);
21722
+ // Return a backend representation.
21724
+ get_or_make_decl(Gogo*, Named_object*);
21726
// If there is a descriptor, build it into the backend
21728
@@ -1290,7 +1299,7 @@
21729
// The function descriptor, if any.
21730
Expression* descriptor_;
21731
// The function decl if needed.
21733
+ Bfunction* fndecl_;
21737
@@ -2181,8 +2190,8 @@
21739
get_backend_variable(Gogo*, Named_object* function);
21741
- // Return a tree for the external identifier for this object.
21743
+ // Return the external identifier for this object.
21747
// Return a tree representing this object.
21748
Index: gcc/go/gofrontend/types.h
21749
===================================================================
21750
--- a/src/gcc/go/gofrontend/types.h (.../tags/gcc_4_8_2_release)
21751
+++ b/src/gcc/go/gofrontend/types.h (.../branches/gcc-4_8-branch)
21752
@@ -1138,6 +1138,13 @@
21753
Function_type* equal_fntype, Named_object** hash_fn,
21754
Named_object** equal_fn);
21757
+ write_named_hash(Gogo*, Named_type*, Function_type* hash_fntype,
21758
+ Function_type* equal_fntype);
21761
+ write_named_equal(Gogo*, Named_type*);
21763
// Build a composite literal for the uncommon type information.
21765
uncommon_type_constructor(Gogo*, Type* uncommon_type,
21766
@@ -1717,7 +1724,8 @@
21767
Typed_identifier_list* results, Location location)
21768
: Type(TYPE_FUNCTION),
21769
receiver_(receiver), parameters_(parameters), results_(results),
21770
- location_(location), is_varargs_(false), is_builtin_(false)
21771
+ location_(location), is_varargs_(false), is_builtin_(false),
21775
// Get the receiver.
21776
@@ -1789,6 +1797,12 @@
21778
copy_with_receiver(Type*) const;
21780
+ // Return a copy of this type with the receiver treated as the first
21781
+ // parameter. If WANT_POINTER_RECEIVER is true, the receiver is
21782
+ // forced to be a pointer.
21784
+ copy_with_receiver_as_param(bool want_pointer_receiver) const;
21786
// Return a copy of this type ignoring any receiver and using dummy
21787
// names for all parameters. This is used for thunks for method
21789
@@ -1798,6 +1812,11 @@
21791
make_function_type_descriptor_type();
21793
+ // Return the backend representation of this function type. This is used
21794
+ // as the real type of a backend function declaration or defintion.
21796
+ get_backend_fntype(Gogo*);
21800
do_traverse(Traverse*);
21801
@@ -1851,6 +1870,9 @@
21802
// Whether this is a special builtin function which can not simply
21803
// be called. This is used for len, cap, etc.
21805
+ // The backend representation of this type for backend function
21806
+ // declarations and definitions.
21810
// The type of a pointer.
21811
@@ -1915,7 +1937,7 @@
21814
explicit Struct_field(const Typed_identifier& typed_identifier)
21815
- : typed_identifier_(typed_identifier), tag_(NULL)
21816
+ : typed_identifier_(typed_identifier), tag_(NULL), is_imported_(false)
21820
@@ -1926,6 +1948,10 @@
21822
is_field_name(const std::string& name) const;
21824
+ // Return whether this struct field is an unexported field named NAME.
21826
+ is_unexported_field_name(Gogo*, const std::string& name) const;
21828
// Return whether this struct field is an embedded built-in type.
21830
is_embedded_builtin(Gogo*) const;
21831
@@ -1963,6 +1989,11 @@
21832
set_tag(const std::string& tag)
21833
{ this->tag_ = new std::string(tag); }
21835
+ // Record that this field is defined in an imported struct.
21837
+ set_is_imported()
21838
+ { this->is_imported_ = true; }
21840
// Set the type. This is only used in error cases.
21842
set_type(Type* type)
21843
@@ -1973,6 +2004,8 @@
21844
Typed_identifier typed_identifier_;
21845
// The field tag. This is NULL if the field has no tag.
21847
+ // Whether this field is defined in an imported struct.
21848
+ bool is_imported_;
21851
// A list of struct fields.
21852
Index: gcc/go/gofrontend/parse.cc
21853
===================================================================
21854
--- a/src/gcc/go/gofrontend/parse.cc (.../tags/gcc_4_8_2_release)
21855
+++ b/src/gcc/go/gofrontend/parse.cc (.../branches/gcc-4_8-branch)
21856
@@ -744,6 +744,8 @@
21859
Parse::Names names;
21860
+ if (receiver != NULL)
21861
+ names[receiver->name()] = receiver;
21862
if (params != NULL)
21863
this->check_signature_names(params, &names);
21864
if (results != NULL)
21865
Index: gcc/go/gofrontend/import.h
21866
===================================================================
21867
--- a/src/gcc/go/gofrontend/import.h (.../tags/gcc_4_8_2_release)
21868
+++ b/src/gcc/go/gofrontend/import.h (.../branches/gcc-4_8-branch)
21869
@@ -149,6 +149,11 @@
21871
{ return this->location_; }
21873
+ // Return the package we are importing.
21876
+ { return this->package_; }
21878
// Return the next character.
21881
Index: gcc/go/gofrontend/runtime.cc
21882
===================================================================
21883
--- a/src/gcc/go/gofrontend/runtime.cc (.../tags/gcc_4_8_2_release)
21884
+++ b/src/gcc/go/gofrontend/runtime.cc (.../branches/gcc-4_8-branch)
21887
// Go type float64, C type double.
21889
+ // Go type complex64, C type __complex float.
21891
// Go type complex128, C type __complex double.
21893
// Go type string, C type struct __go_string.
21894
@@ -126,6 +128,10 @@
21895
t = Type::lookup_float_type("float64");
21898
+ case RFT_COMPLEX64:
21899
+ t = Type::lookup_complex_type("complex64");
21902
case RFT_COMPLEX128:
21903
t = Type::lookup_complex_type("complex128");
21905
@@ -216,6 +222,7 @@
21909
+ case RFT_COMPLEX64:
21910
case RFT_COMPLEX128:
21913
Index: gcc/go/gofrontend/expressions.h
21914
===================================================================
21915
--- a/src/gcc/go/gofrontend/expressions.h (.../tags/gcc_4_8_2_release)
21916
+++ b/src/gcc/go/gofrontend/expressions.h (.../branches/gcc-4_8-branch)
21917
@@ -1514,8 +1514,8 @@
21919
{ return this->closure_; }
21921
- // Return a tree for the code for a function.
21923
+ // Return a backend expression for the code of a function.
21924
+ static Bexpression*
21925
get_code_pointer(Gogo*, Named_object* function, Location loc);
21928
Index: gcc/go/gofrontend/gogo-tree.cc
21929
===================================================================
21930
--- a/src/gcc/go/gofrontend/gogo-tree.cc (.../tags/gcc_4_8_2_release)
21931
+++ b/src/gcc/go/gofrontend/gogo-tree.cc (.../branches/gcc-4_8-branch)
21932
@@ -985,74 +985,6 @@
21936
-// Get a tree for the identifier for a named object.
21939
-Named_object::get_id(Gogo* gogo)
21941
- go_assert(!this->is_variable() && !this->is_result_variable());
21942
- std::string decl_name;
21943
- if (this->is_function_declaration()
21944
- && !this->func_declaration_value()->asm_name().empty())
21945
- decl_name = this->func_declaration_value()->asm_name();
21946
- else if (this->is_type()
21947
- && Linemap::is_predeclared_location(this->type_value()->location()))
21949
- // We don't need the package name for builtin types.
21950
- decl_name = Gogo::unpack_hidden_name(this->name_);
21954
- std::string package_name;
21955
- if (this->package_ == NULL)
21956
- package_name = gogo->package_name();
21958
- package_name = this->package_->package_name();
21960
- // Note that this will be misleading if this is an unexported
21961
- // method generated for an embedded imported type. In that case
21962
- // the unexported method should have the package name of the
21963
- // package from which it is imported, but we are going to give
21964
- // it our package name. Fixing this would require knowing the
21965
- // package name, but we only know the package path. It might be
21966
- // better to use package paths here anyhow. This doesn't affect
21967
- // the assembler code, because we always set that name in
21968
- // Function::get_or_make_decl anyhow. FIXME.
21970
- decl_name = package_name + '.' + Gogo::unpack_hidden_name(this->name_);
21972
- Function_type* fntype;
21973
- if (this->is_function())
21974
- fntype = this->func_value()->type();
21975
- else if (this->is_function_declaration())
21976
- fntype = this->func_declaration_value()->type();
21979
- if (fntype != NULL && fntype->is_method())
21981
- decl_name.push_back('.');
21982
- decl_name.append(fntype->receiver()->type()->mangled_name(gogo));
21985
- if (this->is_type())
21987
- unsigned int index;
21988
- const Named_object* in_function = this->type_value()->in_function(&index);
21989
- if (in_function != NULL)
21991
- decl_name += '$' + Gogo::unpack_hidden_name(in_function->name());
21995
- snprintf(buf, sizeof buf, "%u", index);
21996
- decl_name += '$';
21997
- decl_name += buf;
22001
- return get_identifier_from_string(decl_name);
22004
// Get a tree for a named object.
22007
@@ -1067,11 +999,6 @@
22008
return error_mark_node;
22012
- if (this->classification_ == NAMED_OBJECT_TYPE)
22013
- name = NULL_TREE;
22015
- name = this->get_id(gogo);
22017
switch (this->classification_)
22019
@@ -1099,6 +1026,7 @@
22020
decl = error_mark_node;
22021
else if (INTEGRAL_TYPE_P(TREE_TYPE(expr_tree)))
22023
+ tree name = get_identifier_from_string(this->get_id(gogo));
22024
decl = build_decl(named_constant->location().gcc_location(),
22025
CONST_DECL, name, TREE_TYPE(expr_tree));
22026
DECL_INITIAL(decl) = expr_tree;
22027
@@ -1161,7 +1089,7 @@
22028
case NAMED_OBJECT_FUNC:
22030
Function* func = this->u_.func_value;
22031
- decl = func->get_or_make_decl(gogo, this, name);
22032
+ decl = function_to_tree(func->get_or_make_decl(gogo, this));
22033
if (decl != error_mark_node)
22035
if (func->block() != NULL)
22036
@@ -1286,124 +1214,13 @@
22040
-// Get a tree for a function decl.
22041
+// Get the backend representation.
22044
-Function::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
22046
+Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no)
22048
- if (this->fndecl_ == NULL_TREE)
22049
+ if (this->fndecl_ == NULL)
22051
- tree functype = type_to_tree(this->type_->get_backend(gogo));
22053
- if (functype != error_mark_node)
22055
- // The type of a function comes back as a pointer to a
22056
- // struct whose first field is the function, but we want the
22057
- // real function type for a function declaration.
22058
- go_assert(POINTER_TYPE_P(functype)
22059
- && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE);
22060
- functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype)));
22061
- go_assert(FUNCTION_POINTER_TYPE_P(functype));
22062
- functype = TREE_TYPE(functype);
22065
- if (functype == error_mark_node)
22066
- this->fndecl_ = error_mark_node;
22069
- tree decl = build_decl(this->location().gcc_location(), FUNCTION_DECL,
22072
- this->fndecl_ = decl;
22074
- if (no->package() != NULL)
22076
- else if (this->enclosing_ != NULL || Gogo::is_thunk(no))
22078
- else if (Gogo::unpack_hidden_name(no->name()) == "init"
22079
- && !this->type_->is_method())
22081
- else if (Gogo::unpack_hidden_name(no->name()) == "main"
22082
- && gogo->is_main_package())
22083
- TREE_PUBLIC(decl) = 1;
22084
- // Methods have to be public even if they are hidden because
22085
- // they can be pulled into type descriptors when using
22086
- // anonymous fields.
22087
- else if (!Gogo::is_hidden_name(no->name())
22088
- || this->type_->is_method())
22090
- TREE_PUBLIC(decl) = 1;
22091
- std::string pkgpath = gogo->pkgpath_symbol();
22092
- if (this->type_->is_method()
22093
- && Gogo::is_hidden_name(no->name())
22094
- && Gogo::hidden_name_pkgpath(no->name()) != gogo->pkgpath())
22096
- // This is a method we created for an unexported
22097
- // method of an imported embedded type. We need to
22098
- // use the pkgpath of the imported package to avoid
22099
- // a possible name collision. See bug478 for a test
22101
- pkgpath = Gogo::hidden_name_pkgpath(no->name());
22102
- pkgpath = Gogo::pkgpath_for_symbol(pkgpath);
22105
- std::string asm_name = pkgpath;
22106
- asm_name.append(1, '.');
22107
- asm_name.append(Gogo::unpack_hidden_name(no->name()));
22108
- if (this->type_->is_method())
22110
- asm_name.append(1, '.');
22111
- Type* rtype = this->type_->receiver()->type();
22112
- asm_name.append(rtype->mangled_name(gogo));
22114
- SET_DECL_ASSEMBLER_NAME(decl,
22115
- get_identifier_from_string(asm_name));
22118
- // Why do we have to do this in the frontend?
22119
- tree restype = TREE_TYPE(functype);
22121
- build_decl(this->location().gcc_location(), RESULT_DECL, NULL_TREE,
22123
- DECL_ARTIFICIAL(resdecl) = 1;
22124
- DECL_IGNORED_P(resdecl) = 1;
22125
- DECL_CONTEXT(resdecl) = decl;
22126
- DECL_RESULT(decl) = resdecl;
22128
- // If a function calls the predeclared recover function, we
22129
- // can't inline it, because recover behaves differently in a
22130
- // function passed directly to defer. If this is a recover
22131
- // thunk that we built to test whether a function can be
22132
- // recovered, we can't inline it, because that will mess up
22133
- // our return address comparison.
22134
- if (this->calls_recover_ || this->is_recover_thunk_)
22135
- DECL_UNINLINABLE(decl) = 1;
22137
- // If this is a thunk created to call a function which calls
22138
- // the predeclared recover function, we need to disable
22139
- // stack splitting for the thunk.
22140
- if (this->is_recover_thunk_)
22142
- tree attr = get_identifier("__no_split_stack__");
22143
- DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
22146
- if (this->in_unique_section_)
22147
- resolve_unique_section (decl, 0, 1);
22149
- go_preserve_from_gc(decl);
22152
- return this->fndecl_;
22155
-// Get a tree for a function declaration.
22158
-Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
22160
- if (this->fndecl_ == NULL_TREE)
22162
// Let Go code use an asm declaration to pick up a builtin
22164
if (!this->asm_name_.empty())
22165
@@ -1412,58 +1229,46 @@
22166
builtin_functions.find(this->asm_name_);
22167
if (p != builtin_functions.end())
22169
- this->fndecl_ = p->second;
22170
+ this->fndecl_ = tree_to_function(p->second);
22171
return this->fndecl_;
22175
- tree functype = type_to_tree(this->fntype_->get_backend(gogo));
22176
+ std::string asm_name;
22177
+ if (this->asm_name_.empty())
22179
+ asm_name = (no->package() == NULL
22180
+ ? gogo->pkgpath_symbol()
22181
+ : no->package()->pkgpath_symbol());
22182
+ asm_name.append(1, '.');
22183
+ asm_name.append(Gogo::unpack_hidden_name(no->name()));
22184
+ if (this->fntype_->is_method())
22186
+ asm_name.append(1, '.');
22187
+ Type* rtype = this->fntype_->receiver()->type();
22188
+ asm_name.append(rtype->mangled_name(gogo));
22192
- if (functype != error_mark_node)
22194
- // The type of a function comes back as a pointer to a
22195
- // struct whose first field is the function, but we want the
22196
- // real function type for a function declaration.
22197
- go_assert(POINTER_TYPE_P(functype)
22198
- && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE);
22199
- functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype)));
22200
- go_assert(FUNCTION_POINTER_TYPE_P(functype));
22201
- functype = TREE_TYPE(functype);
22203
+ Btype* functype = this->fntype_->get_backend_fntype(gogo);
22205
+ gogo->backend()->function(functype, no->get_id(gogo), asm_name,
22206
+ true, true, true, false, false,
22207
+ this->location());
22211
- if (functype == error_mark_node)
22212
- decl = error_mark_node;
22215
- decl = build_decl(this->location().gcc_location(), FUNCTION_DECL, id,
22217
- TREE_PUBLIC(decl) = 1;
22218
- DECL_EXTERNAL(decl) = 1;
22220
- if (this->asm_name_.empty())
22222
- std::string asm_name = (no->package() == NULL
22223
- ? gogo->pkgpath_symbol()
22224
- : no->package()->pkgpath_symbol());
22225
- asm_name.append(1, '.');
22226
- asm_name.append(Gogo::unpack_hidden_name(no->name()));
22227
- if (this->fntype_->is_method())
22229
- asm_name.append(1, '.');
22230
- Type* rtype = this->fntype_->receiver()->type();
22231
- asm_name.append(rtype->mangled_name(gogo));
22233
- SET_DECL_ASSEMBLER_NAME(decl,
22234
- get_identifier_from_string(asm_name));
22237
- this->fndecl_ = decl;
22238
- go_preserve_from_gc(decl);
22240
return this->fndecl_;
22243
+// Return the function's decl after it has been built.
22246
+Function::get_decl() const
22248
+ go_assert(this->fndecl_ != NULL);
22249
+ return function_to_tree(this->fndecl_);
22252
// We always pass the receiver to a method as a pointer. If the
22253
// receiver is actually declared as a non-pointer type, then we copy
22254
// the value into a local variable, so that it has the right type. In
22255
@@ -1558,7 +1363,7 @@
22257
Function::build_tree(Gogo* gogo, Named_object* named_function)
22259
- tree fndecl = this->fndecl_;
22260
+ tree fndecl = this->get_decl();
22261
go_assert(fndecl != NULL_TREE);
22263
tree params = NULL_TREE;
22264
@@ -1796,7 +1601,7 @@
22267
set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node,
22268
- DECL_RESULT(this->fndecl_), retval);
22269
+ DECL_RESULT(this->get_decl()), retval);
22270
tree ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR,
22271
void_type_node, set);
22272
append_to_statement_list(ret_stmt, &stmt_list);
22273
@@ -1851,7 +1656,7 @@
22274
retval = this->return_value(gogo, named_function, end_loc,
22276
set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node,
22277
- DECL_RESULT(this->fndecl_), retval);
22278
+ DECL_RESULT(this->get_decl()), retval);
22279
ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR,
22280
void_type_node, set);
22282
@@ -1869,7 +1674,7 @@
22286
-// Return the value to assign to DECL_RESULT(this->fndecl_). This may
22287
+// Return the value to assign to DECL_RESULT(this->get_decl()). This may
22288
// also add statements to STMT_LIST, which need to be executed before
22289
// the assignment. This is used for a return statement with no
22290
// explicit values.
22291
@@ -1902,7 +1707,7 @@
22295
- tree rettype = TREE_TYPE(DECL_RESULT(this->fndecl_));
22296
+ tree rettype = TREE_TYPE(DECL_RESULT(this->get_decl()));
22297
retval = create_tmp_var(rettype, "RESULT");
22298
tree field = TYPE_FIELDS(rettype);
22300
@@ -2323,18 +2128,14 @@
22301
go_assert(m != NULL);
22303
Named_object* no = m->named_object();
22305
- tree fnid = no->get_id(this);
22309
if (no->is_function())
22310
- fndecl = no->func_value()->get_or_make_decl(this, no, fnid);
22311
+ bf = no->func_value()->get_or_make_decl(this, no);
22312
else if (no->is_function_declaration())
22313
- fndecl = no->func_declaration_value()->get_or_make_decl(this, no,
22315
+ bf = no->func_declaration_value()->get_or_make_decl(this, no);
22318
- fndecl = build_fold_addr_expr(fndecl);
22319
+ tree fndecl = build_fold_addr_expr(function_to_tree(bf));
22321
elt = pointers->quick_push(empty);
22322
elt->index = size_int(i);
22323
@@ -2353,10 +2154,11 @@
22324
TREE_CONSTANT(decl) = 1;
22325
DECL_INITIAL(decl) = constructor;
22327
- // If the interface type has hidden methods, then this is the only
22328
- // definition of the table. Otherwise it is a comdat table which
22329
- // may be defined in multiple packages.
22330
- if (has_hidden_methods)
22331
+ // If the interface type has hidden methods, and the table is for a
22332
+ // named type, then this is the only definition of the table.
22333
+ // Otherwise it is a comdat table which may be defined in multiple
22335
+ if (has_hidden_methods && type->named_type() != NULL)
22336
TREE_PUBLIC(decl) = 1;
22339
Index: gcc/go/gofrontend/lex.cc
22340
===================================================================
22341
--- a/src/gcc/go/gofrontend/lex.cc (.../tags/gcc_4_8_2_release)
22342
+++ b/src/gcc/go/gofrontend/lex.cc (.../branches/gcc-4_8-branch)
22343
@@ -873,7 +873,28 @@
22344
&& (cc < 'a' || cc > 'z')
22346
&& (cc < '0' || cc > '9'))
22349
+ // Check for an invalid character here, as we get better
22350
+ // error behaviour if we swallow them as part of the
22351
+ // identifier we are building.
22352
+ if ((cc >= ' ' && cc < 0x7f)
22358
+ this->lineoff_ = p - this->linebuf_;
22359
+ error_at(this->location(),
22360
+ "invalid character 0x%x in identifier",
22362
+ if (!has_non_ascii_char)
22364
+ buf.assign(pstart, p - pstart);
22365
+ has_non_ascii_char = true;
22367
+ if (!Lex::is_invalid_identifier(buf))
22368
+ buf.append("$INVALID$");
22373
Index: gcc/go/gofrontend/backend.h
22374
===================================================================
22375
--- a/src/gcc/go/gofrontend/backend.h (.../tags/gcc_4_8_2_release)
22376
+++ b/src/gcc/go/gofrontend/backend.h (.../branches/gcc-4_8-branch)
22378
// The backend representation of a statement.
22381
-// The backend representation of a function definition.
22382
+// The backend representation of a function definition or declaration.
22385
// The backend representation of a block.
22386
@@ -266,6 +266,11 @@
22387
virtual Bexpression*
22388
convert_expression(Btype* type, Bexpression* expr, Location) = 0;
22390
+ // Create an expression for the address of a function. This is used to
22391
+ // get the address of the code for a function.
22392
+ virtual Bexpression*
22393
+ function_code_expression(Bfunction*, Location) = 0;
22397
// Create an error statement. This is used for cases which should
22398
@@ -498,6 +503,32 @@
22400
virtual Bexpression*
22401
label_address(Blabel*, Location) = 0;
22405
+ // Create an error function. This is used for cases which should
22406
+ // not occur in a correct program, in order to keep the compilation
22407
+ // going without crashing.
22408
+ virtual Bfunction*
22409
+ error_function() = 0;
22411
+ // Declare or define a function of FNTYPE.
22412
+ // NAME is the Go name of the function. ASM_NAME, if not the empty string, is
22413
+ // the name that should be used in the symbol table; this will be non-empty if
22414
+ // a magic extern comment is used.
22415
+ // IS_VISIBLE is true if this function should be visible outside of the
22416
+ // current compilation unit. IS_DECLARATION is true if this is a function
22417
+ // declaration rather than a definition; the function definition will be in
22418
+ // another compilation unit.
22419
+ // IS_INLINABLE is true if the function can be inlined.
22420
+ // DISABLE_SPLIT_STACK is true if this function may not split the stack; this
22421
+ // is used for the implementation of recover.
22422
+ // IN_UNIQUE_SECTION is true if this function should be put into a unique
22423
+ // location if possible; this is used for field tracking.
22424
+ virtual Bfunction*
22425
+ function(Btype* fntype, const std::string& name, const std::string& asm_name,
22426
+ bool is_visible, bool is_declaration, bool is_inlinable,
22427
+ bool disable_split_stack, bool in_unique_section, Location) = 0;
22430
// The backend interface has to define this function.
22431
@@ -517,5 +548,6 @@
22432
extern tree stat_to_tree(Bstatement*);
22433
extern tree block_to_tree(Bblock*);
22434
extern tree var_to_tree(Bvariable*);
22435
+extern tree function_to_tree(Bfunction*);
22437
#endif // !defined(GO_BACKEND_H)
22438
Index: gcc/go/gofrontend/types.cc
22439
===================================================================
22440
--- a/src/gcc/go/gofrontend/types.cc (.../tags/gcc_4_8_2_release)
22441
+++ b/src/gcc/go/gofrontend/types.cc (.../branches/gcc-4_8-branch)
22442
@@ -1834,7 +1834,9 @@
22444
gogo->start_block(bloc);
22446
- if (this->struct_type() != NULL)
22447
+ if (name != NULL && name->real_type()->named_type() != NULL)
22448
+ this->write_named_hash(gogo, name, hash_fntype, equal_fntype);
22449
+ else if (this->struct_type() != NULL)
22450
this->struct_type()->write_hash_function(gogo, name, hash_fntype,
22452
else if (this->array_type() != NULL)
22453
@@ -1852,7 +1854,9 @@
22455
gogo->start_block(bloc);
22457
- if (this->struct_type() != NULL)
22458
+ if (name != NULL && name->real_type()->named_type() != NULL)
22459
+ this->write_named_equal(gogo, name);
22460
+ else if (this->struct_type() != NULL)
22461
this->struct_type()->write_equal_function(gogo, name);
22462
else if (this->array_type() != NULL)
22463
this->array_type()->write_equal_function(gogo, name);
22464
@@ -1865,6 +1869,100 @@
22465
gogo->finish_function(bloc);
22468
+// Write a hash function that simply calls the hash function for a
22469
+// named type. This is used when one named type is defined as
22470
+// another. This ensures that this case works when the other named
22471
+// type is defined in another package and relies on calling hash
22472
+// functions defined only in that package.
22475
+Type::write_named_hash(Gogo* gogo, Named_type* name,
22476
+ Function_type* hash_fntype, Function_type* equal_fntype)
22478
+ Location bloc = Linemap::predeclared_location();
22480
+ Named_type* base_type = name->real_type()->named_type();
22481
+ go_assert(base_type != NULL);
22483
+ // The pointer to the type we are going to hash. This is an
22484
+ // unsafe.Pointer.
22485
+ Named_object* key_arg = gogo->lookup("key", NULL);
22486
+ go_assert(key_arg != NULL);
22488
+ // The size of the type we are going to hash.
22489
+ Named_object* keysz_arg = gogo->lookup("key_size", NULL);
22490
+ go_assert(keysz_arg != NULL);
22492
+ Named_object* hash_fn;
22493
+ Named_object* equal_fn;
22494
+ name->real_type()->type_functions(gogo, base_type, hash_fntype, equal_fntype,
22495
+ &hash_fn, &equal_fn);
22497
+ // Call the hash function for the base type.
22498
+ Expression* key_ref = Expression::make_var_reference(key_arg, bloc);
22499
+ Expression* keysz_ref = Expression::make_var_reference(keysz_arg, bloc);
22500
+ Expression_list* args = new Expression_list();
22501
+ args->push_back(key_ref);
22502
+ args->push_back(keysz_ref);
22503
+ Expression* func = Expression::make_func_reference(hash_fn, NULL, bloc);
22504
+ Expression* call = Expression::make_call(func, args, false, bloc);
22506
+ // Return the hash of the base type.
22507
+ Expression_list* vals = new Expression_list();
22508
+ vals->push_back(call);
22509
+ Statement* s = Statement::make_return_statement(vals, bloc);
22510
+ gogo->add_statement(s);
22513
+// Write an equality function that simply calls the equality function
22514
+// for a named type. This is used when one named type is defined as
22515
+// another. This ensures that this case works when the other named
22516
+// type is defined in another package and relies on calling equality
22517
+// functions defined only in that package.
22520
+Type::write_named_equal(Gogo* gogo, Named_type* name)
22522
+ Location bloc = Linemap::predeclared_location();
22524
+ // The pointers to the types we are going to compare. These have
22525
+ // type unsafe.Pointer.
22526
+ Named_object* key1_arg = gogo->lookup("key1", NULL);
22527
+ Named_object* key2_arg = gogo->lookup("key2", NULL);
22528
+ go_assert(key1_arg != NULL && key2_arg != NULL);
22530
+ Named_type* base_type = name->real_type()->named_type();
22531
+ go_assert(base_type != NULL);
22533
+ // Build temporaries with the base type.
22534
+ Type* pt = Type::make_pointer_type(base_type);
22536
+ Expression* ref = Expression::make_var_reference(key1_arg, bloc);
22537
+ ref = Expression::make_cast(pt, ref, bloc);
22538
+ Temporary_statement* p1 = Statement::make_temporary(pt, ref, bloc);
22539
+ gogo->add_statement(p1);
22541
+ ref = Expression::make_var_reference(key2_arg, bloc);
22542
+ ref = Expression::make_cast(pt, ref, bloc);
22543
+ Temporary_statement* p2 = Statement::make_temporary(pt, ref, bloc);
22544
+ gogo->add_statement(p2);
22546
+ // Compare the values for equality.
22547
+ Expression* t1 = Expression::make_temporary_reference(p1, bloc);
22548
+ t1 = Expression::make_unary(OPERATOR_MULT, t1, bloc);
22550
+ Expression* t2 = Expression::make_temporary_reference(p2, bloc);
22551
+ t2 = Expression::make_unary(OPERATOR_MULT, t2, bloc);
22553
+ Expression* cond = Expression::make_binary(OPERATOR_EQEQ, t1, t2, bloc);
22555
+ // Return the equality comparison.
22556
+ Expression_list* vals = new Expression_list();
22557
+ vals->push_back(cond);
22558
+ Statement* s = Statement::make_return_statement(vals, bloc);
22559
+ gogo->add_statement(s);
22562
// Return a composite literal for the type descriptor for a plain type
22563
// of kind RUNTIME_TYPE_KIND named NAME.
22565
@@ -2164,26 +2262,9 @@
22568
go_assert(p->is_field_name("typ"));
22569
- if (!only_value_methods && m->is_value_method())
22571
- // This is a value method on a pointer type. Change the type of
22572
- // the method to use a pointer receiver. The implementation
22573
- // always uses a pointer receiver anyhow.
22574
- Type* rtype = mtype->receiver()->type();
22575
- Type* prtype = Type::make_pointer_type(rtype);
22576
- Typed_identifier* receiver =
22577
- new Typed_identifier(mtype->receiver()->name(), prtype,
22578
- mtype->receiver()->location());
22579
- mtype = Type::make_function_type(receiver,
22580
- (mtype->parameters() == NULL
22582
- : mtype->parameters()->copy()),
22583
- (mtype->results() == NULL
22585
- : mtype->results()->copy()),
22586
- mtype->location());
22588
- vals->push_back(Expression::make_type_descriptor(mtype, bloc));
22589
+ bool want_pointer_receiver = !only_value_methods && m->is_value_method();
22590
+ nonmethod_type = mtype->copy_with_receiver_as_param(want_pointer_receiver);
22591
+ vals->push_back(Expression::make_type_descriptor(nonmethod_type, bloc));
22594
go_assert(p->is_field_name("tfn"));
22595
@@ -3383,6 +3464,68 @@
22596
// Get the backend representation for a function type.
22599
+Function_type::get_backend_fntype(Gogo* gogo)
22601
+ if (this->fnbtype_ == NULL)
22603
+ Backend::Btyped_identifier breceiver;
22604
+ if (this->receiver_ != NULL)
22606
+ breceiver.name = Gogo::unpack_hidden_name(this->receiver_->name());
22608
+ // We always pass the address of the receiver parameter, in
22609
+ // order to make interface calls work with unknown types.
22610
+ Type* rtype = this->receiver_->type();
22611
+ if (rtype->points_to() == NULL)
22612
+ rtype = Type::make_pointer_type(rtype);
22613
+ breceiver.btype = rtype->get_backend(gogo);
22614
+ breceiver.location = this->receiver_->location();
22617
+ std::vector<Backend::Btyped_identifier> bparameters;
22618
+ if (this->parameters_ != NULL)
22620
+ bparameters.resize(this->parameters_->size());
22622
+ for (Typed_identifier_list::const_iterator p =
22623
+ this->parameters_->begin(); p != this->parameters_->end();
22626
+ bparameters[i].name = Gogo::unpack_hidden_name(p->name());
22627
+ bparameters[i].btype = p->type()->get_backend(gogo);
22628
+ bparameters[i].location = p->location();
22630
+ go_assert(i == bparameters.size());
22633
+ std::vector<Backend::Btyped_identifier> bresults;
22634
+ if (this->results_ != NULL)
22636
+ bresults.resize(this->results_->size());
22638
+ for (Typed_identifier_list::const_iterator p =
22639
+ this->results_->begin(); p != this->results_->end();
22642
+ bresults[i].name = Gogo::unpack_hidden_name(p->name());
22643
+ bresults[i].btype = p->type()->get_backend(gogo);
22644
+ bresults[i].location = p->location();
22646
+ go_assert(i == bresults.size());
22649
+ this->fnbtype_ = gogo->backend()->function_type(breceiver, bparameters,
22651
+ this->location());
22655
+ return this->fnbtype_;
22658
+// Get the backend representation for a Go function type.
22661
Function_type::do_get_backend(Gogo* gogo)
22663
// When we do anything with a function value other than call it, it
22664
@@ -3395,57 +3538,9 @@
22665
gogo->backend()->placeholder_struct_type("__go_descriptor", loc);
22666
Btype* ptr_struct_type = gogo->backend()->pointer_type(struct_type);
22668
- Backend::Btyped_identifier breceiver;
22669
- if (this->receiver_ != NULL)
22671
- breceiver.name = Gogo::unpack_hidden_name(this->receiver_->name());
22673
- // We always pass the address of the receiver parameter, in
22674
- // order to make interface calls work with unknown types.
22675
- Type* rtype = this->receiver_->type();
22676
- if (rtype->points_to() == NULL)
22677
- rtype = Type::make_pointer_type(rtype);
22678
- breceiver.btype = rtype->get_backend(gogo);
22679
- breceiver.location = this->receiver_->location();
22682
- std::vector<Backend::Btyped_identifier> bparameters;
22683
- if (this->parameters_ != NULL)
22685
- bparameters.resize(this->parameters_->size());
22687
- for (Typed_identifier_list::const_iterator p = this->parameters_->begin();
22688
- p != this->parameters_->end();
22691
- bparameters[i].name = Gogo::unpack_hidden_name(p->name());
22692
- bparameters[i].btype = p->type()->get_backend(gogo);
22693
- bparameters[i].location = p->location();
22695
- go_assert(i == bparameters.size());
22698
- std::vector<Backend::Btyped_identifier> bresults;
22699
- if (this->results_ != NULL)
22701
- bresults.resize(this->results_->size());
22703
- for (Typed_identifier_list::const_iterator p = this->results_->begin();
22704
- p != this->results_->end();
22707
- bresults[i].name = Gogo::unpack_hidden_name(p->name());
22708
- bresults[i].btype = p->type()->get_backend(gogo);
22709
- bresults[i].location = p->location();
22711
- go_assert(i == bresults.size());
22714
- Btype* fntype = gogo->backend()->function_type(breceiver, bparameters,
22716
std::vector<Backend::Btyped_identifier> fields(1);
22717
fields[0].name = "code";
22718
- fields[0].btype = fntype;
22719
+ fields[0].btype = this->get_backend_fntype(gogo);
22720
fields[0].location = loc;
22721
if (!gogo->backend()->set_placeholder_struct_type(struct_type, fields))
22722
return gogo->backend()->error_type();
22723
@@ -3821,6 +3916,32 @@
22727
+// Make a copy of a function type with the receiver as the first
22731
+Function_type::copy_with_receiver_as_param(bool want_pointer_receiver) const
22733
+ go_assert(this->is_method());
22734
+ Typed_identifier_list* new_params = new Typed_identifier_list();
22735
+ Type* rtype = this->receiver_->type();
22736
+ if (want_pointer_receiver)
22737
+ rtype = Type::make_pointer_type(rtype);
22738
+ Typed_identifier receiver(this->receiver_->name(), rtype,
22739
+ this->receiver_->location());
22740
+ new_params->push_back(receiver);
22741
+ const Typed_identifier_list* orig_params = this->parameters_;
22742
+ if (orig_params != NULL && !orig_params->empty())
22744
+ for (Typed_identifier_list::const_iterator p = orig_params->begin();
22745
+ p != orig_params->end();
22747
+ new_params->push_back(*p);
22749
+ return Type::make_function_type(NULL, new_params, this->results_,
22750
+ this->location_);
22753
// Make a copy of a function type ignoring any receiver and adding a
22754
// closure parameter.
22756
@@ -4195,7 +4316,8 @@
22758
// This is a horrible hack caused by the fact that we don't pack
22759
// the names of builtin types. FIXME.
22761
+ if (!this->is_imported_
22763
&& nt->is_builtin()
22764
&& nt->name() == Gogo::unpack_hidden_name(name))
22766
@@ -4204,6 +4326,36 @@
22770
+// Return whether this field is an unexported field named NAME.
22773
+Struct_field::is_unexported_field_name(Gogo* gogo,
22774
+ const std::string& name) const
22776
+ const std::string& field_name(this->field_name());
22777
+ if (Gogo::is_hidden_name(field_name)
22778
+ && name == Gogo::unpack_hidden_name(field_name)
22779
+ && gogo->pack_hidden_name(name, false) != field_name)
22782
+ // Check for the name of a builtin type. This is like the test in
22783
+ // is_field_name, only there we return false if this->is_imported_,
22784
+ // and here we return true.
22785
+ if (this->is_imported_ && this->is_anonymous())
22787
+ Type* t = this->typed_identifier_.type();
22788
+ if (t->points_to() != NULL)
22789
+ t = t->points_to();
22790
+ Named_type* nt = t->named_type();
22792
+ && nt->is_builtin()
22793
+ && nt->name() == Gogo::unpack_hidden_name(name))
22800
// Return whether this field is an embedded built-in type.
22803
@@ -4264,13 +4416,8 @@
22806
Type* t = p->type();
22807
- if (t->is_undefined())
22808
+ if (p->is_anonymous())
22810
- error_at(p->location(), "struct field type is incomplete");
22811
- p->set_type(Type::make_error_type());
22813
- else if (p->is_anonymous())
22815
if (t->named_type() != NULL && t->points_to() != NULL)
22817
error_at(p->location(), "embedded type may not be a pointer");
22818
@@ -4641,13 +4788,8 @@
22819
for (Struct_field_list::const_iterator pf = fields->begin();
22820
pf != fields->end();
22823
- const std::string& field_name(pf->field_name());
22824
- if (Gogo::is_hidden_name(field_name)
22825
- && name == Gogo::unpack_hidden_name(field_name)
22826
- && gogo->pack_hidden_name(name, false) != field_name)
22829
+ if (pf->is_unexported_field_name(gogo, name))
22834
@@ -5250,6 +5392,7 @@
22835
Type* ftype = imp->read_type();
22837
Struct_field sf(Typed_identifier(name, ftype, imp->location()));
22838
+ sf.set_is_imported();
22840
if (imp->peek_char() == ' ')
22842
@@ -9022,6 +9165,8 @@
22843
fntype->is_varargs(), location);
22844
gogo->finish_function(fntype->location());
22846
+ if (type->named_type() == NULL && stub->is_function())
22847
+ stub->func_value()->set_is_unnamed_type_stub_method();
22848
if (m->nointerface() && stub->is_function())
22849
stub->func_value()->set_nointerface();
22851
@@ -9289,7 +9434,9 @@
22854
bool is_unexported;
22855
- if (!Gogo::is_hidden_name(name))
22856
+ // The test for 'a' and 'z' is to handle builtin names,
22857
+ // which are not hidden.
22858
+ if (!Gogo::is_hidden_name(name) && (name[0] < 'a' || name[0] > 'z'))
22859
is_unexported = false;
22862
Index: gcc/go/gofrontend/expressions.cc
22863
===================================================================
22864
--- a/src/gcc/go/gofrontend/expressions.cc (.../tags/gcc_4_8_2_release)
22865
+++ b/src/gcc/go/gofrontend/expressions.cc (.../branches/gcc-4_8-branch)
22866
@@ -1219,7 +1219,7 @@
22868
// Get the tree for the code of a function expression.
22872
Func_expression::get_code_pointer(Gogo* gogo, Named_object* no, Location loc)
22874
Function_type* fntype;
22875
@@ -1237,25 +1237,18 @@
22877
"invalid use of special builtin function %qs; must be called",
22878
no->message_name().c_str());
22879
- return error_mark_node;
22880
+ return gogo->backend()->error_expression();
22883
- tree id = no->get_id(gogo);
22884
- if (id == error_mark_node)
22885
- return error_mark_node;
22888
+ Bfunction* fndecl;
22889
if (no->is_function())
22890
- fndecl = no->func_value()->get_or_make_decl(gogo, no, id);
22891
+ fndecl = no->func_value()->get_or_make_decl(gogo, no);
22892
else if (no->is_function_declaration())
22893
- fndecl = no->func_declaration_value()->get_or_make_decl(gogo, no, id);
22894
+ fndecl = no->func_declaration_value()->get_or_make_decl(gogo, no);
22898
- if (fndecl == error_mark_node)
22899
- return error_mark_node;
22901
- return build_fold_addr_expr_loc(loc.gcc_location(), fndecl);
22902
+ return gogo->backend()->function_code_expression(fndecl, loc);
22905
// Get the tree for a function expression. This is used when we take
22906
@@ -1492,8 +1485,10 @@
22908
Func_code_reference_expression::do_get_tree(Translate_context* context)
22910
- return Func_expression::get_code_pointer(context->gogo(), this->function_,
22911
- this->location());
22912
+ Bexpression* ret =
22913
+ Func_expression::get_code_pointer(context->gogo(), this->function_,
22914
+ this->location());
22915
+ return expr_to_tree(ret);
22918
// Make a reference to the code of a function.
22919
@@ -3055,8 +3050,7 @@
22920
do_lower(Gogo*, Named_object*, Statement_inserter*, int);
22923
- do_is_constant() const
22924
- { return this->expr_->is_constant(); }
22925
+ do_is_constant() const;
22928
do_numeric_constant_value(Numeric_constant*) const;
22929
@@ -3198,6 +3192,27 @@
22933
+// Return whether a type conversion is a constant.
22936
+Type_conversion_expression::do_is_constant() const
22938
+ if (!this->expr_->is_constant())
22941
+ // A conversion to a type that may not be used as a constant is not
22942
+ // a constant. For example, []byte(nil).
22943
+ Type* type = this->type_;
22944
+ if (type->integer_type() == NULL
22945
+ && type->float_type() == NULL
22946
+ && type->complex_type() == NULL
22947
+ && !type->is_boolean_type()
22948
+ && !type->is_string_type())
22954
// Return the constant numeric value if there is one.
22957
@@ -5586,6 +5601,15 @@
22958
subcontext.type = NULL;
22961
+ if (this->op_ == OPERATOR_ANDAND || this->op_ == OPERATOR_OROR)
22963
+ // For a logical operation, the context does not determine the
22964
+ // types of the operands. The operands must be some boolean
22965
+ // type but if the context has a boolean type they do not
22966
+ // inherit it. See http://golang.org/issue/3924.
22967
+ subcontext.type = NULL;
22970
// Set the context for the left hand operand.
22973
@@ -5967,6 +5991,43 @@
22977
+ // For complex division Go wants slightly different results than the
22978
+ // GCC library provides, so we have our own runtime routine.
22979
+ if (this->op_ == OPERATOR_DIV && this->left_->type()->complex_type() != NULL)
22981
+ const char *name;
22984
+ static tree complex64_div_decl;
22985
+ static tree complex128_div_decl;
22986
+ switch (this->left_->type()->complex_type()->bits())
22989
+ name = "__go_complex64_div";
22990
+ pdecl = &complex64_div_decl;
22991
+ ctype = Type::lookup_complex_type("complex64");
22994
+ name = "__go_complex128_div";
22995
+ pdecl = &complex128_div_decl;
22996
+ ctype = Type::lookup_complex_type("complex128");
22999
+ go_unreachable();
23001
+ Btype* cbtype = ctype->get_backend(gogo);
23002
+ tree ctype_tree = type_to_tree(cbtype);
23003
+ return Gogo::call_builtin(pdecl,
23004
+ this->location(),
23009
+ fold_convert_loc(gccloc, ctype_tree, left),
23011
+ fold_convert_loc(gccloc, ctype_tree, right));
23014
tree compute_type = excess_precision_type(type);
23015
if (compute_type != NULL_TREE)
23017
@@ -7191,6 +7252,15 @@
23018
if (this->code_ == BUILTIN_OFFSETOF)
23020
Expression* arg = this->one_arg();
23022
+ if (arg->bound_method_expression() != NULL
23023
+ || arg->interface_field_reference_expression() != NULL)
23025
+ this->report_error(_("invalid use of method value as argument "
23030
Field_reference_expression* farg = arg->field_reference_expression();
23031
while (farg != NULL)
23033
@@ -7200,7 +7270,8 @@
23034
// it must not be reached through pointer indirections.
23035
if (farg->expr()->deref() != farg->expr())
23037
- this->report_error(_("argument of Offsetof implies indirection of an embedded field"));
23038
+ this->report_error(_("argument of Offsetof implies "
23039
+ "indirection of an embedded field"));
23042
// Go up until we reach the original base.
23043
@@ -7476,7 +7547,7 @@
23044
switch (nc.to_unsigned_long(&v))
23046
case Numeric_constant::NC_UL_VALID:
23049
case Numeric_constant::NC_UL_NOTINT:
23050
error_at(e->location(), "non-integer %s argument to make",
23051
is_length ? "len" : "cap");
23052
@@ -7488,8 +7559,23 @@
23053
case Numeric_constant::NC_UL_BIG:
23054
// We don't want to give a compile-time error for a 64-bit
23055
// value on a 32-bit target.
23061
+ if (!nc.to_int(&val))
23062
+ go_unreachable();
23063
+ int bits = mpz_sizeinbase(val, 2);
23065
+ Type* int_type = Type::lookup_integer_type("int");
23066
+ if (bits >= int_type->integer_type()->bits())
23068
+ error_at(e->location(), "%s argument too large for make",
23069
+ is_length ? "len" : "cap");
23076
if (e->type()->integer_type() != NULL)
23077
@@ -7595,6 +7681,8 @@
23079
Builtin_call_expression::do_is_constant() const
23081
+ if (this->is_error_expression())
23083
switch (this->code_)
23086
@@ -9744,15 +9832,9 @@
23089
tree fntype_tree = type_to_tree(fntype->get_backend(gogo));
23090
- if (fntype_tree == error_mark_node)
23091
+ tree fnfield_type = type_to_tree(fntype->get_backend_fntype(gogo));
23092
+ if (fntype_tree == error_mark_node || fnfield_type == error_mark_node)
23093
return error_mark_node;
23094
- go_assert(POINTER_TYPE_P(fntype_tree));
23095
- if (TREE_TYPE(fntype_tree) == error_mark_node)
23096
- return error_mark_node;
23097
- go_assert(TREE_CODE(TREE_TYPE(fntype_tree)) == RECORD_TYPE);
23098
- tree fnfield_type = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(fntype_tree)));
23099
- if (fnfield_type == error_mark_node)
23100
- return error_mark_node;
23101
go_assert(FUNCTION_POINTER_TYPE_P(fnfield_type));
23102
tree rettype = TREE_TYPE(TREE_TYPE(fnfield_type));
23103
if (rettype == error_mark_node)
23104
@@ -9763,7 +9845,7 @@
23107
Named_object* no = func->named_object();
23108
- fn = Func_expression::get_code_pointer(gogo, no, location);
23109
+ fn = expr_to_tree(Func_expression::get_code_pointer(gogo, no, location));
23111
closure_tree = NULL_TREE;
23113
@@ -10817,11 +10899,20 @@
23115
String_index_expression::do_check_types(Gogo*)
23117
- if (this->start_->type()->integer_type() == NULL)
23118
+ Numeric_constant nc;
23120
+ if (this->start_->type()->integer_type() == NULL
23121
+ && !this->start_->type()->is_error()
23122
+ && (!this->start_->numeric_constant_value(&nc)
23123
+ || nc.to_unsigned_long(&v) == Numeric_constant::NC_UL_NOTINT))
23124
this->report_error(_("index must be integer"));
23125
if (this->end_ != NULL
23126
&& this->end_->type()->integer_type() == NULL
23127
- && !this->end_->is_nil_expression())
23128
+ && !this->end_->type()->is_error()
23129
+ && !this->end_->is_nil_expression()
23130
+ && !this->end_->is_error_expression()
23131
+ && (!this->end_->numeric_constant_value(&nc)
23132
+ || nc.to_unsigned_long(&v) == Numeric_constant::NC_UL_NOTINT))
23133
this->report_error(_("slice end must be integer"));
23137
===================================================================
23138
--- a/src/gcc/recog.c (.../tags/gcc_4_8_2_release)
23139
+++ b/src/gcc/recog.c (.../branches/gcc-4_8-branch)
23140
@@ -3061,6 +3061,9 @@
23144
+/* Regno offset to be used in the register search. */
23145
+static int search_ofs;
23147
/* Try to find a hard register of mode MODE, matching the register class in
23148
CLASS_STR, which is available at the beginning of insn CURRENT_INSN and
23149
remains available until the end of LAST_INSN. LAST_INSN may be NULL_RTX,
23150
@@ -3076,7 +3079,6 @@
23151
peep2_find_free_register (int from, int to, const char *class_str,
23152
enum machine_mode mode, HARD_REG_SET *reg_set)
23154
- static int search_ofs;
23158
@@ -3541,6 +3543,7 @@
23159
/* Initialize the regsets we're going to use. */
23160
for (i = 0; i < MAX_INSNS_PER_PEEP2 + 1; ++i)
23161
peep2_insn_data[i].live_before = BITMAP_ALLOC (®_obstack);
23163
live = BITMAP_ALLOC (®_obstack);
23165
FOR_EACH_BB_REVERSE (bb)
23166
Index: gcc/ada/indepsw-darwin.adb
23167
===================================================================
23168
--- a/src/gcc/ada/indepsw-darwin.adb (.../tags/gcc_4_8_2_release)
23169
+++ b/src/gcc/ada/indepsw-darwin.adb (.../branches/gcc-4_8-branch)
23171
+------------------------------------------------------------------------------
23173
+-- GNAT COMPILER COMPONENTS --
23175
+-- I N D E P S W --
23178
+-- (Darwin version) --
23180
+-- Copyright (C) 2013, Free Software Foundation, Inc. --
23182
+-- GNAT is free software; you can redistribute it and/or modify it under --
23183
+-- terms of the GNU General Public License as published by the Free Soft- --
23184
+-- ware Foundation; either version 3, or (at your option) any later ver- --
23185
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
23186
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
23187
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
23189
+-- As a special exception under Section 7 of GPL version 3, you are granted --
23190
+-- additional permissions described in the GCC Runtime Library Exception, --
23191
+-- version 3.1, as published by the Free Software Foundation. --
23193
+-- You should have received a copy of the GNU General Public License and --
23194
+-- a copy of the GCC Runtime Library Exception along with this program; --
23195
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
23196
+-- <http://www.gnu.org/licenses/>. --
23198
+-- GNAT was originally developed by the GNAT team at New York University. --
23199
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
23201
+------------------------------------------------------------------------------
23203
+-- This is the Darwin version
23205
+package body Indepsw is
23207
+ Map_Switch : aliased constant String := "-Wl,-map,";
23213
+ procedure Convert
23214
+ (Switch : Switch_Kind;
23215
+ Argument : String;
23216
+ To : out String_List_Access)
23221
+ To := new Argument_List'(1 => new String'(Map_Switch & Argument));
23225
+ ------------------
23226
+ -- Is_Supported --
23227
+ ------------------
23229
+ function Is_Supported (Switch : Switch_Kind) return Boolean is
23235
+ end Is_Supported;
23238
Index: gcc/ada/ChangeLog
23239
===================================================================
23240
--- a/src/gcc/ada/ChangeLog (.../tags/gcc_4_8_2_release)
23241
+++ b/src/gcc/ada/ChangeLog (.../branches/gcc-4_8-branch)
23243
+2014-03-13 Eric Botcazou <ebotcazou@adacore.com>
23246
+ * back_end.ads (Register_Type_Proc): Add 'precision' parameter.
23247
+ * cstand.adb (Register_Float_Type): Add 'precision' parameter and use
23248
+ it to set the RM size. Use directly 'size' for the Esize.
23249
+ * gcc-interface/gigi.h (enumerate_modes): Add integer parameter.
23250
+ * gcc-interface/misc.c (enumerate_modes): Likewise. Do not register
23251
+ types for vector modes, pass the size in addition to the precision.
23253
+2014-01-12 Eric Botcazou <ebotcazou@adacore.com>
23256
+ * gcc-interface/cuintp.c (build_cst_from_int): Use 32-bit integer type
23257
+ as intermediate type.
23258
+ (UI_To_gnu): Likewise.
23260
+2013-12-12 Eric Botcazou <ebotcazou@adacore.com>
23261
+ Iain Sandoe <iain@codesourcery.com>
23264
+ * gcc-interface/Make-lang.in (ada/doctools/xgnatugn): Use gnatmake.
23265
+ * gcc-interface/Makefile.in (GCC_LINK): Add LDFLAGS.
23266
+ (../../gnatmake): Remove LDFLAGS.
23267
+ (../../gnatlink): Likewise.
23269
+2013-12-04 Eric Botcazou <ebotcazou@adacore.com>
23272
+ * indepsw-darwin.adb: New file.
23274
+2013-10-19 Eric Botcazou <ebotcazou@adacore.com>
23276
+ * gcc-interface/utils.c (scale_by_factor_of): New function.
23277
+ (rest_of_record_type_compilation): Use scale_by_factor_of in order to
23278
+ scale the original offset for both rounding cases; in the second case,
23279
+ take into accout the addend to compute the alignment. Tidy up.
23281
+2013-10-19 Eric Botcazou <ebotcazou@adacore.com>
23283
+ * gcc-interface/utils.c (gnat_set_type_context): New function.
23284
+ (gnat_pushdecl): Use it to set the context of the type.
23286
2013-10-16 Release Manager
23288
* GCC 4.8.2 released.
23289
Index: gcc/ada/cstand.adb
23290
===================================================================
23291
--- a/src/gcc/ada/cstand.adb (.../tags/gcc_4_8_2_release)
23292
+++ b/src/gcc/ada/cstand.adb (.../branches/gcc-4_8-branch)
23293
@@ -151,6 +151,7 @@
23294
Complex : Boolean; -- True iff type has real and imaginary parts
23295
Count : Natural; -- Number of elements in vector, 0 otherwise
23296
Float_Rep : Float_Rep_Kind; -- Representation used for fpt type
23297
+ Precision : Positive; -- Precision of representation in bits
23298
Size : Positive; -- Size of representation in bits
23299
Alignment : Natural); -- Required alignment in bits
23300
pragma Convention (C, Register_Float_Type);
23301
@@ -2014,6 +2015,7 @@
23304
Float_Rep : Float_Rep_Kind;
23305
+ Precision : Positive;
23307
Alignment : Natural)
23309
@@ -2063,14 +2065,25 @@
23312
Write_Str ("mod 2**");
23313
- Write_Int (Int (Size / Positive'Max (1, Count)));
23314
+ Write_Int (Int (Precision / Positive'Max (1, Count)));
23318
- Write_Str ("for " & T & "'Size use ");
23319
- Write_Int (Int (Size));
23320
- Write_Line (";");
23321
+ if Precision = Size then
23322
+ Write_Str ("for " & T (1 .. Last) & "'Size use ");
23323
+ Write_Int (Int (Size));
23324
+ Write_Line (";");
23327
+ Write_Str ("for " & T (1 .. Last) & "'Value_Size use ");
23328
+ Write_Int (Int (Precision));
23329
+ Write_Line (";");
23331
+ Write_Str ("for " & T (1 .. Last) & "'Object_Size use ");
23332
+ Write_Int (Int (Size));
23333
+ Write_Line (";");
23336
Write_Str ("for " & T & "'Alignment use ");
23337
Write_Int (Int (Alignment / 8));
23339
@@ -2092,15 +2105,13 @@
23340
if Digs > 0 and then not Complex and then Count = 0 then
23342
Ent : constant Entity_Id := New_Standard_Entity;
23343
- Esize : constant Pos := Pos ((Size + Alignment - 1)
23344
- / Alignment * Alignment);
23346
Set_Defining_Identifier
23347
(New_Node (N_Full_Type_Declaration, Stloc), Ent);
23348
Make_Name (Ent, T (1 .. Last));
23349
Set_Scope (Ent, Standard_Standard);
23350
- Build_Float_Type (Ent, Esize, Float_Rep, Pos (Digs));
23351
- Set_RM_Size (Ent, UI_From_Int (Int (Size)));
23352
+ Build_Float_Type (Ent, Int (Size), Float_Rep, Pos (Digs));
23353
+ Set_RM_Size (Ent, UI_From_Int (Int (Precision)));
23354
Set_Alignment (Ent, UI_From_Int (Int (Alignment / 8)));
23356
if No (Back_End_Float_Types) then
23357
Index: gcc/ada/back_end.ads
23358
===================================================================
23359
--- a/src/gcc/ada/back_end.ads (.../tags/gcc_4_8_2_release)
23360
+++ b/src/gcc/ada/back_end.ads (.../branches/gcc-4_8-branch)
23362
Complex : Boolean; -- True iff type has real and imaginary parts
23363
Count : Natural; -- Number of elements in vector, 0 otherwise
23364
Float_Rep : Float_Rep_Kind; -- Representation used for fpt type
23365
+ Precision : Positive; -- Precision of representation in bits
23366
Size : Positive; -- Size of representation in bits
23367
Alignment : Natural); -- Required alignment in bits
23368
pragma Convention (C, Register_Type_Proc);
23369
Index: gcc/ada/gcc-interface/utils.c
23370
===================================================================
23371
--- a/src/gcc/ada/gcc-interface/utils.c (.../tags/gcc_4_8_2_release)
23372
+++ b/src/gcc/ada/gcc-interface/utils.c (.../branches/gcc-4_8-branch)
23373
@@ -232,6 +232,7 @@
23374
static tree split_plus (tree, tree *);
23375
static tree float_type_for_precision (int, enum machine_mode);
23376
static tree convert_to_fat_pointer (tree, tree);
23377
+static unsigned int scale_by_factor_of (tree, unsigned int);
23378
static bool potential_alignment_gap (tree, tree, tree);
23379
static void process_attributes (tree, struct attrib *);
23381
@@ -532,6 +533,22 @@
23382
free_binding_level = level;
23385
+/* Set the context of TYPE and its parallel types (if any) to CONTEXT. */
23388
+gnat_set_type_context (tree type, tree context)
23390
+ tree decl = TYPE_STUB_DECL (type);
23392
+ TYPE_CONTEXT (type) = context;
23394
+ while (decl && DECL_PARALLEL_TYPE (decl))
23396
+ TYPE_CONTEXT (DECL_PARALLEL_TYPE (decl)) = context;
23397
+ decl = TYPE_STUB_DECL (DECL_PARALLEL_TYPE (decl));
23401
/* Record DECL as belonging to the current lexical scope and use GNAT_NODE
23402
for location information and flag propagation. */
23404
@@ -613,7 +630,7 @@
23405
if (TREE_CODE (t) == POINTER_TYPE)
23406
TYPE_NEXT_PTR_TO (t) = tt;
23407
TYPE_NAME (tt) = DECL_NAME (decl);
23408
- TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
23409
+ gnat_set_type_context (tt, DECL_CONTEXT (decl));
23410
TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (t);
23411
DECL_ORIGINAL_TYPE (decl) = tt;
23413
@@ -623,7 +640,7 @@
23414
/* We need a variant for the placeholder machinery to work. */
23415
tree tt = build_variant_type_copy (t);
23416
TYPE_NAME (tt) = decl;
23417
- TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
23418
+ gnat_set_type_context (tt, DECL_CONTEXT (decl));
23419
TREE_USED (tt) = TREE_USED (t);
23420
TREE_TYPE (decl) = tt;
23421
if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
23422
@@ -645,7 +662,7 @@
23423
if (!(TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL))
23425
TYPE_NAME (t) = decl;
23426
- TYPE_CONTEXT (t) = DECL_CONTEXT (decl);
23427
+ gnat_set_type_context (t, DECL_CONTEXT (decl));
23431
@@ -1692,93 +1709,74 @@
23432
TYPE_SIZE_UNIT (new_record_type)
23433
= size_int (TYPE_ALIGN (record_type) / BITS_PER_UNIT);
23435
- /* Now scan all the fields, replacing each field with a new
23436
- field corresponding to the new encoding. */
23437
+ /* Now scan all the fields, replacing each field with a new field
23438
+ corresponding to the new encoding. */
23439
for (old_field = TYPE_FIELDS (record_type); old_field;
23440
old_field = DECL_CHAIN (old_field))
23442
tree field_type = TREE_TYPE (old_field);
23443
tree field_name = DECL_NAME (old_field);
23445
tree curpos = bit_position (old_field);
23446
+ tree pos, new_field;
23448
unsigned int align = 0;
23451
+ /* We're going to do some pattern matching below so remove as many
23452
+ conversions as possible. */
23453
+ curpos = remove_conversions (curpos, true);
23455
/* See how the position was modified from the last position.
23457
- There are two basic cases we support: a value was added
23458
- to the last position or the last position was rounded to
23459
- a boundary and they something was added. Check for the
23460
- first case first. If not, see if there is any evidence
23461
- of rounding. If so, round the last position and try
23463
+ There are two basic cases we support: a value was added
23464
+ to the last position or the last position was rounded to
23465
+ a boundary and they something was added. Check for the
23466
+ first case first. If not, see if there is any evidence
23467
+ of rounding. If so, round the last position and retry.
23469
- If this is a union, the position can be taken as zero. */
23471
- /* Some computations depend on the shape of the position expression,
23472
- so strip conversions to make sure it's exposed. */
23473
- curpos = remove_conversions (curpos, true);
23475
+ If this is a union, the position can be taken as zero. */
23476
if (TREE_CODE (new_record_type) == UNION_TYPE)
23477
- pos = bitsize_zero_node, align = 0;
23478
+ pos = bitsize_zero_node;
23480
pos = compute_related_constant (curpos, last_pos);
23482
- if (!pos && TREE_CODE (curpos) == MULT_EXPR
23484
+ && TREE_CODE (curpos) == MULT_EXPR
23485
&& host_integerp (TREE_OPERAND (curpos, 1), 1))
23487
tree offset = TREE_OPERAND (curpos, 0);
23488
align = tree_low_cst (TREE_OPERAND (curpos, 1), 1);
23490
- /* An offset which is a bitwise AND with a mask increases the
23491
- alignment according to the number of trailing zeros. */
23492
- offset = remove_conversions (offset, true);
23493
- if (TREE_CODE (offset) == BIT_AND_EXPR
23494
- && TREE_CODE (TREE_OPERAND (offset, 1)) == INTEGER_CST)
23496
- unsigned HOST_WIDE_INT mask
23497
- = TREE_INT_CST_LOW (TREE_OPERAND (offset, 1));
23500
- for (i = 0; i < HOST_BITS_PER_WIDE_INT; i++)
23509
- pos = compute_related_constant (curpos,
23510
- round_up (last_pos, align));
23511
+ align = scale_by_factor_of (offset, align);
23512
+ last_pos = round_up (last_pos, align);
23513
+ pos = compute_related_constant (curpos, last_pos);
23515
- else if (!pos && TREE_CODE (curpos) == PLUS_EXPR
23516
- && TREE_CODE (TREE_OPERAND (curpos, 1)) == INTEGER_CST
23518
+ && TREE_CODE (curpos) == PLUS_EXPR
23519
+ && host_integerp (TREE_OPERAND (curpos, 1), 1)
23520
&& TREE_CODE (TREE_OPERAND (curpos, 0)) == MULT_EXPR
23521
- && host_integerp (TREE_OPERAND
23522
- (TREE_OPERAND (curpos, 0), 1),
23525
+ (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1))
23527
+ tree offset = TREE_OPERAND (TREE_OPERAND (curpos, 0), 0);
23528
+ unsigned HOST_WIDE_INT addend
23529
+ = tree_low_cst (TREE_OPERAND (curpos, 1), 1);
23532
- (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1);
23533
- pos = compute_related_constant (curpos,
23534
- round_up (last_pos, align));
23535
+ = tree_low_cst (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1);
23536
+ align = scale_by_factor_of (offset, align);
23537
+ align = MIN (align, addend & -addend);
23538
+ last_pos = round_up (last_pos, align);
23539
+ pos = compute_related_constant (curpos, last_pos);
23541
- else if (potential_alignment_gap (prev_old_field, old_field,
23543
+ else if (potential_alignment_gap (prev_old_field, old_field, pos))
23545
align = TYPE_ALIGN (field_type);
23546
- pos = compute_related_constant (curpos,
23547
- round_up (last_pos, align));
23548
+ last_pos = round_up (last_pos, align);
23549
+ pos = compute_related_constant (curpos, last_pos);
23552
/* If we can't compute a position, set it to zero.
23554
- ??? We really should abort here, but it's too much work
23555
- to get this correct for all cases. */
23557
+ ??? We really should abort here, but it's too much work
23558
+ to get this correct for all cases. */
23560
pos = bitsize_zero_node;
23562
@@ -2553,6 +2551,32 @@
23566
+/* Return VALUE scaled by the biggest power-of-2 factor of EXPR. */
23568
+static unsigned int
23569
+scale_by_factor_of (tree expr, unsigned int value)
23571
+ expr = remove_conversions (expr, true);
23573
+ /* An expression which is a bitwise AND with a mask has a power-of-2 factor
23574
+ corresponding to the number of trailing zeros of the mask. */
23575
+ if (TREE_CODE (expr) == BIT_AND_EXPR
23576
+ && TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST)
23578
+ unsigned HOST_WIDE_INT mask = TREE_INT_CST_LOW (TREE_OPERAND (expr, 1));
23579
+ unsigned int i = 0;
23581
+ while ((mask & 1) == 0 && i < HOST_BITS_PER_WIDE_INT)
23592
/* Given two consecutive field decls PREV_FIELD and CURR_FIELD, return true
23593
unless we can prove these 2 fields are laid out in such a way that no gap
23594
exist between the end of PREV_FIELD and the beginning of CURR_FIELD. OFFSET
23595
Index: gcc/ada/gcc-interface/Makefile.in
23596
===================================================================
23597
--- a/src/gcc/ada/gcc-interface/Makefile.in (.../tags/gcc_4_8_2_release)
23598
+++ b/src/gcc/ada/gcc-interface/Makefile.in (.../branches/gcc-4_8-branch)
23599
@@ -2397,7 +2397,7 @@
23600
"GNATLINK=$(GNATLINK)" \
23601
"GNATBIND=$(GNATBIND)"
23603
-GCC_LINK=$(CC) $(GCC_LINK_FLAGS) $(ADA_INCLUDES)
23604
+GCC_LINK=$(CC) $(GCC_LINK_FLAGS) $(ADA_INCLUDES) $(LDFLAGS)
23606
# Build directory for the tools. Let's copy the target-dependent
23607
# sources using the same mechanism as for gnatlib. The other sources are
23608
@@ -2519,12 +2519,10 @@
23610
# Likewise for the tools
23611
../../gnatmake$(exeext): $(P) b_gnatm.o link.o targext.o $(GNATMAKE_OBJS)
23612
- $(GCC_LINK) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) \
23614
+ +$(GCC_LINK) $(ALL_CFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) $(TOOLS_LIBS)
23616
../../gnatlink$(exeext): $(P) b_gnatl.o link.o targext.o $(GNATLINK_OBJS)
23617
- $(GCC_LINK) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) \
23619
+ +$(GCC_LINK) $(ALL_CFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) $(TOOLS_LIBS)
23621
../stamp-gnatlib-$(RTSDIR):
23622
@if [ ! -f stamp-gnatlib-$(RTSDIR) ] ; \
23623
Index: gcc/ada/gcc-interface/cuintp.c
23624
===================================================================
23625
--- a/src/gcc/ada/gcc-interface/cuintp.c (.../tags/gcc_4_8_2_release)
23626
+++ b/src/gcc/ada/gcc-interface/cuintp.c (.../branches/gcc-4_8-branch)
23629
* C Implementation File *
23631
- * Copyright (C) 1992-2012, Free Software Foundation, Inc. *
23632
+ * Copyright (C) 1992-2014, Free Software Foundation, Inc. *
23634
* GNAT is free software; you can redistribute it and/or modify it under *
23635
* terms of the GNU General Public License as published by the Free Soft- *
23638
build_cst_from_int (tree type, HOST_WIDE_INT low)
23640
- if (TREE_CODE (type) == REAL_TYPE)
23641
- return convert (type, build_int_cst (NULL_TREE, low));
23642
+ if (SCALAR_FLOAT_TYPE_P (type))
23643
+ return convert (type, build_int_cst (gnat_type_for_size (32, 0), low));
23645
return build_int_cst_type (type, low);
23647
@@ -99,20 +99,13 @@
23648
gcc_assert (Length > 0);
23650
/* The computations we perform below always require a type at least as
23651
- large as an integer not to overflow. REAL types are always fine, but
23652
+ large as an integer not to overflow. FP types are always fine, but
23653
INTEGER or ENUMERAL types we are handed may be too short. We use a
23654
base integer type node for the computations in this case and will
23655
- convert the final result back to the incoming type later on.
23656
- The base integer precision must be superior than 16. */
23657
+ convert the final result back to the incoming type later on. */
23658
+ if (!SCALAR_FLOAT_TYPE_P (comp_type) && TYPE_PRECISION (comp_type) < 32)
23659
+ comp_type = gnat_type_for_size (32, 0);
23661
- if (TREE_CODE (comp_type) != REAL_TYPE
23662
- && TYPE_PRECISION (comp_type)
23663
- < TYPE_PRECISION (long_integer_type_node))
23665
- comp_type = long_integer_type_node;
23666
- gcc_assert (TYPE_PRECISION (comp_type) > 16);
23669
gnu_base = build_cst_from_int (comp_type, Base);
23671
gnu_ret = build_cst_from_int (comp_type, First);
23672
Index: gcc/ada/gcc-interface/Make-lang.in
23673
===================================================================
23674
--- a/src/gcc/ada/gcc-interface/Make-lang.in (.../tags/gcc_4_8_2_release)
23675
+++ b/src/gcc/ada/gcc-interface/Make-lang.in (.../branches/gcc-4_8-branch)
23676
@@ -625,7 +625,7 @@
23677
ada/doctools/xgnatugn$(build_exeext): ada/xgnatugn.adb
23678
-$(MKDIR) ada/doctools
23679
$(CP) $^ ada/doctools
23680
- cd ada/doctools && $(GNATMAKE) -q xgnatugn
23681
+ cd ada/doctools && gnatmake -q xgnatugn
23683
# Note that doc/gnat_ugn.texi and doc/projects.texi do not depend on
23684
# xgnatugn being built so we can distribute a pregenerated doc/gnat_ugn.info
23685
Index: gcc/ada/gcc-interface/gigi.h
23686
===================================================================
23687
--- a/src/gcc/ada/gcc-interface/gigi.h (.../tags/gcc_4_8_2_release)
23688
+++ b/src/gcc/ada/gcc-interface/gigi.h (.../branches/gcc-4_8-branch)
23689
@@ -1014,7 +1014,7 @@
23690
/* This function is called by the front-end to enumerate all the supported
23691
modes for the machine, as well as some predefined C types. */
23692
extern void enumerate_modes (void (*f) (const char *, int, int, int, int, int,
23698
Index: gcc/ada/gcc-interface/misc.c
23699
===================================================================
23700
--- a/src/gcc/ada/gcc-interface/misc.c (.../tags/gcc_4_8_2_release)
23701
+++ b/src/gcc/ada/gcc-interface/misc.c (.../branches/gcc-4_8-branch)
23702
@@ -648,7 +648,7 @@
23703
/* This function is called by the front-end to enumerate all the supported
23704
modes for the machine, as well as some predefined C types. F is a function
23705
which is called back with the parameters as listed below, first a string,
23706
- then six ints. The name is any arbitrary null-terminated string and has
23707
+ then seven ints. The name is any arbitrary null-terminated string and has
23708
no particular significance, except for the case of predefined C types, where
23709
it should be the name of the C type. For integer types, only signed types
23710
should be listed, unsigned versions are assumed. The order of types should
23711
@@ -664,11 +664,12 @@
23712
COMPLEX_P nonzero is this represents a complex mode
23713
COUNT count of number of items, nonzero for vector mode
23714
FLOAT_REP Float_Rep_Kind for FP, otherwise undefined
23715
- SIZE number of bits used to store data
23716
+ PRECISION number of bits used to store data
23717
+ SIZE number of bits occupied by the mode
23718
ALIGN number of bits to which mode is aligned. */
23721
-enumerate_modes (void (*f) (const char *, int, int, int, int, int, int))
23722
+enumerate_modes (void (*f) (const char *, int, int, int, int, int, int, int))
23724
const tree c_types[]
23725
= { float_type_node, double_type_node, long_double_type_node };
23726
@@ -742,28 +743,26 @@
23728
/* First register any C types for this mode that the front end
23729
may need to know about, unless the mode should be skipped. */
23732
+ if (!skip_p && !vector_p)
23733
for (nameloop = 0; nameloop < ARRAY_SIZE (c_types); nameloop++)
23735
- tree typ = c_types[nameloop];
23736
- const char *nam = c_names[nameloop];
23737
+ tree type = c_types[nameloop];
23738
+ const char *name = c_names[nameloop];
23740
- if (TYPE_MODE (typ) == i)
23741
+ if (TYPE_MODE (type) == i)
23743
- f (nam, digs, complex_p,
23744
- vector_p ? GET_MODE_NUNITS (i) : 0, float_rep,
23745
- TYPE_PRECISION (typ), TYPE_ALIGN (typ));
23746
+ f (name, digs, complex_p, 0, float_rep, TYPE_PRECISION (type),
23747
+ TREE_INT_CST_LOW (TYPE_SIZE (type)), TYPE_ALIGN (type));
23752
/* If no predefined C types were found, register the mode itself. */
23755
f (GET_MODE_NAME (i), digs, complex_p,
23756
vector_p ? GET_MODE_NUNITS (i) : 0, float_rep,
23757
- GET_MODE_PRECISION (i), GET_MODE_ALIGNMENT (i));
23758
+ GET_MODE_PRECISION (i), GET_MODE_BITSIZE (i),
23759
+ GET_MODE_ALIGNMENT (i));
23763
Index: gcc/tree-eh.c
23764
===================================================================
23765
--- a/src/gcc/tree-eh.c (.../tags/gcc_4_8_2_release)
23766
+++ b/src/gcc/tree-eh.c (.../branches/gcc-4_8-branch)
23767
@@ -1357,9 +1357,6 @@
23768
x = gimple_seq_last_stmt (finally);
23769
finally_loc = x ? gimple_location (x) : tf_loc;
23771
- /* Lower the finally block itself. */
23772
- lower_eh_constructs_1 (state, &finally);
23774
/* Prepare for switch statement generation. */
23775
nlabels = tf->dest_array.length ();
23776
return_index = nlabels;
23777
@@ -1445,6 +1442,7 @@
23778
x = gimple_build_label (finally_label);
23779
gimple_seq_add_stmt (&tf->top_p_seq, x);
23781
+ lower_eh_constructs_1 (state, &finally);
23782
gimple_seq_add_seq (&tf->top_p_seq, finally);
23784
/* Redirect each incoming goto edge. */
23785
@@ -2502,12 +2500,6 @@
23789
- case TARGET_MEM_REF:
23790
- if (TREE_CODE (TMR_BASE (expr)) == ADDR_EXPR
23791
- && !TMR_INDEX (expr) && !TMR_INDEX2 (expr))
23793
- return !TREE_THIS_NOTRAP (expr);
23795
case COMPONENT_REF:
23796
case REALPART_EXPR:
23797
case IMAGPART_EXPR:
23798
@@ -2534,10 +2526,36 @@
23800
return !in_array_bounds_p (expr);
23802
+ case TARGET_MEM_REF:
23804
+ if (TREE_CODE (TREE_OPERAND (expr, 0)) == ADDR_EXPR
23805
+ && tree_could_trap_p (TREE_OPERAND (TREE_OPERAND (expr, 0), 0)))
23807
+ if (TREE_THIS_NOTRAP (expr))
23809
+ /* We cannot prove that the access is in-bounds when we have
23810
+ variable-index TARGET_MEM_REFs. */
23811
+ if (code == TARGET_MEM_REF
23812
+ && (TMR_INDEX (expr) || TMR_INDEX2 (expr)))
23814
if (TREE_CODE (TREE_OPERAND (expr, 0)) == ADDR_EXPR)
23818
+ tree base = TREE_OPERAND (TREE_OPERAND (expr, 0), 0);
23819
+ double_int off = mem_ref_offset (expr);
23820
+ if (off.is_negative ())
23822
+ if (TREE_CODE (base) == STRING_CST)
23823
+ return double_int::from_uhwi (TREE_STRING_LENGTH (base)).ule (off);
23824
+ else if (DECL_SIZE_UNIT (base) == NULL_TREE
23825
+ || TREE_CODE (DECL_SIZE_UNIT (base)) != INTEGER_CST
23826
+ || tree_to_double_int (DECL_SIZE_UNIT (base)).ule (off))
23828
+ /* Now we are sure the first byte of the access is inside
23835
return !TREE_THIS_NOTRAP (expr);
23837
@@ -4166,8 +4184,11 @@
23838
/* If the block is totally empty, look for more unsplitting cases. */
23839
if (gsi_end_p (gsi))
23841
- /* For the degenerate case of an infinite loop bail out. */
23842
- if (infinite_empty_loop_p (e_out))
23843
+ /* For the degenerate case of an infinite loop bail out.
23844
+ If bb has no successors and is totally empty, which can happen e.g.
23845
+ because of incorrect noreturn attribute, bail out too. */
23846
+ if (e_out == NULL
23847
+ || infinite_empty_loop_p (e_out))
23850
return ret | cleanup_empty_eh_unsplit (bb, e_out, lp);
23851
@@ -4304,11 +4325,12 @@
23852
remove_unreachable_handlers ();
23854
/* Watch out for the region tree vanishing due to all unreachable. */
23855
- if (cfun->eh->region_tree && optimize)
23856
+ if (cfun->eh->region_tree)
23858
bool changed = false;
23860
- changed |= unsplit_all_eh ();
23862
+ changed |= unsplit_all_eh ();
23863
changed |= cleanup_all_empty_eh ();
23866
Index: gcc/fortran/interface.c
23867
===================================================================
23868
--- a/src/gcc/fortran/interface.c (.../tags/gcc_4_8_2_release)
23869
+++ b/src/gcc/fortran/interface.c (.../branches/gcc-4_8-branch)
23870
@@ -1245,7 +1245,8 @@
23874
- if (r1->ts.u.cl->length)
23875
+ if (s1->ts.u.cl && s1->ts.u.cl->length
23876
+ && s2->ts.u.cl && s2->ts.u.cl->length)
23878
int compval = gfc_dep_compare_expr (r1->ts.u.cl->length,
23879
r2->ts.u.cl->length);
23880
@@ -1367,8 +1368,8 @@
23881
if (s1->attr.function && s2->attr.function)
23883
/* If both are functions, check result characteristics. */
23884
- if (check_result_characteristics (s1, s2, errmsg, err_len)
23886
+ if (check_result_characteristics (s1, s2, errmsg, err_len) == FAILURE
23887
+ || check_result_characteristics (s2, s1, errmsg, err_len) == FAILURE)
23891
Index: gcc/fortran/intrinsic.c
23892
===================================================================
23893
--- a/src/gcc/fortran/intrinsic.c (.../tags/gcc_4_8_2_release)
23894
+++ b/src/gcc/fortran/intrinsic.c (.../branches/gcc-4_8-branch)
23895
@@ -4229,7 +4229,7 @@
23896
c->resolved_sym->attr.elemental = isym->elemental;
23899
- if (gfc_pure (NULL) && !isym->pure)
23900
+ if (!isym->pure && gfc_pure (NULL))
23902
gfc_error ("Subroutine call to intrinsic '%s' at %L is not PURE", name,
23904
@@ -4236,6 +4236,9 @@
23905
return MATCH_ERROR;
23909
+ gfc_unset_implicit_pure (NULL);
23911
c->resolved_sym->attr.noreturn = isym->noreturn;
23914
Index: gcc/fortran/trans-expr.c
23915
===================================================================
23916
--- a/src/gcc/fortran/trans-expr.c (.../tags/gcc_4_8_2_release)
23917
+++ b/src/gcc/fortran/trans-expr.c (.../branches/gcc-4_8-branch)
23918
@@ -670,7 +670,6 @@
23919
gfc_add_modify (&parmse->post, vptr,
23920
fold_convert (TREE_TYPE (vptr), ctree));
23922
- gcc_assert (!optional || (optional && !copyback));
23926
@@ -6343,7 +6342,13 @@
23927
/* Returns a reference to the scalar evaluated outside the loop
23929
gfc_conv_expr (se, expr);
23930
- se->expr = gfc_build_addr_expr (NULL_TREE, se->expr);
23932
+ if (expr->ts.type == BT_CHARACTER
23933
+ && expr->expr_type != EXPR_FUNCTION)
23934
+ gfc_conv_string_parameter (se);
23936
+ se->expr = gfc_build_addr_expr (NULL_TREE, se->expr);
23941
Index: gcc/fortran/trans-array.c
23942
===================================================================
23943
--- a/src/gcc/fortran/trans-array.c (.../tags/gcc_4_8_2_release)
23944
+++ b/src/gcc/fortran/trans-array.c (.../branches/gcc-4_8-branch)
23946
/* Array translation routines
23947
- Copyright (C) 2002-2013 Free Software Foundation, Inc.
23948
+ Copyright (C) 2002-2014 Free Software Foundation, Inc.
23949
Contributed by Paul Brook <paul@nowt.org>
23950
and Steven Bosscher <s.bosscher@student.tudelft.nl>
23952
@@ -2487,6 +2487,11 @@
23953
a reference to the value. */
23954
gfc_conv_expr (&se, expr);
23957
+ /* Ensure that a pointer to the string is stored. */
23958
+ if (expr->ts.type == BT_CHARACTER)
23959
+ gfc_conv_string_parameter (&se);
23961
gfc_add_block_to_block (&outer_loop->pre, &se.pre);
23962
gfc_add_block_to_block (&outer_loop->post, &se.post);
23963
if (gfc_is_class_scalar_expr (expr))
23964
@@ -7940,6 +7945,7 @@
23972
@@ -8015,9 +8021,9 @@
23973
jump_label2 = gfc_build_label_decl (NULL_TREE);
23975
/* Allocate if data is NULL. */
23976
- cond = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
23977
+ cond_null = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
23978
array1, build_int_cst (TREE_TYPE (array1), 0));
23979
- tmp = build3_v (COND_EXPR, cond,
23980
+ tmp = build3_v (COND_EXPR, cond_null,
23981
build1_v (GOTO_EXPR, jump_label1),
23982
build_empty_stmt (input_location));
23983
gfc_add_expr_to_block (&fblock, tmp);
23984
@@ -8069,13 +8075,25 @@
23985
tmp = build1_v (LABEL_EXPR, jump_label1);
23986
gfc_add_expr_to_block (&fblock, tmp);
23988
- size1 = gfc_conv_descriptor_size (desc, expr1->rank);
23989
+ /* If the lhs has not been allocated, its bounds will not have been
23990
+ initialized and so its size is set to zero. */
23991
+ size1 = gfc_create_var (gfc_array_index_type, NULL);
23992
+ gfc_init_block (&alloc_block);
23993
+ gfc_add_modify (&alloc_block, size1, gfc_index_zero_node);
23994
+ gfc_init_block (&realloc_block);
23995
+ gfc_add_modify (&realloc_block, size1,
23996
+ gfc_conv_descriptor_size (desc, expr1->rank));
23997
+ tmp = build3_v (COND_EXPR, cond_null,
23998
+ gfc_finish_block (&alloc_block),
23999
+ gfc_finish_block (&realloc_block));
24000
+ gfc_add_expr_to_block (&fblock, tmp);
24002
- /* Get the rhs size. Fix both sizes. */
24003
+ /* Get the rhs size and fix it. */
24005
desc2 = rss->info->data.array.descriptor;
24009
size2 = gfc_index_one_node;
24010
for (n = 0; n < expr2->rank; n++)
24012
@@ -8089,8 +8107,6 @@
24013
gfc_array_index_type,
24017
- size1 = gfc_evaluate_now (size1, &fblock);
24018
size2 = gfc_evaluate_now (size2, &fblock);
24020
cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
24021
Index: gcc/fortran/symbol.c
24022
===================================================================
24023
--- a/src/gcc/fortran/symbol.c (.../tags/gcc_4_8_2_release)
24024
+++ b/src/gcc/fortran/symbol.c (.../branches/gcc-4_8-branch)
24025
@@ -1110,8 +1110,8 @@
24029
- if (s == SAVE_EXPLICIT && gfc_implicit_pure (NULL))
24030
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24031
+ if (s == SAVE_EXPLICIT)
24032
+ gfc_unset_implicit_pure (NULL);
24034
if (s == SAVE_EXPLICIT && attr->save == SAVE_EXPLICIT)
24036
Index: gcc/fortran/class.c
24037
===================================================================
24038
--- a/src/gcc/fortran/class.c (.../tags/gcc_4_8_2_release)
24039
+++ b/src/gcc/fortran/class.c (.../branches/gcc-4_8-branch)
24040
@@ -2486,7 +2486,7 @@
24043
/* Sometimes the typespec is passed from a single call. */
24044
- if (ts->type == BT_DERIVED)
24045
+ if (ts->type == BT_DERIVED || ts->type == BT_CLASS)
24046
return gfc_find_derived_vtab (ts->u.derived);
24048
/* Find the top-level namespace. */
24049
Index: gcc/fortran/decl.c
24050
===================================================================
24051
--- a/src/gcc/fortran/decl.c (.../tags/gcc_4_8_2_release)
24052
+++ b/src/gcc/fortran/decl.c (.../branches/gcc-4_8-branch)
24053
@@ -510,10 +510,8 @@
24055
return MATCH_ERROR;
24057
+ gfc_unset_implicit_pure (gfc_current_ns->proc_name);
24059
- if (gfc_implicit_pure (NULL))
24060
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24062
/* Mark the variable as having appeared in a data statement. */
24063
if (gfc_add_data (&sym->attr, sym->name, &sym->declared_at) == FAILURE)
24065
@@ -571,10 +569,8 @@
24066
gfc_error ("DATA statement at %C is not allowed in a PURE procedure");
24067
return MATCH_ERROR;
24069
+ gfc_unset_implicit_pure (gfc_current_ns->proc_name);
24071
- if (gfc_implicit_pure (NULL))
24072
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24077
@@ -1737,6 +1733,7 @@
24078
"a PURE procedure");
24079
return MATCH_ERROR;
24081
+ gfc_unset_implicit_pure (gfc_current_ns->proc_name);
24083
/* Match NULL() initialization. */
24084
m = gfc_match_null (init);
24085
@@ -2045,6 +2042,10 @@
24089
+ if (current_attr.flavor != FL_PARAMETER
24090
+ && gfc_state_stack->state != COMP_DERIVED)
24091
+ gfc_unset_implicit_pure (gfc_current_ns->proc_name);
24093
if (m != MATCH_YES)
24096
@@ -5069,7 +5070,14 @@
24097
if (gfc_add_proc (&c->attr, name, NULL) == FAILURE)
24098
return MATCH_ERROR;
24105
+ c->tb = XCNEW (gfc_typebound_proc);
24106
+ c->tb->where = gfc_current_locus;
24110
/* Set interface. */
24111
if (proc_if != NULL)
24112
@@ -7384,6 +7392,7 @@
24115
/* Check a derived type that is being extended. */
24118
check_extended_derived_type (char *name)
24120
@@ -7395,14 +7404,15 @@
24124
+ extended = gfc_find_dt_in_generic (extended);
24129
- gfc_error ("No such symbol in TYPE definition at %C");
24130
+ gfc_error ("Symbol '%s' at %C has not been previously defined", name);
24134
- extended = gfc_find_dt_in_generic (extended);
24136
if (extended->attr.flavor != FL_DERIVED)
24138
gfc_error ("'%s' in EXTENDS expression at %C is not a "
24139
Index: gcc/fortran/dump-parse-tree.c
24140
===================================================================
24141
--- a/src/gcc/fortran/dump-parse-tree.c (.../tags/gcc_4_8_2_release)
24142
+++ b/src/gcc/fortran/dump-parse-tree.c (.../branches/gcc-4_8-branch)
24143
@@ -110,7 +110,8 @@
24147
- show_expr (ts->u.cl->length);
24149
+ show_expr (ts->u.cl->length);
24150
fprintf(dumpfile, " %d", ts->kind);
24153
Index: gcc/fortran/gfortran.h
24154
===================================================================
24155
--- a/src/gcc/fortran/gfortran.h (.../tags/gcc_4_8_2_release)
24156
+++ b/src/gcc/fortran/gfortran.h (.../branches/gcc-4_8-branch)
24157
@@ -2830,6 +2830,7 @@
24158
int gfc_impure_variable (gfc_symbol *);
24159
int gfc_pure (gfc_symbol *);
24160
int gfc_implicit_pure (gfc_symbol *);
24161
+void gfc_unset_implicit_pure (gfc_symbol *);
24162
int gfc_elemental (gfc_symbol *);
24163
gfc_try gfc_resolve_iterator (gfc_iterator *, bool, bool);
24164
gfc_try find_forall_index (gfc_expr *, gfc_symbol *, int);
24165
Index: gcc/fortran/ChangeLog
24166
===================================================================
24167
--- a/src/gcc/fortran/ChangeLog (.../tags/gcc_4_8_2_release)
24168
+++ b/src/gcc/fortran/ChangeLog (.../branches/gcc-4_8-branch)
24170
+2014-03-20 Tobias Burnus <burnus@net-b.de>
24174
+ * gfortran.h (gfc_unset_implicit_pure): New prototype.
24175
+ * resolve.c (gfc_unset_implicit_pure): New.
24176
+ (resolve_structure_cons, resolve_function,
24177
+ pure_subroutine, resolve_ordinary_assign): Use it.
24178
+ * decl.c (match_old_style_init, gfc_match_data,
24179
+ match_pointer_init, variable_decl): Ditto.
24180
+ * expr.c (gfc_check_pointer_assign): Ditto.
24181
+ * intrinsic.c (gfc_intrinsic_sub_interface): Ditto.
24182
+ * io.c (match_vtag, gfc_match_open, gfc_match_close,
24183
+ match_filepos, gfc_match_inquire, gfc_match_print,
24184
+ gfc_match_wait, check_io_constraints): Ditto.
24185
+ * match.c (gfc_match_critical, gfc_match_stopcode,
24186
+ lock_unlock_statement, sync_statement, gfc_match_allocate,
24187
+ gfc_match_deallocate): Ditto.
24188
+ * parse.c (decode_omp_directive): Ditto.
24189
+ * symbol.c (gfc_add_save): Ditto.
24191
+2014-03-08 Janus Weil <janus@gcc.gnu.org>
24194
+ * simplify.c (gfc_simplify_shape): Only clear shape if it was really
24195
+ created successfully.
24197
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
24199
+ Backport from mainline
24200
+ 2014-02-11 Jakub Jelinek <jakub@redhat.com>
24203
+ * trans-decl.c (gfc_build_dummy_array_decl): Set TREE_NO_WARNING
24204
+ on decl if sym->attr.optional.
24206
+2014-03-02 Mikael Morin <mikael@gcc.gnu.org>
24209
+ * frontend-passes.c (optimize_comparison): Guard two union accesses
24210
+ with the corresponding tag checks.
24212
+2014-02-22 Mikael Morin <mikael@gcc.gnu.org>
24215
+ * trans-intrinsic.c (gfc_conv_intrinsic_ichar): Calculate the
24216
+ number of arguments.
24218
+2014-02-19 Tobias Burnus <burnus@net-b.de>
24221
+ * expr.c (gfc_check_pointer_assign): Add check for
24223
+ * trans-decl.c (gfc_get_symbol_decl): Correctly generate
24224
+ external decl in a corner case.
24226
+2014-02-19 Janus Weil <janus@gcc.gnu.org>
24228
+ Backports from mainline:
24229
+ 2014-02-17 Janus Weil <janus@gcc.gnu.org>
24232
+ * resolve.c (build_default_init_expr): Don't initialize character
24233
+ variable if -fno-automatic is given.
24235
+ 2014-02-18 Janus Weil <janus@gcc.gnu.org>
24238
+ * resolve.c (check_generic_tbp_ambiguity): Check for presence of dummy
24239
+ arguments to prevent ICE.
24241
+2014-02-09 Janus Weil <janus@gcc.gnu.org>
24243
+ Backport from mainline
24244
+ 2013-10-21 Tobias Burnus <burnus@net-b.de>
24248
+ * decl.c (match_ppc_decl): Prevent later double free.
24250
+2014-02-08 Mikael Morin <mikael@gcc.gnu.org>
24253
+ * primary.c (gfc_convert_to_structure_constructor): Avoid null pointer
24256
+2014-02-07 Paul Thomas <pault@gcc.gnu.org>
24259
+ * trans-stmt.c (gfc_add_loop_ss_code): In the case of character
24260
+ SS_REFERENCE, use gfc_conv_string_parameter to ensure that a
24261
+ pointer to the string is stored.
24262
+ * trans-expr.c (gfc_conv_expr_reference): Likewise, use
24263
+ gfc_conv_string_parameter to ensure that a pointer to is passed
24264
+ to the elemental function.
24266
+2014-02-01 Paul Thomas <pault@gcc.gnu.org>
24269
+ * trans-stmt.c (gfc_trans_allocate): Before the pointer
24270
+ assignment to transfer the source _vptr to a class allocate
24271
+ expression, the final class reference should be exposed. The
24272
+ tail that includes the _data and array references is stored.
24273
+ This reduced expression is transferred to 'lhs' and the _vptr
24274
+ added. Then the tail is restored to the allocate expression.
24276
+2014-01-26 Mikael Morin <mikael@gcc.gnu.org>
24280
+ (fp2, find_pointer2): Remove.
24281
+ (mio_component_ref): Don't forcedfully set the containing derived type
24282
+ symbol for loading. Remove unused argument.
24283
+ (mio_ref): Update caller
24284
+ (skip_list): New argument nest_level. Initialize level with the new
24286
+ (read_module): Add forced pointer components association for derived
24289
+2014-01-19 Paul Thomas <pault@gcc.gnu.org>
24291
+ Backport from mainline
24292
+ 2013-12-01 Paul Thomas <pault@gcc.gnu.org>
24295
+ * trans-array.c (gfc_alloc_allocatable_for_assignment): Do not
24296
+ use the array bounds of an unallocated array but set its size
24299
+2014-01-19 Paul Thomas <pault@gcc.gnu.org>
24301
+ Backport from mainline
24302
+ 2013-12-01 Paul Thomas <pault@gcc.gnu.org>
24305
+ * resolve.c (resolve_transfer): EXPR_NULL is always in an
24306
+ invalid context in a transfer statement.
24308
+2014-01-11 Janus Weil <janus@gcc.gnu.org>
24310
+ Backport from mainline
24311
+ 2013-12-29 Janus Weil <janus@gcc.gnu.org>
24315
+ * dump-parse-tree.c (show_typespec): Check for charlen.
24316
+ * invoke.texi: Fix documentation of -fdump-fortran-optimized and
24317
+ -fdump-parse-tree.
24319
+2014-01-04 Janus Weil <janus@gcc.gnu.org>
24321
+ Backport from mainline
24322
+ 2014-01-02 Janus Weil <janus@gcc.gnu.org>
24325
+ * resolve.c (resolve_typebound_procedures): No need to create the vtab
24328
+2013-12-31 Janus Weil <janus@gcc.gnu.org>
24330
+ Backport from mainline
24331
+ 2013-12-30 Janus Weil <janus@gcc.gnu.org>
24334
+ * resolve.c (resolve_symbol): Check that symbol is not only flavorless
24335
+ but also untyped.
24337
+2013-12-18 Janus Weil <janus@gcc.gnu.org>
24339
+ Backport from mainline
24340
+ 2013-12-15 Janus Weil <janus@gcc.gnu.org>
24343
+ * class.c (gfc_find_intrinsic_vtab): Handle BT_CLASS.
24345
+2013-11-30 Paul Thomas <pault@gcc.gnu.org>
24347
+ Backport from mainline
24348
+ 2013-11-04 Paul Thomas <pault@gcc.gnu.org>
24351
+ * trans-expr.c (gfc_conv_class_to_class): Remove spurious
24354
+2013-11-17 Janus Weil <janus@gcc.gnu.org>
24356
+ Backport from mainline
24357
+ 2013-11-07 Janus Weil <janus@gcc.gnu.org>
24360
+ * primary.c (gfc_expr_attr): Check for result symbol.
24362
+2013-11-16 Janus Weil <janus@gcc.gnu.org>
24364
+ Backport from mainline
24365
+ 2013-09-20 Janus Weil <janus@gcc.gnu.org>
24368
+ * expr.c (gfc_check_pointer_assign): Remove second call to
24369
+ 'gfc_compare_interfaces' with swapped arguments.
24370
+ * interface.c (gfc_compare_interfaces): Symmetrize the call to
24371
+ 'check_result_characteristics' by calling it with swapped arguments.
24373
+2013-11-16 Paul Thomas <pault@gcc.gnu.org>
24376
+ * trans-io.c (transfer_expr): If the backend_decl for a derived
24377
+ type is missing, build it with gfc_typenode_for_spec.
24379
+2013-11-05 Steven G. Kargl <kargl@gcc.gnu.org>
24382
+ * check.c (gfc_check_reshape): ensure that shape is a constant
24385
+2013-11-02 Janus Weil <janus@gcc.gnu.org>
24387
+ Backport from mainline
24388
+ 2013-09-23 Janus Weil <janus@gcc.gnu.org>
24391
+ * decl.c (check_extended_derived_type): Prevent segfault, modify error
24394
2013-10-16 Release Manager
24396
* GCC 4.8.2 released.
24397
Index: gcc/fortran/trans-stmt.c
24398
===================================================================
24399
--- a/src/gcc/fortran/trans-stmt.c (.../tags/gcc_4_8_2_release)
24400
+++ b/src/gcc/fortran/trans-stmt.c (.../branches/gcc-4_8-branch)
24401
@@ -5104,10 +5104,49 @@
24403
gfc_expr *lhs, *rhs;
24405
+ gfc_ref *ref, *class_ref, *tail;
24407
+ /* Find the last class reference. */
24408
+ class_ref = NULL;
24409
+ for (ref = e->ref; ref; ref = ref->next)
24411
+ if (ref->type == REF_COMPONENT
24412
+ && ref->u.c.component->ts.type == BT_CLASS)
24415
+ if (ref->next == NULL)
24419
+ /* Remove and store all subsequent references after the
24420
+ CLASS reference. */
24423
+ tail = class_ref->next;
24424
+ class_ref->next = NULL;
24432
lhs = gfc_expr_to_initialize (e);
24433
gfc_add_vptr_component (lhs);
24435
+ /* Remove the _vptr component and restore the original tail
24439
+ gfc_free_ref_list (class_ref->next);
24440
+ class_ref->next = tail;
24444
+ gfc_free_ref_list (e->ref);
24448
if (class_expr != NULL_TREE)
24450
/* Polymorphic SOURCE: VPTR must be determined at run time. */
24451
Index: gcc/fortran/expr.c
24452
===================================================================
24453
--- a/src/gcc/fortran/expr.c (.../tags/gcc_4_8_2_release)
24454
+++ b/src/gcc/fortran/expr.c (.../branches/gcc-4_8-branch)
24455
@@ -3555,11 +3555,13 @@
24459
- if (!gfc_compare_interfaces (s2, s1, name, 0, 1,
24460
- err, sizeof(err), NULL, NULL))
24461
+ /* Check F2008Cor2, C729. */
24462
+ if (!s2->attr.intrinsic && s2->attr.if_source == IFSRC_UNKNOWN
24463
+ && !s2->attr.external && !s2->attr.subroutine && !s2->attr.function)
24465
- gfc_error ("Interface mismatch in procedure pointer assignment "
24466
- "at %L: %s", &rvalue->where, err);
24467
+ gfc_error ("Procedure pointer target '%s' at %L must be either an "
24468
+ "intrinsic, host or use associated, referenced or have "
24469
+ "the EXTERNAL attribute", s2->name, &rvalue->where);
24473
@@ -3679,9 +3681,8 @@
24476
if (is_implicit_pure && gfc_impure_variable (rvalue->symtree->n.sym))
24477
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24478
+ gfc_unset_implicit_pure (gfc_current_ns->proc_name);
24481
if (gfc_has_vector_index (rvalue))
24483
gfc_error ("Pointer assignment with vector subscript "
24484
Index: gcc/fortran/module.c
24485
===================================================================
24486
--- a/src/gcc/fortran/module.c (.../tags/gcc_4_8_2_release)
24487
+++ b/src/gcc/fortran/module.c (.../branches/gcc-4_8-branch)
24488
@@ -386,37 +386,6 @@
24492
-/* Recursive function to find a pointer within a tree by brute force. */
24494
-static pointer_info *
24495
-fp2 (pointer_info *p, const void *target)
24502
- if (p->u.pointer == target)
24505
- q = fp2 (p->left, target);
24509
- return fp2 (p->right, target);
24513
-/* During reading, find a pointer_info node from the pointer value.
24514
- This amounts to a brute-force search. */
24516
-static pointer_info *
24517
-find_pointer2 (void *p)
24519
- return fp2 (pi_root, p);
24523
/* Resolve any fixups using a known pointer. */
24526
@@ -2522,45 +2491,13 @@
24527
the namespace and is not loaded again. */
24530
-mio_component_ref (gfc_component **cp, gfc_symbol *sym)
24531
+mio_component_ref (gfc_component **cp)
24533
- char name[GFC_MAX_SYMBOL_LEN + 1];
24534
- gfc_component *q;
24537
p = mio_pointer_ref (cp);
24538
if (p->type == P_UNKNOWN)
24539
p->type = P_COMPONENT;
24541
- if (iomode == IO_OUTPUT)
24542
- mio_pool_string (&(*cp)->name);
24545
- mio_internal_string (name);
24547
- if (sym && sym->attr.is_class)
24548
- sym = sym->components->ts.u.derived;
24550
- /* It can happen that a component reference can be read before the
24551
- associated derived type symbol has been loaded. Return now and
24552
- wait for a later iteration of load_needed. */
24556
- if (sym->components != NULL && p->u.pointer == NULL)
24558
- /* Symbol already loaded, so search by name. */
24559
- q = gfc_find_component (sym, name, true, true);
24562
- associate_integer_pointer (p, q);
24565
- /* Make sure this symbol will eventually be loaded. */
24566
- p = find_pointer2 (sym);
24567
- if (p->u.rsym.state == UNUSED)
24568
- p->u.rsym.state = NEEDED;
24573
@@ -2917,7 +2854,7 @@
24575
case REF_COMPONENT:
24576
mio_symbol_ref (&r->u.c.sym);
24577
- mio_component_ref (&r->u.c.component, r->u.c.sym);
24578
+ mio_component_ref (&r->u.c.component);
24581
case REF_SUBSTRING:
24582
@@ -3772,7 +3709,9 @@
24585
/* Unlike most other routines, the address of the symbol node is already
24586
- fixed on input and the name/module has already been filled in. */
24587
+ fixed on input and the name/module has already been filled in.
24588
+ If you update the symbol format here, don't forget to update read_module
24589
+ as well (look for "seek to the symbol's component list"). */
24592
mio_symbol (gfc_symbol *sym)
24593
@@ -3782,6 +3721,7 @@
24596
mio_symbol_attribute (&sym->attr);
24598
mio_typespec (&sym->ts);
24599
if (sym->ts.type == BT_CLASS)
24600
sym->attr.class_ok = 1;
24601
@@ -3812,7 +3752,6 @@
24603
/* Note that components are always saved, even if they are supposed
24604
to be private. Component access is checked during searching. */
24606
mio_component_list (&sym->components, sym->attr.vtype);
24608
if (sym->components != NULL)
24609
@@ -3914,14 +3853,17 @@
24613
-/* Skip a list between balanced left and right parens. */
24614
+/* Skip a list between balanced left and right parens.
24615
+ By setting NEST_LEVEL one assumes that a number of NEST_LEVEL opening parens
24616
+ have been already parsed by hand, and the remaining of the content is to be
24617
+ skipped here. The default value is 0 (balanced parens). */
24621
+skip_list (int nest_level = 0)
24626
+ level = nest_level;
24629
switch (parse_atom ())
24630
@@ -4555,7 +4497,6 @@
24631
info->u.rsym.ns = atom_int;
24633
get_module_locus (&info->u.rsym.where);
24636
/* See if the symbol has already been loaded by a previous module.
24637
If so, we reference the existing symbol and prevent it from
24638
@@ -4566,11 +4507,57 @@
24641
|| (sym->attr.flavor == FL_VARIABLE && info->u.rsym.ns !=1))
24648
info->u.rsym.state = USED;
24649
info->u.rsym.sym = sym;
24650
+ /* The current symbol has already been loaded, so we can avoid loading
24651
+ it again. However, if it is a derived type, some of its components
24652
+ can be used in expressions in the module. To avoid the module loading
24653
+ failing, we need to associate the module's component pointer indexes
24654
+ with the existing symbol's component pointers. */
24655
+ if (sym->attr.flavor == FL_DERIVED)
24657
+ gfc_component *c;
24659
+ /* First seek to the symbol's component list. */
24660
+ mio_lparen (); /* symbol opening. */
24661
+ skip_list (); /* skip symbol attribute. */
24662
+ skip_list (); /* typespec. */
24663
+ require_atom (ATOM_INTEGER); /* namespace ref. */
24664
+ require_atom (ATOM_INTEGER); /* common ref. */
24665
+ skip_list (); /* formal args. */
24667
+ skip_list (); /* array_spec. */
24668
+ require_atom (ATOM_INTEGER); /* result. */
24669
+ /* not a cray pointer. */
24671
+ mio_lparen (); /* component list opening. */
24672
+ for (c = sym->components; c; c = c->next)
24675
+ const char *comp_name;
24678
+ mio_lparen (); /* component opening. */
24679
+ mio_integer (&n);
24680
+ p = get_integer (n);
24681
+ if (p->u.pointer == NULL)
24682
+ associate_integer_pointer (p, c);
24683
+ mio_pool_string (&comp_name);
24684
+ gcc_assert (comp_name == c->name);
24685
+ skip_list (1); /* component end. */
24687
+ mio_rparen (); /* component list closing. */
24689
+ skip_list (1); /* symbol end. */
24694
/* Some symbols do not have a namespace (eg. formal arguments),
24695
so the automatic "unique symtree" mechanism must be suppressed
24696
by marking them as referenced. */
24697
Index: gcc/fortran/io.c
24698
===================================================================
24699
--- a/src/gcc/fortran/io.c (.../tags/gcc_4_8_2_release)
24700
+++ b/src/gcc/fortran/io.c (.../branches/gcc-4_8-branch)
24701
@@ -1309,7 +1309,8 @@
24702
return MATCH_ERROR;
24705
- if (gfc_pure (NULL) && gfc_impure_variable (result->symtree->n.sym))
24706
+ bool impure = gfc_impure_variable (result->symtree->n.sym);
24707
+ if (impure && gfc_pure (NULL))
24709
gfc_error ("Variable %s cannot be assigned in PURE procedure at %C",
24711
@@ -1317,8 +1318,8 @@
24712
return MATCH_ERROR;
24715
- if (gfc_implicit_pure (NULL) && gfc_impure_variable (result->symtree->n.sym))
24716
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24718
+ gfc_unset_implicit_pure (NULL);
24722
@@ -1838,8 +1839,7 @@
24726
- if (gfc_implicit_pure (NULL))
24727
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24728
+ gfc_unset_implicit_pure (NULL);
24730
warn = (open->err || open->iostat) ? true : false;
24732
@@ -2251,8 +2251,7 @@
24736
- if (gfc_implicit_pure (NULL))
24737
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24738
+ gfc_unset_implicit_pure (NULL);
24740
warn = (close->iostat || close->err) ? true : false;
24742
@@ -2419,8 +2418,7 @@
24746
- if (gfc_implicit_pure (NULL))
24747
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24748
+ gfc_unset_implicit_pure (NULL);
24751
new_st.ext.filepos = fp;
24752
@@ -3276,9 +3274,8 @@
24753
"an internal file in a PURE procedure",
24756
- if (gfc_implicit_pure (NULL) && (k == M_READ || k == M_WRITE))
24757
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24759
+ if (k == M_READ || k == M_WRITE)
24760
+ gfc_unset_implicit_pure (NULL);
24764
@@ -3809,8 +3806,7 @@
24765
return MATCH_ERROR;
24768
- if (gfc_implicit_pure (NULL))
24769
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24770
+ gfc_unset_implicit_pure (NULL);
24774
@@ -3969,8 +3965,7 @@
24775
return MATCH_ERROR;
24778
- if (gfc_implicit_pure (NULL))
24779
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24780
+ gfc_unset_implicit_pure (NULL);
24782
new_st.block = gfc_get_code ();
24783
new_st.block->op = EXEC_IOLENGTH;
24784
@@ -4023,8 +4018,7 @@
24788
- if (gfc_implicit_pure (NULL))
24789
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24790
+ gfc_unset_implicit_pure (NULL);
24792
if (inquire->id != NULL && inquire->pending == NULL)
24794
@@ -4212,8 +4206,7 @@
24798
- if (gfc_implicit_pure (NULL))
24799
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24800
+ gfc_unset_implicit_pure (NULL);
24802
new_st.op = EXEC_WAIT;
24803
new_st.ext.wait = wait;
24804
Index: gcc/fortran/frontend-passes.c
24805
===================================================================
24806
--- a/src/gcc/fortran/frontend-passes.c (.../tags/gcc_4_8_2_release)
24807
+++ b/src/gcc/fortran/frontend-passes.c (.../branches/gcc-4_8-branch)
24808
@@ -1214,7 +1214,9 @@
24809
/* Replace A // B < A // C with B < C, and A // B < C // B
24811
if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
24812
+ && op1->expr_type == EXPR_OP
24813
&& op1->value.op.op == INTRINSIC_CONCAT
24814
+ && op2->expr_type == EXPR_OP
24815
&& op2->value.op.op == INTRINSIC_CONCAT)
24817
gfc_expr *op1_left = op1->value.op.op1;
24818
Index: gcc/fortran/resolve.c
24819
===================================================================
24820
--- a/src/gcc/fortran/resolve.c (.../tags/gcc_4_8_2_release)
24821
+++ b/src/gcc/fortran/resolve.c (.../branches/gcc-4_8-branch)
24823
/* Perform type resolution on the various structures.
24824
- Copyright (C) 2001-2013 Free Software Foundation, Inc.
24825
+ Copyright (C) 2001-2014 Free Software Foundation, Inc.
24826
Contributed by Andy Vaught
24828
This file is part of GCC.
24829
@@ -1259,9 +1259,10 @@
24832
/* F2003, C1272 (3). */
24833
- if (gfc_pure (NULL) && cons->expr->expr_type == EXPR_VARIABLE
24834
- && (gfc_impure_variable (cons->expr->symtree->n.sym)
24835
- || gfc_is_coindexed (cons->expr)))
24836
+ bool impure = cons->expr->expr_type == EXPR_VARIABLE
24837
+ && (gfc_impure_variable (cons->expr->symtree->n.sym)
24838
+ || gfc_is_coindexed (cons->expr));
24839
+ if (impure && gfc_pure (NULL))
24842
gfc_error ("Invalid expression in the structure constructor for "
24843
@@ -1269,12 +1270,8 @@
24844
comp->name, &cons->expr->where);
24847
- if (gfc_implicit_pure (NULL)
24848
- && cons->expr->expr_type == EXPR_VARIABLE
24849
- && (gfc_impure_variable (cons->expr->symtree->n.sym)
24850
- || gfc_is_coindexed (cons->expr)))
24851
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24854
+ gfc_unset_implicit_pure (NULL);
24858
@@ -3295,8 +3292,7 @@
24862
- if (gfc_implicit_pure (NULL))
24863
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24864
+ gfc_unset_implicit_pure (NULL);
24867
/* Functions without the RECURSIVE attribution are not allowed to
24868
@@ -3361,8 +3357,7 @@
24869
gfc_error ("Subroutine call to '%s' at %L is not PURE", sym->name,
24872
- if (gfc_implicit_pure (NULL))
24873
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24874
+ gfc_unset_implicit_pure (NULL);
24878
@@ -8705,10 +8700,11 @@
24879
&& exp->value.op.op == INTRINSIC_PARENTHESES)
24880
exp = exp->value.op.op1;
24882
- if (exp && exp->expr_type == EXPR_NULL && exp->ts.type == BT_UNKNOWN)
24883
+ if (exp && exp->expr_type == EXPR_NULL
24886
- gfc_error ("NULL intrinsic at %L in data transfer statement requires "
24887
- "MOLD=", &exp->where);
24888
+ gfc_error ("Invalid context for NULL () intrinsic at %L",
24893
@@ -9612,7 +9608,7 @@
24894
if (lhs->expr_type == EXPR_VARIABLE
24895
&& lhs->symtree->n.sym != gfc_current_ns->proc_name
24896
&& lhs->symtree->n.sym->ns != gfc_current_ns)
24897
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24898
+ gfc_unset_implicit_pure (NULL);
24900
if (lhs->ts.type == BT_DERIVED
24901
&& lhs->expr_type == EXPR_VARIABLE
24902
@@ -9620,11 +9616,11 @@
24903
&& rhs->expr_type == EXPR_VARIABLE
24904
&& (gfc_impure_variable (rhs->symtree->n.sym)
24905
|| gfc_is_coindexed (rhs)))
24906
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24907
+ gfc_unset_implicit_pure (NULL);
24909
/* Fortran 2008, C1283. */
24910
if (gfc_is_coindexed (lhs))
24911
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
24912
+ gfc_unset_implicit_pure (NULL);
24916
@@ -11057,7 +11053,7 @@
24919
if (!init_expr && gfc_option.flag_init_character == GFC_INIT_CHARACTER_ON
24920
- && sym->ts.u.cl->length)
24921
+ && sym->ts.u.cl->length && gfc_option.flag_max_stack_var_size != 0)
24923
gfc_actual_arglist *arg;
24924
init_expr = gfc_get_expr ();
24925
@@ -11877,6 +11873,7 @@
24927
gfc_symbol *sym1, *sym2;
24928
const char *pass1, *pass2;
24929
+ gfc_formal_arglist *dummy_args;
24931
gcc_assert (t1->specific && t2->specific);
24932
gcc_assert (!t1->specific->is_generic);
24933
@@ -11899,19 +11896,33 @@
24937
- /* Compare the interfaces. */
24938
+ /* Determine PASS arguments. */
24939
if (t1->specific->nopass)
24941
else if (t1->specific->pass_arg)
24942
pass1 = t1->specific->pass_arg;
24944
- pass1 = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym)->sym->name;
24946
+ dummy_args = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym);
24948
+ pass1 = dummy_args->sym->name;
24952
if (t2->specific->nopass)
24954
else if (t2->specific->pass_arg)
24955
pass2 = t2->specific->pass_arg;
24957
- pass2 = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym)->sym->name;
24959
+ dummy_args = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym);
24961
+ pass2 = dummy_args->sym->name;
24966
+ /* Compare the interfaces. */
24967
if (gfc_compare_interfaces (sym1, sym2, sym2->name, !t1->is_operator, 0,
24968
NULL, 0, pass1, pass2))
24970
@@ -12425,9 +12436,6 @@
24971
resolve_bindings_derived = derived;
24972
resolve_bindings_result = SUCCESS;
24974
- /* Make sure the vtab has been generated. */
24975
- gfc_find_derived_vtab (derived);
24977
if (derived->f2k_derived->tb_sym_root)
24978
gfc_traverse_symtree (derived->f2k_derived->tb_sym_root,
24979
&resolve_typebound_procedure);
24980
@@ -13256,7 +13264,8 @@
24981
if (sym->attr.flavor == FL_UNKNOWN
24982
|| (sym->attr.flavor == FL_PROCEDURE && !sym->attr.intrinsic
24983
&& !sym->attr.generic && !sym->attr.external
24984
- && sym->attr.if_source == IFSRC_UNKNOWN))
24985
+ && sym->attr.if_source == IFSRC_UNKNOWN
24986
+ && sym->ts.type == BT_UNKNOWN))
24989
/* If we find that a flavorless symbol is an interface in one of the
24990
@@ -14376,6 +14385,33 @@
24995
+gfc_unset_implicit_pure (gfc_symbol *sym)
24997
+ gfc_namespace *ns;
25001
+ /* Check if the current procedure is implicit_pure. Walk up
25002
+ the procedure list until we find a procedure. */
25003
+ for (ns = gfc_current_ns; ns; ns = ns->parent)
25005
+ sym = ns->proc_name;
25009
+ if (sym->attr.flavor == FL_PROCEDURE)
25014
+ if (sym->attr.flavor == FL_PROCEDURE)
25015
+ sym->attr.implicit_pure = 0;
25017
+ sym->attr.pure = 0;
25021
/* Test whether the current procedure is elemental or not. */
25024
Index: gcc/fortran/trans-io.c
25025
===================================================================
25026
--- a/src/gcc/fortran/trans-io.c (.../tags/gcc_4_8_2_release)
25027
+++ b/src/gcc/fortran/trans-io.c (.../branches/gcc-4_8-branch)
25028
@@ -243,16 +243,16 @@
25030
/* The code to generate the error. */
25031
gfc_start_block (&block);
25034
arg1 = gfc_build_addr_expr (NULL_TREE, var);
25037
arg2 = build_int_cst (integer_type_node, error_code),
25040
asprintf (&message, "%s", _(msgid));
25041
arg3 = gfc_build_addr_expr (pchar_type_node,
25042
gfc_build_localized_cstring_const (message));
25046
tmp = build_call_expr_loc (input_location,
25047
gfor_fndecl_generate_error, 3, arg1, arg2, arg3);
25049
@@ -521,7 +521,7 @@
25050
gfc_trans_io_runtime_check (cond, var, LIBERROR_BAD_UNIT,
25051
"Unit number in I/O statement too small",
25055
/* UNIT numbers should be less than the max. */
25056
val = gfc_conv_mpz_to_tree (gfc_integer_kinds[i].huge, 4);
25057
cond = fold_build2_loc (input_location, GT_EXPR, boolean_type_node,
25058
@@ -1000,7 +1000,7 @@
25060
mask |= set_string (&block, &post_block, var, IOPARM_open_convert,
25065
mask |= set_parameter_ref (&block, &post_block, var, IOPARM_open_newunit,
25067
@@ -1234,7 +1234,7 @@
25069
mask |= set_parameter_ref (&block, &post_block, var, IOPARM_inquire_exist,
25073
if (p->unit && !p->iostat)
25075
p->iostat = create_dummy_iostat ();
25076
@@ -1322,7 +1322,7 @@
25078
mask |= set_string (&block, &post_block, var, IOPARM_inquire_pad,
25083
mask |= set_string (&block, &post_block, var, IOPARM_inquire_convert,
25085
@@ -1547,7 +1547,7 @@
25088
tree decl = NULL_TREE;
25094
@@ -2032,7 +2032,7 @@
25095
if (gfc_notification_std (GFC_STD_GNU) != SILENT)
25097
gfc_error_now ("Derived type '%s' at %L has PRIVATE components",
25098
- ts->u.derived->name, code != NULL ? &(code->loc) :
25099
+ ts->u.derived->name, code != NULL ? &(code->loc) :
25100
&gfc_current_locus);
25103
@@ -2041,7 +2041,7 @@
25104
ts->kind = ts->u.derived->ts.kind;
25105
ts->f90_type = ts->u.derived->ts.f90_type;
25112
@@ -2123,7 +2123,7 @@
25113
function = iocall[IOCALL_X_CHARACTER_WIDE];
25115
function = iocall[IOCALL_X_CHARACTER_WIDE_WRITE];
25118
tmp = gfc_build_addr_expr (NULL_TREE, dt_parm);
25119
tmp = build_call_expr_loc (input_location,
25120
function, 4, tmp, addr_expr, arg2, arg3);
25121
@@ -2158,6 +2158,12 @@
25122
expr = build_fold_indirect_ref_loc (input_location,
25125
+ /* Make sure that the derived type has been built. An external
25126
+ function, if only referenced in an io statement requires this
25127
+ check (see PR58771). */
25128
+ if (ts->u.derived->backend_decl == NULL_TREE)
25129
+ tmp = gfc_typenode_for_spec (ts);
25131
for (c = ts->u.derived->components; c; c = c->next)
25133
field = c->backend_decl;
25134
Index: gcc/fortran/trans-decl.c
25135
===================================================================
25136
--- a/src/gcc/fortran/trans-decl.c (.../tags/gcc_4_8_2_release)
25137
+++ b/src/gcc/fortran/trans-decl.c (.../branches/gcc-4_8-branch)
25138
@@ -1013,6 +1013,10 @@
25139
TREE_STATIC (decl) = 0;
25140
DECL_EXTERNAL (decl) = 0;
25142
+ /* Avoid uninitialized warnings for optional dummy arguments. */
25143
+ if (sym->attr.optional)
25144
+ TREE_NO_WARNING (decl) = 1;
25146
/* We should never get deferred shape arrays here. We used to because of
25148
gcc_assert (sym->as->type != AS_DEFERRED);
25149
@@ -1358,9 +1362,10 @@
25151
if (sym->attr.flavor == FL_PROCEDURE)
25153
- /* Catch function declarations. Only used for actual parameters,
25154
+ /* Catch functions. Only used for actual parameters,
25155
procedure pointers and procptr initialization targets. */
25156
- if (sym->attr.external || sym->attr.use_assoc || sym->attr.intrinsic)
25157
+ if (sym->attr.external || sym->attr.use_assoc || sym->attr.intrinsic
25158
+ || sym->attr.if_source != IFSRC_DECL)
25160
decl = gfc_get_extern_function_decl (sym);
25161
gfc_set_decl_location (decl, &sym->declared_at);
25162
Index: gcc/fortran/match.c
25163
===================================================================
25164
--- a/src/gcc/fortran/match.c (.../tags/gcc_4_8_2_release)
25165
+++ b/src/gcc/fortran/match.c (.../branches/gcc-4_8-branch)
25166
@@ -1753,8 +1753,7 @@
25167
return MATCH_ERROR;
25170
- if (gfc_implicit_pure (NULL))
25171
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
25172
+ gfc_unset_implicit_pure (NULL);
25174
if (gfc_notify_std (GFC_STD_F2008, "CRITICAL statement at %C")
25176
@@ -2683,8 +2682,7 @@
25180
- if (gfc_implicit_pure (NULL))
25181
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
25182
+ gfc_unset_implicit_pure (NULL);
25184
if (st == ST_STOP && gfc_find_state (COMP_CRITICAL) == SUCCESS)
25186
@@ -2824,8 +2822,7 @@
25187
return MATCH_ERROR;
25190
- if (gfc_implicit_pure (NULL))
25191
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
25192
+ gfc_unset_implicit_pure (NULL);
25194
if (gfc_option.coarray == GFC_FCOARRAY_NONE)
25196
@@ -3020,8 +3017,7 @@
25197
return MATCH_ERROR;
25200
- if (gfc_implicit_pure (NULL))
25201
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
25202
+ gfc_unset_implicit_pure (NULL);
25204
if (gfc_notify_std (GFC_STD_F2008, "SYNC statement at %C")
25206
@@ -3500,15 +3496,15 @@
25207
if (gfc_check_do_variable (tail->expr->symtree))
25210
- if (gfc_pure (NULL) && gfc_impure_variable (tail->expr->symtree->n.sym))
25211
+ bool impure = gfc_impure_variable (tail->expr->symtree->n.sym);
25212
+ if (impure && gfc_pure (NULL))
25214
gfc_error ("Bad allocate-object at %C for a PURE procedure");
25218
- if (gfc_implicit_pure (NULL)
25219
- && gfc_impure_variable (tail->expr->symtree->n.sym))
25220
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
25222
+ gfc_unset_implicit_pure (NULL);
25224
if (tail->expr->ts.deferred)
25226
@@ -3890,14 +3886,15 @@
25228
sym = tail->expr->symtree->n.sym;
25230
- if (gfc_pure (NULL) && gfc_impure_variable (sym))
25231
+ bool impure = gfc_impure_variable (sym);
25232
+ if (impure && gfc_pure (NULL))
25234
gfc_error ("Illegal allocate-object at %C for a PURE procedure");
25238
- if (gfc_implicit_pure (NULL) && gfc_impure_variable (sym))
25239
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
25241
+ gfc_unset_implicit_pure (NULL);
25243
if (gfc_is_coarray (tail->expr)
25244
&& gfc_find_state (COMP_DO_CONCURRENT) == SUCCESS)
25245
Index: gcc/fortran/parse.c
25246
===================================================================
25247
--- a/src/gcc/fortran/parse.c (.../tags/gcc_4_8_2_release)
25248
+++ b/src/gcc/fortran/parse.c (.../branches/gcc-4_8-branch)
25249
@@ -550,8 +550,7 @@
25253
- if (gfc_implicit_pure (NULL))
25254
- gfc_current_ns->proc_name->attr.implicit_pure = 0;
25255
+ gfc_unset_implicit_pure (NULL);
25257
old_locus = gfc_current_locus;
25259
Index: gcc/fortran/check.c
25260
===================================================================
25261
--- a/src/gcc/fortran/check.c (.../tags/gcc_4_8_2_release)
25262
+++ b/src/gcc/fortran/check.c (.../branches/gcc-4_8-branch)
25263
@@ -3208,7 +3208,7 @@
25264
"than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
25267
- else if (shape->expr_type == EXPR_ARRAY)
25268
+ else if (shape->expr_type == EXPR_ARRAY && gfc_is_constant_expr (shape))
25272
Index: gcc/fortran/primary.c
25273
===================================================================
25274
--- a/src/gcc/fortran/primary.c (.../tags/gcc_4_8_2_release)
25275
+++ b/src/gcc/fortran/primary.c (.../branches/gcc-4_8-branch)
25276
@@ -2252,7 +2252,7 @@
25277
case EXPR_FUNCTION:
25278
gfc_clear_attr (&attr);
25280
- if (e->value.function.esym != NULL)
25281
+ if (e->value.function.esym && e->value.function.esym->result)
25283
gfc_symbol *sym = e->value.function.esym->result;
25285
@@ -2540,7 +2540,8 @@
25286
if (parent && !comp)
25289
- actual = actual->next;
25291
+ actual = actual->next;
25294
if (build_actual_constructor (&comp_head, &ctor_head, sym) == FAILURE)
25295
Index: gcc/fortran/trans-intrinsic.c
25296
===================================================================
25297
--- a/src/gcc/fortran/trans-intrinsic.c (.../tags/gcc_4_8_2_release)
25298
+++ b/src/gcc/fortran/trans-intrinsic.c (.../branches/gcc-4_8-branch)
25299
@@ -4685,8 +4685,10 @@
25300
gfc_conv_intrinsic_ichar (gfc_se * se, gfc_expr * expr)
25302
tree args[2], type, pchartype;
25305
- gfc_conv_intrinsic_function_args (se, expr, args, 2);
25306
+ nargs = gfc_intrinsic_argument_list_length (expr);
25307
+ gfc_conv_intrinsic_function_args (se, expr, args, nargs);
25308
gcc_assert (POINTER_TYPE_P (TREE_TYPE (args[1])));
25309
pchartype = gfc_get_pchar_type (expr->value.function.actual->expr->ts.kind);
25310
args[1] = fold_build1_loc (input_location, NOP_EXPR, pchartype, args[1]);
25311
Index: gcc/fortran/simplify.c
25312
===================================================================
25313
--- a/src/gcc/fortran/simplify.c (.../tags/gcc_4_8_2_release)
25314
+++ b/src/gcc/fortran/simplify.c (.../branches/gcc-4_8-branch)
25315
@@ -5528,7 +5528,7 @@
25316
if (e == &gfc_bad_expr || range_check (e, "SHAPE") == &gfc_bad_expr)
25318
gfc_free_expr (result);
25320
+ if (t == SUCCESS)
25321
gfc_clear_shape (shape, source->rank);
25322
return &gfc_bad_expr;
25324
@@ -5536,7 +5536,7 @@
25325
gfc_constructor_append_expr (&result->value.constructor, e, NULL);
25329
+ if (t == SUCCESS)
25330
gfc_clear_shape (shape, source->rank);
25333
Index: gcc/configure.ac
25334
===================================================================
25335
--- a/src/gcc/configure.ac (.../tags/gcc_4_8_2_release)
25336
+++ b/src/gcc/configure.ac (.../branches/gcc-4_8-branch)
25337
@@ -1516,13 +1516,11 @@
25338
/* | [A-Za-z]:[\\/]* ) realsrcdir=${srcdir};;
25339
*) realsrcdir=../${srcdir};;
25341
- saved_CFLAGS="${CFLAGS}"
25342
CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
25343
- LDFLAGS="${LDFLAGS_FOR_BUILD}" \
25344
+ LDFLAGS="${LDFLAGS_FOR_BUILD}" GMPINC="" \
25345
${realsrcdir}/configure \
25346
--enable-languages=${enable_languages-all} \
25347
--target=$target_alias --host=$build_alias --build=$build_alias
25348
- CFLAGS="${saved_CFLAGS}"
25350
# We just finished tests for the build machine, so rename
25351
# the file auto-build.h in the gcc directory.
25352
@@ -1887,6 +1885,7 @@
25353
if test x$build != x$host || test "x$coverage_flags" != x
25355
BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
25356
+ BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CXXFLAGS_FOR_BUILD)'
25357
BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
25360
@@ -3611,6 +3610,19 @@
25361
kasumi_fi_xor %f46, %f48, %f50, %f52],,
25362
[AC_DEFINE(HAVE_AS_SPARC4, 1,
25363
[Define if your assembler supports SPARC4 instructions.])])
25365
+ gcc_GAS_CHECK_FEATURE([LEON instructions],
25366
+ gcc_cv_as_sparc_leon,,
25369
+ .register %g2, #scratch
25370
+ .register %g3, #scratch
25372
+ smac %g2, %g3, %g1
25373
+ umac %g2, %g3, %g1
25374
+ cas [[%g2]], %g3, %g1],,
25375
+ [AC_DEFINE(HAVE_AS_LEON, 1,
25376
+ [Define if your assembler supports LEON instructions.])])
25380
@@ -3749,8 +3761,13 @@
25382
# These two are used unconditionally by i386.[ch]; it is to be defined
25383
# to 1 if the feature is present, 0 otherwise.
25384
+ as_ix86_gotoff_in_data_opt=
25385
+ if test x$gas = xyes; then
25386
+ as_ix86_gotoff_in_data_opt="--32"
25388
gcc_GAS_CHECK_FEATURE([GOTOFF in data],
25389
- gcc_cv_as_ix86_gotoff_in_data, [2,11,0],,
25390
+ gcc_cv_as_ix86_gotoff_in_data, [2,11,0],
25391
+ [$as_ix86_gotoff_in_data_opt],
25395
@@ -3772,6 +3789,12 @@
25396
[AC_DEFINE(HAVE_AS_IX86_REP_LOCK_PREFIX, 1,
25397
[Define if the assembler supports 'rep <insn>, lock <insn>'.])])
25399
+ gcc_GAS_CHECK_FEATURE([ud2 mnemonic],
25400
+ gcc_cv_as_ix86_ud2,,,
25402
+ [AC_DEFINE(HAVE_AS_IX86_UD2, 1,
25403
+ [Define if your assembler supports the 'ud2' mnemonic.])])
25405
gcc_GAS_CHECK_FEATURE([R_386_TLS_GD_PLT reloc],
25406
gcc_cv_as_ix86_tlsgdplt,,,
25407
[call tls_gd@tlsgdplt],
25408
@@ -5193,15 +5216,15 @@
25409
AC_MSG_CHECKING([for exported symbols])
25410
if test "x$export_sym_check" != x; then
25411
echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
25412
- ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest > /dev/null 2>&1
25413
- if $export_sym_check conftest | grep foobar > /dev/null; then
25414
+ ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > /dev/null 2>&1
25415
+ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
25416
: # No need to use a flag
25417
AC_MSG_RESULT([yes])
25419
AC_MSG_RESULT([yes])
25420
AC_MSG_CHECKING([for -rdynamic])
25421
- ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest > /dev/null 2>&1
25422
- if $export_sym_check conftest | grep foobar > /dev/null; then
25423
+ ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest$ac_exeext > /dev/null 2>&1
25424
+ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
25425
plugin_rdynamic=yes
25426
pluginlibs="-rdynamic"
25428
Index: gcc/print-rtl.c
25429
===================================================================
25430
--- a/src/gcc/print-rtl.c (.../tags/gcc_4_8_2_release)
25431
+++ b/src/gcc/print-rtl.c (.../branches/gcc-4_8-branch)
25432
@@ -582,6 +582,8 @@
25434
if (MEM_EXPR (in_rtx))
25435
print_mem_expr (outfile, MEM_EXPR (in_rtx));
25437
+ fputc (' ', outfile);
25439
if (MEM_OFFSET_KNOWN_P (in_rtx))
25440
fprintf (outfile, "+" HOST_WIDE_INT_PRINT_DEC, MEM_OFFSET (in_rtx));
25441
Index: gcc/tree-vectorizer.h
25442
===================================================================
25443
--- a/src/gcc/tree-vectorizer.h (.../tags/gcc_4_8_2_release)
25444
+++ b/src/gcc/tree-vectorizer.h (.../branches/gcc-4_8-branch)
25445
@@ -542,6 +542,10 @@
25449
+ /* The minimum negative dependence distance this stmt participates in
25450
+ or zero if none. */
25451
+ unsigned int min_neg_dist;
25453
/* Not all stmts in the loop need to be vectorized. e.g, the increment
25454
of the loop induction variable and computation of array indexes. relevant
25455
indicates whether the stmt needs to be vectorized. */
25456
@@ -593,6 +597,7 @@
25457
#define STMT_VINFO_GROUP_READ_WRITE_DEPENDENCE(S) (S)->read_write_dep
25458
#define STMT_VINFO_GROUPED_ACCESS(S) ((S)->first_element != NULL && (S)->data_ref_info)
25459
#define STMT_VINFO_LOOP_PHI_EVOLUTION_PART(S) (S)->loop_phi_evolution_part
25460
+#define STMT_VINFO_MIN_NEG_DIST(S) (S)->min_neg_dist
25462
#define GROUP_FIRST_ELEMENT(S) (S)->first_element
25463
#define GROUP_NEXT_ELEMENT(S) (S)->next_element
25464
Index: gcc/sdbout.c
25465
===================================================================
25466
--- a/src/gcc/sdbout.c (.../tags/gcc_4_8_2_release)
25467
+++ b/src/gcc/sdbout.c (.../branches/gcc-4_8-branch)
25468
@@ -1226,7 +1226,10 @@
25469
sdbout_parms (tree parms)
25471
for (; parms; parms = TREE_CHAIN (parms))
25472
- if (DECL_NAME (parms))
25473
+ if (DECL_NAME (parms)
25474
+ && TREE_TYPE (parms) != error_mark_node
25475
+ && DECL_RTL_SET_P (parms)
25476
+ && DECL_INCOMING_RTL (parms))
25478
int current_sym_value = 0;
25479
const char *name = IDENTIFIER_POINTER (DECL_NAME (parms));
25480
@@ -1358,7 +1361,10 @@
25481
sdbout_reg_parms (tree parms)
25483
for (; parms; parms = TREE_CHAIN (parms))
25484
- if (DECL_NAME (parms))
25485
+ if (DECL_NAME (parms)
25486
+ && TREE_TYPE (parms) != error_mark_node
25487
+ && DECL_RTL_SET_P (parms)
25488
+ && DECL_INCOMING_RTL (parms))
25490
const char *name = IDENTIFIER_POINTER (DECL_NAME (parms));
25492
Index: gcc/ipa-split.c
25493
===================================================================
25494
--- a/src/gcc/ipa-split.c (.../tags/gcc_4_8_2_release)
25495
+++ b/src/gcc/ipa-split.c (.../branches/gcc-4_8-branch)
25496
@@ -136,7 +136,7 @@
25497
variable, check it if it is present in bitmap passed via DATA. */
25500
-test_nonssa_use (gimple stmt ATTRIBUTE_UNUSED, tree t, void *data)
25501
+test_nonssa_use (gimple, tree t, tree, void *data)
25503
t = get_base_address (t);
25505
@@ -229,7 +229,7 @@
25507
if (gimple_code (stmt) == GIMPLE_LABEL
25508
&& test_nonssa_use (stmt, gimple_label_label (stmt),
25510
+ NULL_TREE, non_ssa_vars))
25514
@@ -258,7 +258,7 @@
25515
if (virtual_operand_p (gimple_phi_result (stmt)))
25517
if (TREE_CODE (op) != SSA_NAME
25518
- && test_nonssa_use (stmt, op, non_ssa_vars))
25519
+ && test_nonssa_use (stmt, op, op, non_ssa_vars))
25523
@@ -670,7 +670,7 @@
25524
Return true when access to T prevents splitting the function. */
25527
-mark_nonssa_use (gimple stmt ATTRIBUTE_UNUSED, tree t, void *data)
25528
+mark_nonssa_use (gimple, tree t, tree, void *data)
25530
t = get_base_address (t);
25532
@@ -830,7 +830,7 @@
25533
if (TREE_CODE (op) == SSA_NAME)
25534
bitmap_set_bit (used_ssa_names, SSA_NAME_VERSION (op));
25536
- can_split &= !mark_nonssa_use (stmt, op, non_ssa_vars);
25537
+ can_split &= !mark_nonssa_use (stmt, op, op, non_ssa_vars);
25542
===================================================================
25543
--- a/src/gcc/alias.c (.../tags/gcc_4_8_2_release)
25544
+++ b/src/gcc/alias.c (.../branches/gcc-4_8-branch)
25545
@@ -156,7 +156,9 @@
25546
static alias_set_entry get_alias_set_entry (alias_set_type);
25547
static bool nonoverlapping_component_refs_p (const_rtx, const_rtx);
25548
static tree decl_for_component_ref (tree);
25549
-static int write_dependence_p (const_rtx, const_rtx, int);
25550
+static int write_dependence_p (const_rtx,
25551
+ const_rtx, enum machine_mode, rtx,
25552
+ bool, bool, bool);
25554
static void memory_modified_1 (rtx, const_rtx, void *);
25556
@@ -2558,15 +2560,24 @@
25559
/* Returns nonzero if a write to X might alias a previous read from
25560
- (or, if WRITEP is nonzero, a write to) MEM. */
25561
+ (or, if WRITEP is true, a write to) MEM.
25562
+ If X_CANONCALIZED is true, then X_ADDR is the canonicalized address of X,
25563
+ and X_MODE the mode for that access.
25564
+ If MEM_CANONICALIZED is true, MEM is canonicalized. */
25567
-write_dependence_p (const_rtx mem, const_rtx x, int writep)
25568
+write_dependence_p (const_rtx mem,
25569
+ const_rtx x, enum machine_mode x_mode, rtx x_addr,
25570
+ bool mem_canonicalized, bool x_canonicalized, bool writep)
25572
- rtx x_addr, mem_addr;
25577
+ gcc_checking_assert (x_canonicalized
25578
+ ? (x_addr != NULL_RTX && x_mode != VOIDmode)
25579
+ : (x_addr == NULL_RTX && x_mode == VOIDmode));
25581
if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
25584
@@ -2590,17 +2601,21 @@
25585
if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
25588
- x_addr = XEXP (x, 0);
25589
mem_addr = XEXP (mem, 0);
25590
- if (!((GET_CODE (x_addr) == VALUE
25591
- && GET_CODE (mem_addr) != VALUE
25592
- && reg_mentioned_p (x_addr, mem_addr))
25593
- || (GET_CODE (x_addr) != VALUE
25594
- && GET_CODE (mem_addr) == VALUE
25595
- && reg_mentioned_p (mem_addr, x_addr))))
25598
- x_addr = get_addr (x_addr);
25599
- mem_addr = get_addr (mem_addr);
25600
+ x_addr = XEXP (x, 0);
25601
+ if (!((GET_CODE (x_addr) == VALUE
25602
+ && GET_CODE (mem_addr) != VALUE
25603
+ && reg_mentioned_p (x_addr, mem_addr))
25604
+ || (GET_CODE (x_addr) != VALUE
25605
+ && GET_CODE (mem_addr) == VALUE
25606
+ && reg_mentioned_p (mem_addr, x_addr))))
25608
+ x_addr = get_addr (x_addr);
25609
+ if (!mem_canonicalized)
25610
+ mem_addr = get_addr (mem_addr);
25615
@@ -2616,11 +2631,16 @@
25619
- x_addr = canon_rtx (x_addr);
25620
- mem_addr = canon_rtx (mem_addr);
25621
+ if (!x_canonicalized)
25623
+ x_addr = canon_rtx (x_addr);
25624
+ x_mode = GET_MODE (x);
25626
+ if (!mem_canonicalized)
25627
+ mem_addr = canon_rtx (mem_addr);
25629
if ((ret = memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
25630
- SIZE_FOR_MODE (x), x_addr, 0)) != -1)
25631
+ GET_MODE_SIZE (x_mode), x_addr, 0)) != -1)
25634
if (nonoverlapping_memrefs_p (x, mem, false))
25635
@@ -2634,15 +2654,33 @@
25637
anti_dependence (const_rtx mem, const_rtx x)
25639
- return write_dependence_p (mem, x, /*writep=*/0);
25640
+ return write_dependence_p (mem, x, VOIDmode, NULL_RTX,
25641
+ /*mem_canonicalized=*/false,
25642
+ /*x_canonicalized*/false, /*writep=*/false);
25645
+/* Likewise, but we already have a canonicalized MEM, and X_ADDR for X.
25646
+ Also, consider X in X_MODE (which might be from an enclosing
25647
+ STRICT_LOW_PART / ZERO_EXTRACT).
25648
+ If MEM_CANONICALIZED is true, MEM is canonicalized. */
25651
+canon_anti_dependence (const_rtx mem, bool mem_canonicalized,
25652
+ const_rtx x, enum machine_mode x_mode, rtx x_addr)
25654
+ return write_dependence_p (mem, x, x_mode, x_addr,
25655
+ mem_canonicalized, /*x_canonicalized=*/true,
25656
+ /*writep=*/false);
25659
/* Output dependence: X is written after store in MEM takes place. */
25662
output_dependence (const_rtx mem, const_rtx x)
25664
- return write_dependence_p (mem, x, /*writep=*/1);
25665
+ return write_dependence_p (mem, x, VOIDmode, NULL_RTX,
25666
+ /*mem_canonicalized=*/false,
25667
+ /*x_canonicalized*/false, /*writep=*/true);
25671
@@ -2871,17 +2909,14 @@
25672
/* Wipe the reg_seen array clean. */
25673
bitmap_clear (reg_seen);
25675
- /* Mark all hard registers which may contain an address.
25676
- The stack, frame and argument pointers may contain an address.
25677
- An argument register which can hold a Pmode value may contain
25678
- an address even if it is not in BASE_REGS.
25679
+ /* Initialize the alias information for this pass. */
25680
+ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
25681
+ if (static_reg_base_value[i])
25683
+ new_reg_base_value[i] = static_reg_base_value[i];
25684
+ bitmap_set_bit (reg_seen, i);
25687
- The address expression is VOIDmode for an argument and
25688
- Pmode for other registers. */
25690
- memcpy (new_reg_base_value, static_reg_base_value,
25691
- FIRST_PSEUDO_REGISTER * sizeof (rtx));
25693
/* Walk the insns adding values to the new_reg_base_value array. */
25694
for (i = 0; i < rpo_cnt; i++)
25696
Index: gcc/tree-vect-loop.c
25697
===================================================================
25698
--- a/src/gcc/tree-vect-loop.c (.../tags/gcc_4_8_2_release)
25699
+++ b/src/gcc/tree-vect-loop.c (.../branches/gcc-4_8-branch)
25700
@@ -1537,7 +1537,7 @@
25702
if (!LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo)
25703
|| LOOP_VINFO_INT_NITERS (loop_vinfo) % vectorization_factor != 0
25704
- || LOOP_PEELING_FOR_ALIGNMENT (loop_vinfo))
25705
+ || LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo))
25707
if (dump_enabled_p ())
25708
dump_printf_loc (MSG_NOTE, vect_location, "epilog loop required.");
25709
@@ -2097,6 +2097,12 @@
25710
|| (!check_reduction && flow_loop_nested_p (vect_loop, loop)));
25712
name = PHI_RESULT (phi);
25713
+ /* ??? If there are no uses of the PHI result the inner loop reduction
25714
+ won't be detected as possibly double-reduction by vectorizable_reduction
25715
+ because that tries to walk the PHI arg from the preheader edge which
25716
+ can be constant. See PR60382. */
25717
+ if (has_zero_uses (name))
25720
FOR_EACH_IMM_USE_FAST (use_p, imm_iter, name)
25722
@@ -3115,7 +3121,6 @@
25723
stmt_vec_info stmt_vinfo = vinfo_for_stmt (iv_phi);
25724
loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_vinfo);
25725
struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
25726
- tree scalar_type;
25729
edge pe = loop_preheader_edge (loop);
25730
@@ -3122,7 +3127,6 @@
25731
struct loop *iv_loop;
25732
basic_block new_bb;
25733
tree new_vec, vec_init, vec_step, t;
25737
gimple init_stmt, induction_phi, new_stmt;
25738
@@ -3130,7 +3134,6 @@
25739
tree init_expr, step_expr;
25740
int vf = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
25745
stmt_vec_info phi_info = vinfo_for_stmt (iv_phi);
25746
@@ -3159,16 +3162,14 @@
25747
latch_e = loop_latch_edge (iv_loop);
25748
loop_arg = PHI_ARG_DEF_FROM_EDGE (iv_phi, latch_e);
25750
- access_fn = analyze_scalar_evolution (iv_loop, PHI_RESULT (iv_phi));
25751
- gcc_assert (access_fn);
25752
- STRIP_NOPS (access_fn);
25753
- ok = vect_is_simple_iv_evolution (iv_loop->num, access_fn,
25754
- &init_expr, &step_expr);
25756
+ step_expr = STMT_VINFO_LOOP_PHI_EVOLUTION_PART (phi_info);
25757
+ gcc_assert (step_expr != NULL_TREE);
25759
pe = loop_preheader_edge (iv_loop);
25760
+ init_expr = PHI_ARG_DEF_FROM_EDGE (iv_phi,
25761
+ loop_preheader_edge (iv_loop));
25763
- scalar_type = TREE_TYPE (init_expr);
25764
- vectype = get_vectype_for_scalar_type (scalar_type);
25765
+ vectype = get_vectype_for_scalar_type (TREE_TYPE (init_expr));
25766
resvectype = get_vectype_for_scalar_type (TREE_TYPE (PHI_RESULT (iv_phi)));
25767
gcc_assert (vectype);
25768
nunits = TYPE_VECTOR_SUBPARTS (vectype);
25769
@@ -3177,6 +3178,16 @@
25770
gcc_assert (phi_info);
25771
gcc_assert (ncopies >= 1);
25773
+ /* Convert the step to the desired type. */
25774
+ step_expr = force_gimple_operand (fold_convert (TREE_TYPE (vectype),
25776
+ &stmts, true, NULL_TREE);
25779
+ new_bb = gsi_insert_seq_on_edge_immediate (pe, stmts);
25780
+ gcc_assert (!new_bb);
25783
/* Find the first insertion point in the BB. */
25784
si = gsi_after_labels (bb);
25786
@@ -3186,9 +3197,7 @@
25787
/* iv_loop is nested in the loop to be vectorized. init_expr had already
25788
been created during vectorization of previous stmts. We obtain it
25789
from the STMT_VINFO_VEC_STMT of the defining stmt. */
25790
- tree iv_def = PHI_ARG_DEF_FROM_EDGE (iv_phi,
25791
- loop_preheader_edge (iv_loop));
25792
- vec_init = vect_get_vec_def_for_operand (iv_def, iv_phi, NULL);
25793
+ vec_init = vect_get_vec_def_for_operand (init_expr, iv_phi, NULL);
25794
/* If the initial value is not of proper type, convert it. */
25795
if (!useless_type_conversion_p (vectype, TREE_TYPE (vec_init)))
25797
@@ -3211,8 +3220,11 @@
25799
/* iv_loop is the loop to be vectorized. Create:
25800
vec_init = [X, X+S, X+2*S, X+3*S] (S = step_expr, X = init_expr) */
25801
- new_var = vect_get_new_vect_var (scalar_type, vect_scalar_var, "var_");
25802
- new_name = force_gimple_operand (init_expr, &stmts, false, new_var);
25803
+ new_var = vect_get_new_vect_var (TREE_TYPE (vectype),
25804
+ vect_scalar_var, "var_");
25805
+ new_name = force_gimple_operand (fold_convert (TREE_TYPE (vectype),
25807
+ &stmts, false, new_var);
25810
new_bb = gsi_insert_seq_on_edge_immediate (pe, stmts);
25811
@@ -3224,9 +3236,7 @@
25812
for (i = 1; i < nunits; i++)
25814
/* Create: new_name_i = new_name + step_expr */
25815
- enum tree_code code = POINTER_TYPE_P (scalar_type)
25816
- ? POINTER_PLUS_EXPR : PLUS_EXPR;
25817
- init_stmt = gimple_build_assign_with_ops (code, new_var,
25818
+ init_stmt = gimple_build_assign_with_ops (PLUS_EXPR, new_var,
25819
new_name, step_expr);
25820
new_name = make_ssa_name (new_var, init_stmt);
25821
gimple_assign_set_lhs (init_stmt, new_name);
25822
@@ -5564,8 +5574,9 @@
25823
&& !STMT_VINFO_LIVE_P (stmt_info))
25826
- if ((TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info))
25827
- != (unsigned HOST_WIDE_INT) vectorization_factor)
25828
+ if (STMT_VINFO_VECTYPE (stmt_info)
25829
+ && (TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info))
25830
+ != (unsigned HOST_WIDE_INT) vectorization_factor)
25831
&& dump_enabled_p ())
25832
dump_printf_loc (MSG_NOTE, vect_location, "multiple-types.");
25834
Index: gcc/lra-coalesce.c
25835
===================================================================
25836
--- a/src/gcc/lra-coalesce.c (.../tags/gcc_4_8_2_release)
25837
+++ b/src/gcc/lra-coalesce.c (.../branches/gcc-4_8-branch)
25838
@@ -221,9 +221,12 @@
25840
rtx mv, set, insn, next, *sorted_moves;
25841
int i, mv_num, sregno, dregno;
25842
+ unsigned int regno;
25843
int coalesced_moves;
25844
int max_regno = max_reg_num ();
25845
bitmap_head involved_insns_bitmap;
25846
+ bitmap_head result_pseudo_vals_bitmap;
25847
+ bitmap_iterator bi;
25849
timevar_push (TV_LRA_COALESCE);
25851
@@ -318,6 +321,34 @@
25855
+ /* If we have situation after inheritance pass:
25857
+ r1 <- ... insn originally setting p1
25858
+ i1 <- r1 setting inheritance i1 from reload r1
25860
+ ... <- ... p2 ... dead p2
25866
+ And we are coalescing p1 and p2 using p1. In this case i1 and p1
25867
+ should have different values, otherwise they can get the same
25868
+ hard reg and this is wrong for insn using p2 before coalescing.
25869
+ So invalidate such inheritance pseudo values. */
25870
+ bitmap_initialize (&result_pseudo_vals_bitmap, ®_obstack);
25871
+ EXECUTE_IF_SET_IN_BITMAP (&coalesced_pseudos_bitmap, 0, regno, bi)
25872
+ bitmap_set_bit (&result_pseudo_vals_bitmap,
25873
+ lra_reg_info[first_coalesced_pseudo[regno]].val);
25874
+ EXECUTE_IF_SET_IN_BITMAP (&lra_inheritance_pseudos, 0, regno, bi)
25875
+ if (bitmap_bit_p (&result_pseudo_vals_bitmap, lra_reg_info[regno].val))
25877
+ lra_set_regno_unique_value (regno);
25878
+ if (lra_dump_file != NULL)
25879
+ fprintf (lra_dump_file,
25880
+ " Make unique value for inheritance r%d\n", regno);
25882
+ bitmap_clear (&result_pseudo_vals_bitmap);
25883
bitmap_clear (&used_pseudos_bitmap);
25884
bitmap_clear (&involved_insns_bitmap);
25885
bitmap_clear (&coalesced_pseudos_bitmap);
25886
Index: gcc/tree-vect-data-refs.c
25887
===================================================================
25888
--- a/src/gcc/tree-vect-data-refs.c (.../tags/gcc_4_8_2_release)
25889
+++ b/src/gcc/tree-vect-data-refs.c (.../branches/gcc-4_8-branch)
25890
@@ -739,6 +739,13 @@
25891
if (dump_enabled_p ())
25892
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
25893
"dependence distance negative.");
25894
+ /* Record a negative dependence distance to later limit the
25895
+ amount of stmt copying / unrolling we can perform.
25896
+ Only need to handle read-after-write dependence. */
25897
+ if (DR_IS_READ (drb)
25898
+ && (STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) == 0
25899
+ || STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) > (unsigned)dist))
25900
+ STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) = dist;
25904
Index: gcc/gimplify.c
25905
===================================================================
25906
--- a/src/gcc/gimplify.c (.../tags/gcc_4_8_2_release)
25907
+++ b/src/gcc/gimplify.c (.../branches/gcc-4_8-branch)
25908
@@ -2060,6 +2060,9 @@
25909
/* Nonlocal VLAs seen in the current function. */
25910
static struct pointer_set_t *nonlocal_vlas;
25912
+/* The VAR_DECLs created for nonlocal VLAs for debug info purposes. */
25913
+static tree nonlocal_vla_vars;
25915
/* Gimplify a VAR_DECL or PARM_DECL. Return GS_OK if we expanded a
25916
DECL_VALUE_EXPR, and it's worth re-examining things. */
25918
@@ -2106,14 +2109,13 @@
25919
ctx = ctx->outer_context;
25920
if (!ctx && !pointer_set_insert (nonlocal_vlas, decl))
25922
- tree copy = copy_node (decl), block;
25923
+ tree copy = copy_node (decl);
25925
lang_hooks.dup_lang_specific_decl (copy);
25926
SET_DECL_RTL (copy, 0);
25927
TREE_USED (copy) = 1;
25928
- block = DECL_INITIAL (current_function_decl);
25929
- DECL_CHAIN (copy) = BLOCK_VARS (block);
25930
- BLOCK_VARS (block) = copy;
25931
+ DECL_CHAIN (copy) = nonlocal_vla_vars;
25932
+ nonlocal_vla_vars = copy;
25933
SET_DECL_VALUE_EXPR (copy, unshare_expr (value_expr));
25934
DECL_HAS_VALUE_EXPR_P (copy) = 1;
25936
@@ -4369,7 +4371,7 @@
25937
unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
25938
tree index = bitsize_int (indexi);
25939
if (offset / part_widthi
25940
- <= TYPE_VECTOR_SUBPARTS (TREE_TYPE (addrtype)))
25941
+ < TYPE_VECTOR_SUBPARTS (TREE_TYPE (addrtype)))
25942
return fold_build3 (BIT_FIELD_REF, type, TREE_OPERAND (addr, 0),
25943
part_width, index);
25945
@@ -6131,7 +6133,7 @@
25946
region's REDUCTION clause. */
25949
-omp_check_private (struct gimplify_omp_ctx *ctx, tree decl)
25950
+omp_check_private (struct gimplify_omp_ctx *ctx, tree decl, bool copyprivate)
25954
@@ -6140,8 +6142,11 @@
25955
ctx = ctx->outer_context;
25957
return !(is_global_var (decl)
25958
- /* References might be private, but might be shared too. */
25959
- || lang_hooks.decls.omp_privatize_by_reference (decl));
25960
+ /* References might be private, but might be shared too,
25961
+ when checking for copyprivate, assume they might be
25962
+ private, otherwise assume they might be shared. */
25964
+ && lang_hooks.decls.omp_privatize_by_reference (decl)));
25966
n = splay_tree_lookup (ctx->variables, (splay_tree_key) decl);
25968
@@ -6267,12 +6272,36 @@
25972
+ if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_COPYPRIVATE
25974
+ && !omp_check_private (ctx, decl, true))
25977
+ if (is_global_var (decl))
25979
+ if (DECL_THREAD_LOCAL_P (decl))
25981
+ else if (DECL_HAS_VALUE_EXPR_P (decl))
25983
+ tree value = get_base_address (DECL_VALUE_EXPR (decl));
25986
+ && DECL_P (value)
25987
+ && DECL_THREAD_LOCAL_P (value))
25992
+ error_at (OMP_CLAUSE_LOCATION (c),
25993
+ "copyprivate variable %qE is not threadprivate"
25994
+ " or private in outer context", DECL_NAME (decl));
25998
omp_notice_variable (outer_ctx, decl, true);
25999
if (check_non_private
26000
&& region_type == ORT_WORKSHARE
26001
- && omp_check_private (ctx, decl))
26002
+ && omp_check_private (ctx, decl, false))
26004
error ("%s variable %qE is private in outer context",
26005
check_non_private, DECL_NAME (decl));
26006
@@ -8261,6 +8290,21 @@
26010
+ if (nonlocal_vla_vars)
26012
+ /* tree-nested.c may later on call declare_vars (..., true);
26013
+ which relies on BLOCK_VARS chain to be the tail of the
26014
+ gimple_bind_vars chain. Ensure we don't violate that
26016
+ if (gimple_bind_block (outer_bind)
26017
+ == DECL_INITIAL (current_function_decl))
26018
+ declare_vars (nonlocal_vla_vars, outer_bind, true);
26020
+ BLOCK_VARS (DECL_INITIAL (current_function_decl))
26021
+ = chainon (BLOCK_VARS (DECL_INITIAL (current_function_decl)),
26022
+ nonlocal_vla_vars);
26023
+ nonlocal_vla_vars = NULL_TREE;
26025
pointer_set_destroy (nonlocal_vlas);
26026
nonlocal_vlas = NULL;
26028
Index: gcc/tree-dfa.c
26029
===================================================================
26030
--- a/src/gcc/tree-dfa.c (.../tags/gcc_4_8_2_release)
26031
+++ b/src/gcc/tree-dfa.c (.../branches/gcc-4_8-branch)
26032
@@ -386,7 +386,6 @@
26033
double_int bit_offset = double_int_zero;
26034
HOST_WIDE_INT hbit_offset;
26035
bool seen_variable_array_ref = false;
26038
/* First get the final access size from just the outermost expression. */
26039
if (TREE_CODE (exp) == COMPONENT_REF)
26040
@@ -417,8 +416,6 @@
26041
and find the ultimate containing object. */
26044
- base_type = TREE_TYPE (exp);
26046
switch (TREE_CODE (exp))
26048
case BIT_FIELD_REF:
26049
@@ -543,7 +540,38 @@
26050
case VIEW_CONVERT_EXPR:
26053
+ case TARGET_MEM_REF:
26054
+ /* Via the variable index or index2 we can reach the
26055
+ whole object. Still hand back the decl here. */
26056
+ if (TREE_CODE (TMR_BASE (exp)) == ADDR_EXPR
26057
+ && (TMR_INDEX (exp) || TMR_INDEX2 (exp)))
26059
+ exp = TREE_OPERAND (TMR_BASE (exp), 0);
26060
+ bit_offset = double_int_zero;
26066
+ /* We need to deal with variable arrays ending structures such as
26067
+ struct { int length; int a[1]; } x; x.a[d]
26068
+ struct { struct { int a; int b; } a[1]; } x; x.a[d].a
26069
+ struct { struct { int a[1]; } a[1]; } x; x.a[0][d], x.a[d][0]
26070
+ struct { int len; union { int a[1]; struct X x; } u; } x; x.u.a[d]
26071
+ where we do not know maxsize for variable index accesses to
26072
+ the array. The simplest way to conservatively deal with this
26073
+ is to punt in the case that offset + maxsize reaches the
26074
+ base type boundary. This needs to include possible trailing
26075
+ padding that is there for alignment purposes. */
26076
+ if (seen_variable_array_ref
26078
+ && (!bit_offset.fits_shwi ()
26079
+ || !host_integerp (TYPE_SIZE (TREE_TYPE (exp)), 1)
26080
+ || (bit_offset.to_shwi () + maxsize
26081
+ == (HOST_WIDE_INT) TREE_INT_CST_LOW
26082
+ (TYPE_SIZE (TREE_TYPE (exp))))))
26085
/* Hand back the decl for MEM[&decl, off]. */
26086
if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR)
26088
@@ -565,37 +593,6 @@
26092
- case TARGET_MEM_REF:
26093
- /* Hand back the decl for MEM[&decl, off]. */
26094
- if (TREE_CODE (TMR_BASE (exp)) == ADDR_EXPR)
26096
- /* Via the variable index or index2 we can reach the
26098
- if (TMR_INDEX (exp) || TMR_INDEX2 (exp))
26100
- exp = TREE_OPERAND (TMR_BASE (exp), 0);
26101
- bit_offset = double_int_zero;
26105
- if (integer_zerop (TMR_OFFSET (exp)))
26106
- exp = TREE_OPERAND (TMR_BASE (exp), 0);
26109
- double_int off = mem_ref_offset (exp);
26110
- off = off.alshift (BITS_PER_UNIT == 8
26111
- ? 3 : exact_log2 (BITS_PER_UNIT),
26112
- HOST_BITS_PER_DOUBLE_INT);
26113
- off += bit_offset;
26114
- if (off.fits_shwi ())
26116
- bit_offset = off;
26117
- exp = TREE_OPERAND (TMR_BASE (exp), 0);
26126
@@ -602,8 +599,18 @@
26128
exp = TREE_OPERAND (exp, 0);
26131
+ /* We need to deal with variable arrays ending structures. */
26132
+ if (seen_variable_array_ref
26134
+ && (!bit_offset.fits_shwi ()
26135
+ || !host_integerp (TYPE_SIZE (TREE_TYPE (exp)), 1)
26136
+ || (bit_offset.to_shwi () + maxsize
26137
+ == (HOST_WIDE_INT)
26138
+ TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (exp))))))
26143
if (!bit_offset.fits_shwi ())
26146
@@ -615,24 +622,6 @@
26148
hbit_offset = bit_offset.to_shwi ();
26150
- /* We need to deal with variable arrays ending structures such as
26151
- struct { int length; int a[1]; } x; x.a[d]
26152
- struct { struct { int a; int b; } a[1]; } x; x.a[d].a
26153
- struct { struct { int a[1]; } a[1]; } x; x.a[0][d], x.a[d][0]
26154
- struct { int len; union { int a[1]; struct X x; } u; } x; x.u.a[d]
26155
- where we do not know maxsize for variable index accesses to
26156
- the array. The simplest way to conservatively deal with this
26157
- is to punt in the case that offset + maxsize reaches the
26158
- base type boundary. This needs to include possible trailing padding
26159
- that is there for alignment purposes. */
26161
- if (seen_variable_array_ref
26163
- && (!host_integerp (TYPE_SIZE (base_type), 1)
26164
- || (hbit_offset + maxsize
26165
- == (signed) TREE_INT_CST_LOW (TYPE_SIZE (base_type)))))
26168
/* In case of a decl or constant base object we can do better. */
26171
Index: gcc/gimple-fold.c
26172
===================================================================
26173
--- a/src/gcc/gimple-fold.c (.../tags/gcc_4_8_2_release)
26174
+++ b/src/gcc/gimple-fold.c (.../branches/gcc-4_8-branch)
26175
@@ -178,7 +178,7 @@
26176
/* Make sure we create a cgraph node for functions we'll reference.
26177
They can be non-existent if the reference comes from an entry
26178
of an external vtable for example. */
26179
- cgraph_get_create_node (base);
26180
+ cgraph_get_create_real_symbol_node (base);
26182
/* Fixup types in global initializers. */
26183
if (TREE_TYPE (TREE_TYPE (cval)) != TREE_TYPE (TREE_OPERAND (cval, 0)))
26184
@@ -866,6 +866,7 @@
26186
case BUILT_IN_STRCPY:
26187
case BUILT_IN_STRNCPY:
26188
+ case BUILT_IN_STRCAT:
26192
@@ -941,6 +942,13 @@
26196
+ case BUILT_IN_STRCAT:
26197
+ if (val[1] && is_gimple_val (val[1]) && nargs == 2)
26198
+ result = fold_builtin_strcat (loc, gimple_call_arg (stmt, 0),
26199
+ gimple_call_arg (stmt, 1),
26203
case BUILT_IN_FPUTS:
26205
result = fold_builtin_fputs (loc, gimple_call_arg (stmt, 0),
26206
Index: gcc/cfgexpand.c
26207
===================================================================
26208
--- a/src/gcc/cfgexpand.c (.../tags/gcc_4_8_2_release)
26209
+++ b/src/gcc/cfgexpand.c (.../branches/gcc-4_8-branch)
26210
@@ -331,7 +331,7 @@
26211
enter its partition number into bitmap DATA. */
26214
-visit_op (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
26215
+visit_op (gimple, tree op, tree, void *data)
26217
bitmap active = (bitmap)data;
26218
op = get_base_address (op);
26219
@@ -351,7 +351,7 @@
26220
from bitmap DATA. */
26223
-visit_conflict (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
26224
+visit_conflict (gimple, tree op, tree, void *data)
26226
bitmap active = (bitmap)data;
26227
op = get_base_address (op);
26228
@@ -385,7 +385,7 @@
26231
gimple_stmt_iterator gsi;
26232
- bool (*visit)(gimple, tree, void *);
26233
+ walk_stmt_load_store_addr_fn visit;
26235
bitmap_clear (work);
26236
FOR_EACH_EDGE (e, ei, bb->preds)
26237
@@ -4707,14 +4707,18 @@
26240
rebuild_jump_labels_chain (e->insns.r);
26241
- /* Avoid putting insns before parm_birth_insn. */
26242
+ /* Put insns after parm birth, but before
26243
+ NOTE_INSNS_FUNCTION_BEG. */
26244
if (e->src == ENTRY_BLOCK_PTR
26245
- && single_succ_p (ENTRY_BLOCK_PTR)
26246
- && parm_birth_insn)
26247
+ && single_succ_p (ENTRY_BLOCK_PTR))
26249
rtx insns = e->insns.r;
26250
e->insns.r = NULL_RTX;
26251
- emit_insn_after_noloc (insns, parm_birth_insn, e->dest);
26252
+ if (NOTE_P (parm_birth_insn)
26253
+ && NOTE_KIND (parm_birth_insn) == NOTE_INSN_FUNCTION_BEG)
26254
+ emit_insn_before_noloc (insns, parm_birth_insn, e->dest);
26256
+ emit_insn_after_noloc (insns, parm_birth_insn, e->dest);
26259
commit_one_edge_insertion (e);
26260
Index: gcc/cselib.c
26261
===================================================================
26262
--- a/src/gcc/cselib.c (.../tags/gcc_4_8_2_release)
26263
+++ b/src/gcc/cselib.c (.../branches/gcc-4_8-branch)
26264
@@ -2260,8 +2260,8 @@
26267
if (num_mems < PARAM_VALUE (PARAM_MAX_CSELIB_MEMORY_LOCATIONS)
26268
- && ! canon_true_dependence (mem_rtx, GET_MODE (mem_rtx),
26269
- mem_addr, x, NULL_RTX))
26270
+ && ! canon_anti_dependence (x, false, mem_rtx,
26271
+ GET_MODE (mem_rtx), mem_addr))
26275
Index: gcc/tree-ssa-pre.c
26276
===================================================================
26277
--- a/src/gcc/tree-ssa-pre.c (.../tags/gcc_4_8_2_release)
26278
+++ b/src/gcc/tree-ssa-pre.c (.../branches/gcc-4_8-branch)
26279
@@ -3664,6 +3664,12 @@
26280
if (dump_file && dump_flags & TDF_DETAILS)
26281
fprintf (dump_file, "Starting insert iteration %d\n", num_iterations);
26282
new_stuff = insert_aux (ENTRY_BLOCK_PTR);
26284
+ /* Clear the NEW sets before the next iteration. We have already
26285
+ fully propagated its contents. */
26288
+ bitmap_set_free (NEW_SETS (bb));
26290
statistics_histogram_event (cfun, "insert iterations", num_iterations);
26292
Index: gcc/cfgcleanup.c
26293
===================================================================
26294
--- a/src/gcc/cfgcleanup.c (.../tags/gcc_4_8_2_release)
26295
+++ b/src/gcc/cfgcleanup.c (.../branches/gcc-4_8-branch)
26296
@@ -1293,7 +1293,6 @@
26298
rtx i1, i2, last1, last2, afterlast1, afterlast2;
26301
enum replace_direction dir, last_dir, afterlast_dir;
26302
bool follow_fallthru, did_fallthru;
26304
@@ -1321,8 +1320,9 @@
26305
|| (returnjump_p (i2) && !side_effects_p (PATTERN (i2))))
26308
- /* Count everything except for unconditional jump as insn. */
26309
- if (!simplejump_p (i2) && !returnjump_p (i2) && last1)
26310
+ /* Count everything except for unconditional jump as insn.
26311
+ Don't count any jumps if dir_p is NULL. */
26312
+ if (!simplejump_p (i2) && !returnjump_p (i2) && last1 && dir_p)
26314
i2 = PREV_INSN (i2);
26316
@@ -1373,8 +1373,8 @@
26317
last1 = i1, last2 = i2;
26318
afterlast_dir = last_dir;
26320
- p1 = PATTERN (i1);
26321
- if (!(GET_CODE (p1) == USE || GET_CODE (p1) == CLOBBER))
26322
+ if (GET_CODE (PATTERN (i1)) != USE
26323
+ && GET_CODE (PATTERN (i1)) != CLOBBER)
26327
@@ -1420,7 +1420,8 @@
26328
/* Like flow_find_cross_jump, except start looking for a matching sequence from
26329
the head of the two blocks. Do not include jumps at the end.
26330
If STOP_AFTER is nonzero, stop after finding that many matching
26332
+ instructions. If STOP_AFTER is zero, count all INSN_P insns, if it is
26333
+ non-zero, only count active insns. */
26336
flow_find_head_matching_sequence (basic_block bb1, basic_block bb2, rtx *f1,
26337
@@ -1492,7 +1493,10 @@
26339
beforelast1 = last1, beforelast2 = last2;
26340
last1 = i1, last2 = i2;
26343
+ || (GET_CODE (PATTERN (i1)) != USE
26344
+ && GET_CODE (PATTERN (i1)) != CLOBBER))
26348
if (i1 == BB_END (bb1) || i2 == BB_END (bb2)
26349
Index: gcc/simplify-rtx.c
26350
===================================================================
26351
--- a/src/gcc/simplify-rtx.c (.../tags/gcc_4_8_2_release)
26352
+++ b/src/gcc/simplify-rtx.c (.../branches/gcc-4_8-branch)
26353
@@ -639,11 +639,16 @@
26354
XEXP (op, 0), origmode);
26357
- /* Simplify (truncate:SI (op:DI (x:DI) (y:DI)))
26358
- to (op:SI (truncate:SI (x:DI)) (truncate:SI (x:DI))). */
26359
- if (GET_CODE (op) == PLUS
26360
- || GET_CODE (op) == MINUS
26361
- || GET_CODE (op) == MULT)
26362
+ /* If the machine can perform operations in the truncated mode, distribute
26363
+ the truncation, i.e. simplify (truncate:QI (op:SI (x:SI) (y:SI))) into
26364
+ (op:QI (truncate:QI (x:SI)) (truncate:QI (y:SI))). */
26366
+#ifdef WORD_REGISTER_OPERATIONS
26367
+ && precision >= BITS_PER_WORD
26369
+ && (GET_CODE (op) == PLUS
26370
+ || GET_CODE (op) == MINUS
26371
+ || GET_CODE (op) == MULT))
26373
rtx op0 = simplify_gen_unary (TRUNCATE, mode, XEXP (op, 0), op_mode);
26375
Index: gcc/tree-ssa-live.c
26376
===================================================================
26377
--- a/src/gcc/tree-ssa-live.c (.../tags/gcc_4_8_2_release)
26378
+++ b/src/gcc/tree-ssa-live.c (.../branches/gcc-4_8-branch)
26379
@@ -394,7 +394,8 @@
26381
/* When a global var becomes used for the first time also walk its
26382
initializer (non global ones don't have any). */
26383
- if (set_is_used (t) && is_global_var (t))
26384
+ if (set_is_used (t) && is_global_var (t)
26385
+ && DECL_CONTEXT (t) == current_function_decl)
26386
mark_all_vars_used (&DECL_INITIAL (t));
26388
/* remove_unused_scope_block_p requires information about labels
26389
Index: gcc/tree-sra.c
26390
===================================================================
26391
--- a/src/gcc/tree-sra.c (.../tags/gcc_4_8_2_release)
26392
+++ b/src/gcc/tree-sra.c (.../branches/gcc-4_8-branch)
26393
@@ -1161,8 +1161,7 @@
26394
GIMPLE_ASM operands with memory constrains which cannot be scalarized. */
26397
-asm_visit_addr (gimple stmt ATTRIBUTE_UNUSED, tree op,
26398
- void *data ATTRIBUTE_UNUSED)
26399
+asm_visit_addr (gimple, tree op, tree, void *)
26401
op = get_base_address (op);
26403
@@ -2890,6 +2889,10 @@
26408
+ && !useless_type_conversion_p (lacc->type, TREE_TYPE (drhs)))
26409
+ drhs = fold_build1_loc (loc, VIEW_CONVERT_EXPR,
26410
+ lacc->type, drhs);
26411
ds = gimple_build_debug_bind (get_access_replacement (lacc),
26412
drhs, gsi_stmt (*old_gsi));
26413
gsi_insert_after (new_gsi, ds, GSI_NEW_STMT);
26414
@@ -4868,6 +4871,14 @@
26418
+ if (!opt_for_fn (node->symbol.decl, optimize)
26419
+ || !opt_for_fn (node->symbol.decl, flag_ipa_sra))
26422
+ fprintf (dump_file, "Function not optimized.\n");
26426
if (DECL_VIRTUAL_P (current_function_decl))
26429
Index: gcc/tree-predcom.c
26430
===================================================================
26431
--- a/src/gcc/tree-predcom.c (.../tags/gcc_4_8_2_release)
26432
+++ b/src/gcc/tree-predcom.c (.../branches/gcc-4_8-branch)
26433
@@ -1323,90 +1323,43 @@
26434
gsi_insert_after (&bsi, new_stmt, GSI_NEW_STMT);
26437
-/* Returns the reference to the address of REF in the ITER-th iteration of
26438
- LOOP, or NULL if we fail to determine it (ITER may be negative). We
26439
- try to preserve the original shape of the reference (not rewrite it
26440
- as an indirect ref to the address), to make tree_could_trap_p in
26441
- prepare_initializers_chain return false more often. */
26442
+/* Returns a memory reference to DR in the ITER-th iteration of
26443
+ the loop it was analyzed in. Append init stmts to STMTS. */
26446
-ref_at_iteration (struct loop *loop, tree ref, int iter)
26448
+ref_at_iteration (data_reference_p dr, int iter, gimple_seq *stmts)
26450
- tree idx, *idx_p, type, val, op0 = NULL_TREE, ret;
26454
- if (handled_component_p (ref))
26455
+ tree off = DR_OFFSET (dr);
26456
+ tree coff = DR_INIT (dr);
26459
+ else if (TREE_CODE (DR_STEP (dr)) == INTEGER_CST)
26460
+ coff = size_binop (PLUS_EXPR, coff,
26461
+ size_binop (MULT_EXPR, DR_STEP (dr), ssize_int (iter)));
26463
+ off = size_binop (PLUS_EXPR, off,
26464
+ size_binop (MULT_EXPR, DR_STEP (dr), ssize_int (iter)));
26465
+ tree addr = fold_build_pointer_plus (DR_BASE_ADDRESS (dr), off);
26466
+ addr = force_gimple_operand_1 (addr, stmts, is_gimple_mem_ref_addr,
26468
+ tree alias_ptr = fold_convert (reference_alias_ptr_type (DR_REF (dr)), coff);
26469
+ /* While data-ref analysis punts on bit offsets it still handles
26470
+ bitfield accesses at byte boundaries. Cope with that. Note that
26471
+ we cannot simply re-apply the outer COMPONENT_REF because the
26472
+ byte-granular portion of it is already applied via DR_INIT and
26473
+ DR_OFFSET, so simply build a BIT_FIELD_REF knowing that the bits
26474
+ start at offset zero. */
26475
+ if (TREE_CODE (DR_REF (dr)) == COMPONENT_REF
26476
+ && DECL_BIT_FIELD (TREE_OPERAND (DR_REF (dr), 1)))
26478
- op0 = ref_at_iteration (loop, TREE_OPERAND (ref, 0), iter);
26480
- return NULL_TREE;
26481
+ tree field = TREE_OPERAND (DR_REF (dr), 1);
26482
+ return build3 (BIT_FIELD_REF, TREE_TYPE (DR_REF (dr)),
26483
+ build2 (MEM_REF, DECL_BIT_FIELD_TYPE (field),
26484
+ addr, alias_ptr),
26485
+ DECL_SIZE (field), bitsize_zero_node);
26487
- else if (!INDIRECT_REF_P (ref)
26488
- && TREE_CODE (ref) != MEM_REF)
26489
- return unshare_expr (ref);
26491
- if (TREE_CODE (ref) == MEM_REF)
26493
- ret = unshare_expr (ref);
26494
- idx = TREE_OPERAND (ref, 0);
26495
- idx_p = &TREE_OPERAND (ret, 0);
26497
- else if (TREE_CODE (ref) == COMPONENT_REF)
26499
- /* Check that the offset is loop invariant. */
26500
- if (TREE_OPERAND (ref, 2)
26501
- && !expr_invariant_in_loop_p (loop, TREE_OPERAND (ref, 2)))
26502
- return NULL_TREE;
26504
- return build3 (COMPONENT_REF, TREE_TYPE (ref), op0,
26505
- unshare_expr (TREE_OPERAND (ref, 1)),
26506
- unshare_expr (TREE_OPERAND (ref, 2)));
26508
- else if (TREE_CODE (ref) == ARRAY_REF)
26510
- /* Check that the lower bound and the step are loop invariant. */
26511
- if (TREE_OPERAND (ref, 2)
26512
- && !expr_invariant_in_loop_p (loop, TREE_OPERAND (ref, 2)))
26513
- return NULL_TREE;
26514
- if (TREE_OPERAND (ref, 3)
26515
- && !expr_invariant_in_loop_p (loop, TREE_OPERAND (ref, 3)))
26516
- return NULL_TREE;
26518
- ret = build4 (ARRAY_REF, TREE_TYPE (ref), op0, NULL_TREE,
26519
- unshare_expr (TREE_OPERAND (ref, 2)),
26520
- unshare_expr (TREE_OPERAND (ref, 3)));
26521
- idx = TREE_OPERAND (ref, 1);
26522
- idx_p = &TREE_OPERAND (ret, 1);
26525
- return NULL_TREE;
26527
- ok = simple_iv (loop, loop, idx, &iv, true);
26529
- return NULL_TREE;
26530
- iv.base = expand_simple_operations (iv.base);
26531
- if (integer_zerop (iv.step))
26532
- *idx_p = unshare_expr (iv.base);
26535
- type = TREE_TYPE (iv.base);
26536
- if (POINTER_TYPE_P (type))
26538
- val = fold_build2 (MULT_EXPR, sizetype, iv.step,
26539
- size_int (iter));
26540
- val = fold_build_pointer_plus (iv.base, val);
26544
- val = fold_build2 (MULT_EXPR, type, iv.step,
26545
- build_int_cst_type (type, iter));
26546
- val = fold_build2 (PLUS_EXPR, type, iv.base, val);
26548
- *idx_p = unshare_expr (val);
26552
+ return fold_build2 (MEM_REF, TREE_TYPE (DR_REF (dr)), addr, alias_ptr);
26555
/* Get the initialization expression for the INDEX-th temporary variable
26556
@@ -2068,7 +2021,11 @@
26558
stmt = find_common_use_stmt (&name1, &name2);
26562
+ /* A simple post-dominance check - make sure the combination
26563
+ is executed under the same condition as the references. */
26564
+ || (gimple_bb (stmt) != gimple_bb (r1->stmt)
26565
+ && gimple_bb (stmt) != gimple_bb (r2->stmt)))
26568
acode = gimple_assign_rhs_code (stmt);
26569
@@ -2365,14 +2322,10 @@
26570
if (chain->inits[i] != NULL_TREE)
26573
- init = ref_at_iteration (loop, DR_REF (dr), (int) i - n);
26577
+ init = ref_at_iteration (dr, (int) i - n, &stmts);
26578
if (!chain->all_always_accessed && tree_could_trap_p (init))
26581
- init = force_gimple_operand (init, &stmts, false, NULL_TREE);
26583
gsi_insert_seq_on_edge_immediate (entry, stmts);
26585
@@ -2449,6 +2402,7 @@
26588
free_data_refs (datarefs);
26589
+ free_affine_expand_cache (&name_expansions);
26593
Index: gcc/loop-iv.c
26594
===================================================================
26595
--- a/src/gcc/loop-iv.c (.../tags/gcc_4_8_2_release)
26596
+++ b/src/gcc/loop-iv.c (.../branches/gcc-4_8-branch)
26597
@@ -425,7 +425,9 @@
26598
&& !iv->first_special)
26600
rtx val = get_iv_value (iv, const0_rtx);
26601
- val = lowpart_subreg (mode, val, iv->extend_mode);
26602
+ val = lowpart_subreg (mode, val,
26603
+ iv->extend == IV_UNKNOWN_EXTEND
26604
+ ? iv->mode : iv->extend_mode);
26607
iv->extend = IV_UNKNOWN_EXTEND;
26608
@@ -465,8 +467,14 @@
26609
&& !iv->first_special)
26611
rtx val = get_iv_value (iv, const0_rtx);
26612
+ if (iv->extend_mode != iv->mode
26613
+ && iv->extend != IV_UNKNOWN_EXTEND
26614
+ && iv->extend != extend)
26615
+ val = lowpart_subreg (iv->mode, val, iv->extend_mode);
26616
val = simplify_gen_unary (iv_extend_to_rtx_code (extend), mode,
26617
- val, iv->extend_mode);
26619
+ iv->extend == extend
26620
+ ? iv->extend_mode : iv->mode);
26622
iv->extend = IV_UNKNOWN_EXTEND;
26623
iv->mode = iv->extend_mode = mode;
26624
Index: gcc/ipa-prop.c
26625
===================================================================
26626
--- a/src/gcc/ipa-prop.c (.../tags/gcc_4_8_2_release)
26627
+++ b/src/gcc/ipa-prop.c (.../branches/gcc-4_8-branch)
26628
@@ -623,16 +623,22 @@
26629
if (parm_ainfo && parm_ainfo->parm_modified)
26632
- gcc_checking_assert (gimple_vuse (stmt) != NULL_TREE);
26633
- ao_ref_init (&refd, parm_load);
26634
- /* We can cache visited statements only when parm_ainfo is available and when
26635
- we are looking at a naked load of the whole parameter. */
26636
- if (!parm_ainfo || TREE_CODE (parm_load) != PARM_DECL)
26637
- visited_stmts = NULL;
26640
+ gcc_checking_assert (gimple_vuse (stmt) != NULL_TREE);
26641
+ ao_ref_init (&refd, parm_load);
26642
+ /* We can cache visited statements only when parm_ainfo is available and
26643
+ when we are looking at a naked load of the whole parameter. */
26644
+ if (!parm_ainfo || TREE_CODE (parm_load) != PARM_DECL)
26645
+ visited_stmts = NULL;
26647
+ visited_stmts = &parm_ainfo->parm_visited_statements;
26648
+ walk_aliased_vdefs (&refd, gimple_vuse (stmt), mark_modified, &modified,
26652
- visited_stmts = &parm_ainfo->parm_visited_statements;
26653
- walk_aliased_vdefs (&refd, gimple_vuse (stmt), mark_modified, &modified,
26657
if (parm_ainfo && modified)
26658
parm_ainfo->parm_modified = true;
26660
@@ -740,7 +746,7 @@
26661
ipa_load_from_parm_agg_1 (vec<ipa_param_descriptor_t> descriptors,
26662
struct param_analysis_info *parms_ainfo, gimple stmt,
26663
tree op, int *index_p, HOST_WIDE_INT *offset_p,
26665
+ HOST_WIDE_INT *size_p, bool *by_ref_p)
26668
HOST_WIDE_INT size, max_size;
26669
@@ -758,6 +764,8 @@
26678
@@ -800,6 +808,8 @@
26687
@@ -814,7 +824,7 @@
26690
return ipa_load_from_parm_agg_1 (info->descriptors, NULL, stmt, op, index_p,
26691
- offset_p, by_ref_p);
26692
+ offset_p, NULL, by_ref_p);
26695
/* Given that an actual argument is an SSA_NAME (given in NAME) and is a result
26696
@@ -1051,7 +1061,8 @@
26698
parm = TREE_OPERAND (expr, 0);
26699
index = ipa_get_param_decl_index (info, SSA_NAME_VAR (parm));
26700
- gcc_assert (index >= 0);
26704
cond_bb = single_pred (assign_bb);
26705
cond = last_stmt (cond_bb);
26706
@@ -1462,6 +1473,9 @@
26708
struct cgraph_edge *cs;
26713
for (cs = node->callees; cs; cs = cs->next_callee)
26715
struct cgraph_node *callee = cgraph_function_or_thunk_node (cs->callee,
26716
@@ -1646,7 +1660,7 @@
26717
if (gimple_assign_single_p (def)
26718
&& ipa_load_from_parm_agg_1 (info->descriptors, parms_ainfo, def,
26719
gimple_assign_rhs1 (def), &index, &offset,
26723
struct cgraph_edge *cs = ipa_note_param_call (node, index, call);
26724
cs->indirect_info->offset = offset;
26725
@@ -1847,8 +1861,7 @@
26729
-visit_ref_for_mod_analysis (gimple stmt ATTRIBUTE_UNUSED,
26730
- tree op, void *data)
26731
+visit_ref_for_mod_analysis (gimple, tree op, tree, void *data)
26733
struct ipa_node_params *info = (struct ipa_node_params *) data;
26735
@@ -2126,7 +2139,6 @@
26736
we may create the first reference to the object in the unit. */
26737
if (!callee || callee->global.inlined_to)
26739
- struct cgraph_node *first_clone = callee;
26741
/* We are better to ensure we can refer to it.
26742
In the case of static functions we are out of luck, since we already
26743
@@ -2142,31 +2154,7 @@
26744
xstrdup (cgraph_node_name (ie->callee)), ie->callee->uid);
26748
- /* Create symbol table node. Even if inline clone exists, we can not take
26749
- it as a target of non-inlined call. */
26750
- callee = cgraph_create_node (target);
26752
- /* OK, we previously inlined the function, then removed the offline copy and
26753
- now we want it back for external call. This can happen when devirtualizing
26754
- while inlining function called once that happens after extern inlined and
26755
- virtuals are already removed. In this case introduce the external node
26756
- and make it available for call. */
26759
- first_clone->clone_of = callee;
26760
- callee->clones = first_clone;
26761
- symtab_prevail_in_asm_name_hash ((symtab_node)callee);
26762
- symtab_insert_node_to_hashtable ((symtab_node)callee);
26764
- fprintf (dump_file, "ipa-prop: Introduced new external node "
26765
- "(%s/%i) and turned into root of the clone tree.\n",
26766
- xstrdup (cgraph_node_name (callee)), callee->uid);
26768
- else if (dump_file)
26769
- fprintf (dump_file, "ipa-prop: Introduced new external node "
26771
- xstrdup (cgraph_node_name (callee)), callee->uid);
26772
+ callee = cgraph_get_create_real_symbol_node (target);
26774
ipa_check_create_node_params ();
26776
@@ -3902,7 +3890,7 @@
26777
struct ipa_agg_replacement_value *v;
26778
gimple stmt = gsi_stmt (gsi);
26780
- HOST_WIDE_INT offset;
26781
+ HOST_WIDE_INT offset, size;
26785
@@ -3929,13 +3917,15 @@
26788
if (!ipa_load_from_parm_agg_1 (descriptors, parms_ainfo, stmt,
26789
- rhs, &index, &offset, &by_ref))
26790
+ rhs, &index, &offset, &size, &by_ref))
26792
for (v = aggval; v; v = v->next)
26793
if (v->index == index
26794
&& v->offset == offset)
26796
- if (!v || v->by_ref != by_ref)
26798
+ || v->by_ref != by_ref
26799
+ || tree_low_cst (TYPE_SIZE (TREE_TYPE (v->value)), 0) != size)
26802
gcc_checking_assert (is_gimple_ip_invariant (v->value));
26803
Index: gcc/tree-ssa-dce.c
26804
===================================================================
26805
--- a/src/gcc/tree-ssa-dce.c (.../tags/gcc_4_8_2_release)
26806
+++ b/src/gcc/tree-ssa-dce.c (.../branches/gcc-4_8-branch)
26807
@@ -1307,26 +1307,19 @@
26810
/* We can mark a call to free as not necessary if the
26811
- defining statement of its argument is an allocation
26812
- function and that is not necessary itself. */
26813
- if (gimple_call_builtin_p (stmt, BUILT_IN_FREE))
26814
+ defining statement of its argument is not necessary
26815
+ (and thus is getting removed). */
26816
+ if (gimple_plf (stmt, STMT_NECESSARY)
26817
+ && gimple_call_builtin_p (stmt, BUILT_IN_FREE))
26819
tree ptr = gimple_call_arg (stmt, 0);
26822
- if (TREE_CODE (ptr) != SSA_NAME)
26824
- def_stmt = SSA_NAME_DEF_STMT (ptr);
26825
- if (!is_gimple_call (def_stmt)
26826
- || gimple_plf (def_stmt, STMT_NECESSARY))
26828
- callee2 = gimple_call_fndecl (def_stmt);
26829
- if (callee2 == NULL_TREE
26830
- || DECL_BUILT_IN_CLASS (callee2) != BUILT_IN_NORMAL
26831
- || (DECL_FUNCTION_CODE (callee2) != BUILT_IN_MALLOC
26832
- && DECL_FUNCTION_CODE (callee2) != BUILT_IN_CALLOC))
26834
- gimple_set_plf (stmt, STMT_NECESSARY, false);
26835
+ if (TREE_CODE (ptr) == SSA_NAME)
26837
+ gimple def_stmt = SSA_NAME_DEF_STMT (ptr);
26838
+ if (!gimple_nop_p (def_stmt)
26839
+ && !gimple_plf (def_stmt, STMT_NECESSARY))
26840
+ gimple_set_plf (stmt, STMT_NECESSARY, false);
26844
/* If GSI is not necessary then remove it. */
26845
Index: gcc/tree-ssa-ter.c
26846
===================================================================
26847
--- a/src/gcc/tree-ssa-ter.c (.../tags/gcc_4_8_2_release)
26848
+++ b/src/gcc/tree-ssa-ter.c (.../branches/gcc-4_8-branch)
26849
@@ -590,6 +590,30 @@
26853
+/* Helper function for find_ssaname_in_stores. Called via walk_tree to
26854
+ find a SSA_NAME DATA somewhere in *TP. */
26857
+find_ssaname (tree *tp, int *walk_subtrees, void *data)
26859
+ tree var = (tree) data;
26862
+ else if (IS_TYPE_OR_DECL_P (*tp))
26863
+ *walk_subtrees = 0;
26864
+ return NULL_TREE;
26867
+/* Helper function for find_replaceable_in_bb. Return true if SSA_NAME DATA
26868
+ is used somewhere in T, which is a store in the statement. Called via
26869
+ walk_stmt_load_store_addr_ops. */
26872
+find_ssaname_in_store (gimple, tree, tree t, void *data)
26874
+ return walk_tree (&t, find_ssaname, data, NULL) != NULL_TREE;
26877
/* This function processes basic block BB, and looks for variables which can
26878
be replaced by their expressions. Results are stored in the table TAB. */
26880
@@ -643,8 +667,7 @@
26881
/* If the stmt does a memory store and the replacement
26882
is a load aliasing it avoid creating overlapping
26883
assignments which we cannot expand correctly. */
26884
- if (gimple_vdef (stmt)
26885
- && gimple_assign_single_p (stmt))
26886
+ if (gimple_vdef (stmt))
26888
gimple def_stmt = SSA_NAME_DEF_STMT (use);
26889
while (is_gimple_assign (def_stmt)
26890
@@ -653,9 +676,29 @@
26891
= SSA_NAME_DEF_STMT (gimple_assign_rhs1 (def_stmt));
26892
if (gimple_vuse (def_stmt)
26893
&& gimple_assign_single_p (def_stmt)
26894
- && refs_may_alias_p (gimple_assign_lhs (stmt),
26895
- gimple_assign_rhs1 (def_stmt)))
26896
- same_root_var = true;
26897
+ && stmt_may_clobber_ref_p (stmt,
26898
+ gimple_assign_rhs1 (def_stmt)))
26900
+ /* For calls, it is not a problem if USE is among
26901
+ call's arguments or say OBJ_TYPE_REF argument,
26902
+ all those necessarily need to be evaluated before
26903
+ the call that may clobber the memory. But if
26904
+ LHS of the call refers to USE, expansion might
26905
+ evaluate it after the call, prevent TER in that
26907
+ For inline asm, allow TER of loads into input
26908
+ arguments, but disallow TER for USEs that occur
26909
+ somewhere in outputs. */
26910
+ if (is_gimple_call (stmt)
26911
+ || gimple_code (stmt) == GIMPLE_ASM)
26913
+ if (walk_stmt_load_store_ops (stmt, use, NULL,
26914
+ find_ssaname_in_store))
26915
+ same_root_var = true;
26918
+ same_root_var = true;
26922
/* Mark expression as replaceable unless stmt is volatile, or the
26924
===================================================================
26925
--- a/src/gcc/ira.c (.../tags/gcc_4_8_2_release)
26926
+++ b/src/gcc/ira.c (.../branches/gcc-4_8-branch)
26927
@@ -4742,6 +4742,18 @@
26928
if (need_dce && optimize)
26931
+ /* Diagnose uses of the hard frame pointer when it is used as a global
26932
+ register. Often we can get away with letting the user appropriate
26933
+ the frame pointer, but we should let them know when code generation
26934
+ makes that impossible. */
26935
+ if (global_regs[HARD_FRAME_POINTER_REGNUM] && frame_pointer_needed)
26937
+ tree decl = global_regs_decl[HARD_FRAME_POINTER_REGNUM];
26938
+ error_at (DECL_SOURCE_LOCATION (current_function_decl),
26939
+ "frame pointer required, but reserved");
26940
+ inform (DECL_SOURCE_LOCATION (decl), "for %qD", decl);
26943
timevar_pop (TV_IRA);
26947
===================================================================
26948
--- a/src/gcc/rtl.h (.../tags/gcc_4_8_2_release)
26949
+++ b/src/gcc/rtl.h (.../branches/gcc-4_8-branch)
26950
@@ -2705,6 +2705,8 @@
26952
extern int read_dependence (const_rtx, const_rtx);
26953
extern int anti_dependence (const_rtx, const_rtx);
26954
+extern int canon_anti_dependence (const_rtx, bool,
26955
+ const_rtx, enum machine_mode, rtx);
26956
extern int output_dependence (const_rtx, const_rtx);
26957
extern int may_alias_p (const_rtx, const_rtx);
26958
extern void init_alias_target (void);
26959
@@ -2789,6 +2791,8 @@
26960
#define fatal_insn_not_found(insn) \
26961
_fatal_insn_not_found (insn, __FILE__, __LINE__, __FUNCTION__)
26964
+extern tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
26967
#endif /* ! GCC_RTL_H */
26968
Index: gcc/tree-vect-stmts.c
26969
===================================================================
26970
--- a/src/gcc/tree-vect-stmts.c (.../tags/gcc_4_8_2_release)
26971
+++ b/src/gcc/tree-vect-stmts.c (.../branches/gcc-4_8-branch)
26972
@@ -4369,6 +4369,20 @@
26976
+ /* Invalidate assumptions made by dependence analysis when vectorization
26977
+ on the unrolled body effectively re-orders stmts. */
26979
+ && STMT_VINFO_MIN_NEG_DIST (stmt_info) != 0
26980
+ && ((unsigned)LOOP_VINFO_VECT_FACTOR (loop_vinfo)
26981
+ > STMT_VINFO_MIN_NEG_DIST (stmt_info)))
26983
+ if (dump_enabled_p ())
26984
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
26985
+ "cannot perform implicit CSE when unrolling "
26986
+ "with negative dependence distance\n");
26990
if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo)
26993
@@ -4425,6 +4439,20 @@
26994
else if (!vect_grouped_load_supported (vectype, group_size))
26998
+ /* Invalidate assumptions made by dependence analysis when vectorization
26999
+ on the unrolled body effectively re-orders stmts. */
27000
+ if (!PURE_SLP_STMT (stmt_info)
27001
+ && STMT_VINFO_MIN_NEG_DIST (stmt_info) != 0
27002
+ && ((unsigned)LOOP_VINFO_VECT_FACTOR (loop_vinfo)
27003
+ > STMT_VINFO_MIN_NEG_DIST (stmt_info)))
27005
+ if (dump_enabled_p ())
27006
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
27007
+ "cannot perform implicit CSE when performing "
27008
+ "group loads with negative dependence distance\n");
27014
@@ -6054,8 +6082,7 @@
27015
corresponding to that mode. The theory is that any use that
27016
would cause problems with this will disable vectorization anyway. */
27017
else if (!SCALAR_FLOAT_TYPE_P (scalar_type)
27018
- && !INTEGRAL_TYPE_P (scalar_type)
27019
- && !POINTER_TYPE_P (scalar_type))
27020
+ && !INTEGRAL_TYPE_P (scalar_type))
27021
scalar_type = lang_hooks.types.type_for_mode (inner_mode, 1);
27023
/* We can't build a vector type of elements with alignment bigger than
27024
Index: gcc/tree-ssa-phiprop.c
27025
===================================================================
27026
--- a/src/gcc/tree-ssa-phiprop.c (.../tags/gcc_4_8_2_release)
27027
+++ b/src/gcc/tree-ssa-phiprop.c (.../branches/gcc-4_8-branch)
27028
@@ -307,6 +307,12 @@
27032
+ /* Only replace loads in blocks that post-dominate the PHI node. That
27033
+ makes sure we don't end up speculating loads. */
27034
+ if (!dominated_by_p (CDI_POST_DOMINATORS,
27035
+ bb, gimple_bb (use_stmt)))
27038
/* Check whether this is a load of *ptr. */
27039
if (!(is_gimple_assign (use_stmt)
27040
&& TREE_CODE (gimple_assign_lhs (use_stmt)) == SSA_NAME
27041
@@ -378,6 +384,7 @@
27044
calculate_dominance_info (CDI_DOMINATORS);
27045
+ calculate_dominance_info (CDI_POST_DOMINATORS);
27048
phivn = XCNEWVEC (struct phiprop_d, n);
27049
@@ -395,6 +402,8 @@
27053
+ free_dominance_info (CDI_POST_DOMINATORS);
27058
Index: gcc/tree-object-size.c
27059
===================================================================
27060
--- a/src/gcc/tree-object-size.c (.../tags/gcc_4_8_2_release)
27061
+++ b/src/gcc/tree-object-size.c (.../branches/gcc-4_8-branch)
27063
the subobject (innermost array or field with address taken).
27064
object_sizes[2] is lower bound for number of bytes till the end of
27065
the object and object_sizes[3] lower bound for subobject. */
27066
-static unsigned HOST_WIDE_INT *object_sizes[4];
27067
+static vec<unsigned HOST_WIDE_INT> object_sizes[4];
27069
/* Bitmaps what object sizes have been computed already. */
27070
static bitmap computed[4];
27071
@@ -493,7 +493,7 @@
27073
if (TREE_CODE (ptr) == SSA_NAME
27074
&& POINTER_TYPE_P (TREE_TYPE (ptr))
27075
- && object_sizes[object_size_type] != NULL)
27076
+ && computed[object_size_type] != NULL)
27078
if (!bitmap_bit_p (computed[object_size_type], SSA_NAME_VERSION (ptr)))
27080
@@ -501,6 +501,8 @@
27081
bitmap_iterator bi;
27084
+ if (num_ssa_names > object_sizes[object_size_type].length ())
27085
+ object_sizes[object_size_type].safe_grow (num_ssa_names);
27088
fprintf (dump_file, "Computing %s %sobject size for ",
27089
@@ -1162,12 +1164,12 @@
27091
int object_size_type;
27093
- if (object_sizes[0])
27097
for (object_size_type = 0; object_size_type <= 3; object_size_type++)
27099
- object_sizes[object_size_type] = XNEWVEC (unsigned HOST_WIDE_INT, num_ssa_names);
27100
+ object_sizes[object_size_type].safe_grow (num_ssa_names);
27101
computed[object_size_type] = BITMAP_ALLOC (NULL);
27104
@@ -1184,9 +1186,8 @@
27106
for (object_size_type = 0; object_size_type <= 3; object_size_type++)
27108
- free (object_sizes[object_size_type]);
27109
+ object_sizes[object_size_type].release ();
27110
BITMAP_FREE (computed[object_size_type]);
27111
- object_sizes[object_size_type] = NULL;
27115
@@ -1202,18 +1203,11 @@
27116
gimple_stmt_iterator i;
27117
for (i = gsi_start_bb (bb); !gsi_end_p (i); gsi_next (&i))
27119
- tree callee, result;
27121
gimple call = gsi_stmt (i);
27123
- if (gimple_code (call) != GIMPLE_CALL)
27124
+ if (!gimple_call_builtin_p (call, BUILT_IN_OBJECT_SIZE))
27127
- callee = gimple_call_fndecl (call);
27129
- || DECL_BUILT_IN_CLASS (callee) != BUILT_IN_NORMAL
27130
- || DECL_FUNCTION_CODE (callee) != BUILT_IN_OBJECT_SIZE)
27133
init_object_sizes ();
27134
result = fold_call_stmt (call, false);
27136
@@ -1240,20 +1234,32 @@
27140
+ gcc_assert (TREE_CODE (result) == INTEGER_CST);
27142
if (dump_file && (dump_flags & TDF_DETAILS))
27144
fprintf (dump_file, "Simplified\n ");
27145
print_gimple_stmt (dump_file, call, 0, dump_flags);
27146
+ fprintf (dump_file, " to ");
27147
+ print_generic_expr (dump_file, result, 0);
27148
+ fprintf (dump_file, "\n");
27151
- if (!update_call_from_tree (&i, result))
27152
- gcc_unreachable ();
27153
+ tree lhs = gimple_call_lhs (call);
27157
- if (dump_file && (dump_flags & TDF_DETAILS))
27158
+ /* Propagate into all uses and fold those stmts. */
27160
+ imm_use_iterator iter;
27161
+ FOR_EACH_IMM_USE_STMT (use_stmt, iter, lhs)
27163
- fprintf (dump_file, "to\n ");
27164
- print_gimple_stmt (dump_file, gsi_stmt (i), 0, dump_flags);
27165
- fprintf (dump_file, "\n");
27166
+ use_operand_p use_p;
27167
+ FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
27168
+ SET_USE (use_p, result);
27169
+ gimple_stmt_iterator gsi = gsi_for_stmt (use_stmt);
27170
+ fold_stmt (&gsi);
27171
+ update_stmt (gsi_stmt (gsi));
27175
Index: gcc/combine.c
27176
===================================================================
27177
--- a/src/gcc/combine.c (.../tags/gcc_4_8_2_release)
27178
+++ b/src/gcc/combine.c (.../branches/gcc-4_8-branch)
27179
@@ -3884,15 +3884,19 @@
27181
PATTERN (undobuf.other_insn) = other_pat;
27183
- /* If any of the notes in OTHER_INSN were REG_UNUSED, ensure that they
27184
- are still valid. Then add any non-duplicate notes added by
27185
- recog_for_combine. */
27186
+ /* If any of the notes in OTHER_INSN were REG_DEAD or REG_UNUSED,
27187
+ ensure that they are still valid. Then add any non-duplicate
27188
+ notes added by recog_for_combine. */
27189
for (note = REG_NOTES (undobuf.other_insn); note; note = next)
27191
next = XEXP (note, 1);
27193
- if (REG_NOTE_KIND (note) == REG_UNUSED
27194
- && ! reg_set_p (XEXP (note, 0), PATTERN (undobuf.other_insn)))
27195
+ if ((REG_NOTE_KIND (note) == REG_DEAD
27196
+ && !reg_referenced_p (XEXP (note, 0),
27197
+ PATTERN (undobuf.other_insn)))
27198
+ ||(REG_NOTE_KIND (note) == REG_UNUSED
27199
+ && !reg_set_p (XEXP (note, 0),
27200
+ PATTERN (undobuf.other_insn))))
27201
remove_note (undobuf.other_insn, note);
27204
@@ -5798,8 +5802,15 @@
27208
- /* If the code changed, return a whole new comparison. */
27209
- if (new_code != code)
27210
+ /* If the code changed, return a whole new comparison.
27211
+ We also need to avoid using SUBST in cases where
27212
+ simplify_comparison has widened a comparison with a CONST_INT,
27213
+ since in that case the wider CONST_INT may fail the sanity
27214
+ checks in do_SUBST. */
27215
+ if (new_code != code
27216
+ || (CONST_INT_P (op1)
27217
+ && GET_MODE (op0) != GET_MODE (XEXP (x, 0))
27218
+ && GET_MODE (op0) != GET_MODE (XEXP (x, 1))))
27219
return gen_rtx_fmt_ee (new_code, mode, op0, op1);
27221
/* Otherwise, keep this operation, but maybe change its operands.
27222
@@ -7991,7 +8002,7 @@
27223
if (code == CALL || code == ASM_OPERANDS || code == CLOBBER)
27226
- /* We want to perform the operation is its present mode unless we know
27227
+ /* We want to perform the operation in its present mode unless we know
27228
that the operation is valid in MODE, in which case we do the operation
27230
op_mode = ((GET_MODE_CLASS (mode) == GET_MODE_CLASS (GET_MODE (x))
27231
@@ -8427,9 +8438,10 @@
27232
GET_MODE (x), GEN_INT (mask),
27234
if (temp && CONST_INT_P (temp))
27235
- SUBST (XEXP (x, 0),
27236
- force_to_mode (XEXP (x, 0), GET_MODE (x),
27237
- INTVAL (temp), next_select));
27238
+ x = simplify_gen_binary (code, GET_MODE (x),
27239
+ force_to_mode (XEXP (x, 0), GET_MODE (x),
27240
+ INTVAL (temp), next_select),
27245
@@ -8497,14 +8509,16 @@
27246
/* We have no way of knowing if the IF_THEN_ELSE can itself be
27247
written in a narrower mode. We play it safe and do not do so. */
27249
- SUBST (XEXP (x, 1),
27250
- gen_lowpart_or_truncate (GET_MODE (x),
27251
- force_to_mode (XEXP (x, 1), mode,
27252
- mask, next_select)));
27253
- SUBST (XEXP (x, 2),
27254
- gen_lowpart_or_truncate (GET_MODE (x),
27255
- force_to_mode (XEXP (x, 2), mode,
27256
- mask, next_select)));
27257
+ op0 = gen_lowpart_or_truncate (GET_MODE (x),
27258
+ force_to_mode (XEXP (x, 1), mode,
27259
+ mask, next_select));
27260
+ op1 = gen_lowpart_or_truncate (GET_MODE (x),
27261
+ force_to_mode (XEXP (x, 2), mode,
27262
+ mask, next_select));
27263
+ if (op0 != XEXP (x, 1) || op1 != XEXP (x, 2))
27264
+ x = simplify_gen_ternary (IF_THEN_ELSE, GET_MODE (x),
27265
+ GET_MODE (XEXP (x, 0)), XEXP (x, 0),
27270
Index: gcc/tree-flow.h
27271
===================================================================
27272
--- a/src/gcc/tree-flow.h (.../tags/gcc_4_8_2_release)
27273
+++ b/src/gcc/tree-flow.h (.../branches/gcc-4_8-branch)
27274
@@ -425,6 +425,7 @@
27275
basic_block, tree);
27276
void remove_edge_and_dominated_blocks (edge);
27277
bool tree_node_can_be_shared (tree);
27278
+extern unsigned int split_critical_edges (void);
27280
/* In tree-cfgcleanup.c */
27281
extern bitmap cfgcleanup_altered_bbs;
27282
Index: gcc/config.gcc
27283
===================================================================
27284
--- a/src/gcc/config.gcc (.../tags/gcc_4_8_2_release)
27285
+++ b/src/gcc/config.gcc (.../branches/gcc-4_8-branch)
27286
@@ -1761,6 +1761,14 @@
27287
tmake_file="${tmake_file} microblaze/t-microblaze-linux"
27289
microblaze*-*-rtems*)
27292
+ tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=0"
27295
+ tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=4321"
27298
tm_file="${tm_file} dbxelf.h"
27299
tm_file="${tm_file} microblaze/rtems.h rtems.h newlib-stdint.h"
27300
c_target_objs="${c_target_objs} microblaze-c.o"
27301
@@ -2963,11 +2971,18 @@
27309
- with_cpu="`echo ${target} | sed 's/-.*$//'`"
27310
+ case ${target} in
27318
+ with_cpu="`echo ${target} | sed 's/-.*$//'`"
27324
@@ -3587,7 +3602,7 @@
27326
"" | sparc | sparcv9 | sparc64 \
27328
- | v8 | supersparc | hypersparc | leon \
27329
+ | v8 | supersparc | hypersparc | leon | leon3 \
27330
| sparclite | f930 | f934 | sparclite86x \
27331
| sparclet | tsc701 \
27332
| v9 | ultrasparc | ultrasparc3 | niagara | niagara2 \
27333
@@ -3745,15 +3760,6 @@
27334
cxx_target_objs="${cxx_target_objs} sh-c.o"
27338
- if test x$with_tune = x ; then
27342
- # The SPARC port checks this value at compile-time.
27343
- target_cpu_default2="TARGET_CPU_$with_cpu"
27347
# Some standard aliases.
27349
@@ -3765,6 +3771,17 @@
27353
+ if test x$with_tune = x ; then
27354
+ case ${target} in
27364
# The SPARC port checks this value at compile-time.
27365
target_cpu_default2="TARGET_CPU_$with_cpu"
27367
Index: gcc/reginfo.c
27368
===================================================================
27369
--- a/src/gcc/reginfo.c (.../tags/gcc_4_8_2_release)
27370
+++ b/src/gcc/reginfo.c (.../branches/gcc-4_8-branch)
27372
char global_regs[FIRST_PSEUDO_REGISTER];
27374
/* Declaration for the global register. */
27375
-static tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
27376
+tree global_regs_decl[FIRST_PSEUDO_REGISTER];
27378
/* Same information as REGS_INVALIDATED_BY_CALL but in regset form to be used
27379
in dataflow more conveniently. */
27380
@@ -620,40 +620,35 @@
27381
mode = GET_MODE_WIDER_MODE (mode))
27382
if ((unsigned) hard_regno_nregs[regno][mode] == nregs
27383
&& HARD_REGNO_MODE_OK (regno, mode)
27384
- && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
27385
+ && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
27386
+ && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
27389
- if (found_mode != VOIDmode)
27390
- return found_mode;
27392
for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
27394
mode = GET_MODE_WIDER_MODE (mode))
27395
if ((unsigned) hard_regno_nregs[regno][mode] == nregs
27396
&& HARD_REGNO_MODE_OK (regno, mode)
27397
- && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
27398
+ && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
27399
+ && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
27402
- if (found_mode != VOIDmode)
27403
- return found_mode;
27405
for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT);
27407
mode = GET_MODE_WIDER_MODE (mode))
27408
if ((unsigned) hard_regno_nregs[regno][mode] == nregs
27409
&& HARD_REGNO_MODE_OK (regno, mode)
27410
- && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
27411
+ && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
27412
+ && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
27415
- if (found_mode != VOIDmode)
27416
- return found_mode;
27418
for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT);
27420
mode = GET_MODE_WIDER_MODE (mode))
27421
if ((unsigned) hard_regno_nregs[regno][mode] == nregs
27422
&& HARD_REGNO_MODE_OK (regno, mode)
27423
- && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
27424
+ && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
27425
+ && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
27428
if (found_mode != VOIDmode)
27429
Index: gcc/Makefile.in
27430
===================================================================
27431
--- a/src/gcc/Makefile.in (.../tags/gcc_4_8_2_release)
27432
+++ b/src/gcc/Makefile.in (.../branches/gcc-4_8-branch)
27433
@@ -1827,7 +1827,7 @@
27434
"$(MULTILIB_EXCLUSIONS)" \
27435
"$(MULTILIB_OSDIRNAMES)" \
27436
"$(MULTILIB_REQUIRED)" \
27437
- "$(MULTIARCH_DIRNAME)" \
27438
+ "$(if $(MULTILIB_OSDIRNAMES),,$(MULTIARCH_DIRNAME))" \
27439
"$(MULTILIB_REUSE)" \
27440
"@enable_multilib@" \
27442
@@ -2256,7 +2256,7 @@
27443
$(FUNCTION_H) $(TM_H) coretypes.h \
27444
$(TREE_PASS_H) $(BASIC_BLOCK_H) $(BITMAP_H) \
27445
$(FLAGS_H) $(HASHTAB_H) pointer-set.h \
27446
- $(GIMPLE_H) $(TREE_INLINE_H) $(GIMPLE_PRETTY_PRINT_H)
27447
+ $(GIMPLE_H) $(TREE_INLINE_H) $(GIMPLE_PRETTY_PRINT_H) $(PARAMS_H)
27448
tree-ssa.o : tree-ssa.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
27449
$(TREE_H) $(TM_P_H) $(EXPR_H) $(DIAGNOSTIC_H) \
27450
toplev.h $(FUNCTION_H) $(TM_H) coretypes.h \
27451
@@ -3037,7 +3037,7 @@
27452
$(TM_H) coretypes.h $(GIMPLE_H) \
27453
$(TREE_PASS_H) $(FLAGS_H) $(EXPR_H) $(BASIC_BLOCK_H) \
27454
$(GGC_H) $(OBSTACK_H) $(PARAMS_H) $(CPPLIB_H) $(PARAMS_H) \
27455
- $(GIMPLE_PRETTY_PRINT_H) langhooks.h
27456
+ $(GIMPLE_PRETTY_PRINT_H) langhooks.h $(OPTABS_H)
27457
tree-complex.o : tree-complex.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TREE_H) \
27458
$(TM_H) $(FLAGS_H) $(TREE_FLOW_H) $(GIMPLE_H) \
27459
tree-iterator.h $(TREE_PASS_H) tree-ssa-propagate.h
27460
@@ -3276,12 +3276,12 @@
27461
$(TM_H) $(RTL_H) $(REGS_H) insn-config.h insn-codes.h $(DF_H) \
27462
$(RECOG_H) output.h addresses.h $(REGS_H) hard-reg-set.h $(FLAGS_H) \
27463
$(FUNCTION_H) $(EXPR_H) $(BASIC_BLOCK_H) $(TM_P_H) $(EXCEPT_H) \
27464
- ira.h rtl-error.h $(LRA_INT_H)
27465
+ ira.h rtl-error.h $(LRA_INT_H) $(OPTABS_H)
27466
lra-eliminations.o : lra-eliminations.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
27467
$(TM_H) $(RTL_H) $(REGS_H) insn-config.h $(DF_H) \
27468
$(RECOG_H) output.h $(REGS_H) hard-reg-set.h $(FLAGS_H) $(FUNCTION_H) \
27469
$(EXPR_H) $(BASIC_BLOCK_H) $(TM_P_H) $(EXCEPT_H) ira.h \
27470
- rtl-error.h $(LRA_INT_H)
27471
+ rtl-error.h $(LRA_INT_H) $(OPTABS_H)
27472
lra-lives.o : lra-lives.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
27473
$(RTL_H) $(REGS_H) insn-config.h $(DF_H) \
27474
$(RECOG_H) output.h $(REGS_H) hard-reg-set.h $(FLAGS_H) $(FUNCTION_H) \
27475
Index: gcc/gimple.c
27476
===================================================================
27477
--- a/src/gcc/gimple.c (.../tags/gcc_4_8_2_release)
27478
+++ b/src/gcc/gimple.c (.../branches/gcc-4_8-branch)
27479
@@ -3841,42 +3841,46 @@
27481
/* For the statement STMT call the callbacks VISIT_LOAD, VISIT_STORE and
27482
VISIT_ADDR if non-NULL on loads, store and address-taken operands
27483
- passing the STMT, the base of the operand and DATA to it. The base
27484
- will be either a decl, an indirect reference (including TARGET_MEM_REF)
27485
- or the argument of an address expression.
27486
+ passing the STMT, the base of the operand, the operand itself containing
27487
+ the base and DATA to it. The base will be either a decl, an indirect
27488
+ reference (including TARGET_MEM_REF) or the argument of an address
27490
Returns the results of these callbacks or'ed. */
27493
walk_stmt_load_store_addr_ops (gimple stmt, void *data,
27494
- bool (*visit_load)(gimple, tree, void *),
27495
- bool (*visit_store)(gimple, tree, void *),
27496
- bool (*visit_addr)(gimple, tree, void *))
27497
+ walk_stmt_load_store_addr_fn visit_load,
27498
+ walk_stmt_load_store_addr_fn visit_store,
27499
+ walk_stmt_load_store_addr_fn visit_addr)
27503
if (gimple_assign_single_p (stmt))
27506
+ tree lhs, rhs, arg;
27509
- lhs = get_base_loadstore (gimple_assign_lhs (stmt));
27510
+ arg = gimple_assign_lhs (stmt);
27511
+ lhs = get_base_loadstore (arg);
27513
- ret |= visit_store (stmt, lhs, data);
27514
+ ret |= visit_store (stmt, lhs, arg, data);
27516
- rhs = gimple_assign_rhs1 (stmt);
27517
+ arg = gimple_assign_rhs1 (stmt);
27519
while (handled_component_p (rhs))
27520
rhs = TREE_OPERAND (rhs, 0);
27523
if (TREE_CODE (rhs) == ADDR_EXPR)
27524
- ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), data);
27525
+ ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), arg, data);
27526
else if (TREE_CODE (rhs) == TARGET_MEM_REF
27527
&& TREE_CODE (TMR_BASE (rhs)) == ADDR_EXPR)
27528
- ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (rhs), 0), data);
27529
+ ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (rhs), 0), arg,
27531
else if (TREE_CODE (rhs) == OBJ_TYPE_REF
27532
&& TREE_CODE (OBJ_TYPE_REF_OBJECT (rhs)) == ADDR_EXPR)
27533
ret |= visit_addr (stmt, TREE_OPERAND (OBJ_TYPE_REF_OBJECT (rhs),
27536
else if (TREE_CODE (rhs) == CONSTRUCTOR)
27539
@@ -3884,23 +3888,23 @@
27541
FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (rhs), ix, val)
27542
if (TREE_CODE (val) == ADDR_EXPR)
27543
- ret |= visit_addr (stmt, TREE_OPERAND (val, 0), data);
27544
+ ret |= visit_addr (stmt, TREE_OPERAND (val, 0), arg, data);
27545
else if (TREE_CODE (val) == OBJ_TYPE_REF
27546
&& TREE_CODE (OBJ_TYPE_REF_OBJECT (val)) == ADDR_EXPR)
27547
ret |= visit_addr (stmt,
27548
TREE_OPERAND (OBJ_TYPE_REF_OBJECT (val),
27552
lhs = gimple_assign_lhs (stmt);
27553
if (TREE_CODE (lhs) == TARGET_MEM_REF
27554
&& TREE_CODE (TMR_BASE (lhs)) == ADDR_EXPR)
27555
- ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (lhs), 0), data);
27556
+ ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (lhs), 0), lhs, data);
27560
rhs = get_base_loadstore (rhs);
27562
- ret |= visit_load (stmt, rhs, data);
27563
+ ret |= visit_load (stmt, rhs, arg, data);
27566
else if (visit_addr
27567
@@ -3913,7 +3917,7 @@
27568
if (op == NULL_TREE)
27570
else if (TREE_CODE (op) == ADDR_EXPR)
27571
- ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
27572
+ ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
27573
/* COND_EXPR and VCOND_EXPR rhs1 argument is a comparison
27574
tree with two operands. */
27575
else if (i == 1 && COMPARISON_CLASS_P (op))
27576
@@ -3920,10 +3924,10 @@
27578
if (TREE_CODE (TREE_OPERAND (op, 0)) == ADDR_EXPR)
27579
ret |= visit_addr (stmt, TREE_OPERAND (TREE_OPERAND (op, 0),
27582
if (TREE_CODE (TREE_OPERAND (op, 1)) == ADDR_EXPR)
27583
ret |= visit_addr (stmt, TREE_OPERAND (TREE_OPERAND (op, 1),
27589
@@ -3931,26 +3935,26 @@
27593
- tree lhs = gimple_call_lhs (stmt);
27595
+ tree arg = gimple_call_lhs (stmt);
27598
- lhs = get_base_loadstore (lhs);
27599
+ tree lhs = get_base_loadstore (arg);
27601
- ret |= visit_store (stmt, lhs, data);
27602
+ ret |= visit_store (stmt, lhs, arg, data);
27605
if (visit_load || visit_addr)
27606
for (i = 0; i < gimple_call_num_args (stmt); ++i)
27608
- tree rhs = gimple_call_arg (stmt, i);
27609
+ tree arg = gimple_call_arg (stmt, i);
27611
- && TREE_CODE (rhs) == ADDR_EXPR)
27612
- ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), data);
27613
+ && TREE_CODE (arg) == ADDR_EXPR)
27614
+ ret |= visit_addr (stmt, TREE_OPERAND (arg, 0), arg, data);
27615
else if (visit_load)
27617
- rhs = get_base_loadstore (rhs);
27618
+ tree rhs = get_base_loadstore (arg);
27620
- ret |= visit_load (stmt, rhs, data);
27621
+ ret |= visit_load (stmt, rhs, arg, data);
27625
@@ -3957,12 +3961,13 @@
27626
&& gimple_call_chain (stmt)
27627
&& TREE_CODE (gimple_call_chain (stmt)) == ADDR_EXPR)
27628
ret |= visit_addr (stmt, TREE_OPERAND (gimple_call_chain (stmt), 0),
27630
+ gimple_call_chain (stmt), data);
27632
&& gimple_call_return_slot_opt_p (stmt)
27633
&& gimple_call_lhs (stmt) != NULL_TREE
27634
&& TREE_ADDRESSABLE (TREE_TYPE (gimple_call_lhs (stmt))))
27635
- ret |= visit_addr (stmt, gimple_call_lhs (stmt), data);
27636
+ ret |= visit_addr (stmt, gimple_call_lhs (stmt),
27637
+ gimple_call_lhs (stmt), data);
27639
else if (gimple_code (stmt) == GIMPLE_ASM)
27641
@@ -3978,7 +3983,7 @@
27642
tree link = gimple_asm_output_op (stmt, i);
27643
tree op = get_base_loadstore (TREE_VALUE (link));
27644
if (op && visit_store)
27645
- ret |= visit_store (stmt, op, data);
27646
+ ret |= visit_store (stmt, op, TREE_VALUE (link), data);
27649
constraint = TREE_STRING_POINTER
27650
@@ -3987,7 +3992,7 @@
27651
parse_output_constraint (&constraint, i, 0, 0, &allows_mem,
27652
&allows_reg, &is_inout);
27653
if (op && !allows_reg && allows_mem)
27654
- ret |= visit_addr (stmt, op, data);
27655
+ ret |= visit_addr (stmt, op, TREE_VALUE (link), data);
27658
if (visit_load || visit_addr)
27659
@@ -3997,7 +4002,7 @@
27660
tree op = TREE_VALUE (link);
27662
&& TREE_CODE (op) == ADDR_EXPR)
27663
- ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
27664
+ ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
27665
else if (visit_load || visit_addr)
27667
op = get_base_loadstore (op);
27668
@@ -4004,7 +4009,7 @@
27672
- ret |= visit_load (stmt, op, data);
27673
+ ret |= visit_load (stmt, op, TREE_VALUE (link), data);
27676
constraint = TREE_STRING_POINTER
27677
@@ -4013,7 +4018,8 @@
27679
&allows_mem, &allows_reg);
27680
if (!allows_reg && allows_mem)
27681
- ret |= visit_addr (stmt, op, data);
27682
+ ret |= visit_addr (stmt, op, TREE_VALUE (link),
27687
@@ -4026,12 +4032,12 @@
27690
&& TREE_CODE (op) == ADDR_EXPR)
27691
- ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
27692
+ ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
27693
else if (visit_load)
27695
- op = get_base_loadstore (op);
27697
- ret |= visit_load (stmt, op, data);
27698
+ tree base = get_base_loadstore (op);
27700
+ ret |= visit_load (stmt, base, op, data);
27704
@@ -4042,7 +4048,7 @@
27706
tree op = PHI_ARG_DEF (stmt, i);
27707
if (TREE_CODE (op) == ADDR_EXPR)
27708
- ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
27709
+ ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
27712
else if (visit_addr
27713
@@ -4050,7 +4056,7 @@
27715
tree op = gimple_goto_dest (stmt);
27716
if (TREE_CODE (op) == ADDR_EXPR)
27717
- ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
27718
+ ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
27722
@@ -4061,8 +4067,8 @@
27725
walk_stmt_load_store_ops (gimple stmt, void *data,
27726
- bool (*visit_load)(gimple, tree, void *),
27727
- bool (*visit_store)(gimple, tree, void *))
27728
+ walk_stmt_load_store_addr_fn visit_load,
27729
+ walk_stmt_load_store_addr_fn visit_store)
27731
return walk_stmt_load_store_addr_ops (stmt, data,
27732
visit_load, visit_store, NULL);
27733
@@ -4071,8 +4077,7 @@
27734
/* Helper for gimple_ior_addresses_taken_1. */
27737
-gimple_ior_addresses_taken_1 (gimple stmt ATTRIBUTE_UNUSED,
27738
- tree addr, void *data)
27739
+gimple_ior_addresses_taken_1 (gimple, tree addr, tree, void *data)
27741
bitmap addresses_taken = (bitmap)data;
27742
addr = get_base_address (addr);
27743
Index: gcc/tree-ssa-structalias.c
27744
===================================================================
27745
--- a/src/gcc/tree-ssa-structalias.c (.../tags/gcc_4_8_2_release)
27746
+++ b/src/gcc/tree-ssa-structalias.c (.../branches/gcc-4_8-branch)
27747
@@ -949,24 +949,27 @@
27748
bitmap_set_bit (result, i);
27751
- unsigned HOST_WIDE_INT fieldoffset = vi->offset + offset;
27752
+ HOST_WIDE_INT fieldoffset = vi->offset + offset;
27753
+ unsigned HOST_WIDE_INT size = vi->size;
27755
/* If the offset makes the pointer point to before the
27756
variable use offset zero for the field lookup. */
27758
- && fieldoffset > vi->offset)
27762
+ if (fieldoffset < 0)
27763
+ vi = lookup_vi_for_tree (vi->decl);
27765
vi = first_or_preceding_vi_for_offset (vi, fieldoffset);
27767
- bitmap_set_bit (result, vi->id);
27768
- /* If the result is not exactly at fieldoffset include the next
27769
- field as well. See get_constraint_for_ptr_offset for more
27771
- if (vi->offset != fieldoffset
27772
- && vi->next != NULL)
27773
- bitmap_set_bit (result, vi->next->id);
27776
+ bitmap_set_bit (result, vi->id);
27780
+ /* We have to include all fields that overlap the current field
27781
+ shifted by offset. */
27784
+ while (vi->offset < fieldoffset + size);
27788
@@ -1607,16 +1610,21 @@
27790
varinfo_t v = get_varinfo (j);
27791
HOST_WIDE_INT fieldoffset = v->offset + roffset;
27792
+ unsigned HOST_WIDE_INT size = v->size;
27795
if (v->is_full_var)
27796
- fieldoffset = v->offset;
27798
else if (roffset != 0)
27799
- v = first_vi_for_offset (v, fieldoffset);
27800
- /* If the access is outside of the variable we can ignore it. */
27804
+ if (fieldoffset < 0)
27805
+ v = lookup_vi_for_tree (v->decl);
27807
+ v = first_or_preceding_vi_for_offset (v, fieldoffset);
27810
+ /* We have to include all fields that overlap the current field
27811
+ shifted by roffset. */
27815
@@ -1633,16 +1641,13 @@
27816
&& add_graph_edge (graph, lhs, t))
27817
flag |= bitmap_ior_into (sol, get_varinfo (t)->solution);
27819
- /* If the variable is not exactly at the requested offset
27820
- we have to include the next one. */
27821
- if (v->offset == (unsigned HOST_WIDE_INT)fieldoffset
27822
+ if (v->is_full_var
27823
|| v->next == NULL)
27827
- fieldoffset = v->offset;
27830
+ while (v->offset < fieldoffset + size);
27834
@@ -1705,15 +1710,20 @@
27835
varinfo_t v = get_varinfo (j);
27837
HOST_WIDE_INT fieldoffset = v->offset + loff;
27838
+ unsigned HOST_WIDE_INT size = v->size;
27840
if (v->is_full_var)
27841
- fieldoffset = v->offset;
27843
else if (loff != 0)
27844
- v = first_vi_for_offset (v, fieldoffset);
27845
- /* If the access is outside of the variable we can ignore it. */
27849
+ if (fieldoffset < 0)
27850
+ v = lookup_vi_for_tree (v->decl);
27852
+ v = first_or_preceding_vi_for_offset (v, fieldoffset);
27855
+ /* We have to include all fields that overlap the current field
27856
+ shifted by loff. */
27859
if (v->may_have_pointers)
27860
@@ -1739,16 +1749,13 @@
27861
bitmap_set_bit (changed, t);
27864
- /* If the variable is not exactly at the requested offset
27865
- we have to include the next one. */
27866
- if (v->offset == (unsigned HOST_WIDE_INT)fieldoffset
27867
+ if (v->is_full_var
27868
|| v->next == NULL)
27872
- fieldoffset = v->offset;
27875
+ while (v->offset < fieldoffset + size);
27879
@@ -2997,35 +3004,31 @@
27881
unsigned HOST_WIDE_INT offset = curr->offset + rhsoffset;
27883
- /* Search the sub-field which overlaps with the
27884
- pointed-to offset. If the result is outside of the variable
27885
- we have to provide a conservative result, as the variable is
27886
- still reachable from the resulting pointer (even though it
27887
- technically cannot point to anything). The last and first
27888
- sub-fields are such conservative results.
27889
- ??? If we always had a sub-field for &object + 1 then
27890
- we could represent this in a more precise way. */
27891
+ /* If curr->offset + rhsoffset is less than zero adjust it. */
27893
&& curr->offset < offset)
27896
+ /* We have to include all fields that overlap the current
27897
+ field shifted by rhsoffset. And we include at least
27898
+ the last or the first field of the variable to represent
27899
+ reachability of off-bound addresses, in particular &object + 1,
27900
+ conservatively correct. */
27901
temp = first_or_preceding_vi_for_offset (curr, offset);
27903
- /* If the found variable is not exactly at the pointed to
27904
- result, we have to include the next variable in the
27905
- solution as well. Otherwise two increments by offset / 2
27906
- do not result in the same or a conservative superset
27908
- if (temp->offset != offset
27909
- && temp->next != NULL)
27910
+ temp = first_or_preceding_vi_for_offset (curr, offset);
27911
+ c.var = temp->id;
27913
+ temp = temp->next;
27915
+ && temp->offset < offset + curr->size)
27917
struct constraint_expr c2;
27918
- c2.var = temp->next->id;
27919
+ c2.var = temp->id;
27920
c2.type = ADDRESSOF;
27922
results->safe_push (c2);
27923
+ temp = temp->next;
27925
- c.var = temp->id;
27929
c.offset = rhsoffset;
27930
Index: gcc/gimple.h
27931
===================================================================
27932
--- a/src/gcc/gimple.h (.../tags/gcc_4_8_2_release)
27933
+++ b/src/gcc/gimple.h (.../branches/gcc-4_8-branch)
27934
@@ -888,13 +888,14 @@
27935
extern alias_set_type gimple_get_alias_set (tree);
27936
extern void count_uses_and_derefs (tree, gimple, unsigned *, unsigned *,
27938
+typedef bool (*walk_stmt_load_store_addr_fn) (gimple, tree, tree, void *);
27939
extern bool walk_stmt_load_store_addr_ops (gimple, void *,
27940
- bool (*)(gimple, tree, void *),
27941
- bool (*)(gimple, tree, void *),
27942
- bool (*)(gimple, tree, void *));
27943
+ walk_stmt_load_store_addr_fn,
27944
+ walk_stmt_load_store_addr_fn,
27945
+ walk_stmt_load_store_addr_fn);
27946
extern bool walk_stmt_load_store_ops (gimple, void *,
27947
- bool (*)(gimple, tree, void *),
27948
- bool (*)(gimple, tree, void *));
27949
+ walk_stmt_load_store_addr_fn,
27950
+ walk_stmt_load_store_addr_fn);
27951
extern bool gimple_ior_addresses_taken (bitmap, gimple);
27952
extern bool gimple_call_builtin_p (gimple, enum built_in_class);
27953
extern bool gimple_call_builtin_p (gimple, enum built_in_function);
27954
Index: gcc/tree-cfg.c
27955
===================================================================
27956
--- a/src/gcc/tree-cfg.c (.../tags/gcc_4_8_2_release)
27957
+++ b/src/gcc/tree-cfg.c (.../branches/gcc-4_8-branch)
27958
@@ -104,7 +104,6 @@
27959
static void assign_discriminator (location_t, basic_block);
27960
static edge gimple_redirect_edge_and_branch (edge, basic_block);
27961
static edge gimple_try_redirect_by_replacing_jump (edge, basic_block);
27962
-static unsigned int split_critical_edges (void);
27964
/* Various helpers. */
27965
static inline bool stmt_starts_bb_p (gimple, gimple);
27966
@@ -1535,6 +1534,11 @@
27968
FOR_EACH_IMM_USE_STMT (stmt, imm_iter, name)
27970
+ /* Mark the block if we change the last stmt in it. */
27971
+ if (cfgcleanup_altered_bbs
27972
+ && stmt_ends_bb_p (stmt))
27973
+ bitmap_set_bit (cfgcleanup_altered_bbs, gimple_bb (stmt)->index);
27975
FOR_EACH_IMM_USE_ON_STMT (use, imm_iter)
27977
replace_exp (use, val);
27978
@@ -1559,11 +1563,6 @@
27979
gimple orig_stmt = stmt;
27982
- /* Mark the block if we changed the last stmt in it. */
27983
- if (cfgcleanup_altered_bbs
27984
- && stmt_ends_bb_p (stmt))
27985
- bitmap_set_bit (cfgcleanup_altered_bbs, gimple_bb (stmt)->index);
27987
/* FIXME. It shouldn't be required to keep TREE_CONSTANT
27988
on ADDR_EXPRs up-to-date on GIMPLE. Propagation will
27989
only change sth from non-invariant to invariant, and only
27990
@@ -3513,11 +3512,10 @@
27994
- /* We use regular PLUS_EXPR and MINUS_EXPR for vectors.
27995
- ??? This just makes the checker happy and may not be what is
27997
- if (TREE_CODE (lhs_type) == VECTOR_TYPE
27998
- && POINTER_TYPE_P (TREE_TYPE (lhs_type)))
27999
+ tree lhs_etype = lhs_type;
28000
+ tree rhs1_etype = rhs1_type;
28001
+ tree rhs2_etype = rhs2_type;
28002
+ if (TREE_CODE (lhs_type) == VECTOR_TYPE)
28004
if (TREE_CODE (rhs1_type) != VECTOR_TYPE
28005
|| TREE_CODE (rhs2_type) != VECTOR_TYPE)
28006
@@ -3525,22 +3523,13 @@
28007
error ("invalid non-vector operands to vector valued plus");
28010
- lhs_type = TREE_TYPE (lhs_type);
28011
- rhs1_type = TREE_TYPE (rhs1_type);
28012
- rhs2_type = TREE_TYPE (rhs2_type);
28013
- /* PLUS_EXPR is commutative, so we might end up canonicalizing
28014
- the pointer to 2nd place. */
28015
- if (POINTER_TYPE_P (rhs2_type))
28017
- tree tem = rhs1_type;
28018
- rhs1_type = rhs2_type;
28021
- goto do_pointer_plus_expr_check;
28022
+ lhs_etype = TREE_TYPE (lhs_type);
28023
+ rhs1_etype = TREE_TYPE (rhs1_type);
28024
+ rhs2_etype = TREE_TYPE (rhs2_type);
28026
- if (POINTER_TYPE_P (lhs_type)
28027
- || POINTER_TYPE_P (rhs1_type)
28028
- || POINTER_TYPE_P (rhs2_type))
28029
+ if (POINTER_TYPE_P (lhs_etype)
28030
+ || POINTER_TYPE_P (rhs1_etype)
28031
+ || POINTER_TYPE_P (rhs2_etype))
28033
error ("invalid (pointer) operands to plus/minus");
28035
@@ -3552,7 +3541,6 @@
28037
case POINTER_PLUS_EXPR:
28039
-do_pointer_plus_expr_check:
28040
if (!POINTER_TYPE_P (rhs1_type)
28041
|| !useless_type_conversion_p (lhs_type, rhs1_type)
28042
|| !ptrofftype_p (rhs2_type))
28043
@@ -7658,7 +7646,7 @@
28045
/* Split all critical edges. */
28047
-static unsigned int
28049
split_critical_edges (void)
28052
Index: gcc/passes.c
28053
===================================================================
28054
--- a/src/gcc/passes.c (.../tags/gcc_4_8_2_release)
28055
+++ b/src/gcc/passes.c (.../branches/gcc-4_8-branch)
28056
@@ -1398,6 +1398,7 @@
28057
/* After CCP we rewrite no longer addressed locals into SSA
28058
form if possible. */
28059
NEXT_PASS (pass_forwprop);
28060
+ NEXT_PASS (pass_object_sizes);
28061
/* pass_build_alias is a dummy pass that ensures that we
28062
execute TODO_rebuild_alias at this point. */
28063
NEXT_PASS (pass_build_alias);
28064
@@ -1435,7 +1436,6 @@
28065
NEXT_PASS (pass_dce);
28066
NEXT_PASS (pass_forwprop);
28067
NEXT_PASS (pass_phiopt);
28068
- NEXT_PASS (pass_object_sizes);
28069
NEXT_PASS (pass_strlen);
28070
NEXT_PASS (pass_ccp);
28071
/* After CCP we rewrite no longer addressed locals into SSA
28072
Index: gcc/tree-ssa-reassoc.c
28073
===================================================================
28074
--- a/src/gcc/tree-ssa-reassoc.c (.../tags/gcc_4_8_2_release)
28075
+++ b/src/gcc/tree-ssa-reassoc.c (.../branches/gcc-4_8-branch)
28076
@@ -1980,8 +1980,15 @@
28078
tem = fold_convert_loc (loc, optype, tem);
28079
gsi = gsi_for_stmt (stmt);
28080
- tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, true,
28082
+ /* In rare cases range->exp can be equal to lhs of stmt.
28083
+ In that case we have to insert after the stmt rather then before
28085
+ if (op == range->exp)
28086
+ tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, false,
28089
+ tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, true,
28092
/* If doing inter-bb range test optimization, update the
28093
stmts immediately. Start with changing the first range test
28094
Index: gcc/config/s390/s390.c
28095
===================================================================
28096
--- a/src/gcc/config/s390/s390.c (.../tags/gcc_4_8_2_release)
28097
+++ b/src/gcc/config/s390/s390.c (.../branches/gcc-4_8-branch)
28098
@@ -407,6 +407,65 @@
28099
bytes on a z10 (or higher) CPU. */
28100
#define PREDICT_DISTANCE (TARGET_Z10 ? 384 : 2048)
28102
+static const int s390_hotpatch_trampoline_halfwords_default = 12;
28103
+static const int s390_hotpatch_trampoline_halfwords_max = 1000000;
28104
+static int s390_hotpatch_trampoline_halfwords = -1;
28106
+/* Return the argument of the given hotpatch attribute or the default value if
28107
+ no argument is present. */
28110
+get_hotpatch_attribute (tree hotpatch_attr)
28114
+ args = TREE_VALUE (hotpatch_attr);
28117
+ TREE_INT_CST_LOW (TREE_VALUE (args)):
28118
+ s390_hotpatch_trampoline_halfwords_default;
28121
+/* Check whether the hotpatch attribute is applied to a function and, if it has
28122
+ an argument, the argument is valid. */
28125
+s390_handle_hotpatch_attribute (tree *node, tree name, tree args,
28126
+ int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
28128
+ if (TREE_CODE (*node) != FUNCTION_DECL)
28130
+ warning (OPT_Wattributes, "%qE attribute only applies to functions",
28132
+ *no_add_attrs = true;
28136
+ tree expr = TREE_VALUE (args);
28138
+ if (TREE_CODE (expr) != INTEGER_CST
28139
+ || !INTEGRAL_TYPE_P (TREE_TYPE (expr))
28140
+ || TREE_INT_CST_HIGH (expr) != 0
28141
+ || TREE_INT_CST_LOW (expr) > (unsigned int)
28142
+ s390_hotpatch_trampoline_halfwords_max)
28144
+ error ("requested %qE attribute is not a non-negative integer"
28145
+ " constant or too large (max. %d)", name,
28146
+ s390_hotpatch_trampoline_halfwords_max);
28147
+ *no_add_attrs = true;
28151
+ return NULL_TREE;
28154
+static const struct attribute_spec s390_attribute_table[] = {
28155
+ { "hotpatch", 0, 1, true, false, false, s390_handle_hotpatch_attribute, false
28157
+ /* End element. */
28158
+ { NULL, 0, 0, false, false, false, NULL, false }
28161
/* Return the alignment for LABEL. We default to the -falign-labels
28162
value except for the literal pool base label. */
28164
@@ -883,7 +942,8 @@
28166
/* For CCRAWmode put the required cc mask into the second
28168
- if (GET_MODE (XVECEXP (*op0, 0, 0)) == CCRAWmode)
28169
+ if (GET_MODE (XVECEXP (*op0, 0, 0)) == CCRAWmode
28170
+ && INTVAL (*op1) >= 0 && INTVAL (*op1) <= 3)
28171
*op1 = gen_rtx_CONST_INT (VOIDmode, 1 << (3 - INTVAL (*op1)));
28172
*op0 = XVECEXP (*op0, 0, 0);
28174
@@ -1594,6 +1654,46 @@
28176
s390_option_override (void)
28179
+ cl_deferred_option *opt;
28180
+ vec<cl_deferred_option> *v =
28181
+ (vec<cl_deferred_option> *) s390_deferred_options;
28184
+ FOR_EACH_VEC_ELT (*v, i, opt)
28186
+ switch (opt->opt_index)
28188
+ case OPT_mhotpatch:
28189
+ s390_hotpatch_trampoline_halfwords = (opt->value) ?
28190
+ s390_hotpatch_trampoline_halfwords_default : -1;
28192
+ case OPT_mhotpatch_:
28196
+ val = integral_argument (opt->arg);
28199
+ /* argument is not a plain number */
28200
+ error ("argument to %qs should be a non-negative integer",
28204
+ else if (val > s390_hotpatch_trampoline_halfwords_max)
28206
+ error ("argument to %qs is too large (max. %d)",
28207
+ "-mhotpatch=", s390_hotpatch_trampoline_halfwords_max);
28210
+ s390_hotpatch_trampoline_halfwords = val;
28214
+ gcc_unreachable ();
28218
/* Set up function hooks. */
28219
init_machine_status = s390_init_machine_status;
28221
@@ -3015,15 +3115,22 @@
28222
prefer ADDR_REGS. If 'class' is not a superset
28223
of ADDR_REGS, e.g. FP_REGS, reject this reload. */
28225
- /* A larl operand with odd addend will get fixed via secondary
28226
- reload. So don't request it to be pushed into literal
28228
+ /* Symrefs cannot be pushed into the literal pool with -fPIC
28229
+ so we *MUST NOT* return NO_REGS for these cases
28230
+ (s390_cannot_force_const_mem will return true).
28232
+ On the other hand we MUST return NO_REGS for symrefs with
28233
+ invalid addend which might have been pushed to the literal
28234
+ pool (no -fPIC). Usually we would expect them to be
28235
+ handled via secondary reload but this does not happen if
28236
+ they are used as literal pool slot replacement in reload
28237
+ inheritance (see emit_input_reload_insns). */
28238
if (TARGET_CPU_ZARCH
28239
&& GET_CODE (XEXP (op, 0)) == PLUS
28240
&& GET_CODE (XEXP (XEXP(op, 0), 0)) == SYMBOL_REF
28241
&& GET_CODE (XEXP (XEXP(op, 0), 1)) == CONST_INT)
28243
- if (reg_class_subset_p (ADDR_REGS, rclass))
28244
+ if (flag_pic && reg_class_subset_p (ADDR_REGS, rclass))
28248
@@ -5311,6 +5418,101 @@
28249
gcc_unreachable ();
28252
+/* Returns -1 if the function should not be made hotpatchable. Otherwise it
28253
+ returns a number >= 0 that is the desired size of the hotpatch trampoline
28256
+static int s390_function_num_hotpatch_trampoline_halfwords (tree decl,
28261
+ if (DECL_DECLARED_INLINE_P (decl)
28262
+ || DECL_ARTIFICIAL (decl)
28263
+ || MAIN_NAME_P (DECL_NAME (decl)))
28265
+ /* - Explicitly inlined functions cannot be hotpatched.
28266
+ - Artificial functions need not be hotpatched.
28267
+ - Making the main function hotpatchable is useless. */
28270
+ attr = lookup_attribute ("hotpatch", DECL_ATTRIBUTES (decl));
28271
+ if (attr || s390_hotpatch_trampoline_halfwords >= 0)
28273
+ if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (decl)))
28276
+ warning (OPT_Wattributes, "function %qE with the %qs attribute"
28277
+ " is not hotpatchable", DECL_NAME (decl), "always_inline");
28283
+ get_hotpatch_attribute (attr) : s390_hotpatch_trampoline_halfwords;
28290
+/* Hook to determine if one function can safely inline another. */
28293
+s390_can_inline_p (tree caller, tree callee)
28295
+ if (s390_function_num_hotpatch_trampoline_halfwords (callee, false) >= 0)
28298
+ return default_target_can_inline_p (caller, callee);
28301
+/* Write the extra assembler code needed to declare a function properly. */
28304
+s390_asm_output_function_label (FILE *asm_out_file, const char *fname,
28307
+ int hotpatch_trampoline_halfwords = -1;
28311
+ hotpatch_trampoline_halfwords =
28312
+ s390_function_num_hotpatch_trampoline_halfwords (decl, true);
28313
+ if (hotpatch_trampoline_halfwords >= 0
28314
+ && decl_function_context (decl) != NULL_TREE)
28316
+ warning_at (DECL_SOURCE_LOCATION (decl), OPT_mhotpatch,
28317
+ "hotpatching is not compatible with nested functions");
28318
+ hotpatch_trampoline_halfwords = -1;
28322
+ if (hotpatch_trampoline_halfwords > 0)
28326
+ /* Add a trampoline code area before the function label and initialize it
28327
+ with two-byte nop instructions. This area can be overwritten with code
28328
+ that jumps to a patched version of the function. */
28329
+ for (i = 0; i < hotpatch_trampoline_halfwords; i++)
28330
+ asm_fprintf (asm_out_file, "\tnopr\t%%r7\n");
28331
+ /* Note: The function label must be aligned so that (a) the bytes of the
28332
+ following nop do not cross a cacheline boundary, and (b) a jump address
28333
+ (eight bytes for 64 bit targets, 4 bytes for 32 bit targets) can be
28334
+ stored directly before the label without crossing a cacheline
28335
+ boundary. All this is necessary to make sure the trampoline code can
28336
+ be changed atomically. */
28339
+ ASM_OUTPUT_LABEL (asm_out_file, fname);
28341
+ /* Output a four-byte nop if hotpatching is enabled. This can be overwritten
28342
+ atomically with a relative backwards jump to the trampoline area. */
28343
+ if (hotpatch_trampoline_halfwords >= 0)
28344
+ asm_fprintf (asm_out_file, "\tnop\t0\n");
28347
/* Output machine-dependent UNSPECs occurring in address constant X
28348
in assembler syntax to stdio stream FILE. Returns true if the
28349
constant X could be recognized, false otherwise. */
28350
@@ -7846,6 +8048,9 @@
28352
bb = BASIC_BLOCK (bb_index);
28357
FOR_BB_INSNS (bb, insn)
28359
rtx ite, cc, pat, target;
28360
@@ -7959,7 +8164,10 @@
28364
- PATTERN (tbegin_insn) = XVECEXP (PATTERN (tbegin_insn), 0, 0);
28365
+ PATTERN (tbegin_insn) = gen_rtx_PARALLEL (VOIDmode,
28367
+ XVECEXP (PATTERN (tbegin_insn), 0, 0),
28368
+ XVECEXP (PATTERN (tbegin_insn), 0, 1)));
28369
INSN_CODE (tbegin_insn) = -1;
28370
df_insn_rescan (tbegin_insn);
28372
@@ -9568,61 +9776,47 @@
28374
s390_expand_tbegin (rtx dest, rtx tdb, rtx retry, bool clobber_fprs_p)
28376
- const int CC0 = 1 << 3;
28377
- const int CC1 = 1 << 2;
28378
- const int CC3 = 1 << 0;
28379
- rtx abort_label = gen_label_rtx ();
28380
- rtx leave_label = gen_label_rtx ();
28381
+ rtx retry_plus_two = gen_reg_rtx (SImode);
28382
rtx retry_reg = gen_reg_rtx (SImode);
28383
rtx retry_label = NULL_RTX;
28385
- rtx very_unlikely = GEN_INT (REG_BR_PROB_BASE / 100 - 1);
28387
if (retry != NULL_RTX)
28389
emit_move_insn (retry_reg, retry);
28390
+ emit_insn (gen_addsi3 (retry_plus_two, retry_reg, const2_rtx));
28391
+ emit_insn (gen_addsi3 (retry_reg, retry_reg, const1_rtx));
28392
retry_label = gen_label_rtx ();
28393
emit_label (retry_label);
28396
if (clobber_fprs_p)
28397
- emit_insn (gen_tbegin_1 (tdb,
28398
- gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK)));
28399
+ emit_insn (gen_tbegin_1 (gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK), tdb));
28401
- emit_insn (gen_tbegin_nofloat_1 (tdb,
28402
- gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK)));
28403
+ emit_insn (gen_tbegin_nofloat_1 (gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK),
28406
- jump = s390_emit_jump (abort_label,
28407
- gen_rtx_NE (VOIDmode,
28408
- gen_rtx_REG (CCRAWmode, CC_REGNUM),
28409
- gen_rtx_CONST_INT (VOIDmode, CC0)));
28411
- JUMP_LABEL (jump) = abort_label;
28412
- LABEL_NUSES (abort_label) = 1;
28413
- add_reg_note (jump, REG_BR_PROB, very_unlikely);
28415
- /* Initialize CC return value. */
28416
- emit_move_insn (dest, const0_rtx);
28418
- s390_emit_jump (leave_label, NULL_RTX);
28419
- LABEL_NUSES (leave_label) = 1;
28422
- /* Abort handler code. */
28424
- emit_label (abort_label);
28425
+ emit_move_insn (dest, gen_rtx_UNSPEC (SImode,
28426
+ gen_rtvec (1, gen_rtx_REG (CCRAWmode,
28428
+ UNSPEC_CC_TO_INT));
28429
if (retry != NULL_RTX)
28431
+ const int CC0 = 1 << 3;
28432
+ const int CC1 = 1 << 2;
28433
+ const int CC3 = 1 << 0;
28435
rtx count = gen_reg_rtx (SImode);
28436
+ rtx leave_label = gen_label_rtx ();
28438
+ /* Exit for success and permanent failures. */
28439
jump = s390_emit_jump (leave_label,
28440
gen_rtx_EQ (VOIDmode,
28441
gen_rtx_REG (CCRAWmode, CC_REGNUM),
28442
- gen_rtx_CONST_INT (VOIDmode, CC1 | CC3)));
28443
- LABEL_NUSES (leave_label) = 2;
28444
- add_reg_note (jump, REG_BR_PROB, very_unlikely);
28445
+ gen_rtx_CONST_INT (VOIDmode, CC0 | CC1 | CC3)));
28446
+ LABEL_NUSES (leave_label) = 1;
28448
/* CC2 - transient failure. Perform retry with ppa. */
28449
- emit_move_insn (count, retry);
28450
+ emit_move_insn (count, retry_plus_two);
28451
emit_insn (gen_subsi3 (count, count, retry_reg));
28452
emit_insn (gen_tx_assist (count));
28453
jump = emit_jump_insn (gen_doloop_si64 (retry_label,
28454
@@ -9630,13 +9824,8 @@
28456
JUMP_LABEL (jump) = retry_label;
28457
LABEL_NUSES (retry_label) = 1;
28458
+ emit_label (leave_label);
28461
- emit_move_insn (dest, gen_rtx_UNSPEC (SImode,
28462
- gen_rtvec (1, gen_rtx_REG (CCRAWmode,
28464
- UNSPEC_CC_TO_INT));
28465
- emit_label (leave_label);
28469
@@ -9674,6 +9863,9 @@
28470
s390_init_builtins (void)
28472
tree ftype, uint64_type;
28473
+ tree returns_twice_attr = tree_cons (get_identifier ("returns_twice"),
28475
+ tree noreturn_attr = tree_cons (get_identifier ("noreturn"), NULL, NULL);
28477
/* void foo (void) */
28478
ftype = build_function_type_list (void_type_node, NULL_TREE);
28479
@@ -9684,7 +9876,7 @@
28480
ftype = build_function_type_list (void_type_node, integer_type_node,
28482
add_builtin_function ("__builtin_tabort", ftype,
28483
- S390_BUILTIN_TABORT, BUILT_IN_MD, NULL, NULL_TREE);
28484
+ S390_BUILTIN_TABORT, BUILT_IN_MD, NULL, noreturn_attr);
28485
add_builtin_function ("__builtin_tx_assist", ftype,
28486
S390_BUILTIN_TX_ASSIST, BUILT_IN_MD, NULL, NULL_TREE);
28488
@@ -9691,10 +9883,10 @@
28489
/* int foo (void *) */
28490
ftype = build_function_type_list (integer_type_node, ptr_type_node, NULL_TREE);
28491
add_builtin_function ("__builtin_tbegin", ftype, S390_BUILTIN_TBEGIN,
28492
- BUILT_IN_MD, NULL, NULL_TREE);
28493
+ BUILT_IN_MD, NULL, returns_twice_attr);
28494
add_builtin_function ("__builtin_tbegin_nofloat", ftype,
28495
S390_BUILTIN_TBEGIN_NOFLOAT,
28496
- BUILT_IN_MD, NULL, NULL_TREE);
28497
+ BUILT_IN_MD, NULL, returns_twice_attr);
28499
/* int foo (void *, int) */
28500
ftype = build_function_type_list (integer_type_node, ptr_type_node,
28501
@@ -9702,11 +9894,11 @@
28502
add_builtin_function ("__builtin_tbegin_retry", ftype,
28503
S390_BUILTIN_TBEGIN_RETRY,
28505
- NULL, NULL_TREE);
28506
+ NULL, returns_twice_attr);
28507
add_builtin_function ("__builtin_tbegin_retry_nofloat", ftype,
28508
S390_BUILTIN_TBEGIN_RETRY_NOFLOAT,
28510
- NULL, NULL_TREE);
28511
+ NULL, returns_twice_attr);
28513
/* int foo (void) */
28514
ftype = build_function_type_list (integer_type_node, NULL_TREE);
28515
@@ -11622,6 +11814,12 @@
28516
#undef TARGET_CANONICALIZE_COMPARISON
28517
#define TARGET_CANONICALIZE_COMPARISON s390_canonicalize_comparison
28519
+#undef TARGET_ATTRIBUTE_TABLE
28520
+#define TARGET_ATTRIBUTE_TABLE s390_attribute_table
28522
+#undef TARGET_CAN_INLINE_P
28523
+#define TARGET_CAN_INLINE_P s390_can_inline_p
28525
struct gcc_target targetm = TARGET_INITIALIZER;
28527
#include "gt-s390.h"
28528
Index: gcc/config/s390/s390.h
28529
===================================================================
28530
--- a/src/gcc/config/s390/s390.h (.../tags/gcc_4_8_2_release)
28531
+++ b/src/gcc/config/s390/s390.h (.../branches/gcc-4_8-branch)
28532
@@ -217,7 +217,7 @@
28533
#define STACK_BOUNDARY 64
28535
/* Allocation boundary (in *bits*) for the code of a function. */
28536
-#define FUNCTION_BOUNDARY 32
28537
+#define FUNCTION_BOUNDARY 64
28539
/* There is no point aligning anything to a rounder boundary than this. */
28540
#define BIGGEST_ALIGNMENT 64
28541
@@ -878,6 +878,9 @@
28542
fputc ('\n', (FILE)); \
28545
+#undef ASM_OUTPUT_FUNCTION_LABEL
28546
+#define ASM_OUTPUT_FUNCTION_LABEL(FILE, NAME, DECL) \
28547
+ s390_asm_output_function_label (FILE, NAME, DECL)
28549
/* Miscellaneous parameters. */
28551
Index: gcc/config/s390/s390.md
28552
===================================================================
28553
--- a/src/gcc/config/s390/s390.md (.../tags/gcc_4_8_2_release)
28554
+++ b/src/gcc/config/s390/s390.md (.../branches/gcc-4_8-branch)
28555
@@ -147,6 +147,7 @@
28557
; Transactional Execution support
28559
+ UNSPECV_TBEGIN_TDB
28563
@@ -9896,9 +9897,10 @@
28565
(define_insn "tbegin_1"
28566
[(set (reg:CCRAW CC_REGNUM)
28567
- (unspec_volatile:CCRAW [(match_operand:BLK 0 "memory_operand" "=Q")
28568
- (match_operand 1 "const_int_operand" " D")]
28569
+ (unspec_volatile:CCRAW [(match_operand 0 "const_int_operand" "D")]
28571
+ (set (match_operand:BLK 1 "memory_operand" "=Q")
28572
+ (unspec_volatile:BLK [(match_dup 0)] UNSPECV_TBEGIN_TDB))
28573
(clobber (reg:DF 16))
28574
(clobber (reg:DF 17))
28575
(clobber (reg:DF 18))
28576
@@ -9917,18 +9919,19 @@
28577
(clobber (reg:DF 31))]
28578
; CONST_OK_FOR_CONSTRAINT_P does not work with D constraint since D is
28579
; not supposed to be used for immediates (see genpreds.c).
28580
- "TARGET_HTM && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 0xffff"
28582
+ "TARGET_HTM && INTVAL (operands[0]) >= 0 && INTVAL (operands[0]) <= 0xffff"
28584
[(set_attr "op_type" "SIL")])
28586
; Same as above but without the FPR clobbers
28587
(define_insn "tbegin_nofloat_1"
28588
[(set (reg:CCRAW CC_REGNUM)
28589
- (unspec_volatile:CCRAW [(match_operand:BLK 0 "memory_operand" "=Q")
28590
- (match_operand 1 "const_int_operand" " D")]
28591
- UNSPECV_TBEGIN))]
28592
- "TARGET_HTM && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 0xffff"
28594
+ (unspec_volatile:CCRAW [(match_operand 0 "const_int_operand" "D")]
28596
+ (set (match_operand:BLK 1 "memory_operand" "=Q")
28597
+ (unspec_volatile:BLK [(match_dup 0)] UNSPECV_TBEGIN_TDB))]
28598
+ "TARGET_HTM && INTVAL (operands[0]) >= 0 && INTVAL (operands[0]) <= 0xffff"
28600
[(set_attr "op_type" "SIL")])
28603
@@ -10012,15 +10015,12 @@
28604
; Transaction perform processor assist
28606
(define_expand "tx_assist"
28607
- [(set (match_dup 1) (const_int 0))
28608
- (unspec_volatile [(match_operand:SI 0 "register_operand" "")
28610
+ [(unspec_volatile [(match_operand:SI 0 "register_operand" "")
28611
+ (reg:SI GPR0_REGNUM)
28616
- operands[1] = gen_reg_rtx (SImode);
28620
(define_insn "*ppa"
28621
[(unspec_volatile [(match_operand:SI 0 "register_operand" "d")
28622
@@ -10028,5 +10028,5 @@
28623
(match_operand 2 "const_int_operand" "I")]
28625
"TARGET_HTM && INTVAL (operands[2]) < 16"
28628
[(set_attr "op_type" "RRF")])
28629
Index: gcc/config/s390/s390.opt
28630
===================================================================
28631
--- a/src/gcc/config/s390/s390.opt (.../tags/gcc_4_8_2_release)
28632
+++ b/src/gcc/config/s390/s390.opt (.../branches/gcc-4_8-branch)
28634
Target Report RejectNegative Negative(msoft-float) InverseMask(SOFT_FLOAT, HARD_FLOAT)
28635
Enable hardware floating point
28638
+Target Report Var(s390_deferred_options) Defer
28639
+Prepend the function label with 12 two-byte Nop instructions, and add a four byte Nop instruction after the label for hotpatching.
28642
+Target RejectNegative Report Joined Var(s390_deferred_options) Defer
28643
+Prepend the function label with the given number of two-byte Nop instructions, and add a four byte Nop instruction after the label for hotpatching.
28646
Target Report RejectNegative Negative(mlong-double-64) Mask(LONG_DOUBLE_128)
28647
Use 128-bit long double
28648
Index: gcc/config/s390/htmxlintrin.h
28649
===================================================================
28650
--- a/src/gcc/config/s390/htmxlintrin.h (.../tags/gcc_4_8_2_release)
28651
+++ b/src/gcc/config/s390/htmxlintrin.h (.../branches/gcc-4_8-branch)
28652
@@ -33,13 +33,20 @@
28653
the IBM XL compiler. For documentation please see the "z/OS XL
28654
C/C++ Programming Guide" publically available on the web. */
28656
-extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
28657
+/* FIXME: __TM_simple_begin and __TM_begin should be marked
28658
+ __always_inline__ as well but this currently produces an error
28659
+ since the tbegin builtins are "returns_twice" and setjmp_call_p
28660
+ (calls.c) therefore identifies the functions as calling setjmp.
28661
+ The tree inliner currently refuses to inline functions calling
28665
__TM_simple_begin ()
28667
return __builtin_tbegin_nofloat (0);
28670
-extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
28672
__TM_begin (void* const tdb)
28674
return __builtin_tbegin_nofloat (tdb);
28679
- if (tdb->format == 0)
28680
+ if (tdb->format != 1)
28682
return tdb->nesting_depth;
28686
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
28688
- if (tdb->format == 0)
28689
+ if (tdb->format != 1)
28692
return !!(tdb->abort_code >= _HTM_FIRST_USER_ABORT_CODE);
28693
@@ -101,7 +108,7 @@
28695
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
28697
- if (tdb->format == 0)
28698
+ if (tdb->format != 1)
28701
if (tdb->abort_code >= _HTM_FIRST_USER_ABORT_CODE)
28702
@@ -117,7 +124,7 @@
28704
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
28706
- return (tdb->format == 0
28707
+ return (tdb->format == 1
28708
&& (tdb->abort_code == 4 /* unfiltered program interruption */
28709
|| tdb->abort_code == 11 /* restricted instruction */));
28711
@@ -127,7 +134,7 @@
28713
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
28715
- return (tdb->format == 0
28716
+ return (tdb->format == 1
28717
&& (tdb->abort_code == 7 /* fetch overflow */
28718
|| tdb->abort_code == 8 /* store overflow */));
28720
@@ -137,7 +144,7 @@
28722
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
28724
- return tdb->format == 0 && tdb->abort_code == 13; /* depth exceeded */
28725
+ return tdb->format == 1 && tdb->abort_code == 13; /* depth exceeded */
28728
extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
28729
@@ -145,7 +152,7 @@
28731
struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
28733
- return (tdb->format == 0
28734
+ return (tdb->format == 1
28735
&& (tdb->abort_code == 9 /* fetch conflict */
28736
|| tdb->abort_code == 10 /* store conflict */));
28738
Index: gcc/config/s390/s390-protos.h
28739
===================================================================
28740
--- a/src/gcc/config/s390/s390-protos.h (.../tags/gcc_4_8_2_release)
28741
+++ b/src/gcc/config/s390/s390-protos.h (.../branches/gcc-4_8-branch)
28742
@@ -110,5 +110,6 @@
28743
extern int s390_branch_condition_mask (rtx);
28744
extern int s390_compare_and_branch_condition_mask (rtx);
28745
extern bool s390_extzv_shift_ok (int, int, unsigned HOST_WIDE_INT);
28746
+extern void s390_asm_output_function_label (FILE *, const char *, tree);
28748
#endif /* RTX_CODE */
28749
Index: gcc/config/sparc/t-rtems
28750
===================================================================
28751
--- a/src/gcc/config/sparc/t-rtems (.../tags/gcc_4_8_2_release)
28752
+++ b/src/gcc/config/sparc/t-rtems (.../branches/gcc-4_8-branch)
28754
# <http://www.gnu.org/licenses/>.
28757
-MULTILIB_OPTIONS = msoft-float mcpu=v8
28758
-MULTILIB_DIRNAMES = soft v8
28759
+MULTILIB_OPTIONS = msoft-float mcpu=v8/mcpu=leon3
28760
+MULTILIB_DIRNAMES = soft v8 leon3
28761
MULTILIB_MATCHES = msoft-float=mno-fpu
28762
Index: gcc/config/sparc/sparc.md
28763
===================================================================
28764
--- a/src/gcc/config/sparc/sparc.md (.../tags/gcc_4_8_2_release)
28765
+++ b/src/gcc/config/sparc/sparc.md (.../branches/gcc-4_8-branch)
28766
@@ -206,7 +206,7 @@
28767
;; 'f' for all DF/TFmode values, including those that are specific to the v8.
28769
;; Attribute for cpu type.
28770
-;; These must match the values for enum processor_type in sparc.h.
28771
+;; These must match the values of the enum processor_type in sparc-opts.h.
28775
@@ -214,6 +214,7 @@
28783
@@ -284,7 +285,8 @@
28784
(const_string "none"))
28786
(define_attr "pic" "false,true"
28787
- (symbol_ref "(flag_pic != 0 ? PIC_TRUE : PIC_FALSE)"))
28788
+ (symbol_ref "(flag_pic != 0
28789
+ ? PIC_TRUE : PIC_FALSE)"))
28791
(define_attr "calls_alloca" "false,true"
28792
(symbol_ref "(cfun->calls_alloca != 0
28793
@@ -306,6 +308,10 @@
28794
(symbol_ref "(TARGET_FLAT != 0
28795
? FLAT_TRUE : FLAT_FALSE)"))
28797
+(define_attr "fix_ut699" "false,true"
28798
+ (symbol_ref "(sparc_fix_ut699 != 0
28799
+ ? FIX_UT699_TRUE : FIX_UT699_FALSE)"))
28801
;; Length (in # of insns).
28802
;; Beware that setting a length greater or equal to 3 for conditional branches
28803
;; has a side-effect (see output_cbranch and output_v9branch).
28804
@@ -420,32 +426,18 @@
28805
[(set_attr "length" "2")
28806
(set_attr "type" "multi")])
28808
-;; Attributes for instruction and branch scheduling
28809
-(define_attr "tls_call_delay" "false,true"
28810
- (symbol_ref "(tls_call_delay (insn)
28811
- ? TLS_CALL_DELAY_TRUE : TLS_CALL_DELAY_FALSE)"))
28813
+;; Attributes for branch scheduling
28814
(define_attr "in_call_delay" "false,true"
28815
- (cond [(eq_attr "type" "uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
28816
- (const_string "false")
28817
- (eq_attr "type" "load,fpload,store,fpstore")
28818
- (if_then_else (eq_attr "length" "1")
28819
- (const_string "true")
28820
- (const_string "false"))]
28821
- (if_then_else (and (eq_attr "length" "1")
28822
- (eq_attr "tls_call_delay" "true"))
28823
- (const_string "true")
28824
- (const_string "false"))))
28825
+ (symbol_ref "(eligible_for_call_delay (insn)
28826
+ ? IN_CALL_DELAY_TRUE : IN_CALL_DELAY_FALSE)"))
28828
-(define_attr "eligible_for_sibcall_delay" "false,true"
28829
+(define_attr "in_sibcall_delay" "false,true"
28830
(symbol_ref "(eligible_for_sibcall_delay (insn)
28831
- ? ELIGIBLE_FOR_SIBCALL_DELAY_TRUE
28832
- : ELIGIBLE_FOR_SIBCALL_DELAY_FALSE)"))
28833
+ ? IN_SIBCALL_DELAY_TRUE : IN_SIBCALL_DELAY_FALSE)"))
28835
-(define_attr "eligible_for_return_delay" "false,true"
28836
+(define_attr "in_return_delay" "false,true"
28837
(symbol_ref "(eligible_for_return_delay (insn)
28838
- ? ELIGIBLE_FOR_RETURN_DELAY_TRUE
28839
- : ELIGIBLE_FOR_RETURN_DELAY_FALSE)"))
28840
+ ? IN_RETURN_DELAY_TRUE : IN_RETURN_DELAY_FALSE)"))
28842
;; ??? !v9: Should implement the notion of predelay slots for floating-point
28843
;; branches. This would allow us to remove the nop always inserted before
28844
@@ -460,41 +452,34 @@
28845
;; because it prevents us from moving back the final store of inner loops.
28847
(define_attr "in_branch_delay" "false,true"
28848
- (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
28849
- (eq_attr "length" "1"))
28850
- (const_string "true")
28851
- (const_string "false")))
28852
+ (cond [(eq_attr "type" "uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
28853
+ (const_string "false")
28854
+ (and (eq_attr "fix_ut699" "true") (eq_attr "type" "load,sload"))
28855
+ (const_string "false")
28856
+ (and (eq_attr "fix_ut699" "true")
28857
+ (and (eq_attr "type" "fpload,fp,fpmove,fpmul,fpdivs,fpsqrts")
28858
+ (eq_attr "fptype" "single")))
28859
+ (const_string "false")
28860
+ (eq_attr "length" "1")
28861
+ (const_string "true")
28862
+ ] (const_string "false")))
28864
-(define_attr "in_uncond_branch_delay" "false,true"
28865
- (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
28866
- (eq_attr "length" "1"))
28867
- (const_string "true")
28868
- (const_string "false")))
28870
-(define_attr "in_annul_branch_delay" "false,true"
28871
- (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
28872
- (eq_attr "length" "1"))
28873
- (const_string "true")
28874
- (const_string "false")))
28876
(define_delay (eq_attr "type" "call")
28877
[(eq_attr "in_call_delay" "true") (nil) (nil)])
28879
(define_delay (eq_attr "type" "sibcall")
28880
- [(eq_attr "eligible_for_sibcall_delay" "true") (nil) (nil)])
28881
+ [(eq_attr "in_sibcall_delay" "true") (nil) (nil)])
28883
+(define_delay (eq_attr "type" "return")
28884
+ [(eq_attr "in_return_delay" "true") (nil) (nil)])
28886
(define_delay (eq_attr "type" "branch")
28887
- [(eq_attr "in_branch_delay" "true")
28888
- (nil) (eq_attr "in_annul_branch_delay" "true")])
28889
+ [(eq_attr "in_branch_delay" "true") (nil) (eq_attr "in_branch_delay" "true")])
28891
(define_delay (eq_attr "type" "uncond_branch")
28892
- [(eq_attr "in_uncond_branch_delay" "true")
28894
+ [(eq_attr "in_branch_delay" "true") (nil) (nil)])
28896
-(define_delay (eq_attr "type" "return")
28897
- [(eq_attr "eligible_for_return_delay" "true") (nil) (nil)])
28900
;; Include SPARC DFA schedulers
28902
(include "cypress.md")
28903
@@ -5548,7 +5533,7 @@
28904
[(set (match_operand:DF 0 "register_operand" "=e")
28905
(mult:DF (float_extend:DF (match_operand:SF 1 "register_operand" "f"))
28906
(float_extend:DF (match_operand:SF 2 "register_operand" "f"))))]
28907
- "(TARGET_V8 || TARGET_V9) && TARGET_FPU"
28908
+ "(TARGET_V8 || TARGET_V9) && TARGET_FPU && !sparc_fix_ut699"
28909
"fsmuld\t%1, %2, %0"
28910
[(set_attr "type" "fpmul")
28911
(set_attr "fptype" "double")])
28912
@@ -5575,22 +5560,39 @@
28913
(match_operand:TF 2 "register_operand" "e")))]
28914
"TARGET_FPU && TARGET_HARD_QUAD"
28915
"fdivq\t%1, %2, %0"
28916
- [(set_attr "type" "fpdivd")])
28917
+ [(set_attr "type" "fpdivs")])
28919
-(define_insn "divdf3"
28920
+(define_expand "divdf3"
28921
[(set (match_operand:DF 0 "register_operand" "=e")
28922
(div:DF (match_operand:DF 1 "register_operand" "e")
28923
(match_operand:DF 2 "register_operand" "e")))]
28927
+(define_insn "*divdf3_nofix"
28928
+ [(set (match_operand:DF 0 "register_operand" "=e")
28929
+ (div:DF (match_operand:DF 1 "register_operand" "e")
28930
+ (match_operand:DF 2 "register_operand" "e")))]
28931
+ "TARGET_FPU && !sparc_fix_ut699"
28932
"fdivd\t%1, %2, %0"
28933
[(set_attr "type" "fpdivd")
28934
(set_attr "fptype" "double")])
28936
+(define_insn "*divdf3_fix"
28937
+ [(set (match_operand:DF 0 "register_operand" "=e")
28938
+ (div:DF (match_operand:DF 1 "register_operand" "e")
28939
+ (match_operand:DF 2 "register_operand" "e")))]
28940
+ "TARGET_FPU && sparc_fix_ut699"
28941
+ "fdivd\t%1, %2, %0\n\tstd\t%0, [%%sp-8]"
28942
+ [(set_attr "type" "fpdivd")
28943
+ (set_attr "fptype" "double")
28944
+ (set_attr "length" "2")])
28946
(define_insn "divsf3"
28947
[(set (match_operand:SF 0 "register_operand" "=f")
28948
(div:SF (match_operand:SF 1 "register_operand" "f")
28949
(match_operand:SF 2 "register_operand" "f")))]
28951
+ "TARGET_FPU && !sparc_fix_ut699"
28952
"fdivs\t%1, %2, %0"
28953
[(set_attr "type" "fpdivs")])
28955
@@ -5789,20 +5791,35 @@
28956
(sqrt:TF (match_operand:TF 1 "register_operand" "e")))]
28957
"TARGET_FPU && TARGET_HARD_QUAD"
28959
- [(set_attr "type" "fpsqrtd")])
28960
+ [(set_attr "type" "fpsqrts")])
28962
-(define_insn "sqrtdf2"
28963
+(define_expand "sqrtdf2"
28964
[(set (match_operand:DF 0 "register_operand" "=e")
28965
(sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
28969
+(define_insn "*sqrtdf2_nofix"
28970
+ [(set (match_operand:DF 0 "register_operand" "=e")
28971
+ (sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
28972
+ "TARGET_FPU && !sparc_fix_ut699"
28974
[(set_attr "type" "fpsqrtd")
28975
(set_attr "fptype" "double")])
28977
+(define_insn "*sqrtdf2_fix"
28978
+ [(set (match_operand:DF 0 "register_operand" "=e")
28979
+ (sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
28980
+ "TARGET_FPU && sparc_fix_ut699"
28981
+ "fsqrtd\t%1, %0\n\tstd\t%0, [%%sp-8]"
28982
+ [(set_attr "type" "fpsqrtd")
28983
+ (set_attr "fptype" "double")
28984
+ (set_attr "length" "2")])
28986
(define_insn "sqrtsf2"
28987
[(set (match_operand:SF 0 "register_operand" "=f")
28988
(sqrt:SF (match_operand:SF 1 "register_operand" "f")))]
28990
+ "TARGET_FPU && !sparc_fix_ut699"
28992
[(set_attr "type" "fpsqrts")])
28994
Index: gcc/config/sparc/t-sparc
28995
===================================================================
28996
--- a/src/gcc/config/sparc/t-sparc (.../tags/gcc_4_8_2_release)
28997
+++ b/src/gcc/config/sparc/t-sparc (.../branches/gcc-4_8-branch)
28999
insn-codes.h conditions.h output.h $(INSN_ATTR_H) $(FLAGS_H) \
29000
$(FUNCTION_H) $(EXCEPT_H) $(EXPR_H) $(OPTABS_H) $(RECOG_H) \
29001
$(DIAGNOSTIC_CORE_H) $(GGC_H) $(TM_P_H) debug.h $(TARGET_H) \
29002
- $(TARGET_DEF_H) $(COMMON_TARGET_H) $(GIMPLE_H) \
29003
+ $(TARGET_DEF_H) $(COMMON_TARGET_H) $(GIMPLE_H) $(TREE_PASS_H) \
29004
langhooks.h reload.h $(PARAMS_H) $(DF_H) $(OPTS_H) \
29007
Index: gcc/config/sparc/sparc.opt
29008
===================================================================
29009
--- a/src/gcc/config/sparc/sparc.opt (.../tags/gcc_4_8_2_release)
29010
+++ b/src/gcc/config/sparc/sparc.opt (.../branches/gcc-4_8-branch)
29011
@@ -146,6 +146,9 @@
29012
Enum(sparc_processor_type) String(leon) Value(PROCESSOR_LEON)
29015
+Enum(sparc_processor_type) String(leon3) Value(PROCESSOR_LEON3)
29018
Enum(sparc_processor_type) String(sparclite) Value(PROCESSOR_SPARCLITE)
29021
@@ -201,9 +204,19 @@
29022
Enable workaround for single erratum of AT697F processor
29023
(corresponding to erratum #13 of AT697E processor)
29026
+Target Report RejectNegative Var(sparc_fix_ut699)
29027
+Enable workarounds for the errata of the UT699 processor
29029
Mask(LONG_DOUBLE_128)
29030
;; Use 128-bit long double
29033
+;; Generate code for LEON
29036
+;; Generate code for LEON3
29039
;; Generate code for SPARClite
29041
Index: gcc/config/sparc/sync.md
29042
===================================================================
29043
--- a/src/gcc/config/sparc/sync.md (.../tags/gcc_4_8_2_release)
29044
+++ b/src/gcc/config/sparc/sync.md (.../branches/gcc-4_8-branch)
29045
@@ -161,7 +161,8 @@
29046
(match_operand:SI 5 "const_int_operand" "") ;; is_weak
29047
(match_operand:SI 6 "const_int_operand" "") ;; mod_s
29048
(match_operand:SI 7 "const_int_operand" "")] ;; mod_f
29049
- "TARGET_V9 && (<MODE>mode != DImode || TARGET_ARCH64 || TARGET_V8PLUS)"
29050
+ "(TARGET_V9 || TARGET_LEON3)
29051
+ && (<MODE>mode != DImode || TARGET_ARCH64 || TARGET_V8PLUS)"
29053
sparc_expand_compare_and_swap (operands);
29055
@@ -176,7 +177,7 @@
29056
[(match_operand:I48MODE 2 "register_operand" "")
29057
(match_operand:I48MODE 3 "register_operand" "")]
29060
+ "TARGET_V9 || TARGET_LEON3"
29063
(define_insn "*atomic_compare_and_swap<mode>_1"
29064
@@ -187,7 +188,7 @@
29065
[(match_operand:I48MODE 2 "register_operand" "r")
29066
(match_operand:I48MODE 3 "register_operand" "0")]
29068
- "TARGET_V9 && (<MODE>mode == SImode || TARGET_ARCH64)"
29069
+ "(TARGET_V9 || TARGET_LEON3) && (<MODE>mode != DImode || TARGET_ARCH64)"
29070
"cas<modesuffix>\t%1, %2, %0"
29071
[(set_attr "type" "multi")])
29073
@@ -220,7 +221,7 @@
29074
(match_operand:SI 1 "memory_operand" "")
29075
(match_operand:SI 2 "register_operand" "")
29076
(match_operand:SI 3 "const_int_operand" "")]
29077
- "TARGET_V8 || TARGET_V9"
29078
+ "(TARGET_V8 || TARGET_V9) && !sparc_fix_ut699"
29080
enum memmodel model = (enum memmodel) INTVAL (operands[3]);
29082
@@ -236,7 +237,7 @@
29085
(match_operand:SI 2 "register_operand" "0"))]
29086
- "TARGET_V8 || TARGET_V9"
29087
+ "(TARGET_V8 || TARGET_V9) && !sparc_fix_ut699"
29089
[(set_attr "type" "multi")])
29091
@@ -244,7 +245,7 @@
29092
[(match_operand:QI 0 "register_operand" "")
29093
(match_operand:QI 1 "memory_operand" "")
29094
(match_operand:SI 2 "const_int_operand" "")]
29096
+ "!sparc_fix_ut699"
29098
enum memmodel model = (enum memmodel) INTVAL (operands[2]);
29100
@@ -268,6 +269,6 @@
29101
(unspec_volatile:QI [(match_operand:QI 1 "memory_operand" "+m")]
29103
(set (match_dup 1) (const_int -1))]
29105
+ "!sparc_fix_ut699"
29107
[(set_attr "type" "multi")])
29108
Index: gcc/config/sparc/sparc-opts.h
29109
===================================================================
29110
--- a/src/gcc/config/sparc/sparc-opts.h (.../tags/gcc_4_8_2_release)
29111
+++ b/src/gcc/config/sparc/sparc-opts.h (.../branches/gcc-4_8-branch)
29113
PROCESSOR_SUPERSPARC,
29114
PROCESSOR_HYPERSPARC,
29117
PROCESSOR_SPARCLITE,
29120
Index: gcc/config/sparc/sparc-protos.h
29121
===================================================================
29122
--- a/src/gcc/config/sparc/sparc-protos.h (.../tags/gcc_4_8_2_release)
29123
+++ b/src/gcc/config/sparc/sparc-protos.h (.../branches/gcc-4_8-branch)
29125
extern int mems_ok_for_ldd_peep (rtx, rtx, rtx);
29126
extern int empty_delay_slot (rtx);
29127
extern int emit_cbcond_nop (rtx);
29128
+extern int eligible_for_call_delay (rtx);
29129
extern int eligible_for_return_delay (rtx);
29130
extern int eligible_for_sibcall_delay (rtx);
29131
-extern int tls_call_delay (rtx);
29132
extern int emit_move_sequence (rtx, enum machine_mode);
29133
extern int fp_sethi_p (rtx);
29134
extern int fp_mov_p (rtx);
29135
Index: gcc/config/sparc/sparc.c
29136
===================================================================
29137
--- a/src/gcc/config/sparc/sparc.c (.../tags/gcc_4_8_2_release)
29138
+++ b/src/gcc/config/sparc/sparc.c (.../branches/gcc-4_8-branch)
29140
#include "params.h"
29143
+#include "tree-pass.h"
29145
/* Processor costs */
29147
@@ -226,6 +227,30 @@
29151
+struct processor_costs leon3_costs = {
29152
+ COSTS_N_INSNS (1), /* int load */
29153
+ COSTS_N_INSNS (1), /* int signed load */
29154
+ COSTS_N_INSNS (1), /* int zeroed load */
29155
+ COSTS_N_INSNS (1), /* float load */
29156
+ COSTS_N_INSNS (1), /* fmov, fneg, fabs */
29157
+ COSTS_N_INSNS (1), /* fadd, fsub */
29158
+ COSTS_N_INSNS (1), /* fcmp */
29159
+ COSTS_N_INSNS (1), /* fmov, fmovr */
29160
+ COSTS_N_INSNS (1), /* fmul */
29161
+ COSTS_N_INSNS (14), /* fdivs */
29162
+ COSTS_N_INSNS (15), /* fdivd */
29163
+ COSTS_N_INSNS (22), /* fsqrts */
29164
+ COSTS_N_INSNS (23), /* fsqrtd */
29165
+ COSTS_N_INSNS (5), /* imul */
29166
+ COSTS_N_INSNS (5), /* imulX */
29167
+ 0, /* imul bit factor */
29168
+ COSTS_N_INSNS (35), /* idiv */
29169
+ COSTS_N_INSNS (35), /* idivX */
29170
+ COSTS_N_INSNS (1), /* movcc/movr */
29171
+ 0, /* shift penalty */
29175
struct processor_costs sparclet_costs = {
29176
COSTS_N_INSNS (3), /* int load */
29177
COSTS_N_INSNS (3), /* int signed load */
29178
@@ -538,7 +563,6 @@
29179
HOST_WIDE_INT, tree);
29180
static bool sparc_can_output_mi_thunk (const_tree, HOST_WIDE_INT,
29181
HOST_WIDE_INT, const_tree);
29182
-static void sparc_reorg (void);
29183
static struct machine_function * sparc_init_machine_status (void);
29184
static bool sparc_cannot_force_const_mem (enum machine_mode, rtx);
29185
static rtx sparc_tls_get_addr (void);
29186
@@ -680,9 +704,6 @@
29187
#undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
29188
#define TARGET_ASM_CAN_OUTPUT_MI_THUNK sparc_can_output_mi_thunk
29190
-#undef TARGET_MACHINE_DEPENDENT_REORG
29191
-#define TARGET_MACHINE_DEPENDENT_REORG sparc_reorg
29193
#undef TARGET_RTX_COSTS
29194
#define TARGET_RTX_COSTS sparc_rtx_costs
29195
#undef TARGET_ADDRESS_COST
29196
@@ -804,6 +825,306 @@
29198
struct gcc_target targetm = TARGET_INITIALIZER;
29200
+/* Return the memory reference contained in X if any, zero otherwise. */
29205
+ if (GET_CODE (x) == SIGN_EXTEND || GET_CODE (x) == ZERO_EXTEND)
29214
+/* We use a machine specific pass to enable workarounds for errata.
29215
+ We need to have the (essentially) final form of the insn stream in order
29216
+ to properly detect the various hazards. Therefore, this machine specific
29217
+ pass runs as late as possible. The pass is inserted in the pass pipeline
29218
+ at the end of sparc_option_override. */
29221
+sparc_gate_work_around_errata (void)
29223
+ /* The only errata we handle are those of the AT697F and UT699. */
29224
+ return sparc_fix_at697f != 0 || sparc_fix_ut699 != 0;
29227
+static unsigned int
29228
+sparc_do_work_around_errata (void)
29232
+ /* Force all instructions to be split into their final form. */
29233
+ split_all_insns_noflow ();
29235
+ /* Now look for specific patterns in the insn stream. */
29236
+ for (insn = get_insns (); insn; insn = next)
29238
+ bool insert_nop = false;
29241
+ /* Look into the instruction in a delay slot. */
29242
+ if (NONJUMP_INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE)
29243
+ insn = XVECEXP (PATTERN (insn), 0, 1);
29245
+ /* Look for a single-word load into an odd-numbered FP register. */
29246
+ if (sparc_fix_at697f
29247
+ && NONJUMP_INSN_P (insn)
29248
+ && (set = single_set (insn)) != NULL_RTX
29249
+ && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
29250
+ && MEM_P (SET_SRC (set))
29251
+ && REG_P (SET_DEST (set))
29252
+ && REGNO (SET_DEST (set)) > 31
29253
+ && REGNO (SET_DEST (set)) % 2 != 0)
29255
+ /* The wrong dependency is on the enclosing double register. */
29256
+ const unsigned int x = REGNO (SET_DEST (set)) - 1;
29257
+ unsigned int src1, src2, dest;
29260
+ next = next_active_insn (insn);
29263
+ /* If the insn is a branch, then it cannot be problematic. */
29264
+ if (!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) == SEQUENCE)
29267
+ extract_insn (next);
29268
+ code = INSN_CODE (next);
29272
+ case CODE_FOR_adddf3:
29273
+ case CODE_FOR_subdf3:
29274
+ case CODE_FOR_muldf3:
29275
+ case CODE_FOR_divdf3:
29276
+ dest = REGNO (recog_data.operand[0]);
29277
+ src1 = REGNO (recog_data.operand[1]);
29278
+ src2 = REGNO (recog_data.operand[2]);
29279
+ if (src1 != src2)
29282
+ ld [address], %fx+1
29283
+ FPOPd %f{x,y}, %f{y,x}, %f{x,y} */
29284
+ if ((src1 == x || src2 == x)
29285
+ && (dest == src1 || dest == src2))
29286
+ insert_nop = true;
29291
+ ld [address], %fx+1
29292
+ FPOPd %fx, %fx, %fx */
29295
+ && (code == CODE_FOR_adddf3 || code == CODE_FOR_muldf3))
29296
+ insert_nop = true;
29300
+ case CODE_FOR_sqrtdf2:
29301
+ dest = REGNO (recog_data.operand[0]);
29302
+ src1 = REGNO (recog_data.operand[1]);
29304
+ ld [address], %fx+1
29305
+ fsqrtd %fx, %fx */
29306
+ if (src1 == x && dest == src1)
29307
+ insert_nop = true;
29315
+ /* Look for a single-word load into an integer register. */
29316
+ else if (sparc_fix_ut699
29317
+ && NONJUMP_INSN_P (insn)
29318
+ && (set = single_set (insn)) != NULL_RTX
29319
+ && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) <= 4
29320
+ && mem_ref (SET_SRC (set)) != NULL_RTX
29321
+ && REG_P (SET_DEST (set))
29322
+ && REGNO (SET_DEST (set)) < 32)
29324
+ /* There is no problem if the second memory access has a data
29325
+ dependency on the first single-cycle load. */
29326
+ rtx x = SET_DEST (set);
29328
+ next = next_active_insn (insn);
29331
+ /* If the insn is a branch, then it cannot be problematic. */
29332
+ if (!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) == SEQUENCE)
29335
+ /* Look for a second memory access to/from an integer register. */
29336
+ if ((set = single_set (next)) != NULL_RTX)
29338
+ rtx src = SET_SRC (set);
29339
+ rtx dest = SET_DEST (set);
29342
+ /* LDD is affected. */
29343
+ if ((mem = mem_ref (src)) != NULL_RTX
29345
+ && REGNO (dest) < 32
29346
+ && !reg_mentioned_p (x, XEXP (mem, 0)))
29347
+ insert_nop = true;
29349
+ /* STD is *not* affected. */
29350
+ else if (MEM_P (dest)
29351
+ && GET_MODE_SIZE (GET_MODE (dest)) <= 4
29352
+ && (src == CONST0_RTX (GET_MODE (dest))
29354
+ && REGNO (src) < 32
29355
+ && REGNO (src) != REGNO (x)))
29356
+ && !reg_mentioned_p (x, XEXP (dest, 0)))
29357
+ insert_nop = true;
29361
+ /* Look for a single-word load/operation into an FP register. */
29362
+ else if (sparc_fix_ut699
29363
+ && NONJUMP_INSN_P (insn)
29364
+ && (set = single_set (insn)) != NULL_RTX
29365
+ && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
29366
+ && REG_P (SET_DEST (set))
29367
+ && REGNO (SET_DEST (set)) > 31)
29369
+ /* Number of instructions in the problematic window. */
29370
+ const int n_insns = 4;
29371
+ /* The problematic combination is with the sibling FP register. */
29372
+ const unsigned int x = REGNO (SET_DEST (set));
29373
+ const unsigned int y = x ^ 1;
29377
+ next = next_active_insn (insn);
29380
+ /* If the insn is a branch, then it cannot be problematic. */
29381
+ if (!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) == SEQUENCE)
29384
+ /* Look for a second load/operation into the sibling FP register. */
29385
+ if (!((set = single_set (next)) != NULL_RTX
29386
+ && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
29387
+ && REG_P (SET_DEST (set))
29388
+ && REGNO (SET_DEST (set)) == y))
29391
+ /* Look for a (possible) store from the FP register in the next N
29392
+ instructions, but bail out if it is again modified or if there
29393
+ is a store from the sibling FP register before this store. */
29394
+ for (after = next, i = 0; i < n_insns; i++)
29398
+ after = next_active_insn (after);
29402
+ /* This is a branch with an empty delay slot. */
29403
+ if (!NONJUMP_INSN_P (after))
29405
+ if (++i == n_insns)
29408
+ after = NULL_RTX;
29410
+ /* This is a branch with a filled delay slot. */
29411
+ else if (GET_CODE (PATTERN (after)) == SEQUENCE)
29413
+ if (++i == n_insns)
29416
+ after = XVECEXP (PATTERN (after), 0, 1);
29418
+ /* This is a regular instruction. */
29420
+ branch_p = false;
29422
+ if (after && (set = single_set (after)) != NULL_RTX)
29424
+ const rtx src = SET_SRC (set);
29425
+ const rtx dest = SET_DEST (set);
29426
+ const unsigned int size = GET_MODE_SIZE (GET_MODE (dest));
29428
+ /* If the FP register is again modified before the store,
29429
+ then the store isn't affected. */
29431
+ && (REGNO (dest) == x
29432
+ || (REGNO (dest) == y && size == 8)))
29435
+ if (MEM_P (dest) && REG_P (src))
29437
+ /* If there is a store from the sibling FP register
29438
+ before the store, then the store is not affected. */
29439
+ if (REGNO (src) == y || (REGNO (src) == x && size == 8))
29442
+ /* Otherwise, the store is affected. */
29443
+ if (REGNO (src) == x && size == 4)
29445
+ insert_nop = true;
29451
+ /* If we have a branch in the first M instructions, then we
29452
+ cannot see the (M+2)th instruction so we play safe. */
29453
+ if (branch_p && i <= (n_insns - 2))
29455
+ insert_nop = true;
29462
+ next = NEXT_INSN (insn);
29465
+ emit_insn_before (gen_nop (), next);
29471
+struct rtl_opt_pass pass_work_around_errata =
29475
+ "errata", /* name */
29476
+ OPTGROUP_NONE, /* optinfo_flags */
29477
+ sparc_gate_work_around_errata, /* gate */
29478
+ sparc_do_work_around_errata, /* execute */
29481
+ 0, /* static_pass_number */
29482
+ TV_MACH_DEP, /* tv_id */
29483
+ 0, /* properties_required */
29484
+ 0, /* properties_provided */
29485
+ 0, /* properties_destroyed */
29486
+ 0, /* todo_flags_start */
29487
+ TODO_verify_rtl_sharing, /* todo_flags_finish */
29491
+struct register_pass_info insert_pass_work_around_errata =
29493
+ &pass_work_around_errata.pass, /* pass */
29494
+ "dbr", /* reference_pass_name */
29495
+ 1, /* ref_pass_instance_number */
29496
+ PASS_POS_INSERT_AFTER /* po_op */
29499
+/* Helpers for TARGET_DEBUG_OPTIONS. */
29501
dump_target_flag_bits (const int flags)
29503
@@ -888,6 +1209,7 @@
29504
{ TARGET_CPU_supersparc, PROCESSOR_SUPERSPARC },
29505
{ TARGET_CPU_hypersparc, PROCESSOR_HYPERSPARC },
29506
{ TARGET_CPU_leon, PROCESSOR_LEON },
29507
+ { TARGET_CPU_leon3, PROCESSOR_LEON3 },
29508
{ TARGET_CPU_sparclite, PROCESSOR_F930 },
29509
{ TARGET_CPU_sparclite86x, PROCESSOR_SPARCLITE86X },
29510
{ TARGET_CPU_sparclet, PROCESSOR_TSC701 },
29511
@@ -902,7 +1224,7 @@
29513
const struct cpu_default *def;
29514
/* Table of values for -m{cpu,tune}=. This must match the order of
29515
- the PROCESSOR_* enumeration. */
29516
+ the enum processor_type in sparc-opts.h. */
29517
static struct cpu_table {
29518
const char *const name;
29520
@@ -914,8 +1236,8 @@
29521
/* TI TMS390Z55 supersparc */
29522
{ "supersparc", MASK_ISA, MASK_V8 },
29523
{ "hypersparc", MASK_ISA, MASK_V8|MASK_FPU },
29525
- { "leon", MASK_ISA, MASK_V8|MASK_FPU },
29526
+ { "leon", MASK_ISA, MASK_V8|MASK_LEON|MASK_FPU },
29527
+ { "leon3", MASK_ISA, MASK_V8|MASK_LEON3|MASK_FPU },
29528
{ "sparclite", MASK_ISA, MASK_SPARCLITE },
29529
/* The Fujitsu MB86930 is the original sparclite chip, with no FPU. */
29530
{ "f930", MASK_ISA|MASK_FPU, MASK_SPARCLITE },
29531
@@ -1075,6 +1397,9 @@
29532
#ifndef HAVE_AS_SPARC4
29535
+#ifndef HAVE_AS_LEON
29536
+ & ~(MASK_LEON | MASK_LEON3)
29540
/* If -mfpu or -mno-fpu was explicitly used, don't override with
29541
@@ -1164,6 +1489,9 @@
29542
case PROCESSOR_LEON:
29543
sparc_costs = &leon_costs;
29545
+ case PROCESSOR_LEON3:
29546
+ sparc_costs = &leon3_costs;
29548
case PROCESSOR_SPARCLET:
29549
case PROCESSOR_TSC701:
29550
sparc_costs = &sparclet_costs;
29551
@@ -1200,6 +1528,10 @@
29552
/* Choose the most relaxed model for the processor. */
29553
else if (TARGET_V9)
29554
sparc_memory_model = SMM_RMO;
29555
+ else if (TARGET_LEON3)
29556
+ sparc_memory_model = SMM_TSO;
29557
+ else if (TARGET_LEON)
29558
+ sparc_memory_model = SMM_SC;
29559
else if (TARGET_V8)
29560
sparc_memory_model = SMM_PSO;
29562
@@ -1241,6 +1573,13 @@
29563
pessimizes for double floating-point registers. */
29564
if (!global_options_set.x_flag_ira_share_save_slots)
29565
flag_ira_share_save_slots = 0;
29567
+ /* We register a machine specific pass to work around errata, if any.
29568
+ The pass mut be scheduled as late as possible so that we have the
29569
+ (essentially) final form of the insn stream to work on.
29570
+ Registering the pass must be done at start up. It's convenient to
29572
+ register_pass (&insert_pass_work_around_errata);
29575
/* Miscellaneous utilities. */
29576
@@ -3090,10 +3429,13 @@
29577
/* Return nonzero if TRIAL can go into the call delay slot. */
29580
-tls_call_delay (rtx trial)
29581
+eligible_for_call_delay (rtx trial)
29585
+ if (get_attr_in_branch_delay (trial) == IN_BRANCH_DELAY_FALSE)
29589
call __tls_get_addr, %tgd_call (foo)
29590
add %l7, %o0, %o0, %tgd_add (foo)
29591
@@ -3175,11 +3517,7 @@
29593
/* If we have the 'return' instruction, anything that does not use
29594
local or output registers and can go into a delay slot wins. */
29595
- else if (return_p
29597
- && !epilogue_renumber (&pat, 1)
29598
- && get_attr_in_uncond_branch_delay (trial)
29599
- == IN_UNCOND_BRANCH_DELAY_TRUE)
29600
+ else if (return_p && TARGET_V9 && !epilogue_renumber (&pat, 1))
29603
/* The 'restore src1,src2,dest' pattern for SImode. */
29604
@@ -3222,22 +3560,21 @@
29608
- if (GET_CODE (trial) != INSN)
29611
- if (get_attr_length (trial) != 1)
29614
/* If the function uses __builtin_eh_return, the eh_return machinery
29615
occupies the delay slot. */
29616
if (crtl->calls_eh_return)
29619
+ if (get_attr_in_branch_delay (trial) == IN_BRANCH_DELAY_FALSE)
29622
/* In the case of a leaf or flat function, anything can go into the slot. */
29623
if (sparc_leaf_function_p || TARGET_FLAT)
29625
- get_attr_in_uncond_branch_delay (trial) == IN_UNCOND_BRANCH_DELAY_TRUE;
29628
+ if (!NONJUMP_INSN_P (trial))
29631
pat = PATTERN (trial);
29632
if (GET_CODE (pat) == PARALLEL)
29634
@@ -3256,9 +3593,7 @@
29635
if (regno >= 8 && regno < 24)
29638
- return !epilogue_renumber (&pat, 1)
29639
- && (get_attr_in_uncond_branch_delay (trial)
29640
- == IN_UNCOND_BRANCH_DELAY_TRUE);
29641
+ return !epilogue_renumber (&pat, 1);
29644
if (GET_CODE (pat) != SET)
29645
@@ -3278,10 +3613,7 @@
29646
instruction, it can probably go in. But restore will not work
29648
if (! SPARC_INT_REG_P (regno))
29649
- return (TARGET_V9
29650
- && !epilogue_renumber (&pat, 1)
29651
- && get_attr_in_uncond_branch_delay (trial)
29652
- == IN_UNCOND_BRANCH_DELAY_TRUE);
29653
+ return TARGET_V9 && !epilogue_renumber (&pat, 1);
29655
return eligible_for_restore_insn (trial, true);
29657
@@ -3293,10 +3625,10 @@
29661
- if (GET_CODE (trial) != INSN || GET_CODE (PATTERN (trial)) != SET)
29662
+ if (get_attr_in_branch_delay (trial) == IN_BRANCH_DELAY_FALSE)
29665
- if (get_attr_length (trial) != 1)
29666
+ if (!NONJUMP_INSN_P (trial))
29669
pat = PATTERN (trial);
29670
@@ -3315,6 +3647,9 @@
29674
+ if (GET_CODE (pat) != SET)
29677
/* Otherwise, only operations which can be done in tandem with
29678
a `restore' insn can go into the delay slot. */
29679
if (GET_CODE (SET_DEST (pat)) != REG
29680
@@ -10355,7 +10690,8 @@
29681
tmp = e0.add_with_sign (tmp, false, &add1_ovf);
29682
if (tmp.is_negative ())
29683
tmp = tmp.neg_with_overflow (&neg2_ovf);
29686
+ neg2_ovf = false;
29687
result = result.add_with_sign (tmp, false, &add2_ovf);
29688
overflow |= neg1_ovf | neg2_ovf | add1_ovf | add2_ovf;
29690
@@ -10897,107 +11233,6 @@
29691
return (vcall_offset >= -32768 || ! fixed_regs[5]);
29694
-/* We use the machine specific reorg pass to enable workarounds for errata. */
29697
-sparc_reorg (void)
29701
- /* The only erratum we handle for now is that of the AT697F processor. */
29702
- if (!sparc_fix_at697f)
29705
- /* We need to have the (essentially) final form of the insn stream in order
29706
- to properly detect the various hazards. Run delay slot scheduling. */
29707
- if (optimize > 0 && flag_delayed_branch)
29709
- cleanup_barriers ();
29710
- dbr_schedule (get_insns ());
29713
- /* Now look for specific patterns in the insn stream. */
29714
- for (insn = get_insns (); insn; insn = next)
29716
- bool insert_nop = false;
29719
- /* Look for a single-word load into an odd-numbered FP register. */
29720
- if (NONJUMP_INSN_P (insn)
29721
- && (set = single_set (insn)) != NULL_RTX
29722
- && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
29723
- && MEM_P (SET_SRC (set))
29724
- && REG_P (SET_DEST (set))
29725
- && REGNO (SET_DEST (set)) > 31
29726
- && REGNO (SET_DEST (set)) % 2 != 0)
29728
- /* The wrong dependency is on the enclosing double register. */
29729
- unsigned int x = REGNO (SET_DEST (set)) - 1;
29730
- unsigned int src1, src2, dest;
29733
- /* If the insn has a delay slot, then it cannot be problematic. */
29734
- next = next_active_insn (insn);
29735
- if (NONJUMP_INSN_P (next) && GET_CODE (PATTERN (next)) == SEQUENCE)
29739
- extract_insn (next);
29740
- code = INSN_CODE (next);
29745
- case CODE_FOR_adddf3:
29746
- case CODE_FOR_subdf3:
29747
- case CODE_FOR_muldf3:
29748
- case CODE_FOR_divdf3:
29749
- dest = REGNO (recog_data.operand[0]);
29750
- src1 = REGNO (recog_data.operand[1]);
29751
- src2 = REGNO (recog_data.operand[2]);
29752
- if (src1 != src2)
29755
- ld [address], %fx+1
29756
- FPOPd %f{x,y}, %f{y,x}, %f{x,y} */
29757
- if ((src1 == x || src2 == x)
29758
- && (dest == src1 || dest == src2))
29759
- insert_nop = true;
29764
- ld [address], %fx+1
29765
- FPOPd %fx, %fx, %fx */
29768
- && (code == CODE_FOR_adddf3 || code == CODE_FOR_muldf3))
29769
- insert_nop = true;
29773
- case CODE_FOR_sqrtdf2:
29774
- dest = REGNO (recog_data.operand[0]);
29775
- src1 = REGNO (recog_data.operand[1]);
29777
- ld [address], %fx+1
29778
- fsqrtd %fx, %fx */
29779
- if (src1 == x && dest == src1)
29780
- insert_nop = true;
29788
- next = NEXT_INSN (insn);
29791
- emit_insn_after (gen_nop (), insn);
29795
/* How to allocate a 'struct machine_function'. */
29797
static struct machine_function *
29798
Index: gcc/config/sparc/leon.md
29799
===================================================================
29800
--- a/src/gcc/config/sparc/leon.md (.../tags/gcc_4_8_2_release)
29801
+++ b/src/gcc/config/sparc/leon.md (.../branches/gcc-4_8-branch)
29802
@@ -17,40 +17,48 @@
29803
;; along with GCC; see the file COPYING3. If not see
29804
;; <http://www.gnu.org/licenses/>.
29806
+;; Leon is a single-issue processor.
29808
(define_automaton "leon")
29810
-(define_cpu_unit "leon_memory, leon_fpalu" "leon")
29811
-(define_cpu_unit "leon_fpmds" "leon")
29812
-(define_cpu_unit "write_buf" "leon")
29813
+(define_cpu_unit "leon_memory" "leon")
29815
(define_insn_reservation "leon_load" 1
29816
- (and (eq_attr "cpu" "leon")
29817
- (eq_attr "type" "load,sload,fpload"))
29818
+ (and (eq_attr "cpu" "leon") (eq_attr "type" "load,sload"))
29821
-(define_insn_reservation "leon_store" 1
29822
- (and (eq_attr "cpu" "leon")
29823
- (eq_attr "type" "store,fpstore"))
29824
- "leon_memory+write_buf")
29826
-(define_insn_reservation "leon_fp_alu" 1
29827
- (and (eq_attr "cpu" "leon")
29828
- (eq_attr "type" "fp,fpmove"))
29829
- "leon_fpalu, nothing")
29830
+;; Use a double reservation to work around the load pipeline hazard on UT699.
29831
+(define_insn_reservation "leon3_load" 1
29832
+ (and (eq_attr "cpu" "leon3") (eq_attr "type" "load,sload"))
29835
-(define_insn_reservation "leon_fp_mult" 1
29836
- (and (eq_attr "cpu" "leon")
29837
- (eq_attr "type" "fpmul"))
29838
- "leon_fpmds, nothing")
29839
+(define_insn_reservation "leon_store" 2
29840
+ (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "store"))
29843
-(define_insn_reservation "leon_fp_div" 16
29844
- (and (eq_attr "cpu" "leon")
29845
- (eq_attr "type" "fpdivs,fpdivd"))
29846
- "leon_fpmds, nothing*15")
29847
+;; This describes Gaisler Research's FPU
29849
-(define_insn_reservation "leon_fp_sqrt" 23
29850
- (and (eq_attr "cpu" "leon")
29851
- (eq_attr "type" "fpsqrts,fpsqrtd"))
29852
- "leon_fpmds, nothing*21")
29853
+(define_automaton "grfpu")
29855
+(define_cpu_unit "grfpu_alu" "grfpu")
29856
+(define_cpu_unit "grfpu_ds" "grfpu")
29858
+(define_insn_reservation "leon_fp_alu" 4
29859
+ (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fp,fpcmp,fpmul"))
29860
+ "grfpu_alu, nothing*3")
29862
+(define_insn_reservation "leon_fp_divs" 16
29863
+ (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpdivs"))
29864
+ "grfpu_ds*14, nothing*2")
29866
+(define_insn_reservation "leon_fp_divd" 17
29867
+ (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpdivd"))
29868
+ "grfpu_ds*15, nothing*2")
29870
+(define_insn_reservation "leon_fp_sqrts" 24
29871
+ (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpsqrts"))
29872
+ "grfpu_ds*22, nothing*2")
29874
+(define_insn_reservation "leon_fp_sqrtd" 25
29875
+ (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpsqrtd"))
29876
+ "grfpu_ds*23, nothing*2")
29877
Index: gcc/config/sparc/sparc.h
29878
===================================================================
29879
--- a/src/gcc/config/sparc/sparc.h (.../tags/gcc_4_8_2_release)
29880
+++ b/src/gcc/config/sparc/sparc.h (.../branches/gcc-4_8-branch)
29881
@@ -136,21 +136,22 @@
29882
#define TARGET_CPU_supersparc 2
29883
#define TARGET_CPU_hypersparc 3
29884
#define TARGET_CPU_leon 4
29885
-#define TARGET_CPU_sparclite 5
29886
-#define TARGET_CPU_f930 5 /* alias */
29887
-#define TARGET_CPU_f934 5 /* alias */
29888
-#define TARGET_CPU_sparclite86x 6
29889
-#define TARGET_CPU_sparclet 7
29890
-#define TARGET_CPU_tsc701 7 /* alias */
29891
-#define TARGET_CPU_v9 8 /* generic v9 implementation */
29892
-#define TARGET_CPU_sparcv9 8 /* alias */
29893
-#define TARGET_CPU_sparc64 8 /* alias */
29894
-#define TARGET_CPU_ultrasparc 9
29895
-#define TARGET_CPU_ultrasparc3 10
29896
-#define TARGET_CPU_niagara 11
29897
-#define TARGET_CPU_niagara2 12
29898
-#define TARGET_CPU_niagara3 13
29899
-#define TARGET_CPU_niagara4 14
29900
+#define TARGET_CPU_leon3 5
29901
+#define TARGET_CPU_sparclite 6
29902
+#define TARGET_CPU_f930 6 /* alias */
29903
+#define TARGET_CPU_f934 6 /* alias */
29904
+#define TARGET_CPU_sparclite86x 7
29905
+#define TARGET_CPU_sparclet 8
29906
+#define TARGET_CPU_tsc701 8 /* alias */
29907
+#define TARGET_CPU_v9 9 /* generic v9 implementation */
29908
+#define TARGET_CPU_sparcv9 9 /* alias */
29909
+#define TARGET_CPU_sparc64 9 /* alias */
29910
+#define TARGET_CPU_ultrasparc 10
29911
+#define TARGET_CPU_ultrasparc3 11
29912
+#define TARGET_CPU_niagara 12
29913
+#define TARGET_CPU_niagara2 13
29914
+#define TARGET_CPU_niagara3 14
29915
+#define TARGET_CPU_niagara4 15
29917
#if TARGET_CPU_DEFAULT == TARGET_CPU_v9 \
29918
|| TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc \
29919
@@ -232,9 +233,10 @@
29920
#define ASM_CPU32_DEFAULT_SPEC ""
29923
-#if TARGET_CPU_DEFAULT == TARGET_CPU_leon
29924
+#if TARGET_CPU_DEFAULT == TARGET_CPU_leon \
29925
+ || TARGET_CPU_DEFAULT == TARGET_CPU_leon3
29926
#define CPP_CPU32_DEFAULT_SPEC "-D__leon__ -D__sparc_v8__"
29927
-#define ASM_CPU32_DEFAULT_SPEC ""
29928
+#define ASM_CPU32_DEFAULT_SPEC AS_LEON_FLAG
29932
@@ -282,6 +284,7 @@
29933
%{mcpu=supersparc:-D__supersparc__ -D__sparc_v8__} \
29934
%{mcpu=hypersparc:-D__hypersparc__ -D__sparc_v8__} \
29935
%{mcpu=leon:-D__leon__ -D__sparc_v8__} \
29936
+%{mcpu=leon3:-D__leon__ -D__sparc_v8__} \
29937
%{mcpu=v9:-D__sparc_v9__} \
29938
%{mcpu=ultrasparc:-D__sparc_v9__} \
29939
%{mcpu=ultrasparc3:-D__sparc_v9__} \
29940
@@ -329,7 +332,8 @@
29942
%{mcpu=supersparc:-Av8} \
29943
%{mcpu=hypersparc:-Av8} \
29944
-%{mcpu=leon:-Av8} \
29945
+%{mcpu=leon:" AS_LEON_FLAG "} \
29946
+%{mcpu=leon3:" AS_LEON_FLAG "} \
29947
%{mv8plus:-Av8plus} \
29949
%{mcpu=ultrasparc:%{!mv8plus:-Av9a}} \
29950
@@ -1754,6 +1758,12 @@
29951
#define AS_NIAGARA4_FLAG "-Av9" AS_NIAGARA3_FLAG
29954
+#ifdef HAVE_AS_LEON
29955
+#define AS_LEON_FLAG "-Aleon"
29957
+#define AS_LEON_FLAG "-Av8"
29960
/* We use gcc _mcount for profiling. */
29961
#define NO_PROFILE_COUNTERS 0
29963
Index: gcc/config/i386/i386.h
29964
===================================================================
29965
--- a/src/gcc/config/i386/i386.h (.../tags/gcc_4_8_2_release)
29966
+++ b/src/gcc/config/i386/i386.h (.../branches/gcc-4_8-branch)
29967
@@ -197,10 +197,10 @@
29969
/* Macros used in the machine description to test the flags. */
29971
-/* configure can arrange to make this 2, to force a 486. */
29972
+/* configure can arrange to change it. */
29974
#ifndef TARGET_CPU_DEFAULT
29975
-#define TARGET_CPU_DEFAULT TARGET_CPU_DEFAULT_generic
29976
+#define TARGET_CPU_DEFAULT PROCESSOR_GENERIC32
29979
#ifndef TARGET_FPMATH_DEFAULT
29980
@@ -591,43 +591,6 @@
29981
/* Target Pragmas. */
29982
#define REGISTER_TARGET_PRAGMAS() ix86_register_pragmas ()
29984
-enum target_cpu_default
29986
- TARGET_CPU_DEFAULT_generic = 0,
29988
- TARGET_CPU_DEFAULT_i386,
29989
- TARGET_CPU_DEFAULT_i486,
29990
- TARGET_CPU_DEFAULT_pentium,
29991
- TARGET_CPU_DEFAULT_pentium_mmx,
29992
- TARGET_CPU_DEFAULT_pentiumpro,
29993
- TARGET_CPU_DEFAULT_pentium2,
29994
- TARGET_CPU_DEFAULT_pentium3,
29995
- TARGET_CPU_DEFAULT_pentium4,
29996
- TARGET_CPU_DEFAULT_pentium_m,
29997
- TARGET_CPU_DEFAULT_prescott,
29998
- TARGET_CPU_DEFAULT_nocona,
29999
- TARGET_CPU_DEFAULT_core2,
30000
- TARGET_CPU_DEFAULT_corei7,
30001
- TARGET_CPU_DEFAULT_haswell,
30002
- TARGET_CPU_DEFAULT_atom,
30004
- TARGET_CPU_DEFAULT_geode,
30005
- TARGET_CPU_DEFAULT_k6,
30006
- TARGET_CPU_DEFAULT_k6_2,
30007
- TARGET_CPU_DEFAULT_k6_3,
30008
- TARGET_CPU_DEFAULT_athlon,
30009
- TARGET_CPU_DEFAULT_athlon_sse,
30010
- TARGET_CPU_DEFAULT_k8,
30011
- TARGET_CPU_DEFAULT_amdfam10,
30012
- TARGET_CPU_DEFAULT_bdver1,
30013
- TARGET_CPU_DEFAULT_bdver2,
30014
- TARGET_CPU_DEFAULT_bdver3,
30015
- TARGET_CPU_DEFAULT_btver1,
30016
- TARGET_CPU_DEFAULT_btver2,
30018
- TARGET_CPU_DEFAULT_max
30022
#define CC1_SPEC "%(cc1_cpu) "
30024
@@ -2089,25 +2052,27 @@
30025
with x86-64 medium memory model */
30026
#define DEFAULT_LARGE_SECTION_THRESHOLD 65536
30028
-/* Which processor to tune code generation for. */
30029
+/* Which processor to tune code generation for. These must be in sync
30030
+ with processor_target_table in i386.c. */
30032
enum processor_type
30034
- PROCESSOR_I386 = 0, /* 80386 */
30035
+ PROCESSOR_GENERIC32 = 0,
30036
+ PROCESSOR_GENERIC64,
30037
+ PROCESSOR_I386, /* 80386 */
30038
PROCESSOR_I486, /* 80486DX, 80486SX, 80486DX[24] */
30040
PROCESSOR_PENTIUMPRO,
30043
- PROCESSOR_ATHLON,
30044
PROCESSOR_PENTIUM4,
30050
- PROCESSOR_GENERIC32,
30051
- PROCESSOR_GENERIC64,
30055
+ PROCESSOR_ATHLON,
30057
PROCESSOR_AMDFAM10,
30060
@@ -2114,7 +2079,6 @@
30068
Index: gcc/config/i386/i386.md
30069
===================================================================
30070
--- a/src/gcc/config/i386/i386.md (.../tags/gcc_4_8_2_release)
30071
+++ b/src/gcc/config/i386/i386.md (.../branches/gcc-4_8-branch)
30072
@@ -363,6 +363,13 @@
30073
(const_string "unknown")]
30074
(const_string "integer")))
30076
+;; The minimum required alignment of vector mode memory operands of the SSE
30077
+;; (non-VEX/EVEX) instruction in bits, if it is different from
30078
+;; GET_MODE_ALIGNMENT of the operand, otherwise 0. If an instruction has
30079
+;; multiple alternatives, this should be conservative maximum of those minimum
30080
+;; required alignments.
30081
+(define_attr "ssememalign" "" (const_int 0))
30083
;; The (bounding maximum) length of an instruction immediate.
30084
(define_attr "length_immediate" ""
30085
(cond [(eq_attr "type" "incdec,setcc,icmov,str,lea,other,multi,idiv,leave,
30086
@@ -1570,7 +1577,7 @@
30087
split_double_mode (DImode, &operands[1], 1, &operands[2], &operands[3]);
30089
operands[1] = gen_lowpart (DImode, operands[2]);
30090
- operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx,
30091
+ operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
30095
@@ -1587,7 +1594,7 @@
30096
split_double_mode (DImode, &operands[1], 1, &operands[2], &operands[3]);
30098
operands[1] = gen_lowpart (DImode, operands[2]);
30099
- operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx,
30100
+ operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
30104
@@ -2715,7 +2722,20 @@
30106
[(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_dup 2)))
30107
(set (mem:SF (reg:P SP_REG)) (match_dup 1))]
30108
- "operands[2] = GEN_INT (-GET_MODE_SIZE (<P:MODE>mode));")
30110
+ rtx op = XEXP (operands[0], 0);
30111
+ if (GET_CODE (op) == PRE_DEC)
30113
+ gcc_assert (!TARGET_64BIT);
30114
+ op = GEN_INT (-4);
30118
+ op = XEXP (XEXP (op, 1), 1);
30119
+ gcc_assert (CONST_INT_P (op));
30121
+ operands[2] = op;
30125
[(set (match_operand:SF 0 "push_operand")
30126
@@ -5443,6 +5463,12 @@
30129
ix86_split_lea_for_addr (curr_insn, operands, mode);
30131
+ /* Zero-extend return register to DImode for zero-extended addresses. */
30132
+ if (mode != <MODE>mode)
30133
+ emit_insn (gen_zero_extendsidi2
30134
+ (operands[0], gen_lowpart (mode, operands[0])));
30138
[(set_attr "type" "lea")
30139
@@ -6589,7 +6615,7 @@
30140
(set_attr "use_carry" "1")
30141
(set_attr "mode" "<MODE>")])
30143
-;; Overflow setting add and subtract instructions
30144
+;; Overflow setting add instructions
30146
(define_insn "*add<mode>3_cconly_overflow"
30147
[(set (reg:CCC FLAGS_REG)
30148
@@ -6604,43 +6630,31 @@
30149
[(set_attr "type" "alu")
30150
(set_attr "mode" "<MODE>")])
30152
-(define_insn "*sub<mode>3_cconly_overflow"
30153
+(define_insn "*add<mode>3_cc_overflow"
30154
[(set (reg:CCC FLAGS_REG)
30157
- (match_operand:SWI 0 "nonimmediate_operand" "<r>m,<r>")
30158
- (match_operand:SWI 1 "<general_operand>" "<r><i>,<r>m"))
30161
- "cmp{<imodesuffix>}\t{%1, %0|%0, %1}"
30162
- [(set_attr "type" "icmp")
30163
- (set_attr "mode" "<MODE>")])
30165
-(define_insn "*<plusminus_insn><mode>3_cc_overflow"
30166
- [(set (reg:CCC FLAGS_REG)
30169
- (match_operand:SWI 1 "nonimmediate_operand" "<comm>0,0")
30171
+ (match_operand:SWI 1 "nonimmediate_operand" "%0,0")
30172
(match_operand:SWI 2 "<general_operand>" "<r><i>,<r>m"))
30174
(set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m,<r>")
30175
- (plusminus:SWI (match_dup 1) (match_dup 2)))]
30176
- "ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
30177
- "<plusminus_mnemonic>{<imodesuffix>}\t{%2, %0|%0, %2}"
30178
+ (plus:SWI (match_dup 1) (match_dup 2)))]
30179
+ "ix86_binary_operator_ok (PLUS, <MODE>mode, operands)"
30180
+ "add{<imodesuffix>}\t{%2, %0|%0, %2}"
30181
[(set_attr "type" "alu")
30182
(set_attr "mode" "<MODE>")])
30184
-(define_insn "*<plusminus_insn>si3_zext_cc_overflow"
30185
+(define_insn "*addsi3_zext_cc_overflow"
30186
[(set (reg:CCC FLAGS_REG)
30189
- (match_operand:SI 1 "nonimmediate_operand" "<comm>0")
30191
+ (match_operand:SI 1 "nonimmediate_operand" "%0")
30192
(match_operand:SI 2 "x86_64_general_operand" "rme"))
30194
(set (match_operand:DI 0 "register_operand" "=r")
30195
- (zero_extend:DI (plusminus:SI (match_dup 1) (match_dup 2))))]
30196
- "TARGET_64BIT && ix86_binary_operator_ok (<CODE>, SImode, operands)"
30197
- "<plusminus_mnemonic>{l}\t{%2, %k0|%k0, %2}"
30198
+ (zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))]
30199
+ "TARGET_64BIT && ix86_binary_operator_ok (PLUS, SImode, operands)"
30200
+ "add{l}\t{%2, %k0|%k0, %2}"
30201
[(set_attr "type" "alu")
30202
(set_attr "mode" "SI")])
30204
@@ -8012,7 +8026,18 @@
30206
(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,rm")
30207
(and:DI (match_dup 1) (match_dup 2)))]
30208
- "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)
30210
+ && ix86_match_ccmode
30212
+ /* If we are going to emit andl instead of andq, and the operands[2]
30213
+ constant might have the SImode sign bit set, make sure the sign
30214
+ flag isn't tested, because the instruction will set the sign flag
30215
+ based on bit 31 rather than bit 63. If it isn't CONST_INT,
30216
+ conservatively assume it might have bit 31 set. */
30217
+ (satisfies_constraint_Z (operands[2])
30218
+ && (!CONST_INT_P (operands[2])
30219
+ || val_signbit_known_set_p (SImode, INTVAL (operands[2]))))
30220
+ ? CCZmode : CCNOmode)
30221
&& ix86_binary_operator_ok (AND, DImode, operands)"
30223
and{l}\t{%k2, %k0|%k0, %k2}
30224
@@ -17569,7 +17594,13 @@
30225
(define_insn "trap"
30226
[(trap_if (const_int 1) (const_int 6))]
30228
- { return ASM_SHORT "0x0b0f"; }
30230
+#ifdef HAVE_AS_IX86_UD2
30233
+ return ASM_SHORT "0x0b0f";
30236
[(set_attr "length" "2")])
30238
(define_expand "prefetch"
30239
Index: gcc/config/i386/f16cintrin.h
30240
===================================================================
30241
--- a/src/gcc/config/i386/f16cintrin.h (.../tags/gcc_4_8_2_release)
30242
+++ b/src/gcc/config/i386/f16cintrin.h (.../branches/gcc-4_8-branch)
30244
extern __inline float __attribute__((__gnu_inline__, __always_inline__, __artificial__))
30245
_cvtsh_ss (unsigned short __S)
30247
- __v8hi __H = __extension__ (__v8hi){ __S, 0, 0, 0, 0, 0, 0, 0 };
30248
+ __v8hi __H = __extension__ (__v8hi){ (short) __S, 0, 0, 0, 0, 0, 0, 0 };
30249
__v4sf __A = __builtin_ia32_vcvtph2ps (__H);
30250
return __builtin_ia32_vec_ext_v4sf (__A, 0);
30252
Index: gcc/config/i386/t-rtems
30253
===================================================================
30254
--- a/src/gcc/config/i386/t-rtems (.../tags/gcc_4_8_2_release)
30255
+++ b/src/gcc/config/i386/t-rtems (.../branches/gcc-4_8-branch)
30256
@@ -17,11 +17,10 @@
30257
# <http://www.gnu.org/licenses/>.
30260
-MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro \
30262
+MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro msoft-float
30263
MULTILIB_DIRNAMES= m486 mpentium mpentiumpro soft-float
30264
-MULTILIB_MATCHES = msoft-float=mno-m80387
30265
-MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?mathlon
30266
+MULTILIB_MATCHES = msoft-float=mno-80387
30267
+MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?athlon
30268
MULTILIB_EXCEPTIONS = \
30269
mtune=pentium/*msoft-float* \
30270
mtune=pentiumpro/*msoft-float*
30271
Index: gcc/config/i386/winnt.c
30272
===================================================================
30273
--- a/src/gcc/config/i386/winnt.c (.../tags/gcc_4_8_2_release)
30274
+++ b/src/gcc/config/i386/winnt.c (.../branches/gcc-4_8-branch)
30275
@@ -547,8 +547,9 @@
30276
sets 'discard' characteristic, rather than telling linker
30277
to warn of size or content mismatch, so do the same. */
30278
bool discard = (flags & SECTION_CODE)
30279
- || lookup_attribute ("selectany",
30280
- DECL_ATTRIBUTES (decl));
30281
+ || (TREE_CODE (decl) != IDENTIFIER_NODE
30282
+ && lookup_attribute ("selectany",
30283
+ DECL_ATTRIBUTES (decl)));
30284
fprintf (asm_out_file, "\t.linkonce %s\n",
30285
(discard ? "discard" : "same_size"));
30287
Index: gcc/config/i386/sse.md
30288
===================================================================
30289
--- a/src/gcc/config/i386/sse.md (.../tags/gcc_4_8_2_release)
30290
+++ b/src/gcc/config/i386/sse.md (.../branches/gcc-4_8-branch)
30291
@@ -605,6 +605,7 @@
30293
[(set_attr "type" "ssemov")
30294
(set_attr "movu" "1")
30295
+ (set_attr "ssememalign" "8")
30296
(set_attr "prefix" "maybe_vex")
30298
(cond [(match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
30299
@@ -634,6 +635,7 @@
30301
[(set_attr "type" "ssemov")
30302
(set_attr "movu" "1")
30303
+ (set_attr "ssememalign" "8")
30304
(set_attr "prefix" "maybe_vex")
30306
(cond [(ior (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
30307
@@ -663,6 +665,7 @@
30309
[(set_attr "type" "ssemov")
30310
(set_attr "movu" "1")
30311
+ (set_attr "ssememalign" "8")
30312
(set (attr "prefix_data16")
30314
(match_test "TARGET_AVX")
30315
@@ -696,6 +699,7 @@
30317
[(set_attr "type" "ssemov")
30318
(set_attr "movu" "1")
30319
+ (set_attr "ssememalign" "8")
30320
(set (attr "prefix_data16")
30322
(match_test "TARGET_AVX")
30323
@@ -721,6 +725,7 @@
30324
"%vlddqu\t{%1, %0|%0, %1}"
30325
[(set_attr "type" "ssemov")
30326
(set_attr "movu" "1")
30327
+ (set_attr "ssememalign" "8")
30328
(set (attr "prefix_data16")
30330
(match_test "TARGET_AVX")
30331
@@ -1001,6 +1006,7 @@
30332
vrcpss\t{%1, %2, %0|%0, %2, %1}"
30333
[(set_attr "isa" "noavx,avx")
30334
(set_attr "type" "sse")
30335
+ (set_attr "ssememalign" "32")
30336
(set_attr "atom_sse_attr" "rcp")
30337
(set_attr "btver2_sse_attr" "rcp")
30338
(set_attr "prefix" "orig,vex")
30339
@@ -1089,6 +1095,7 @@
30340
vrsqrtss\t{%1, %2, %0|%0, %2, %1}"
30341
[(set_attr "isa" "noavx,avx")
30342
(set_attr "type" "sse")
30343
+ (set_attr "ssememalign" "32")
30344
(set_attr "prefix" "orig,vex")
30345
(set_attr "mode" "SF")])
30347
@@ -2844,6 +2851,7 @@
30348
"%vcvtdq2pd\t{%1, %0|%0, %q1}"
30349
[(set_attr "type" "ssecvt")
30350
(set_attr "prefix" "maybe_vex")
30351
+ (set_attr "ssememalign" "64")
30352
(set_attr "mode" "V2DF")])
30354
(define_insn "avx_cvtpd2dq256"
30355
@@ -3572,6 +3580,7 @@
30356
%vmovhps\t{%2, %0|%0, %2}"
30357
[(set_attr "isa" "noavx,avx,noavx,avx,*")
30358
(set_attr "type" "ssemov")
30359
+ (set_attr "ssememalign" "64")
30360
(set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
30361
(set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
30363
@@ -3617,6 +3626,7 @@
30364
%vmovlps\t{%2, %H0|%H0, %2}"
30365
[(set_attr "isa" "noavx,avx,noavx,avx,*")
30366
(set_attr "type" "ssemov")
30367
+ (set_attr "ssememalign" "64")
30368
(set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
30369
(set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
30371
@@ -3941,6 +3951,7 @@
30372
%vmovhlps\t{%1, %d0|%d0, %1}
30373
%vmovlps\t{%H1, %d0|%d0, %H1}"
30374
[(set_attr "type" "ssemov")
30375
+ (set_attr "ssememalign" "64")
30376
(set_attr "prefix" "maybe_vex")
30377
(set_attr "mode" "V2SF,V4SF,V2SF")])
30379
@@ -3980,6 +3991,7 @@
30380
%vmovlps\t{%2, %H0|%H0, %2}"
30381
[(set_attr "isa" "noavx,avx,noavx,avx,*")
30382
(set_attr "type" "ssemov")
30383
+ (set_attr "ssememalign" "64")
30384
(set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
30385
(set_attr "mode" "V2SF,V2SF,V4SF,V4SF,V2SF")])
30387
@@ -4033,6 +4045,7 @@
30388
%vmovlps\t{%2, %0|%0, %2}"
30389
[(set_attr "isa" "noavx,avx,noavx,avx,*")
30390
(set_attr "type" "sseshuf,sseshuf,ssemov,ssemov,ssemov")
30391
+ (set_attr "ssememalign" "64")
30392
(set_attr "length_immediate" "1,1,*,*,*")
30393
(set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
30394
(set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
30395
@@ -4642,7 +4655,8 @@
30396
vmovlpd\t{%H1, %2, %0|%0, %2, %H1}
30397
%vmovhpd\t{%1, %0|%0, %1}"
30398
[(set_attr "isa" "noavx,avx,sse3,noavx,avx,*")
30399
- (set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
30400
+ (set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
30401
+ (set_attr "ssememalign" "64")
30402
(set_attr "prefix_data16" "*,*,*,1,*,1")
30403
(set_attr "prefix" "orig,vex,maybe_vex,orig,vex,maybe_vex")
30404
(set_attr "mode" "V2DF,V2DF,DF,V1DF,V1DF,V1DF")])
30405
@@ -4744,6 +4758,7 @@
30406
%vmovlpd\t{%2, %H0|%H0, %2}"
30407
[(set_attr "isa" "noavx,avx,sse3,noavx,avx,*")
30408
(set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
30409
+ (set_attr "ssememalign" "64")
30410
(set_attr "prefix_data16" "*,*,*,1,*,1")
30411
(set_attr "prefix" "orig,vex,maybe_vex,orig,vex,maybe_vex")
30412
(set_attr "mode" "V2DF,V2DF,DF,V1DF,V1DF,V1DF")])
30413
@@ -4982,6 +4997,7 @@
30414
movhlps\t{%1, %0|%0, %1}
30415
movlps\t{%H1, %0|%0, %H1}"
30416
[(set_attr "type" "ssemov")
30417
+ (set_attr "ssememalign" "64")
30418
(set_attr "mode" "V2SF,V4SF,V2SF")])
30420
;; Avoid combining registers from different units in a single alternative,
30421
@@ -5077,6 +5093,7 @@
30423
[(set_attr "isa" "noavx,avx,noavx,avx,*,*,*")
30424
(set_attr "type" "ssemov,ssemov,sselog,sselog,ssemov,fmov,imov")
30425
+ (set_attr "ssememalign" "64")
30426
(set_attr "prefix_data16" "1,*,*,*,*,*,*")
30427
(set_attr "prefix" "orig,vex,orig,vex,*,*,*")
30428
(set_attr "mode" "V1DF,V1DF,V2DF,V2DF,DF,DF,DF")])
30429
@@ -5145,6 +5162,7 @@
30430
(const_string "imov")
30432
(const_string "ssemov")))
30433
+ (set_attr "ssememalign" "64")
30434
(set_attr "prefix_data16" "*,1,*,*,*,*,1,*,*,*,*")
30435
(set_attr "length_immediate" "*,*,*,*,*,1,*,*,*,*,*")
30436
(set_attr "prefix" "maybe_vex,orig,vex,orig,vex,orig,orig,vex,*,*,*")
30437
@@ -5189,6 +5207,7 @@
30439
(const_string "*")))
30440
(set_attr "length_immediate" "*,*,*,*,*,1,*,*,*")
30441
+ (set_attr "ssememalign" "64")
30442
(set_attr "prefix" "orig,vex,orig,vex,maybe_vex,orig,orig,vex,maybe_vex")
30443
(set_attr "mode" "DF,DF,V1DF,V1DF,V1DF,V2DF,V1DF,V1DF,V1DF")])
30445
@@ -8736,6 +8755,7 @@
30447
"%vpmov<extsuffix>bw\t{%1, %0|%0, %q1}"
30448
[(set_attr "type" "ssemov")
30449
+ (set_attr "ssememalign" "64")
30450
(set_attr "prefix_extra" "1")
30451
(set_attr "prefix" "maybe_vex")
30452
(set_attr "mode" "TI")])
30453
@@ -8766,6 +8786,7 @@
30455
"%vpmov<extsuffix>bd\t{%1, %0|%0, %k1}"
30456
[(set_attr "type" "ssemov")
30457
+ (set_attr "ssememalign" "32")
30458
(set_attr "prefix_extra" "1")
30459
(set_attr "prefix" "maybe_vex")
30460
(set_attr "mode" "TI")])
30461
@@ -8791,6 +8812,7 @@
30463
"%vpmov<extsuffix>wd\t{%1, %0|%0, %q1}"
30464
[(set_attr "type" "ssemov")
30465
+ (set_attr "ssememalign" "64")
30466
(set_attr "prefix_extra" "1")
30467
(set_attr "prefix" "maybe_vex")
30468
(set_attr "mode" "TI")])
30469
@@ -8818,6 +8840,7 @@
30471
"%vpmov<extsuffix>bq\t{%1, %0|%0, %w1}"
30472
[(set_attr "type" "ssemov")
30473
+ (set_attr "ssememalign" "16")
30474
(set_attr "prefix_extra" "1")
30475
(set_attr "prefix" "maybe_vex")
30476
(set_attr "mode" "TI")])
30477
@@ -8845,6 +8868,7 @@
30479
"%vpmov<extsuffix>wq\t{%1, %0|%0, %k1}"
30480
[(set_attr "type" "ssemov")
30481
+ (set_attr "ssememalign" "32")
30482
(set_attr "prefix_extra" "1")
30483
(set_attr "prefix" "maybe_vex")
30484
(set_attr "mode" "TI")])
30485
@@ -8868,6 +8892,7 @@
30487
"%vpmov<extsuffix>dq\t{%1, %0|%0, %q1}"
30488
[(set_attr "type" "ssemov")
30489
+ (set_attr "ssememalign" "64")
30490
(set_attr "prefix_extra" "1")
30491
(set_attr "prefix" "maybe_vex")
30492
(set_attr "mode" "TI")])
30493
@@ -9151,6 +9176,7 @@
30494
[(set_attr "type" "sselog")
30495
(set_attr "prefix_data16" "1")
30496
(set_attr "prefix_extra" "1")
30497
+ (set_attr "ssememalign" "8")
30498
(set_attr "length_immediate" "1")
30499
(set_attr "memory" "none,load")
30500
(set_attr "mode" "TI")])
30501
@@ -9213,6 +9239,7 @@
30502
[(set_attr "type" "sselog")
30503
(set_attr "prefix_data16" "1")
30504
(set_attr "prefix_extra" "1")
30505
+ (set_attr "ssememalign" "8")
30506
(set_attr "length_immediate" "1")
30507
(set_attr "memory" "load")
30508
(set_attr "mode" "TI")])
30509
@@ -9240,6 +9267,7 @@
30510
(set_attr "prefix_data16" "1")
30511
(set_attr "prefix_extra" "1")
30512
(set_attr "prefix" "maybe_vex")
30513
+ (set_attr "ssememalign" "8")
30514
(set_attr "length_immediate" "1")
30515
(set_attr "btver2_decode" "vector")
30516
(set_attr "memory" "none,load")
30517
@@ -9267,6 +9295,7 @@
30518
[(set_attr "type" "sselog")
30519
(set_attr "prefix_data16" "1")
30520
(set_attr "prefix_extra" "1")
30521
+ (set_attr "ssememalign" "8")
30522
(set_attr "length_immediate" "1")
30523
(set_attr "prefix" "maybe_vex")
30524
(set_attr "btver2_decode" "vector")
30525
@@ -9293,6 +9322,7 @@
30526
[(set_attr "type" "sselog")
30527
(set_attr "prefix_data16" "1")
30528
(set_attr "prefix_extra" "1")
30529
+ (set_attr "ssememalign" "8")
30530
(set_attr "length_immediate" "1")
30531
(set_attr "memory" "none,load,none,load")
30532
(set_attr "btver2_decode" "vector,vector,vector,vector")
30533
@@ -9346,6 +9376,7 @@
30534
[(set_attr "type" "sselog")
30535
(set_attr "prefix_data16" "1")
30536
(set_attr "prefix_extra" "1")
30537
+ (set_attr "ssememalign" "8")
30538
(set_attr "length_immediate" "1")
30539
(set_attr "memory" "none,load")
30540
(set_attr "mode" "TI")])
30541
@@ -9399,6 +9430,7 @@
30542
[(set_attr "type" "sselog")
30543
(set_attr "prefix_data16" "1")
30544
(set_attr "prefix_extra" "1")
30545
+ (set_attr "ssememalign" "8")
30546
(set_attr "length_immediate" "1")
30547
(set_attr "memory" "load")
30548
(set_attr "mode" "TI")])
30549
@@ -9421,6 +9453,7 @@
30550
[(set_attr "type" "sselog")
30551
(set_attr "prefix_data16" "1")
30552
(set_attr "prefix_extra" "1")
30553
+ (set_attr "ssememalign" "8")
30554
(set_attr "length_immediate" "1")
30555
(set_attr "prefix" "maybe_vex")
30556
(set_attr "memory" "none,load")
30557
@@ -9445,6 +9478,7 @@
30558
[(set_attr "type" "sselog")
30559
(set_attr "prefix_data16" "1")
30560
(set_attr "prefix_extra" "1")
30561
+ (set_attr "ssememalign" "8")
30562
(set_attr "length_immediate" "1")
30563
(set_attr "prefix" "maybe_vex")
30564
(set_attr "memory" "none,load")
30565
@@ -9469,6 +9503,7 @@
30566
[(set_attr "type" "sselog")
30567
(set_attr "prefix_data16" "1")
30568
(set_attr "prefix_extra" "1")
30569
+ (set_attr "ssememalign" "8")
30570
(set_attr "length_immediate" "1")
30571
(set_attr "memory" "none,load,none,load")
30572
(set_attr "prefix" "maybe_vex")
30573
@@ -10213,7 +10248,6 @@
30574
[(set_attr "type" "ssecvt1")
30575
(set_attr "mode" "<MODE>")])
30578
(define_expand "xop_vmfrcz<mode>2"
30579
[(set (match_operand:VF_128 0 "register_operand")
30581
@@ -10220,14 +10254,12 @@
30583
[(match_operand:VF_128 1 "nonimmediate_operand")]
30590
- operands[3] = CONST0_RTX (<MODE>mode);
30592
+ "operands[2] = CONST0_RTX (<MODE>mode);")
30594
-(define_insn "*xop_vmfrcz_<mode>"
30595
+(define_insn "*xop_vmfrcz<mode>2"
30596
[(set (match_operand:VF_128 0 "register_operand" "=x")
30599
Index: gcc/config/i386/xopintrin.h
30600
===================================================================
30601
--- a/src/gcc/config/i386/xopintrin.h (.../tags/gcc_4_8_2_release)
30602
+++ b/src/gcc/config/i386/xopintrin.h (.../branches/gcc-4_8-branch)
30603
@@ -745,13 +745,17 @@
30604
extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
30605
_mm_frcz_ss (__m128 __A, __m128 __B)
30607
- return (__m128) __builtin_ia32_vfrczss ((__v4sf)__A, (__v4sf)__B);
30608
+ return (__m128) __builtin_ia32_movss ((__v4sf)__A,
30610
+ __builtin_ia32_vfrczss ((__v4sf)__B));
30613
extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
30614
_mm_frcz_sd (__m128d __A, __m128d __B)
30616
- return (__m128d) __builtin_ia32_vfrczsd ((__v2df)__A, (__v2df)__B);
30617
+ return (__m128d) __builtin_ia32_movsd ((__v2df)__A,
30619
+ __builtin_ia32_vfrczsd ((__v2df)__B));
30622
extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
30623
Index: gcc/config/i386/driver-i386.c
30624
===================================================================
30625
--- a/src/gcc/config/i386/driver-i386.c (.../tags/gcc_4_8_2_release)
30626
+++ b/src/gcc/config/i386/driver-i386.c (.../branches/gcc-4_8-branch)
30627
@@ -126,6 +126,18 @@
30629
level1->sizekb = 16; level1->assoc = 4; level1->line = 32;
30632
+ level1->sizekb = 16; level1->assoc = 4; level1->line = 64;
30635
+ level1->sizekb = 24; level1->assoc = 6; level1->line = 64;
30638
+ level2->sizekb = 256; level2->assoc = 8; level2->line = 64;
30641
+ level2->sizekb = 1024; level2->assoc = 16; level2->line = 64;
30644
level1->sizekb = 32; level1->assoc = 8; level1->line = 64;
30646
@@ -162,6 +174,9 @@
30648
level2->sizekb = 2048; level2->assoc = 4; level2->line = 32;
30651
+ level2->sizekb = 3072; level2->assoc = 12; level2->line = 64;
30656
@@ -203,6 +218,9 @@
30658
level2->sizekb = 512; level2->assoc = 2; level2->line = 64;
30661
+ level2->sizekb = 512; level2->assoc = 8; level2->line = 64;
30664
level2->sizekb = 256; level2->assoc = 8; level2->line = 32;
30666
@@ -470,6 +488,28 @@
30667
has_xsaveopt = eax & bit_XSAVEOPT;
30670
+ /* Check cpuid level of extended features. */
30671
+ __cpuid (0x80000000, ext_level, ebx, ecx, edx);
30673
+ if (ext_level > 0x80000000)
30675
+ __cpuid (0x80000001, eax, ebx, ecx, edx);
30677
+ has_lahf_lm = ecx & bit_LAHF_LM;
30678
+ has_sse4a = ecx & bit_SSE4a;
30679
+ has_abm = ecx & bit_ABM;
30680
+ has_lwp = ecx & bit_LWP;
30681
+ has_fma4 = ecx & bit_FMA4;
30682
+ has_xop = ecx & bit_XOP;
30683
+ has_tbm = ecx & bit_TBM;
30684
+ has_lzcnt = ecx & bit_LZCNT;
30685
+ has_prfchw = ecx & bit_PRFCHW;
30687
+ has_longmode = edx & bit_LM;
30688
+ has_3dnowp = edx & bit_3DNOWP;
30689
+ has_3dnow = edx & bit_3DNOW;
30692
/* Get XCR_XFEATURE_ENABLED_MASK register with xgetbv. */
30693
#define XCR_XFEATURE_ENABLED_MASK 0x0
30694
#define XSTATE_FP 0x1
30695
@@ -488,33 +528,12 @@
30705
- /* Check cpuid level of extended features. */
30706
- __cpuid (0x80000000, ext_level, ebx, ecx, edx);
30708
- if (ext_level > 0x80000000)
30710
- __cpuid (0x80000001, eax, ebx, ecx, edx);
30712
- has_lahf_lm = ecx & bit_LAHF_LM;
30713
- has_sse4a = ecx & bit_SSE4a;
30714
- has_abm = ecx & bit_ABM;
30715
- has_lwp = ecx & bit_LWP;
30716
- has_fma4 = ecx & bit_FMA4;
30717
- has_xop = ecx & bit_XOP;
30718
- has_tbm = ecx & bit_TBM;
30719
- has_lzcnt = ecx & bit_LZCNT;
30720
- has_prfchw = ecx & bit_PRFCHW;
30722
- has_longmode = edx & bit_LM;
30723
- has_3dnowp = edx & bit_3DNOWP;
30724
- has_3dnow = edx & bit_3DNOW;
30729
if (vendor == signature_AMD_ebx
30730
Index: gcc/config/i386/i386.c
30731
===================================================================
30732
--- a/src/gcc/config/i386/i386.c (.../tags/gcc_4_8_2_release)
30733
+++ b/src/gcc/config/i386/i386.c (.../branches/gcc-4_8-branch)
30734
@@ -1378,7 +1378,7 @@
30735
8, /* MMX or SSE register to integer */
30736
8, /* size of l1 cache. */
30737
1024, /* size of l2 cache. */
30738
- 128, /* size of prefetch block */
30739
+ 64, /* size of prefetch block */
30740
8, /* number of parallel prefetches */
30741
1, /* Branch cost */
30742
COSTS_N_INSNS (6), /* cost of FADD and FSUB insns. */
30743
@@ -1894,10 +1894,10 @@
30744
m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_ATOM | m_AMDFAM10 | m_BDVER | m_GENERIC,
30746
/* X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL */
30747
- m_COREI7 | m_AMDFAM10 | m_BDVER | m_BTVER,
30748
+ m_COREI7 | m_HASWELL | m_AMDFAM10 | m_BDVER | m_BTVER,
30750
/* X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL */
30751
- m_COREI7 | m_BDVER,
30752
+ m_COREI7 | m_HASWELL| m_BDVER,
30754
/* X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL */
30756
@@ -2409,6 +2409,7 @@
30757
/* Processor target table, indexed by processor number */
30760
+ const char *const name; /* processor name */
30761
const struct processor_costs *cost; /* Processor costs */
30762
const int align_loop; /* Default alignments. */
30763
const int align_loop_max_skip;
30764
@@ -2417,67 +2418,32 @@
30765
const int align_func;
30768
+/* This table must be in sync with enum processor_type in i386.h. */
30769
static const struct ptt processor_target_table[PROCESSOR_max] =
30771
- {&i386_cost, 4, 3, 4, 3, 4},
30772
- {&i486_cost, 16, 15, 16, 15, 16},
30773
- {&pentium_cost, 16, 7, 16, 7, 16},
30774
- {&pentiumpro_cost, 16, 15, 16, 10, 16},
30775
- {&geode_cost, 0, 0, 0, 0, 0},
30776
- {&k6_cost, 32, 7, 32, 7, 32},
30777
- {&athlon_cost, 16, 7, 16, 7, 16},
30778
- {&pentium4_cost, 0, 0, 0, 0, 0},
30779
- {&k8_cost, 16, 7, 16, 7, 16},
30780
- {&nocona_cost, 0, 0, 0, 0, 0},
30782
- {&core_cost, 16, 10, 16, 10, 16},
30784
- {&core_cost, 16, 10, 16, 10, 16},
30786
- {&core_cost, 16, 10, 16, 10, 16},
30787
- {&generic32_cost, 16, 7, 16, 7, 16},
30788
- {&generic64_cost, 16, 10, 16, 10, 16},
30789
- {&amdfam10_cost, 32, 24, 32, 7, 32},
30790
- {&bdver1_cost, 16, 10, 16, 7, 11},
30791
- {&bdver2_cost, 16, 10, 16, 7, 11},
30792
- {&bdver3_cost, 16, 10, 16, 7, 11},
30793
- {&btver1_cost, 16, 10, 16, 7, 11},
30794
- {&btver2_cost, 16, 10, 16, 7, 11},
30795
- {&atom_cost, 16, 15, 16, 7, 16}
30796
+ {"generic", &generic32_cost, 16, 7, 16, 7, 16},
30797
+ {"generic", &generic64_cost, 16, 10, 16, 10, 16},
30798
+ {"i386", &i386_cost, 4, 3, 4, 3, 4},
30799
+ {"i486", &i486_cost, 16, 15, 16, 15, 16},
30800
+ {"pentium", &pentium_cost, 16, 7, 16, 7, 16},
30801
+ {"pentiumpro", &pentiumpro_cost, 16, 15, 16, 10, 16},
30802
+ {"pentium4", &pentium4_cost, 0, 0, 0, 0, 0},
30803
+ {"nocona", &nocona_cost, 0, 0, 0, 0, 0},
30804
+ {"core2", &core_cost, 16, 10, 16, 10, 16},
30805
+ {"corei7", &core_cost, 16, 10, 16, 10, 16},
30806
+ {"core-avx2", &core_cost, 16, 10, 16, 10, 16},
30807
+ {"atom", &atom_cost, 16, 15, 16, 7, 16},
30808
+ {"geode", &geode_cost, 0, 0, 0, 0, 0},
30809
+ {"k6", &k6_cost, 32, 7, 32, 7, 32},
30810
+ {"athlon", &athlon_cost, 16, 7, 16, 7, 16},
30811
+ {"k8", &k8_cost, 16, 7, 16, 7, 16},
30812
+ {"amdfam10", &amdfam10_cost, 32, 24, 32, 7, 32},
30813
+ {"bdver1", &bdver1_cost, 16, 10, 16, 7, 11},
30814
+ {"bdver2", &bdver2_cost, 16, 10, 16, 7, 11},
30815
+ {"bdver3", &bdver3_cost, 16, 10, 16, 7, 11},
30816
+ {"btver1", &btver1_cost, 16, 10, 16, 7, 11},
30817
+ {"btver2", &btver2_cost, 16, 10, 16, 7, 11}
30820
-static const char *const cpu_names[TARGET_CPU_DEFAULT_max] =
30854
gate_insert_vzeroupper (void)
30855
@@ -2983,7 +2949,7 @@
30856
{"bdver3", PROCESSOR_BDVER3, CPU_BDVER3,
30857
PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
30858
| PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_SSSE3 | PTA_SSE4_1
30859
- | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX
30860
+ | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX | PTA_FMA4
30861
| PTA_XOP | PTA_LWP | PTA_BMI | PTA_TBM | PTA_F16C
30862
| PTA_FMA | PTA_PRFCHW | PTA_FXSR | PTA_XSAVE
30864
@@ -3125,7 +3091,8 @@
30865
ix86_tune_string = ix86_arch_string;
30866
if (!ix86_tune_string)
30868
- ix86_tune_string = cpu_names[TARGET_CPU_DEFAULT];
30870
+ = processor_target_table[TARGET_CPU_DEFAULT].name;
30871
ix86_tune_defaulted = 1;
30874
@@ -4078,19 +4045,15 @@
30875
= ix86_target_string (ptr->x_ix86_isa_flags, ptr->x_target_flags,
30876
NULL, NULL, ptr->x_ix86_fpmath, false);
30878
+ gcc_assert (ptr->arch < PROCESSOR_max);
30879
fprintf (file, "%*sarch = %d (%s)\n",
30882
- ((ptr->arch < TARGET_CPU_DEFAULT_max)
30883
- ? cpu_names[ptr->arch]
30885
+ ptr->arch, processor_target_table[ptr->arch].name);
30887
+ gcc_assert (ptr->tune < PROCESSOR_max);
30888
fprintf (file, "%*stune = %d (%s)\n",
30891
- ((ptr->tune < TARGET_CPU_DEFAULT_max)
30892
- ? cpu_names[ptr->tune]
30894
+ ptr->tune, processor_target_table[ptr->tune].name);
30896
fprintf (file, "%*sbranch_cost = %d\n", indent, "", ptr->branch_cost);
30898
@@ -5213,7 +5176,12 @@
30899
/* Use register calling convention for local functions when possible. */
30901
&& TREE_CODE (decl) == FUNCTION_DECL
30903
+ /* Caller and callee must agree on the calling convention, so
30904
+ checking here just optimize means that with
30905
+ __attribute__((optimize (...))) caller could use regparm convention
30906
+ and callee not, or vice versa. Instead look at whether the callee
30907
+ is optimized or not. */
30908
+ && opt_for_fn (decl, optimize)
30909
&& !(profile_flag && !flag_fentry))
30911
/* FIXME: remove this CONST_CAST when cgraph.[ch] is constified. */
30912
@@ -5409,6 +5377,17 @@
30916
+ /* For pre-AVX disallow unaligned loads/stores where the
30917
+ instructions don't support it. */
30919
+ && VECTOR_MODE_P (GET_MODE (op))
30920
+ && misaligned_operand (op, GET_MODE (op)))
30922
+ int min_align = get_attr_ssememalign (insn);
30923
+ if (min_align == 0)
30927
/* A unary operator may be accepted by the predicate, but it
30928
is irrelevant for matching constraints. */
30930
@@ -5747,9 +5726,9 @@
30932
cum->sse_nregs = 0;
30933
cum->mmx_nregs = 0;
30934
- cum->warn_avx = 0;
30935
- cum->warn_sse = 0;
30936
- cum->warn_mmx = 0;
30937
+ cum->warn_avx = false;
30938
+ cum->warn_sse = false;
30939
+ cum->warn_mmx = false;
30943
@@ -5790,10 +5769,14 @@
30945
The midde-end can't deal with the vector types > 16 bytes. In this
30946
case, we return the original mode and warn ABI change if CUM isn't
30950
+ If INT_RETURN is true, warn ABI change if the vector mode isn't
30951
+ available for function return value. */
30953
static enum machine_mode
30954
-type_natural_mode (const_tree type, const CUMULATIVE_ARGS *cum)
30955
+type_natural_mode (const_tree type, const CUMULATIVE_ARGS *cum,
30958
enum machine_mode mode = TYPE_MODE (type);
30960
@@ -5819,33 +5802,61 @@
30961
if (size == 32 && !TARGET_AVX)
30963
static bool warnedavx;
30964
+ static bool warnedavx_ret;
30968
- && cum->warn_avx)
30969
+ if (cum && cum->warn_avx && !warnedavx)
30971
- warnedavx = true;
30972
- warning (0, "AVX vector argument without AVX "
30973
- "enabled changes the ABI");
30974
+ if (warning (OPT_Wpsabi, "AVX vector argument "
30975
+ "without AVX enabled changes the ABI"))
30976
+ warnedavx = true;
30978
+ else if (in_return && !warnedavx_ret)
30980
+ if (warning (OPT_Wpsabi, "AVX vector return "
30981
+ "without AVX enabled changes the ABI"))
30982
+ warnedavx_ret = true;
30985
return TYPE_MODE (type);
30987
- else if ((size == 8 || size == 16) && !TARGET_SSE)
30988
+ else if (((size == 8 && TARGET_64BIT) || size == 16)
30991
static bool warnedsse;
30992
+ static bool warnedsse_ret;
30996
- && cum->warn_sse)
30997
+ if (cum && cum->warn_sse && !warnedsse)
30999
- warnedsse = true;
31000
- warning (0, "SSE vector argument without SSE "
31001
- "enabled changes the ABI");
31002
+ if (warning (OPT_Wpsabi, "SSE vector argument "
31003
+ "without SSE enabled changes the ABI"))
31004
+ warnedsse = true;
31007
+ else if (!TARGET_64BIT && in_return && !warnedsse_ret)
31009
+ if (warning (OPT_Wpsabi, "SSE vector return "
31010
+ "without SSE enabled changes the ABI"))
31011
+ warnedsse_ret = true;
31016
+ else if ((size == 8 && !TARGET_64BIT) && !TARGET_MMX)
31018
+ static bool warnedmmx;
31019
+ static bool warnedmmx_ret;
31021
+ if (cum && cum->warn_mmx && !warnedmmx)
31023
+ if (warning (OPT_Wpsabi, "MMX vector argument "
31024
+ "without MMX enabled changes the ABI"))
31025
+ warnedmmx = true;
31027
+ else if (in_return && !warnedmmx_ret)
31029
+ if (warning (OPT_Wpsabi, "MMX vector return "
31030
+ "without MMX enabled changes the ABI"))
31031
+ warnedmmx_ret = true;
31037
gcc_unreachable ();
31038
@@ -6190,25 +6201,28 @@
31042
- int size = (bit_offset % 64)+ (int) GET_MODE_BITSIZE (mode);
31043
+ int size = bit_offset + (int) GET_MODE_BITSIZE (mode);
31046
+ /* Analyze last 128 bits only. */
31047
+ size = (size - 1) & 0x7f;
31051
classes[0] = X86_64_INTEGERSI_CLASS;
31054
- else if (size <= 64)
31055
+ else if (size < 64)
31057
classes[0] = X86_64_INTEGER_CLASS;
31060
- else if (size <= 64+32)
31061
+ else if (size < 64+32)
31063
classes[0] = X86_64_INTEGER_CLASS;
31064
classes[1] = X86_64_INTEGERSI_CLASS;
31067
- else if (size <= 64+64)
31068
+ else if (size < 64+64)
31070
classes[0] = classes[1] = X86_64_INTEGER_CLASS;
31072
@@ -6475,7 +6489,7 @@
31074
&& regclass[0] == X86_64_INTEGER_CLASS
31075
&& regclass[1] == X86_64_INTEGER_CLASS
31076
- && (mode == CDImode || mode == TImode || mode == TFmode)
31077
+ && (mode == CDImode || mode == TImode)
31078
&& intreg[0] + 1 == intreg[1])
31079
return gen_rtx_REG (mode, intreg[0]);
31081
@@ -6725,7 +6739,7 @@
31082
words = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
31085
- mode = type_natural_mode (type, NULL);
31086
+ mode = type_natural_mode (type, NULL, false);
31088
if (TARGET_64BIT && (cum ? cum->call_abi : ix86_abi) == MS_ABI)
31089
function_arg_advance_ms_64 (cum, bytes, words);
31090
@@ -6753,8 +6767,6 @@
31091
enum machine_mode orig_mode, const_tree type,
31092
HOST_WIDE_INT bytes, HOST_WIDE_INT words)
31094
- static bool warnedsse, warnedmmx;
31096
/* Avoid the AL settings for the Unix64 ABI. */
31097
if (mode == VOIDmode)
31098
return constm1_rtx;
31099
@@ -6811,12 +6823,6 @@
31101
if (!type || !AGGREGATE_TYPE_P (type))
31103
- if (!TARGET_SSE && !warnedsse && cum->warn_sse)
31105
- warnedsse = true;
31106
- warning (0, "SSE vector argument without SSE enabled "
31107
- "changes the ABI");
31109
if (cum->sse_nregs)
31110
return gen_reg_or_parallel (mode, orig_mode,
31111
cum->sse_regno + FIRST_SSE_REG);
31112
@@ -6849,12 +6855,6 @@
31114
if (!type || !AGGREGATE_TYPE_P (type))
31116
- if (!TARGET_MMX && !warnedmmx && cum->warn_mmx)
31118
- warnedmmx = true;
31119
- warning (0, "MMX vector argument without MMX enabled "
31120
- "changes the ABI");
31122
if (cum->mmx_nregs)
31123
return gen_reg_or_parallel (mode, orig_mode,
31124
cum->mmx_regno + FIRST_MMX_REG);
31125
@@ -6977,7 +6977,7 @@
31126
/* To simplify the code below, represent vector types with a vector mode
31127
even if MMX/SSE are not active. */
31128
if (type && TREE_CODE (type) == VECTOR_TYPE)
31129
- mode = type_natural_mode (type, cum);
31130
+ mode = type_natural_mode (type, cum, false);
31132
if (TARGET_64BIT && (cum ? cum->call_abi : ix86_abi) == MS_ABI)
31133
arg = function_arg_ms_64 (cum, mode, omode, named, bytes);
31134
@@ -7235,9 +7235,15 @@
31142
+ return TARGET_64BIT && ix86_abi != MS_ABI;
31144
- case FIRST_FLOAT_REG:
31145
+ /* Complex values are returned in %st(0)/%st(1) pair. */
31148
/* TODO: The function should depend on current function ABI but
31149
builtins.c would need updating then. Therefore we use the
31151
@@ -7245,10 +7251,12 @@
31153
return TARGET_FLOAT_RETURNS_IN_80387;
31155
- case FIRST_SSE_REG:
31156
+ /* Complex values are returned in %xmm0/%xmm1 pair. */
31161
- case FIRST_MMX_REG:
31163
if (TARGET_MACHO || TARGET_64BIT)
31166
@@ -7420,7 +7428,7 @@
31167
enum machine_mode mode, orig_mode;
31169
orig_mode = TYPE_MODE (valtype);
31170
- mode = type_natural_mode (valtype, NULL);
31171
+ mode = type_natural_mode (valtype, NULL, true);
31172
return ix86_function_value_1 (valtype, fntype_or_decl, orig_mode, mode);
31175
@@ -7535,7 +7543,7 @@
31176
#ifdef SUBTARGET_RETURN_IN_MEMORY
31177
return SUBTARGET_RETURN_IN_MEMORY (type, fntype);
31179
- const enum machine_mode mode = type_natural_mode (type, NULL);
31180
+ const enum machine_mode mode = type_natural_mode (type, NULL, true);
31184
@@ -7549,52 +7557,6 @@
31188
-/* When returning SSE vector types, we have a choice of either
31189
- (1) being abi incompatible with a -march switch, or
31190
- (2) generating an error.
31191
- Given no good solution, I think the safest thing is one warning.
31192
- The user won't be able to use -Werror, but....
31194
- Choose the STRUCT_VALUE_RTX hook because that's (at present) only
31195
- called in response to actually generating a caller or callee that
31196
- uses such a type. As opposed to TARGET_RETURN_IN_MEMORY, which is called
31197
- via aggregate_value_p for general type probing from tree-ssa. */
31200
-ix86_struct_value_rtx (tree type, int incoming ATTRIBUTE_UNUSED)
31202
- static bool warnedsse, warnedmmx;
31204
- if (!TARGET_64BIT && type)
31206
- /* Look at the return type of the function, not the function type. */
31207
- enum machine_mode mode = TYPE_MODE (TREE_TYPE (type));
31209
- if (!TARGET_SSE && !warnedsse)
31211
- if (mode == TImode
31212
- || (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 16))
31214
- warnedsse = true;
31215
- warning (0, "SSE vector return without SSE enabled "
31216
- "changes the ABI");
31220
- if (!TARGET_MMX && !warnedmmx)
31222
- if (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 8)
31224
- warnedmmx = true;
31225
- warning (0, "MMX vector return without MMX enabled "
31226
- "changes the ABI");
31235
/* Create the va_list data type. */
31237
@@ -8019,7 +7981,7 @@
31238
size = int_size_in_bytes (type);
31239
rsize = (size + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
31241
- nat_mode = type_natural_mode (type, NULL);
31242
+ nat_mode = type_natural_mode (type, NULL, false);
31246
@@ -10560,18 +10522,20 @@
31248
m->fs.sp_offset += allocate;
31250
+ /* Use stack_pointer_rtx for relative addressing so that code
31251
+ works for realigned stack, too. */
31252
if (r10_live && eax_live)
31254
- t = choose_baseaddr (m->fs.sp_offset - allocate);
31255
+ t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax);
31256
emit_move_insn (gen_rtx_REG (word_mode, R10_REG),
31257
gen_frame_mem (word_mode, t));
31258
- t = choose_baseaddr (m->fs.sp_offset - allocate - UNITS_PER_WORD);
31259
+ t = plus_constant (Pmode, t, UNITS_PER_WORD);
31260
emit_move_insn (gen_rtx_REG (word_mode, AX_REG),
31261
gen_frame_mem (word_mode, t));
31263
else if (eax_live || r10_live)
31265
- t = choose_baseaddr (m->fs.sp_offset - allocate);
31266
+ t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax);
31267
emit_move_insn (gen_rtx_REG (word_mode,
31268
(eax_live ? AX_REG : R10_REG)),
31269
gen_frame_mem (word_mode, t));
31270
@@ -11561,30 +11525,6 @@
31274
-/* Determine if op is suitable SUBREG RTX for address. */
31277
-ix86_address_subreg_operand (rtx op)
31279
- enum machine_mode mode;
31284
- mode = GET_MODE (op);
31286
- if (GET_MODE_CLASS (mode) != MODE_INT)
31289
- /* Don't allow SUBREGs that span more than a word. It can lead to spill
31290
- failures when the register is one word out of a two word structure. */
31291
- if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
31294
- /* Allow only SUBREGs of non-eliminable hard registers. */
31295
- return register_no_elim_operand (op, mode);
31298
/* Extract the parts of an RTL expression that is a valid memory address
31299
for an instruction. Return 0 if the structure of the address is
31300
grossly off. Return -1 if the address contains ASHIFT, so it is not
31301
@@ -11641,7 +11581,7 @@
31303
else if (GET_CODE (addr) == SUBREG)
31305
- if (ix86_address_subreg_operand (SUBREG_REG (addr)))
31306
+ if (REG_P (SUBREG_REG (addr)))
31310
@@ -11705,7 +11645,7 @@
31314
- if (!ix86_address_subreg_operand (SUBREG_REG (op)))
31315
+ if (!REG_P (SUBREG_REG (op)))
31319
@@ -11750,19 +11690,6 @@
31320
scale = 1 << scale;
31323
- else if (CONST_INT_P (addr))
31325
- if (!x86_64_immediate_operand (addr, VOIDmode))
31328
- /* Constant addresses are sign extended to 64bit, we have to
31329
- prevent addresses from 0x80000000 to 0xffffffff in x32 mode. */
31331
- && val_signbit_known_set_p (SImode, INTVAL (addr)))
31337
disp = addr; /* displacement */
31339
@@ -11771,18 +11698,12 @@
31342
else if (GET_CODE (index) == SUBREG
31343
- && ix86_address_subreg_operand (SUBREG_REG (index)))
31344
+ && REG_P (SUBREG_REG (index)))
31350
-/* Address override works only on the (%reg) part of %fs:(%reg). */
31351
- if (seg != SEG_DEFAULT
31352
- && ((base && GET_MODE (base) != word_mode)
31353
- || (index && GET_MODE (index) != word_mode)))
31356
/* Extract the integral value of scale. */
31359
@@ -12258,6 +12179,45 @@
31363
+/* Determine if op is suitable RTX for an address register.
31364
+ Return naked register if a register or a register subreg is
31365
+ found, otherwise return NULL_RTX. */
31368
+ix86_validate_address_register (rtx op)
31370
+ enum machine_mode mode = GET_MODE (op);
31372
+ /* Only SImode or DImode registers can form the address. */
31373
+ if (mode != SImode && mode != DImode)
31378
+ else if (GET_CODE (op) == SUBREG)
31380
+ rtx reg = SUBREG_REG (op);
31382
+ if (!REG_P (reg))
31385
+ mode = GET_MODE (reg);
31387
+ /* Don't allow SUBREGs that span more than a word. It can
31388
+ lead to spill failures when the register is one word out
31389
+ of a two word structure. */
31390
+ if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
31393
+ /* Allow only SUBREGs of non-eliminable hard registers. */
31394
+ if (register_no_elim_operand (reg, mode))
31398
+ /* Op is not a register. */
31402
/* Recognizes RTL expressions that are valid memory addresses for an
31403
instruction. The MODE argument is the machine mode for the MEM
31404
expression that wants to use this address.
31405
@@ -12273,6 +12233,7 @@
31406
struct ix86_address parts;
31407
rtx base, index, disp;
31408
HOST_WIDE_INT scale;
31409
+ enum ix86_address_seg seg;
31411
if (ix86_decompose_address (addr, &parts) <= 0)
31412
/* Decomposition failed. */
31413
@@ -12282,23 +12243,16 @@
31414
index = parts.index;
31416
scale = parts.scale;
31419
/* Validate base register. */
31423
+ rtx reg = ix86_validate_address_register (base);
31425
- if (REG_P (base))
31427
- else if (GET_CODE (base) == SUBREG && REG_P (SUBREG_REG (base)))
31428
- reg = SUBREG_REG (base);
31430
- /* Base is not a register. */
31431
+ if (reg == NULL_RTX)
31434
- if (GET_MODE (base) != SImode && GET_MODE (base) != DImode)
31437
if ((strict && ! REG_OK_FOR_BASE_STRICT_P (reg))
31438
|| (! strict && ! REG_OK_FOR_BASE_NONSTRICT_P (reg)))
31439
/* Base is not valid. */
31440
@@ -12308,19 +12262,11 @@
31441
/* Validate index register. */
31445
+ rtx reg = ix86_validate_address_register (index);
31447
- if (REG_P (index))
31449
- else if (GET_CODE (index) == SUBREG && REG_P (SUBREG_REG (index)))
31450
- reg = SUBREG_REG (index);
31452
- /* Index is not a register. */
31453
+ if (reg == NULL_RTX)
31456
- if (GET_MODE (index) != SImode && GET_MODE (index) != DImode)
31459
if ((strict && ! REG_OK_FOR_INDEX_STRICT_P (reg))
31460
|| (! strict && ! REG_OK_FOR_INDEX_NONSTRICT_P (reg)))
31461
/* Index is not valid. */
31462
@@ -12332,6 +12278,12 @@
31463
&& GET_MODE (base) != GET_MODE (index))
31466
+ /* Address override works only on the (%reg) part of %fs:(%reg). */
31467
+ if (seg != SEG_DEFAULT
31468
+ && ((base && GET_MODE (base) != word_mode)
31469
+ || (index && GET_MODE (index) != word_mode)))
31472
/* Validate scale factor. */
31475
@@ -12453,6 +12405,12 @@
31476
&& !x86_64_immediate_operand (disp, VOIDmode))
31477
/* Displacement is out of range. */
31479
+ /* In x32 mode, constant addresses are sign extended to 64bit, so
31480
+ we have to prevent addresses from 0x80000000 to 0xffffffff. */
31481
+ else if (TARGET_X32 && !(index || base)
31482
+ && CONST_INT_P (disp)
31483
+ && val_signbit_known_set_p (SImode, INTVAL (disp)))
31487
/* Everything looks valid. */
31488
@@ -13817,8 +13775,6 @@
31489
Those same assemblers have the same but opposite lossage on cmov. */
31490
if (mode == CCmode)
31491
suffix = fp ? "nbe" : "a";
31492
- else if (mode == CCCmode)
31495
gcc_unreachable ();
31497
@@ -13840,8 +13796,12 @@
31501
- gcc_assert (mode == CCmode || mode == CCCmode);
31503
+ if (mode == CCmode)
31505
+ else if (mode == CCCmode)
31508
+ gcc_unreachable ();
31512
@@ -13861,9 +13821,12 @@
31516
- /* ??? As above. */
31517
- gcc_assert (mode == CCmode || mode == CCCmode);
31518
- suffix = fp ? "nb" : "ae";
31519
+ if (mode == CCmode)
31520
+ suffix = fp ? "nb" : "ae";
31521
+ else if (mode == CCCmode)
31524
+ gcc_unreachable ();
31527
gcc_assert (mode == CCmode || mode == CCGCmode || mode == CCNOmode);
31528
@@ -13870,11 +13833,8 @@
31532
- /* ??? As above. */
31533
if (mode == CCmode)
31535
- else if (mode == CCCmode)
31536
- suffix = fp ? "nb" : "ae";
31538
gcc_unreachable ();
31540
@@ -15340,7 +15300,7 @@
31541
rtx arg = XEXP (XEXP (link, 0), 0);
31543
if (ix86_check_avx256_register (&arg, NULL))
31544
- return AVX_U128_ANY;
31545
+ return AVX_U128_DIRTY;
31549
@@ -15460,8 +15420,8 @@
31551
bool avx_reg256_found = false;
31552
note_stores (pat, ix86_check_avx256_stores, &avx_reg256_found);
31553
- if (!avx_reg256_found)
31554
- return AVX_U128_CLEAN;
31556
+ return avx_reg256_found ? AVX_U128_DIRTY : AVX_U128_CLEAN;
31559
/* Otherwise, return current mode. Remember that if insn
31560
@@ -17350,10 +17310,20 @@
31561
if (!TARGET_OPT_AGU || optimize_function_for_size_p (cfun))
31564
- /* Check it is correct to split here. */
31565
- if (!ix86_ok_to_clobber_flags(insn))
31566
+ /* The "at least two components" test below might not catch simple
31567
+ move or zero extension insns if parts.base is non-NULL and parts.disp
31568
+ is const0_rtx as the only components in the address, e.g. if the
31569
+ register is %rbp or %r13. As this test is much cheaper and moves or
31570
+ zero extensions are the common case, do this check first. */
31571
+ if (REG_P (operands[1])
31572
+ || (SImode_address_operand (operands[1], VOIDmode)
31573
+ && REG_P (XEXP (operands[1], 0))))
31576
+ /* Check if it is OK to split here. */
31577
+ if (!ix86_ok_to_clobber_flags (insn))
31580
ok = ix86_decompose_address (operands[1], &parts);
31583
@@ -18486,12 +18456,7 @@
31585
case GTU: /* CF=0 & ZF=0 */
31586
case LEU: /* CF=1 | ZF=1 */
31587
- /* Detect overflow checks. They need just the carry flag. */
31588
- if (GET_CODE (op0) == MINUS
31589
- && rtx_equal_p (op1, XEXP (op0, 0)))
31594
/* Codes possibly doable only with sign flag when
31595
comparing against zero. */
31596
case GE: /* SF=OF or SF=0 */
31597
@@ -20500,7 +20465,7 @@
31601
- mask = gen_lowpart (V8SFmode, mask);
31602
+ mask = gen_lowpart (V8SImode, mask);
31603
if (one_operand_shuffle)
31604
emit_insn (gen_avx2_permvarv8sf (target, op0, mask));
31606
@@ -21740,6 +21705,21 @@
31610
+/* Copy the address to a Pmode register. This is used for x32 to
31611
+ truncate DImode TLS address to a SImode register. */
31614
+ix86_copy_addr_to_reg (rtx addr)
31616
+ if (GET_MODE (addr) == Pmode)
31617
+ return copy_addr_to_reg (addr);
31620
+ gcc_assert (GET_MODE (addr) == DImode && Pmode == SImode);
31621
+ return gen_rtx_SUBREG (SImode, copy_to_mode_reg (DImode, addr), 0);
31625
/* When SRCPTR is non-NULL, output simple loop to move memory
31626
pointer to SRCPTR to DESTPTR via chunks of MODE unrolled UNROLL times,
31627
overall size is COUNT specified in bytes. When SRCPTR is NULL, output the
31628
@@ -22728,8 +22708,8 @@
31629
gcc_assert (alg != no_stringop);
31631
count_exp = copy_to_mode_reg (GET_MODE (count_exp), count_exp);
31632
- destreg = copy_addr_to_reg (XEXP (dst, 0));
31633
- srcreg = copy_addr_to_reg (XEXP (src, 0));
31634
+ destreg = ix86_copy_addr_to_reg (XEXP (dst, 0));
31635
+ srcreg = ix86_copy_addr_to_reg (XEXP (src, 0));
31639
@@ -23119,7 +23099,7 @@
31640
gcc_assert (alg != no_stringop);
31642
count_exp = copy_to_mode_reg (counter_mode (count_exp), count_exp);
31643
- destreg = copy_addr_to_reg (XEXP (dst, 0));
31644
+ destreg = ix86_copy_addr_to_reg (XEXP (dst, 0));
31648
@@ -24988,7 +24968,8 @@
31650
ix86_data_alignment (tree type, int align)
31652
- int max_align = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
31654
+ = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
31656
if (AGGREGATE_TYPE_P (type)
31657
&& TYPE_SIZE (type)
31658
@@ -27984,8 +27965,8 @@
31659
{ OPTION_MASK_ISA_XOP, CODE_FOR_xop_shlv8hi3, "__builtin_ia32_vpshlw", IX86_BUILTIN_VPSHLW, UNKNOWN, (int)MULTI_ARG_2_HI },
31660
{ OPTION_MASK_ISA_XOP, CODE_FOR_xop_shlv16qi3, "__builtin_ia32_vpshlb", IX86_BUILTIN_VPSHLB, UNKNOWN, (int)MULTI_ARG_2_QI },
31662
- { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv4sf2, "__builtin_ia32_vfrczss", IX86_BUILTIN_VFRCZSS, UNKNOWN, (int)MULTI_ARG_2_SF },
31663
- { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv2df2, "__builtin_ia32_vfrczsd", IX86_BUILTIN_VFRCZSD, UNKNOWN, (int)MULTI_ARG_2_DF },
31664
+ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv4sf2, "__builtin_ia32_vfrczss", IX86_BUILTIN_VFRCZSS, UNKNOWN, (int)MULTI_ARG_1_SF },
31665
+ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv2df2, "__builtin_ia32_vfrczsd", IX86_BUILTIN_VFRCZSD, UNKNOWN, (int)MULTI_ARG_1_DF },
31666
{ OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv4sf2, "__builtin_ia32_vfrczps", IX86_BUILTIN_VFRCZPS, UNKNOWN, (int)MULTI_ARG_1_SF },
31667
{ OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv2df2, "__builtin_ia32_vfrczpd", IX86_BUILTIN_VFRCZPD, UNKNOWN, (int)MULTI_ARG_1_DF },
31668
{ OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv8sf2, "__builtin_ia32_vfrczps256", IX86_BUILTIN_VFRCZPS256, UNKNOWN, (int)MULTI_ARG_1_SF2 },
31669
@@ -31245,11 +31226,12 @@
31672
ix86_expand_special_args_builtin (const struct builtin_description *d,
31673
- tree exp, rtx target)
31674
+ tree exp, rtx target)
31678
unsigned int i, nargs, arg_adjust, memory;
31679
+ bool aligned_mem = false;
31683
@@ -31295,6 +31277,15 @@
31689
+ case CODE_FOR_sse4_1_movntdqa:
31690
+ case CODE_FOR_avx2_movntdqa:
31691
+ aligned_mem = true;
31697
case VOID_FTYPE_PV2SF_V4SF:
31698
case VOID_FTYPE_PV4DI_V4DI:
31699
@@ -31312,6 +31303,26 @@
31701
/* Reserve memory operand for target. */
31702
memory = ARRAY_SIZE (args);
31705
+ /* These builtins and instructions require the memory
31706
+ to be properly aligned. */
31707
+ case CODE_FOR_avx_movntv4di:
31708
+ case CODE_FOR_sse2_movntv2di:
31709
+ case CODE_FOR_avx_movntv8sf:
31710
+ case CODE_FOR_sse_movntv4sf:
31711
+ case CODE_FOR_sse4a_vmmovntv4sf:
31712
+ case CODE_FOR_avx_movntv4df:
31713
+ case CODE_FOR_sse2_movntv2df:
31714
+ case CODE_FOR_sse4a_vmmovntv2df:
31715
+ case CODE_FOR_sse2_movntidi:
31716
+ case CODE_FOR_sse_movntq:
31717
+ case CODE_FOR_sse2_movntisi:
31718
+ aligned_mem = true;
31724
case V4SF_FTYPE_V4SF_PCV2SF:
31725
case V2DF_FTYPE_V2DF_PCDOUBLE:
31726
@@ -31368,6 +31379,17 @@
31728
op = force_reg (Pmode, convert_to_mode (Pmode, op, 1));
31729
target = gen_rtx_MEM (tmode, op);
31730
+ /* target at this point has just BITS_PER_UNIT MEM_ALIGN
31731
+ on it. Try to improve it using get_pointer_alignment,
31732
+ and if the special builtin is one that requires strict
31733
+ mode alignment, also from it's GET_MODE_ALIGNMENT.
31734
+ Failure to do so could lead to ix86_legitimate_combined_insn
31735
+ rejecting all changes to such insns. */
31736
+ unsigned int align = get_pointer_alignment (arg);
31737
+ if (aligned_mem && align < GET_MODE_ALIGNMENT (tmode))
31738
+ align = GET_MODE_ALIGNMENT (tmode);
31739
+ if (MEM_ALIGN (target) < align)
31740
+ set_mem_align (target, align);
31743
target = force_reg (tmode, op);
31744
@@ -31413,8 +31435,17 @@
31745
/* This must be the memory operand. */
31746
op = force_reg (Pmode, convert_to_mode (Pmode, op, 1));
31747
op = gen_rtx_MEM (mode, op);
31748
- gcc_assert (GET_MODE (op) == mode
31749
- || GET_MODE (op) == VOIDmode);
31750
+ /* op at this point has just BITS_PER_UNIT MEM_ALIGN
31751
+ on it. Try to improve it using get_pointer_alignment,
31752
+ and if the special builtin is one that requires strict
31753
+ mode alignment, also from it's GET_MODE_ALIGNMENT.
31754
+ Failure to do so could lead to ix86_legitimate_combined_insn
31755
+ rejecting all changes to such insns. */
31756
+ unsigned int align = get_pointer_alignment (arg);
31757
+ if (aligned_mem && align < GET_MODE_ALIGNMENT (mode))
31758
+ align = GET_MODE_ALIGNMENT (mode);
31759
+ if (MEM_ALIGN (op) < align)
31760
+ set_mem_align (op, align);
31764
@@ -32208,7 +32239,9 @@
31765
mode4 = insn_data[icode].operand[5].mode;
31767
if (target == NULL_RTX
31768
- || GET_MODE (target) != insn_data[icode].operand[0].mode)
31769
+ || GET_MODE (target) != insn_data[icode].operand[0].mode
31770
+ || !insn_data[icode].operand[0].predicate (target,
31771
+ GET_MODE (target)))
31772
subtarget = gen_reg_rtx (insn_data[icode].operand[0].mode);
31774
subtarget = target;
31775
@@ -33879,10 +33912,10 @@
31777
/* We implement the move patterns for all vector modes into and
31778
out of SSE registers, even when no operation instructions
31779
- are available. OImode move is available only when AVX is
31781
- return ((TARGET_AVX && mode == OImode)
31782
- || VALID_AVX256_REG_MODE (mode)
31783
+ are available. OImode and AVX modes are available only when
31784
+ AVX is enabled. */
31785
+ return ((TARGET_AVX
31786
+ && VALID_AVX256_REG_OR_OI_MODE (mode))
31787
|| VALID_SSE_REG_MODE (mode)
31788
|| VALID_SSE2_REG_MODE (mode)
31789
|| VALID_MMX_REG_MODE (mode)
31790
@@ -35020,7 +35053,7 @@
31792
tmp = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, fnaddr), UNSPEC_GOTPCREL);
31793
tmp = gen_rtx_CONST (Pmode, tmp);
31794
- fnaddr = gen_rtx_MEM (Pmode, tmp);
31795
+ fnaddr = gen_const_mem (Pmode, tmp);
31799
@@ -35040,8 +35073,9 @@
31800
output_set_got (tmp, NULL_RTX);
31802
fnaddr = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, fnaddr), UNSPEC_GOT);
31803
- fnaddr = gen_rtx_PLUS (Pmode, fnaddr, tmp);
31804
- fnaddr = gen_rtx_MEM (Pmode, fnaddr);
31805
+ fnaddr = gen_rtx_CONST (Pmode, fnaddr);
31806
+ fnaddr = gen_rtx_PLUS (Pmode, tmp, fnaddr);
31807
+ fnaddr = gen_const_mem (Pmode, fnaddr);
31811
@@ -35232,7 +35266,10 @@
31812
The smallest offset in the page INSN can start is the case where START
31813
ends on the offset 0. Offset of INSN is then NBYTES - sizeof (INSN).
31814
We add p2align to 16byte window with maxskip 15 - NBYTES + sizeof (INSN).
31817
+ Don't consider asm goto as jump, while it can contain a jump, it doesn't
31818
+ have to, control transfer to label(s) can be performed through other
31819
+ means, and also we estimate minimum length of all asm stmts as 0. */
31820
for (insn = start; insn; insn = NEXT_INSN (insn))
31823
@@ -35260,6 +35297,7 @@
31825
start = NEXT_INSN (start);
31826
if ((JUMP_P (start)
31827
+ && asm_noperands (PATTERN (start)) < 0
31828
&& GET_CODE (PATTERN (start)) != ADDR_VEC
31829
&& GET_CODE (PATTERN (start)) != ADDR_DIFF_VEC)
31831
@@ -35278,6 +35316,7 @@
31832
fprintf (dump_file, "Insn %i estimated to %i bytes\n",
31833
INSN_UID (insn), min_size);
31835
+ && asm_noperands (PATTERN (insn)) < 0
31836
&& GET_CODE (PATTERN (insn)) != ADDR_VEC
31837
&& GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC)
31839
@@ -35289,6 +35328,7 @@
31841
start = NEXT_INSN (start);
31842
if ((JUMP_P (start)
31843
+ && asm_noperands (PATTERN (start)) < 0
31844
&& GET_CODE (PATTERN (start)) != ADDR_VEC
31845
&& GET_CODE (PATTERN (start)) != ADDR_DIFF_VEC)
31847
@@ -39371,7 +39411,9 @@
31849
dfinal.perm[i] = e;
31851
- dfinal.op0 = gen_reg_rtx (dfinal.vmode);
31853
+ if (!d->testing_p)
31854
+ dfinal.op0 = gen_reg_rtx (dfinal.vmode);
31855
dfinal.op1 = dfinal.op0;
31856
dfinal.one_operand_p = true;
31857
dremap.target = dfinal.op0;
31858
@@ -39806,6 +39848,9 @@
31860
gcc_assert (!d->one_operand_p);
31862
+ if (d->testing_p)
31866
eltsz = GET_MODE_SIZE (GET_MODE_INNER (d->vmode));
31868
@@ -40005,6 +40050,8 @@
31872
+ if (d->testing_p)
31874
t1 = gen_reg_rtx (V4DFmode);
31875
t2 = gen_reg_rtx (V4DFmode);
31877
@@ -40024,6 +40071,8 @@
31879
int mask = odd ? 0xdd : 0x88;
31881
+ if (d->testing_p)
31883
t1 = gen_reg_rtx (V8SFmode);
31884
t2 = gen_reg_rtx (V8SFmode);
31885
t3 = gen_reg_rtx (V8SFmode);
31886
@@ -40065,6 +40114,8 @@
31887
return expand_vec_perm_pshufb2 (d);
31890
+ if (d->testing_p)
31892
/* We need 2*log2(N)-1 operations to achieve odd/even
31893
with interleave. */
31894
t1 = gen_reg_rtx (V8HImode);
31895
@@ -40086,6 +40137,8 @@
31896
return expand_vec_perm_pshufb2 (d);
31899
+ if (d->testing_p)
31901
t1 = gen_reg_rtx (V16QImode);
31902
t2 = gen_reg_rtx (V16QImode);
31903
t3 = gen_reg_rtx (V16QImode);
31904
@@ -40118,6 +40171,9 @@
31905
return expand_vec_perm_even_odd_1 (&d_copy, odd);
31908
+ if (d->testing_p)
31911
t1 = gen_reg_rtx (V4DImode);
31912
t2 = gen_reg_rtx (V4DImode);
31914
@@ -40144,6 +40200,9 @@
31915
return expand_vec_perm_even_odd_1 (&d_copy, odd);
31918
+ if (d->testing_p)
31921
t1 = gen_reg_rtx (V8SImode);
31922
t2 = gen_reg_rtx (V8SImode);
31924
@@ -40236,6 +40295,8 @@
31926
/* These can be implemented via interleave. We save one insn by
31927
stopping once we have promoted to V4SImode and then use pshufd. */
31928
+ if (d->testing_p)
31933
@@ -42473,8 +42534,6 @@
31935
#undef TARGET_PROMOTE_PROTOTYPES
31936
#define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_true
31937
-#undef TARGET_STRUCT_VALUE_RTX
31938
-#define TARGET_STRUCT_VALUE_RTX ix86_struct_value_rtx
31939
#undef TARGET_SETUP_INCOMING_VARARGS
31940
#define TARGET_SETUP_INCOMING_VARARGS ix86_setup_incoming_varargs
31941
#undef TARGET_MUST_PASS_IN_STACK
31942
Index: gcc/config/tilegx/tilegx.md
31943
===================================================================
31944
--- a/src/gcc/config/tilegx/tilegx.md (.../tags/gcc_4_8_2_release)
31945
+++ b/src/gcc/config/tilegx/tilegx.md (.../branches/gcc-4_8-branch)
31946
@@ -5076,10 +5076,8 @@
31948
;; Network intrinsics
31950
-;; Note the "pseudo" text is handled specially by the
31951
-;; asm_output_opcode routine. If the output is an empty string, the
31952
-;; instruction would bypass the asm_output_opcode routine, bypassing
31953
-;; the bundle handling code.
31954
+;; Note the this barrier is of type "nothing," which is deleted after
31955
+;; the final scheduling pass so that nothing is emitted for it.
31956
(define_insn "tilegx_network_barrier"
31957
[(unspec_volatile:SI [(const_int 0)] UNSPEC_NETWORK_BARRIER)]
31959
Index: gcc/config/tilegx/tilegx-c.c
31960
===================================================================
31961
--- a/src/gcc/config/tilegx/tilegx-c.c (.../tags/gcc_4_8_2_release)
31962
+++ b/src/gcc/config/tilegx/tilegx-c.c (.../branches/gcc-4_8-branch)
31965
builtin_define ("__tilegx32__");
31967
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
31968
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
31970
TILEGX_CPU_CPP_ENDIAN_BUILTINS ();
31971
GNU_USER_TARGET_OS_CPP_BUILTINS ();
31973
Index: gcc/config/tilegx/sync.md
31974
===================================================================
31975
--- a/src/gcc/config/tilegx/sync.md (.../tags/gcc_4_8_2_release)
31976
+++ b/src/gcc/config/tilegx/sync.md (.../branches/gcc-4_8-branch)
31977
@@ -150,15 +150,22 @@
31978
(match_operand:SI 3 "const_int_operand" "")] ;; model
31982
enum memmodel model = (enum memmodel) INTVAL (operands[3]);
31984
if (operands[2] != const0_rtx)
31985
- emit_move_insn (operands[2], gen_rtx_NEG (<MODE>mode, operands[2]));
31987
+ addend = gen_reg_rtx (<MODE>mode);
31988
+ emit_move_insn (addend,
31989
+ gen_rtx_MINUS (<MODE>mode, const0_rtx, operands[2]));
31992
+ addend = operands[2];
31994
tilegx_pre_atomic_barrier (model);
31995
emit_insn (gen_atomic_fetch_add_bare<mode> (operands[0],
31999
tilegx_post_atomic_barrier (model);
32002
Index: gcc/config/tilegx/tilegx.c
32003
===================================================================
32004
--- a/src/gcc/config/tilegx/tilegx.c (.../tags/gcc_4_8_2_release)
32005
+++ b/src/gcc/config/tilegx/tilegx.c (.../branches/gcc-4_8-branch)
32006
@@ -702,6 +702,16 @@
32010
+/* Implement TARGET_EXPAND_TO_RTL_HOOK. */
32012
+tilegx_expand_to_rtl_hook (void)
32014
+ /* Exclude earlier sets of crtl->uses_pic_offset_table, because we
32015
+ only care about uses actually emitted. */
32016
+ crtl->uses_pic_offset_table = 0;
32020
/* Implement TARGET_SHIFT_TRUNCATION_MASK. DImode shifts use the mode
32021
matching insns and therefore guarantee that the shift count is
32022
modulo 64. SImode shifts sometimes use the 64 bit version so do
32023
@@ -3543,6 +3553,12 @@
32028
+ /* If we are generating a prefetch, tell the scheduler not to move
32030
+ if (GET_CODE (pat) == PREFETCH)
32031
+ PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
32036
@@ -4368,10 +4384,12 @@
32041
+ rtx insn, next, prev;
32042
rtx end = NEXT_INSN (BB_END (bb));
32044
- for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn; insn = next)
32046
+ for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn;
32047
+ prev = insn, insn = next)
32049
next = next_insn_to_bundle (NEXT_INSN (insn), end);
32051
@@ -4396,6 +4414,18 @@
32052
PUT_MODE (insn, SImode);
32056
+ /* Delete barrier insns, because they can mess up the
32057
+ emitting of bundle braces. If it is end-of-bundle, then
32058
+ the previous insn must be marked end-of-bundle. */
32059
+ if (get_attr_type (insn) == TYPE_NOTHING) {
32060
+ if (GET_MODE (insn) == QImode && prev != NULL
32061
+ && GET_MODE (prev) == SImode)
32063
+ PUT_MODE (prev, QImode);
32065
+ delete_insn (insn);
32070
@@ -5498,6 +5528,9 @@
32071
#undef TARGET_RTX_COSTS
32072
#define TARGET_RTX_COSTS tilegx_rtx_costs
32074
+#undef TARGET_EXPAND_TO_RTL_HOOK
32075
+#define TARGET_EXPAND_TO_RTL_HOOK tilegx_expand_to_rtl_hook
32077
#undef TARGET_SHIFT_TRUNCATION_MASK
32078
#define TARGET_SHIFT_TRUNCATION_MASK tilegx_shift_truncation_mask
32080
Index: gcc/config/sh/predicates.md
32081
===================================================================
32082
--- a/src/gcc/config/sh/predicates.md (.../tags/gcc_4_8_2_release)
32083
+++ b/src/gcc/config/sh/predicates.md (.../branches/gcc-4_8-branch)
32084
@@ -389,6 +389,12 @@
32085
XEXP (XEXP (op, 0), 1),
32086
TARGET_SH2A, true)")))
32088
+;; Returns true if OP is a displacement address that can fit into a
32089
+;; 16 bit (non-SH2A) memory load / store insn.
32090
+(define_predicate "short_displacement_mem_operand"
32091
+ (match_test "sh_disp_addr_displacement (op)
32092
+ <= sh_max_mov_insn_displacement (GET_MODE (op), false)"))
32094
;; Returns 1 if the operand can be used in an SH2A movu.{b|w} insn.
32095
(define_predicate "zero_extend_movu_operand"
32096
(and (match_operand 0 "displacement_mem_operand")
32097
@@ -413,6 +419,11 @@
32098
if (t_reg_operand (op, mode))
32101
+ /* Disallow PC relative QImode loads, since these is no insn to do that
32102
+ and an imm8 load should be used instead. */
32103
+ if (IS_PC_RELATIVE_LOAD_ADDR_P (op) && GET_MODE (op) == QImode)
32108
rtx inside = XEXP (op, 0);
32109
Index: gcc/config/sh/sh-protos.h
32110
===================================================================
32111
--- a/src/gcc/config/sh/sh-protos.h (.../tags/gcc_4_8_2_release)
32112
+++ b/src/gcc/config/sh/sh-protos.h (.../branches/gcc-4_8-branch)
32113
@@ -159,6 +159,8 @@
32114
extern bool sh_cfun_trap_exit_p (void);
32115
extern rtx sh_find_equiv_gbr_addr (rtx cur_insn, rtx mem);
32116
extern int sh_eval_treg_value (rtx op);
32117
+extern HOST_WIDE_INT sh_disp_addr_displacement (rtx mem_op);
32118
+extern int sh_max_mov_insn_displacement (machine_mode mode, bool consider_sh2a);
32120
/* Result value of sh_find_set_of_reg. */
32122
Index: gcc/config/sh/sh.c
32123
===================================================================
32124
--- a/src/gcc/config/sh/sh.c (.../tags/gcc_4_8_2_release)
32125
+++ b/src/gcc/config/sh/sh.c (.../branches/gcc-4_8-branch)
32126
@@ -310,9 +310,7 @@
32127
static void sh_conditional_register_usage (void);
32128
static bool sh_legitimate_constant_p (enum machine_mode, rtx);
32129
static int mov_insn_size (enum machine_mode, bool);
32130
-static int max_mov_insn_displacement (enum machine_mode, bool);
32131
static int mov_insn_alignment_mask (enum machine_mode, bool);
32132
-static HOST_WIDE_INT disp_addr_displacement (rtx);
32133
static bool sequence_insn_p (rtx);
32134
static void sh_canonicalize_comparison (int *, rtx *, rtx *, bool);
32135
static void sh_canonicalize_comparison (enum rtx_code&, rtx&, rtx&,
32136
@@ -3628,8 +3626,8 @@
32138
/* Determine the maximum possible displacement for a move insn for the
32141
-max_mov_insn_displacement (enum machine_mode mode, bool consider_sh2a)
32143
+sh_max_mov_insn_displacement (machine_mode mode, bool consider_sh2a)
32145
/* The 4 byte displacement move insns are the same as the 2 byte
32146
versions but take a 12 bit displacement. All we need to do is to
32147
@@ -3665,8 +3663,8 @@
32150
/* Return the displacement value of a displacement address. */
32151
-static inline HOST_WIDE_INT
32152
-disp_addr_displacement (rtx x)
32154
+sh_disp_addr_displacement (rtx x)
32156
gcc_assert (satisfies_constraint_Sdd (x));
32157
return INTVAL (XEXP (XEXP (x, 0), 1));
32158
@@ -3703,12 +3701,12 @@
32159
HImode and QImode loads/stores with displacement put pressure on
32160
R0 which will most likely require another reg copy. Thus account
32161
a higher cost for that. */
32162
- if (offset > 0 && offset <= max_mov_insn_displacement (mode, false))
32163
+ if (offset > 0 && offset <= sh_max_mov_insn_displacement (mode, false))
32164
return (mode == HImode || mode == QImode) ? 2 : 1;
32166
/* The displacement would fit into a 4 byte move insn (SH2A). */
32168
- && offset > 0 && offset <= max_mov_insn_displacement (mode, true))
32169
+ && offset > 0 && offset <= sh_max_mov_insn_displacement (mode, true))
32172
/* The displacement is probably out of range and will require extra
32173
@@ -10218,7 +10216,7 @@
32176
const HOST_WIDE_INT offset = INTVAL (op);
32177
- const int max_disp = max_mov_insn_displacement (mode, consider_sh2a);
32178
+ const int max_disp = sh_max_mov_insn_displacement (mode, consider_sh2a);
32179
const int align_mask = mov_insn_alignment_mask (mode, consider_sh2a);
32181
/* If the mode does not support any displacement always return false.
32182
@@ -10404,7 +10402,7 @@
32183
effectively disable the small displacement insns. */
32184
const int mode_sz = GET_MODE_SIZE (mode);
32185
const int mov_insn_sz = mov_insn_size (mode, false);
32186
- const int max_disp = max_mov_insn_displacement (mode, false);
32187
+ const int max_disp = sh_max_mov_insn_displacement (mode, false);
32188
const int max_disp_next = max_disp + mov_insn_sz;
32189
HOST_WIDE_INT align_modifier = offset > 127 ? mov_insn_sz : 0;
32190
HOST_WIDE_INT offset_adjust;
32191
@@ -13165,7 +13163,8 @@
32192
the insns must have the appropriate alternatives. */
32193
if ((mode == QImode || mode == HImode) && rclass != R0_REGS
32194
&& satisfies_constraint_Sdd (x)
32195
- && disp_addr_displacement (x) <= max_mov_insn_displacement (mode, false))
32196
+ && sh_disp_addr_displacement (x)
32197
+ <= sh_max_mov_insn_displacement (mode, false))
32200
/* When reload is trying to address a QImode or HImode subreg on the stack,
32201
Index: gcc/config/sh/constraints.md
32202
===================================================================
32203
--- a/src/gcc/config/sh/constraints.md (.../tags/gcc_4_8_2_release)
32204
+++ b/src/gcc/config/sh/constraints.md (.../branches/gcc-4_8-branch)
32205
@@ -221,6 +221,7 @@
32206
(define_constraint "Q"
32207
"A pc relative load operand."
32208
(and (match_code "mem")
32209
+ (match_test "GET_MODE (op) != QImode")
32210
(match_test "IS_PC_RELATIVE_LOAD_ADDR_P (XEXP (op, 0))")))
32212
(define_constraint "Bsc"
32213
@@ -295,13 +296,15 @@
32215
(define_memory_constraint "Sdd"
32216
"A memory reference that uses displacement addressing."
32217
- (and (match_test "MEM_P (op) && GET_CODE (XEXP (op, 0)) == PLUS")
32218
+ (and (match_code "mem")
32219
+ (match_test "GET_CODE (XEXP (op, 0)) == PLUS")
32220
(match_test "REG_P (XEXP (XEXP (op, 0), 0))")
32221
(match_test "CONST_INT_P (XEXP (XEXP (op, 0), 1))")))
32223
(define_memory_constraint "Snd"
32224
"A memory reference that excludes displacement addressing."
32225
- (match_test "! satisfies_constraint_Sdd (op)"))
32226
+ (and (match_code "mem")
32227
+ (match_test "! satisfies_constraint_Sdd (op)")))
32229
(define_memory_constraint "Sbv"
32230
"A memory reference, as used in SH2A bclr.b, bset.b, etc."
32231
Index: gcc/config/sh/sh.md
32232
===================================================================
32233
--- a/src/gcc/config/sh/sh.md (.../tags/gcc_4_8_2_release)
32234
+++ b/src/gcc/config/sh/sh.md (.../branches/gcc-4_8-branch)
32235
@@ -6831,34 +6831,9 @@
32236
prepare_move_operands (operands, QImode);
32239
-;; If movqi_reg_reg is specified as an alternative of movqi, movqi will be
32240
-;; selected to copy QImode regs. If one of them happens to be allocated
32241
-;; on the stack, reload will stick to movqi insn and generate wrong
32242
-;; displacement addressing because of the generic m alternatives.
32243
-;; With the movqi_reg_reg being specified before movqi it will be initially
32244
-;; picked to load/store regs. If the regs regs are on the stack reload
32245
-;; try other insns and not stick to movqi_reg_reg, unless there were spilled
32246
-;; pseudos in which case 'm' constraints pertain.
32247
-;; The same applies to the movhi variants.
32249
-;; Notice, that T bit is not allowed as a mov src operand here. This is to
32250
-;; avoid things like (set (reg:QI) (subreg:QI (reg:SI T_REG) 0)), which
32251
-;; introduces zero extensions after T bit stores and redundant reg copies.
32253
-;; FIXME: We can't use 'arith_reg_operand' (which disallows T_REG) as a
32254
-;; predicate for the mov src operand because reload will have trouble
32255
-;; reloading MAC subregs otherwise. For that probably special patterns
32256
-;; would be required.
32257
-(define_insn "*mov<mode>_reg_reg"
32258
- [(set (match_operand:QIHI 0 "arith_reg_dest" "=r,m,*z")
32259
- (match_operand:QIHI 1 "register_operand" "r,*z,m"))]
32260
- "TARGET_SH1 && !t_reg_operand (operands[1], VOIDmode)"
32265
- [(set_attr "type" "move,store,load")])
32267
+;; Specifying the displacement addressing load / store patterns separately
32268
+;; before the generic movqi / movhi pattern allows controlling the order
32269
+;; in which load / store insns are selected in a more fine grained way.
32270
;; FIXME: The non-SH2A and SH2A variants should be combined by adding
32271
;; "enabled" attribute as it is done in other targets.
32272
(define_insn "*mov<mode>_store_mem_disp04"
32273
@@ -6908,38 +6883,44 @@
32274
[(set_attr "type" "load")
32275
(set_attr "length" "2,2,4")])
32277
-;; The m constraints basically allow any kind of addresses to be used with any
32278
-;; source/target register as the other operand. This is not true for
32279
-;; displacement addressing modes on anything but SH2A. That's why the
32280
-;; specialized load/store insns are specified above.
32281
-(define_insn "*movqi"
32282
- [(set (match_operand:QI 0 "general_movdst_operand" "=r,r,m,r,l")
32283
- (match_operand:QI 1 "general_movsrc_operand" "i,m,r,l,r"))]
32284
+;; The order of the constraint alternatives is important here.
32285
+;; Q/r has to come first, otherwise PC relative loads might wrongly get
32286
+;; placed into delay slots. Since there is no QImode PC relative load, the
32287
+;; Q constraint and general_movsrc_operand will reject it for QImode.
32288
+;; The Snd alternatives should come before Sdd in order to avoid a preference
32289
+;; of using r0 als the register operand for addressing modes other than
32290
+;; displacement addressing.
32291
+;; The Sdd alternatives allow only r0 as register operand, even though on
32292
+;; SH2A any register could be allowed by switching to a 32 bit insn.
32293
+;; Generally sticking to the r0 is preferrable, since it generates smaller
32294
+;; code. Obvious r0 reloads can then be eliminated with a peephole on SH2A.
32295
+(define_insn "*mov<mode>"
32296
+ [(set (match_operand:QIHI 0 "general_movdst_operand"
32297
+ "=r,r,r,Snd,r, Sdd,z, r,l")
32298
+ (match_operand:QIHI 1 "general_movsrc_operand"
32299
+ "Q,r,i,r, Snd,z, Sdd,l,r"))]
32301
- && (arith_reg_operand (operands[0], QImode)
32302
- || arith_reg_operand (operands[1], QImode))"
32303
+ && (arith_reg_operand (operands[0], <MODE>mode)
32304
+ || arith_reg_operand (operands[1], <MODE>mode))"
32312
- [(set_attr "type" "movi8,load,store,prget,prset")])
32314
-(define_insn "*movhi"
32315
- [(set (match_operand:HI 0 "general_movdst_operand" "=r,r,r,m,r,l")
32316
- (match_operand:HI 1 "general_movsrc_operand" "Q,i,m,r,l,r"))]
32318
- && (arith_reg_operand (operands[0], HImode)
32319
- || arith_reg_operand (operands[1], HImode))"
32331
- [(set_attr "type" "pcload,movi8,load,store,prget,prset")])
32332
+ [(set_attr "type" "pcload,move,movi8,store,load,store,load,prget,prset")
32333
+ (set (attr "length")
32334
+ (cond [(and (match_operand 0 "displacement_mem_operand")
32335
+ (not (match_operand 0 "short_displacement_mem_operand")))
32337
+ (and (match_operand 1 "displacement_mem_operand")
32338
+ (not (match_operand 1 "short_displacement_mem_operand")))
32340
+ (const_int 2)))])
32342
(define_insn "*movqi_media"
32343
[(set (match_operand:QI 0 "general_movdst_operand" "=r,r,r,m")
32344
@@ -8427,11 +8408,9 @@
32348
- /* It's not safe to go beyond the current basic block after reload. */
32349
set_of_reg s1 = sh_find_set_of_reg (tested_reg, s0.insn,
32351
- ? prev_nonnote_insn_bb
32352
- : prev_nonnote_insn);
32353
+ prev_nonnote_insn);
32355
if (s1.set_src == NULL_RTX)
32358
@@ -8449,15 +8428,25 @@
32362
- /* It's only safe to remove the testing insn if the T bit is not
32363
- modified between the testing insn and the insn that stores the
32364
- T bit. Notice that some T bit stores such as negc also modify
32366
- if (modified_between_p (get_t_reg_rtx (), s1.insn, testing_insn)
32367
- || modified_in_p (get_t_reg_rtx (), s1.insn))
32368
- operands[2] = NULL_RTX;
32369
+ /* It's only safe to remove the testing insn if the T bit is not
32370
+ modified between the testing insn and the insn that stores the
32371
+ T bit. Notice that some T bit stores such as negc also modify
32373
+ if (modified_between_p (get_t_reg_rtx (), s1.insn, testing_insn)
32374
+ || modified_in_p (get_t_reg_rtx (), s1.insn)
32375
+ || !no_labels_between_p (s1.insn, testing_insn))
32376
+ operands[2] = NULL_RTX;
32379
+ /* If the insn that sets the tested reg has a REG_DEAD note on
32380
+ the T bit remove that note since we're extending the usage
32382
+ rtx n = find_regno_note (s1.insn, REG_DEAD, T_REG);
32383
+ if (n != NULL_RTX)
32384
+ remove_note (s1.insn, n);
32391
if (operands[2] == NULL_RTX)
32392
Index: gcc/config/sh/sh.opt
32393
===================================================================
32394
--- a/src/gcc/config/sh/sh.opt (.../tags/gcc_4_8_2_release)
32395
+++ b/src/gcc/config/sh/sh.opt (.../branches/gcc-4_8-branch)
32397
;; Used for various architecture options.
32400
-;; Set if the default precision of th FPU is single.
32401
+;; Set if the default precision of the FPU is single.
32404
;; Set if the a double-precision FPU is present but is restricted to
32405
Index: gcc/config/microblaze/predicates.md
32406
===================================================================
32407
--- a/src/gcc/config/microblaze/predicates.md (.../tags/gcc_4_8_2_release)
32408
+++ b/src/gcc/config/microblaze/predicates.md (.../branches/gcc-4_8-branch)
32410
(ior (match_operand 0 "const_0_operand")
32411
(match_operand 0 "register_operand")))
32413
+(define_predicate "reg_or_mem_operand"
32414
+ (ior (match_operand 0 "memory_operand")
32415
+ (match_operand 0 "register_operand")))
32417
;; Return if the operand is either the PC or a label_ref.
32418
(define_special_predicate "pc_or_label_operand"
32419
(ior (match_code "pc,label_ref")
32420
@@ -119,3 +123,7 @@
32421
;; Test for valid PIC call operand
32422
(define_predicate "call_insn_plt_operand"
32423
(match_test "PLT_ADDR_P (op)"))
32425
+;; Return if the code of this rtx pattern is a comparison.
32426
+(define_predicate "cmp_op"
32427
+ (match_code "gt,ge,gtu,geu,lt,le,ltu,leu"))
32428
Index: gcc/config/microblaze/microblaze.md
32429
===================================================================
32430
--- a/src/gcc/config/microblaze/microblaze.md (.../tags/gcc_4_8_2_release)
32431
+++ b/src/gcc/config/microblaze/microblaze.md (.../branches/gcc-4_8-branch)
32433
;; bshift Shift operations
32435
(define_attr "type"
32436
- "unknown,branch,jump,call,load,store,move,arith,darith,imul,idiv,icmp,multi,nop,no_delay_arith,no_delay_load,no_delay_store,no_delay_imul,no_delay_move,bshift,fadd,frsub,fmul,fdiv,fcmp,fsl,fsqrt,fcvt"
32437
+ "unknown,branch,jump,call,load,store,move,arith,darith,imul,idiv,icmp,multi,nop,no_delay_arith,no_delay_load,no_delay_store,no_delay_imul,no_delay_move,bshift,fadd,frsub,fmul,fdiv,fcmp,fsl,fsqrt,fcvt,trap"
32438
(const_string "unknown"))
32440
;; Main data type used by the insn
32441
@@ -365,7 +365,8 @@
32442
[(set (match_operand:HI 0 "register_operand" "=r")
32443
(bswap:HI (match_operand:HI 1 "register_operand" "r")))]
32450
;;----------------------------------------------------------------
32451
@@ -1118,6 +1119,18 @@
32455
+;;Load and store reverse
32456
+(define_insn "movsi4_rev"
32457
+ [(set (match_operand:SI 0 "reg_or_mem_operand" "=r,Q")
32458
+ (bswap:SI (match_operand:SF 1 "reg_or_mem_operand" "Q,r")))]
32463
+ [(set_attr "type" "load,store")
32464
+ (set_attr "mode" "SI")
32465
+ (set_attr "length" "4,4")])
32467
;; 32-bit floating point moves
32469
(define_expand "movsf"
32470
@@ -1472,7 +1485,7 @@
32471
(set_attr "length" "124")]
32474
-(define_insn "*ashlri_reg"
32475
+(define_insn "*ashrsi_reg"
32476
[(set (match_operand:SI 0 "register_operand" "=&d")
32477
(ashiftrt:SI (match_operand:SI 1 "register_operand" "d")
32478
(match_operand:SI 2 "register_operand" "d")))]
32479
@@ -1561,7 +1574,7 @@
32480
(set_attr "length" "124")]
32483
-(define_insn "*lshlri_reg"
32484
+(define_insn "*lshrsi_reg"
32485
[(set (match_operand:SI 0 "register_operand" "=&d")
32486
(lshiftrt:SI (match_operand:SI 1 "register_operand" "d")
32487
(match_operand:SI 2 "register_operand" "d")))]
32488
@@ -1622,34 +1635,12 @@
32489
(set_attr "length" "4")]
32492
-(define_insn "signed_compare"
32493
- [(set (match_operand:SI 0 "register_operand" "=d")
32495
- [(match_operand:SI 1 "register_operand" "d")
32496
- (match_operand:SI 2 "register_operand" "d")] UNSPEC_CMP))]
32499
- [(set_attr "type" "arith")
32500
- (set_attr "mode" "SI")
32501
- (set_attr "length" "4")])
32503
-(define_insn "unsigned_compare"
32504
- [(set (match_operand:SI 0 "register_operand" "=d")
32506
- [(match_operand:SI 1 "register_operand" "d")
32507
- (match_operand:SI 2 "register_operand" "d")] UNSPEC_CMPU))]
32510
- [(set_attr "type" "arith")
32511
- (set_attr "mode" "SI")
32512
- (set_attr "length" "4")])
32514
;;----------------------------------------------------------------
32515
;; Setting a register from an floating point comparison.
32516
;;----------------------------------------------------------------
32517
(define_insn "cstoresf4"
32518
[(set (match_operand:SI 0 "register_operand" "=r")
32519
- (match_operator 1 "comparison_operator"
32520
+ (match_operator:SI 1 "ordered_comparison_operator"
32521
[(match_operand:SF 2 "register_operand" "r")
32522
(match_operand:SF 3 "register_operand" "r")]))]
32523
"TARGET_HARD_FLOAT"
32524
@@ -1678,7 +1669,7 @@
32526
(define_expand "cbranchsf4"
32528
- (if_then_else (match_operator 0 "comparison_operator"
32529
+ (if_then_else (match_operator 0 "ordered_comparison_operator"
32530
[(match_operand:SF 1 "register_operand")
32531
(match_operand:SF 2 "register_operand")])
32532
(label_ref (match_operand 3 ""))
32533
@@ -1717,6 +1708,47 @@
32534
(set_attr "length" "4")]
32537
+(define_insn "branch_compare"
32539
+ (if_then_else (match_operator:SI 0 "cmp_op"
32540
+ [(match_operand:SI 1 "register_operand" "d")
32541
+ (match_operand:SI 2 "register_operand" "d")
32543
+ (label_ref (match_operand 3))
32545
+ (clobber(reg:SI R_TMP))]
32548
+ operands[4] = gen_rtx_REG (SImode, MB_ABI_ASM_TEMP_REGNUM);
32549
+ enum rtx_code code = GET_CODE (operands[0]);
32551
+ if (code == GT || code == LE)
32553
+ output_asm_insn ("cmp\tr18,%z1,%z2", operands);
32554
+ code = swap_condition (code);
32556
+ else if (code == GTU || code == LEU)
32558
+ output_asm_insn ("cmpu\tr18,%z1,%z2", operands);
32559
+ code = swap_condition (code);
32561
+ else if (code == GE || code == LT)
32563
+ output_asm_insn ("cmp\tr18,%z2,%z1", operands);
32565
+ else if (code == GEU || code == LTU)
32567
+ output_asm_insn ("cmpu\tr18,%z2,%z1", operands);
32570
+ operands[0] = gen_rtx_fmt_ee (signed_condition (code), SImode, operands[4], const0_rtx);
32571
+ return "b%C0i%?\tr18,%3";
32573
+ [(set_attr "type" "branch")
32574
+ (set_attr "mode" "none")
32575
+ (set_attr "length" "12")]
32578
;;----------------------------------------------------------------
32579
;; Unconditional branches
32580
;;----------------------------------------------------------------
32581
@@ -2201,6 +2233,14 @@
32582
(set_attr "mode" "none")
32583
(set_attr "length" "4")])
32585
+;; Trap instruction pattern for __builtin_trap. Same as the glibc ABORT_INSTRUCTION
32586
+(define_insn "trap"
32587
+ [(trap_if (const_int 1) (const_int 0))]
32590
+ [(set_attr "type" "trap")]
32593
;; The insn to set GOT. The hardcoded number "8" accounts for $pc difference
32594
;; between "mfs" and "addik" instructions.
32595
(define_insn "set_got"
32596
Index: gcc/config/microblaze/microblaze.c
32597
===================================================================
32598
--- a/src/gcc/config/microblaze/microblaze.c (.../tags/gcc_4_8_2_release)
32599
+++ b/src/gcc/config/microblaze/microblaze.c (.../branches/gcc-4_8-branch)
32600
@@ -1609,21 +1609,28 @@
32601
microblaze_version_to_int (const char *version)
32604
- const char *tmpl = "vX.YY.Z";
32605
+ const char *tmpl = "vXX.YY.Z";
32615
{ /* Looking for major */
32616
- if (!(*p >= '0' && *p <= '9'))
32618
- iver += (int) (*p - '0');
32627
+ if (!(*p >= '0' && *p <= '9'))
32629
+ iver += (int) (*p - '0');
32633
else if (*v == 'Y')
32634
{ /* Looking for minor */
32635
if (!(*p >= '0' && *p <= '9'))
32636
@@ -3064,6 +3071,73 @@
32641
+microblaze_asm_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
32642
+ HOST_WIDE_INT delta, HOST_WIDE_INT vcall_offset,
32645
+ rtx this_rtx, insn, funexp;
32647
+ reload_completed = 1;
32648
+ epilogue_completed = 1;
32650
+ /* Mark the end of the (empty) prologue. */
32651
+ emit_note (NOTE_INSN_PROLOGUE_END);
32653
+ /* Find the "this" pointer. If the function returns a structure,
32654
+ the structure return pointer is in MB_ABI_FIRST_ARG_REGNUM. */
32655
+ if (aggregate_value_p (TREE_TYPE (TREE_TYPE (function)), function))
32656
+ this_rtx = gen_rtx_REG (Pmode, (MB_ABI_FIRST_ARG_REGNUM + 1));
32658
+ this_rtx = gen_rtx_REG (Pmode, MB_ABI_FIRST_ARG_REGNUM);
32660
+ /* Apply the constant offset, if required. */
32662
+ emit_insn (gen_addsi3 (this_rtx, this_rtx, GEN_INT (delta)));
32664
+ /* Apply the offset from the vtable, if required. */
32665
+ if (vcall_offset)
32667
+ rtx vcall_offset_rtx = GEN_INT (vcall_offset);
32668
+ rtx temp1 = gen_rtx_REG (Pmode, MB_ABI_TEMP1_REGNUM);
32670
+ emit_move_insn (temp1, gen_rtx_MEM (Pmode, this_rtx));
32672
+ rtx loc = gen_rtx_PLUS (Pmode, temp1, vcall_offset_rtx);
32673
+ emit_move_insn (temp1, gen_rtx_MEM (Pmode, loc));
32675
+ emit_insn (gen_addsi3 (this_rtx, this_rtx, temp1));
32678
+ /* Generate a tail call to the target function. */
32679
+ if (!TREE_USED (function))
32681
+ assemble_external (function);
32682
+ TREE_USED (function) = 1;
32685
+ funexp = XEXP (DECL_RTL (function), 0);
32686
+ rtx temp2 = gen_rtx_REG (Pmode, MB_ABI_TEMP2_REGNUM);
32689
+ emit_move_insn (temp2, expand_pic_symbol_ref (Pmode, funexp));
32691
+ emit_move_insn (temp2, funexp);
32693
+ emit_insn (gen_indirect_jump (temp2));
32695
+ /* Run just enough of rest_of_compilation. This sequence was
32696
+ "borrowed" from rs6000.c. */
32697
+ insn = get_insns ();
32698
+ shorten_branches (insn);
32699
+ final_start_function (insn, file, 1);
32700
+ final (insn, file, 1);
32701
+ final_end_function ();
32703
+ reload_completed = 0;
32704
+ epilogue_completed = 0;
32708
microblaze_expand_move (enum machine_mode mode, rtx operands[])
32710
@@ -3234,67 +3308,47 @@
32711
emit_move_insn (mem, fnaddr);
32714
-/* Emit instruction to perform compare.
32715
- cmp is (compare_op op0 op1). */
32717
-microblaze_emit_compare (enum machine_mode mode, rtx cmp, enum rtx_code *cmp_code)
32718
+/* Generate conditional branch -- first, generate test condition,
32719
+ second, generate correct branch instruction. */
32722
+microblaze_expand_conditional_branch (enum machine_mode mode, rtx operands[])
32724
- rtx cmp_op0 = XEXP (cmp, 0);
32725
- rtx cmp_op1 = XEXP (cmp, 1);
32726
+ enum rtx_code code = GET_CODE (operands[0]);
32727
+ rtx cmp_op0 = operands[1];
32728
+ rtx cmp_op1 = operands[2];
32729
+ rtx label1 = operands[3];
32730
rtx comp_reg = gen_reg_rtx (SImode);
32731
- enum rtx_code code = *cmp_code;
32735
gcc_assert ((GET_CODE (cmp_op0) == REG) || (GET_CODE (cmp_op0) == SUBREG));
32737
/* If comparing against zero, just test source reg. */
32738
- if (cmp_op1 == const0_rtx)
32740
+ if (cmp_op1 == const0_rtx)
32742
+ comp_reg = cmp_op0;
32743
+ condition = gen_rtx_fmt_ee (signed_condition (code), SImode, comp_reg, const0_rtx);
32744
+ emit_jump_insn (gen_condjump (condition, label1));
32747
- if (code == EQ || code == NE)
32748
+ else if (code == EQ || code == NE)
32750
/* Use xor for equal/not-equal comparison. */
32751
emit_insn (gen_xorsi3 (comp_reg, cmp_op0, cmp_op1));
32752
+ condition = gen_rtx_fmt_ee (signed_condition (code), SImode, comp_reg, const0_rtx);
32753
+ emit_jump_insn (gen_condjump (condition, label1));
32755
- else if (code == GT || code == GTU || code == LE || code == LEU)
32758
- /* MicroBlaze compare is not symmetrical. */
32759
- /* Swap argument order. */
32760
+ /* Generate compare and branch in single instruction. */
32761
cmp_op1 = force_reg (mode, cmp_op1);
32762
- if (code == GT || code == LE)
32763
- emit_insn (gen_signed_compare (comp_reg, cmp_op0, cmp_op1));
32765
- emit_insn (gen_unsigned_compare (comp_reg, cmp_op0, cmp_op1));
32766
- /* Translate test condition. */
32767
- *cmp_code = swap_condition (code);
32768
+ condition = gen_rtx_fmt_ee (code, mode, cmp_op0, cmp_op1);
32769
+ emit_jump_insn (gen_branch_compare(condition, cmp_op0, cmp_op1, label1));
32771
- else /* if (code == GE || code == GEU || code == LT || code == LTU) */
32773
- cmp_op1 = force_reg (mode, cmp_op1);
32774
- if (code == GE || code == LT)
32775
- emit_insn (gen_signed_compare (comp_reg, cmp_op1, cmp_op0));
32777
- emit_insn (gen_unsigned_compare (comp_reg, cmp_op1, cmp_op0));
32783
-/* Generate conditional branch -- first, generate test condition,
32784
- second, generate correct branch instruction. */
32787
-microblaze_expand_conditional_branch (enum machine_mode mode, rtx operands[])
32789
- enum rtx_code code = GET_CODE (operands[0]);
32793
- comp = microblaze_emit_compare (mode, operands[0], &code);
32794
- condition = gen_rtx_fmt_ee (signed_condition (code), SImode, comp, const0_rtx);
32795
- emit_jump_insn (gen_condjump (condition, operands[3]));
32799
microblaze_expand_conditional_branch_sf (rtx operands[])
32802
@@ -3501,6 +3555,12 @@
32803
#undef TARGET_SECONDARY_RELOAD
32804
#define TARGET_SECONDARY_RELOAD microblaze_secondary_reload
32806
+#undef TARGET_ASM_OUTPUT_MI_THUNK
32807
+#define TARGET_ASM_OUTPUT_MI_THUNK microblaze_asm_output_mi_thunk
32809
+#undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
32810
+#define TARGET_ASM_CAN_OUTPUT_MI_THUNK hook_bool_const_tree_hwi_hwi_const_tree_true
32812
#undef TARGET_SCHED_ADJUST_COST
32813
#define TARGET_SCHED_ADJUST_COST microblaze_adjust_cost
32815
Index: gcc/config/microblaze/microblaze.h
32816
===================================================================
32817
--- a/src/gcc/config/microblaze/microblaze.h (.../tags/gcc_4_8_2_release)
32818
+++ b/src/gcc/config/microblaze/microblaze.h (.../branches/gcc-4_8-branch)
32819
@@ -213,6 +213,12 @@
32820
#define STRICT_ALIGNMENT 1
32821
#define PCC_BITFIELD_TYPE_MATTERS 1
32824
+#define SIZE_TYPE "unsigned int"
32826
+#undef PTRDIFF_TYPE
32827
+#define PTRDIFF_TYPE "int"
32829
#define CONSTANT_ALIGNMENT(EXP, ALIGN) \
32830
((TREE_CODE (EXP) == STRING_CST || TREE_CODE (EXP) == CONSTRUCTOR) \
32831
&& (ALIGN) < BITS_PER_WORD \
32832
@@ -407,9 +413,6 @@
32833
|| GET_MODE (X) == VOIDmode) \
32834
? (GR_REGS) : (CLASS))))
32836
-#define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) \
32837
- (GET_MODE_CLASS (MODE) == MODE_INT)
32839
/* Stack layout; function entry, exit and calling. */
32841
#define STACK_GROWS_DOWNWARD
32842
Index: gcc/config/avr/avr.c
32843
===================================================================
32844
--- a/src/gcc/config/avr/avr.c (.../tags/gcc_4_8_2_release)
32845
+++ b/src/gcc/config/avr/avr.c (.../branches/gcc-4_8-branch)
32846
@@ -587,10 +587,14 @@
32849
name = DECL_ASSEMBLER_NAME_SET_P (decl)
32850
- /* Remove the leading '*' added in set_user_assembler_name. */
32851
- ? 1 + IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))
32852
+ ? IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))
32853
: IDENTIFIER_POINTER (DECL_NAME (decl));
32855
+ /* Skip a leading '*' that might still prefix the assembler name,
32856
+ e.g. in non-LTO runs. */
32858
+ name = default_strip_name_encoding (name);
32860
/* Silently ignore 'signal' if 'interrupt' is present. AVR-LibC startet
32861
using this when it switched from SIGNAL and INTERRUPT to ISR. */
32863
@@ -6806,8 +6810,8 @@
32865
/* Work out the shortest sequence. */
32867
- avr_out_plus_1 (op, &len_minus, MINUS, &cc_plus, code_sat, sign, out_label);
32868
- avr_out_plus_1 (op, &len_plus, PLUS, &cc_minus, code_sat, sign, out_label);
32869
+ avr_out_plus_1 (op, &len_minus, MINUS, &cc_minus, code_sat, sign, out_label);
32870
+ avr_out_plus_1 (op, &len_plus, PLUS, &cc_plus, code_sat, sign, out_label);
32874
Index: gcc/config/cris/cris.md
32875
===================================================================
32876
--- a/src/gcc/config/cris/cris.md (.../tags/gcc_4_8_2_release)
32877
+++ b/src/gcc/config/cris/cris.md (.../branches/gcc-4_8-branch)
32878
@@ -758,7 +758,7 @@
32879
(match_operand:SI 1 "const_int_operand" ""))
32880
(match_operand:SI 2 "register_operand" ""))])
32881
(match_operand 3 "register_operand" ""))
32882
- (set (match_operand:SI 4 "register_operand" "")
32883
+ (set (match_operand:SI 4 "cris_nonsp_register_operand" "")
32884
(plus:SI (mult:SI (match_dup 0)
32887
@@ -859,7 +859,7 @@
32888
(match_operand:SI 0 "cris_bdap_operand" "")
32889
(match_operand:SI 1 "cris_bdap_operand" ""))])
32890
(match_operand 2 "register_operand" ""))
32891
- (set (match_operand:SI 3 "register_operand" "")
32892
+ (set (match_operand:SI 3 "cris_nonsp_register_operand" "")
32893
(plus:SI (match_dup 0) (match_dup 1)))])]
32894
"reload_completed && reg_overlap_mentioned_p (operands[3], operands[2])"
32895
[(set (match_dup 4) (match_dup 2))
32896
@@ -3960,7 +3960,7 @@
32900
- [(set (match_operand 0 "register_operand" "")
32901
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
32903
4 "cris_operand_extend_operator"
32904
[(match_operand 1 "register_operand" "")
32905
@@ -3990,7 +3990,7 @@
32906
;; Call this op-extend-split-rx=rz
32909
- [(set (match_operand 0 "register_operand" "")
32910
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
32912
4 "cris_plus_or_bound_operator"
32913
[(match_operand 1 "register_operand" "")
32914
@@ -4018,7 +4018,7 @@
32915
;; Call this op-extend-split-swapped
32918
- [(set (match_operand 0 "register_operand" "")
32919
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
32921
4 "cris_plus_or_bound_operator"
32923
@@ -4044,7 +4044,7 @@
32924
;; bound. Call this op-extend-split-swapped-rx=rz.
32927
- [(set (match_operand 0 "register_operand" "")
32928
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
32930
4 "cris_plus_or_bound_operator"
32932
@@ -4075,7 +4075,7 @@
32933
;; Call this op-extend.
32936
- [(set (match_operand 0 "register_operand" "")
32937
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
32939
3 "cris_orthogonal_operator"
32940
[(match_operand 1 "register_operand" "")
32941
@@ -4099,7 +4099,7 @@
32942
;; Call this op-split-rx=rz
32945
- [(set (match_operand 0 "register_operand" "")
32946
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
32948
3 "cris_commutative_orth_op"
32949
[(match_operand 2 "memory_operand" "")
32950
@@ -4123,7 +4123,7 @@
32951
;; Call this op-split-swapped.
32954
- [(set (match_operand 0 "register_operand" "")
32955
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
32957
3 "cris_commutative_orth_op"
32958
[(match_operand 1 "register_operand" "")
32959
@@ -4146,7 +4146,7 @@
32960
;; Call this op-split-swapped-rx=rz.
32963
- [(set (match_operand 0 "register_operand" "")
32964
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
32966
3 "cris_orthogonal_operator"
32967
[(match_operand 2 "memory_operand" "")
32968
@@ -4555,10 +4555,11 @@
32969
;; We're not allowed to generate copies of registers with different mode
32970
;; until after reload; copying pseudos upsets reload. CVS as of
32971
;; 2001-08-24, unwind-dw2-fde.c, _Unwind_Find_FDE ICE in
32972
-;; cselib_invalidate_regno.
32973
+;; cselib_invalidate_regno. Also, don't do this for the stack-pointer,
32974
+;; as we don't want it set temporarily to an invalid value.
32976
(define_split ; indir_to_reg_split
32977
- [(set (match_operand 0 "register_operand" "")
32978
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
32979
(match_operand 1 "indirect_operand" ""))]
32981
&& REG_P (operands[0])
32982
@@ -4574,7 +4575,7 @@
32983
;; As the above, but MOVS and MOVU.
32986
- [(set (match_operand 0 "register_operand" "")
32987
+ [(set (match_operand 0 "cris_nonsp_register_operand" "")
32989
4 "cris_extend_operator"
32990
[(match_operand 1 "indirect_operand" "")]))]
32991
Index: gcc/config/cris/predicates.md
32992
===================================================================
32993
--- a/src/gcc/config/cris/predicates.md (.../tags/gcc_4_8_2_release)
32994
+++ b/src/gcc/config/cris/predicates.md (.../branches/gcc-4_8-branch)
32996
(match_test "cris_simple_address_operand (XEXP (op, 0),
32999
+(define_predicate "cris_nonsp_register_operand"
33000
+ (and (match_operand 0 "register_operand")
33001
+ (match_test "op != stack_pointer_rtx")))
33003
;; The caller needs to use :SI.
33004
(define_predicate "cris_bdap_sign_extend_operand"
33005
; Disabled until <URL:http://gcc.gnu.org/ml/gcc-patches/2005-10/msg01376.html>
33006
Index: gcc/config/m68k/m68k.c
33007
===================================================================
33008
--- a/src/gcc/config/m68k/m68k.c (.../tags/gcc_4_8_2_release)
33009
+++ b/src/gcc/config/m68k/m68k.c (.../branches/gcc-4_8-branch)
33010
@@ -3325,12 +3325,12 @@
33011
latehalf[1] = adjust_address (operands[1], SImode, 0);
33014
- /* If insn is effectively movd N(sp),-(sp) then we will do the
33015
- high word first. We should use the adjusted operand 1 (which is N+4(sp))
33016
- for the low word as well, to compensate for the first decrement of sp. */
33017
+ /* If insn is effectively movd N(REG),-(REG) then we will do the high
33018
+ word first. We should use the adjusted operand 1 (which is N+4(REG))
33019
+ for the low word as well, to compensate for the first decrement of
33021
if (optype0 == PUSHOP
33022
- && REGNO (XEXP (XEXP (operands[0], 0), 0)) == STACK_POINTER_REGNUM
33023
- && reg_overlap_mentioned_p (stack_pointer_rtx, operands[1]))
33024
+ && reg_overlap_mentioned_p (XEXP (XEXP (operands[0], 0), 0), operands[1]))
33025
operands[1] = middlehalf[1] = latehalf[1];
33027
/* For (set (reg:DI N) (mem:DI ... (reg:SI N) ...)),
33028
Index: gcc/config/aarch64/aarch64-simd.md
33029
===================================================================
33030
--- a/src/gcc/config/aarch64/aarch64-simd.md (.../tags/gcc_4_8_2_release)
33031
+++ b/src/gcc/config/aarch64/aarch64-simd.md (.../branches/gcc-4_8-branch)
33034
; Main data types used by the insntructions
33036
-(define_attr "simd_mode" "unknown,none,V8QI,V16QI,V4HI,V8HI,V2SI,V4SI,V2DI,V2SF,V4SF,V2DF,OI,CI,XI,DI,DF,SI,HI,QI"
33037
+(define_attr "simd_mode" "unknown,none,V8QI,V16QI,V4HI,V8HI,V2SI,V4SI,V2DI,V2SF,V4SF,V2DF,OI,CI,XI,DI,DF,SI,SF,HI,QI"
33038
(const_string "unknown"))
33041
@@ -1548,12 +1548,12 @@
33045
- emit_insn (gen_aarch64_cmhs<mode> (mask, operands[4], operands[5]));
33046
+ emit_insn (gen_aarch64_cmgeu<mode> (mask, operands[4], operands[5]));
33051
- emit_insn (gen_aarch64_cmhi<mode> (mask, operands[4], operands[5]));
33052
+ emit_insn (gen_aarch64_cmgtu<mode> (mask, operands[4], operands[5]));
33056
@@ -3034,48 +3034,181 @@
33060
-;; cm(eq|ge|le|lt|gt)
33061
+;; cm(eq|ge|gt|lt|le)
33062
+;; Note, we have constraints for Dz and Z as different expanders
33063
+;; have different ideas of what should be passed to this pattern.
33065
-(define_insn "aarch64_cm<cmp><mode>"
33066
+(define_insn "aarch64_cm<optab><mode>"
33067
[(set (match_operand:<V_cmp_result> 0 "register_operand" "=w,w")
33068
- (unspec:<V_cmp_result>
33069
- [(match_operand:VSDQ_I_DI 1 "register_operand" "w,w")
33070
- (match_operand:VSDQ_I_DI 2 "aarch64_simd_reg_or_zero" "w,Z")]
33072
+ (neg:<V_cmp_result>
33073
+ (COMPARISONS:<V_cmp_result>
33074
+ (match_operand:VDQ 1 "register_operand" "w,w")
33075
+ (match_operand:VDQ 2 "aarch64_simd_reg_or_zero" "w,ZDz")
33079
- cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>
33080
- cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, #0"
33081
+ cm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>
33082
+ cm<optab>\t%<v>0<Vmtype>, %<v>1<Vmtype>, #0"
33083
[(set_attr "simd_type" "simd_cmp")
33084
(set_attr "simd_mode" "<MODE>")]
33088
+(define_insn_and_split "aarch64_cm<optab>di"
33089
+ [(set (match_operand:DI 0 "register_operand" "=w,w,r")
33092
+ (match_operand:DI 1 "register_operand" "w,w,r")
33093
+ (match_operand:DI 2 "aarch64_simd_reg_or_zero" "w,ZDz,r")
33097
+ cm<n_optab>\t%d0, %d<cmp_1>, %d<cmp_2>
33098
+ cm<optab>\t%d0, %d1, #0
33100
+ "reload_completed
33101
+ /* We need to prevent the split from
33102
+ happening in the 'w' constraint cases. */
33103
+ && GP_REGNUM_P (REGNO (operands[0]))
33104
+ && GP_REGNUM_P (REGNO (operands[1]))"
33105
+ [(set (reg:CC CC_REGNUM)
33109
+ (set (match_dup 0)
33112
+ (match_operand 3 "cc_register" "")
33113
+ (const_int 0))))]
33115
+ enum machine_mode mode = SELECT_CC_MODE (<CMP>, operands[1], operands[2]);
33116
+ rtx cc_reg = aarch64_gen_compare_reg (<CMP>, operands[1], operands[2]);
33117
+ rtx comparison = gen_rtx_<CMP> (mode, operands[1], operands[2]);
33118
+ emit_insn (gen_cstoredi_neg (operands[0], comparison, cc_reg));
33121
+ [(set_attr "simd_type" "simd_cmp")
33122
+ (set_attr "simd_mode" "DI")]
33125
-(define_insn "aarch64_cm<cmp><mode>"
33128
+(define_insn "aarch64_cm<optab><mode>"
33129
[(set (match_operand:<V_cmp_result> 0 "register_operand" "=w")
33130
- (unspec:<V_cmp_result>
33131
- [(match_operand:VSDQ_I_DI 1 "register_operand" "w")
33132
- (match_operand:VSDQ_I_DI 2 "register_operand" "w")]
33134
+ (neg:<V_cmp_result>
33135
+ (UCOMPARISONS:<V_cmp_result>
33136
+ (match_operand:VDQ 1 "register_operand" "w")
33137
+ (match_operand:VDQ 2 "register_operand" "w")
33140
- "cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
33141
+ "cm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>"
33142
[(set_attr "simd_type" "simd_cmp")
33143
(set_attr "simd_mode" "<MODE>")]
33146
-;; fcm(eq|ge|le|lt|gt)
33147
+(define_insn_and_split "aarch64_cm<optab>di"
33148
+ [(set (match_operand:DI 0 "register_operand" "=w,r")
33151
+ (match_operand:DI 1 "register_operand" "w,r")
33152
+ (match_operand:DI 2 "aarch64_simd_reg_or_zero" "w,r")
33156
+ cm<n_optab>\t%d0, %d<cmp_1>, %d<cmp_2>
33158
+ "reload_completed
33159
+ /* We need to prevent the split from
33160
+ happening in the 'w' constraint cases. */
33161
+ && GP_REGNUM_P (REGNO (operands[0]))
33162
+ && GP_REGNUM_P (REGNO (operands[1]))"
33163
+ [(set (reg:CC CC_REGNUM)
33167
+ (set (match_dup 0)
33170
+ (match_operand 3 "cc_register" "")
33171
+ (const_int 0))))]
33173
+ enum machine_mode mode = SELECT_CC_MODE (<CMP>, operands[1], operands[2]);
33174
+ rtx cc_reg = aarch64_gen_compare_reg (<CMP>, operands[1], operands[2]);
33175
+ rtx comparison = gen_rtx_<CMP> (mode, operands[1], operands[2]);
33176
+ emit_insn (gen_cstoredi_neg (operands[0], comparison, cc_reg));
33179
+ [(set_attr "simd_type" "simd_cmp")
33180
+ (set_attr "simd_mode" "DI")]
33183
-(define_insn "aarch64_cm<cmp><mode>"
33186
+(define_insn "aarch64_cmtst<mode>"
33187
+ [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w")
33188
+ (neg:<V_cmp_result>
33189
+ (ne:<V_cmp_result>
33191
+ (match_operand:VDQ 1 "register_operand" "w")
33192
+ (match_operand:VDQ 2 "register_operand" "w"))
33193
+ (vec_duplicate:<V_cmp_result> (const_int 0)))))]
33195
+ "cmtst\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
33196
+ [(set_attr "simd_type" "simd_cmp")
33197
+ (set_attr "simd_mode" "<MODE>")]
33200
+(define_insn_and_split "aarch64_cmtstdi"
33201
+ [(set (match_operand:DI 0 "register_operand" "=w,r")
33205
+ (match_operand:DI 1 "register_operand" "w,r")
33206
+ (match_operand:DI 2 "register_operand" "w,r"))
33207
+ (const_int 0))))]
33210
+ cmtst\t%d0, %d1, %d2
33212
+ "reload_completed
33213
+ /* We need to prevent the split from
33214
+ happening in the 'w' constraint cases. */
33215
+ && GP_REGNUM_P (REGNO (operands[0]))
33216
+ && GP_REGNUM_P (REGNO (operands[1]))"
33217
+ [(set (reg:CC_NZ CC_REGNUM)
33219
+ (and:DI (match_dup 1)
33222
+ (set (match_dup 0)
33225
+ (match_operand 3 "cc_register" "")
33226
+ (const_int 0))))]
33228
+ rtx and_tree = gen_rtx_AND (DImode, operands[1], operands[2]);
33229
+ enum machine_mode mode = SELECT_CC_MODE (NE, and_tree, const0_rtx);
33230
+ rtx cc_reg = aarch64_gen_compare_reg (NE, and_tree, const0_rtx);
33231
+ rtx comparison = gen_rtx_NE (mode, and_tree, const0_rtx);
33232
+ emit_insn (gen_cstoredi_neg (operands[0], comparison, cc_reg));
33235
+ [(set_attr "simd_type" "simd_cmp")
33236
+ (set_attr "simd_mode" "DI")]
33239
+;; fcm(eq|ge|gt|le|lt)
33241
+(define_insn "aarch64_cm<optab><mode>"
33242
[(set (match_operand:<V_cmp_result> 0 "register_operand" "=w,w")
33243
- (unspec:<V_cmp_result>
33244
- [(match_operand:VDQF 1 "register_operand" "w,w")
33245
- (match_operand:VDQF 2 "aarch64_simd_reg_or_zero" "w,Dz")]
33247
+ (neg:<V_cmp_result>
33248
+ (COMPARISONS:<V_cmp_result>
33249
+ (match_operand:VALLF 1 "register_operand" "w,w")
33250
+ (match_operand:VALLF 2 "aarch64_simd_reg_or_zero" "w,YDz")
33254
- fcm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>
33255
- fcm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, 0"
33256
+ fcm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>
33257
+ fcm<optab>\t%<v>0<Vmtype>, %<v>1<Vmtype>, 0"
33258
[(set_attr "simd_type" "simd_fcmp")
33259
(set_attr "simd_mode" "<MODE>")]
33261
Index: gcc/config/aarch64/predicates.md
33262
===================================================================
33263
--- a/src/gcc/config/aarch64/predicates.md (.../tags/gcc_4_8_2_release)
33264
+++ b/src/gcc/config/aarch64/predicates.md (.../branches/gcc-4_8-branch)
33266
(ior (match_operand 0 "register_operand")
33267
(match_test "op == const0_rtx"))))
33269
+(define_predicate "aarch64_reg_or_fp_zero"
33270
+ (and (match_code "reg,subreg,const_double")
33271
+ (ior (match_operand 0 "register_operand")
33272
+ (match_test "aarch64_float_const_zero_rtx_p (op)"))))
33274
(define_predicate "aarch64_reg_zero_or_m1_or_1"
33275
(and (match_code "reg,subreg,const_int")
33276
(ior (match_operand 0 "register_operand")
33277
Index: gcc/config/aarch64/arm_neon.h
33278
===================================================================
33279
--- a/src/gcc/config/aarch64/arm_neon.h (.../tags/gcc_4_8_2_release)
33280
+++ b/src/gcc/config/aarch64/arm_neon.h (.../branches/gcc-4_8-branch)
33281
@@ -19551,7 +19551,7 @@
33282
__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
33283
vcge_u8 (uint8x8_t __a, uint8x8_t __b)
33285
- return (uint8x8_t) __builtin_aarch64_cmhsv8qi ((int8x8_t) __a,
33286
+ return (uint8x8_t) __builtin_aarch64_cmgeuv8qi ((int8x8_t) __a,
33290
@@ -19558,7 +19558,7 @@
33291
__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
33292
vcge_u16 (uint16x4_t __a, uint16x4_t __b)
33294
- return (uint16x4_t) __builtin_aarch64_cmhsv4hi ((int16x4_t) __a,
33295
+ return (uint16x4_t) __builtin_aarch64_cmgeuv4hi ((int16x4_t) __a,
33299
@@ -19565,7 +19565,7 @@
33300
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
33301
vcge_u32 (uint32x2_t __a, uint32x2_t __b)
33303
- return (uint32x2_t) __builtin_aarch64_cmhsv2si ((int32x2_t) __a,
33304
+ return (uint32x2_t) __builtin_aarch64_cmgeuv2si ((int32x2_t) __a,
33308
@@ -19572,7 +19572,7 @@
33309
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
33310
vcge_u64 (uint64x1_t __a, uint64x1_t __b)
33312
- return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __a,
33313
+ return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __a,
33317
@@ -19603,7 +19603,7 @@
33318
__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
33319
vcgeq_u8 (uint8x16_t __a, uint8x16_t __b)
33321
- return (uint8x16_t) __builtin_aarch64_cmhsv16qi ((int8x16_t) __a,
33322
+ return (uint8x16_t) __builtin_aarch64_cmgeuv16qi ((int8x16_t) __a,
33326
@@ -19610,7 +19610,7 @@
33327
__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
33328
vcgeq_u16 (uint16x8_t __a, uint16x8_t __b)
33330
- return (uint16x8_t) __builtin_aarch64_cmhsv8hi ((int16x8_t) __a,
33331
+ return (uint16x8_t) __builtin_aarch64_cmgeuv8hi ((int16x8_t) __a,
33335
@@ -19617,7 +19617,7 @@
33336
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
33337
vcgeq_u32 (uint32x4_t __a, uint32x4_t __b)
33339
- return (uint32x4_t) __builtin_aarch64_cmhsv4si ((int32x4_t) __a,
33340
+ return (uint32x4_t) __builtin_aarch64_cmgeuv4si ((int32x4_t) __a,
33344
@@ -19624,7 +19624,7 @@
33345
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
33346
vcgeq_u64 (uint64x2_t __a, uint64x2_t __b)
33348
- return (uint64x2_t) __builtin_aarch64_cmhsv2di ((int64x2_t) __a,
33349
+ return (uint64x2_t) __builtin_aarch64_cmgeuv2di ((int64x2_t) __a,
33353
@@ -19637,7 +19637,7 @@
33354
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
33355
vcged_u64 (uint64x1_t __a, uint64x1_t __b)
33357
- return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __a,
33358
+ return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __a,
33362
@@ -19676,7 +19676,7 @@
33363
__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
33364
vcgt_u8 (uint8x8_t __a, uint8x8_t __b)
33366
- return (uint8x8_t) __builtin_aarch64_cmhiv8qi ((int8x8_t) __a,
33367
+ return (uint8x8_t) __builtin_aarch64_cmgtuv8qi ((int8x8_t) __a,
33371
@@ -19683,7 +19683,7 @@
33372
__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
33373
vcgt_u16 (uint16x4_t __a, uint16x4_t __b)
33375
- return (uint16x4_t) __builtin_aarch64_cmhiv4hi ((int16x4_t) __a,
33376
+ return (uint16x4_t) __builtin_aarch64_cmgtuv4hi ((int16x4_t) __a,
33380
@@ -19690,7 +19690,7 @@
33381
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
33382
vcgt_u32 (uint32x2_t __a, uint32x2_t __b)
33384
- return (uint32x2_t) __builtin_aarch64_cmhiv2si ((int32x2_t) __a,
33385
+ return (uint32x2_t) __builtin_aarch64_cmgtuv2si ((int32x2_t) __a,
33389
@@ -19697,7 +19697,7 @@
33390
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
33391
vcgt_u64 (uint64x1_t __a, uint64x1_t __b)
33393
- return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __a,
33394
+ return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __a,
33398
@@ -19728,7 +19728,7 @@
33399
__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
33400
vcgtq_u8 (uint8x16_t __a, uint8x16_t __b)
33402
- return (uint8x16_t) __builtin_aarch64_cmhiv16qi ((int8x16_t) __a,
33403
+ return (uint8x16_t) __builtin_aarch64_cmgtuv16qi ((int8x16_t) __a,
33407
@@ -19735,7 +19735,7 @@
33408
__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
33409
vcgtq_u16 (uint16x8_t __a, uint16x8_t __b)
33411
- return (uint16x8_t) __builtin_aarch64_cmhiv8hi ((int16x8_t) __a,
33412
+ return (uint16x8_t) __builtin_aarch64_cmgtuv8hi ((int16x8_t) __a,
33416
@@ -19742,7 +19742,7 @@
33417
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
33418
vcgtq_u32 (uint32x4_t __a, uint32x4_t __b)
33420
- return (uint32x4_t) __builtin_aarch64_cmhiv4si ((int32x4_t) __a,
33421
+ return (uint32x4_t) __builtin_aarch64_cmgtuv4si ((int32x4_t) __a,
33425
@@ -19749,7 +19749,7 @@
33426
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
33427
vcgtq_u64 (uint64x2_t __a, uint64x2_t __b)
33429
- return (uint64x2_t) __builtin_aarch64_cmhiv2di ((int64x2_t) __a,
33430
+ return (uint64x2_t) __builtin_aarch64_cmgtuv2di ((int64x2_t) __a,
33434
@@ -19762,7 +19762,7 @@
33435
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
33436
vcgtd_u64 (uint64x1_t __a, uint64x1_t __b)
33438
- return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __a,
33439
+ return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __a,
33443
@@ -19801,7 +19801,7 @@
33444
__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
33445
vcle_u8 (uint8x8_t __a, uint8x8_t __b)
33447
- return (uint8x8_t) __builtin_aarch64_cmhsv8qi ((int8x8_t) __b,
33448
+ return (uint8x8_t) __builtin_aarch64_cmgeuv8qi ((int8x8_t) __b,
33452
@@ -19808,7 +19808,7 @@
33453
__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
33454
vcle_u16 (uint16x4_t __a, uint16x4_t __b)
33456
- return (uint16x4_t) __builtin_aarch64_cmhsv4hi ((int16x4_t) __b,
33457
+ return (uint16x4_t) __builtin_aarch64_cmgeuv4hi ((int16x4_t) __b,
33461
@@ -19815,7 +19815,7 @@
33462
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
33463
vcle_u32 (uint32x2_t __a, uint32x2_t __b)
33465
- return (uint32x2_t) __builtin_aarch64_cmhsv2si ((int32x2_t) __b,
33466
+ return (uint32x2_t) __builtin_aarch64_cmgeuv2si ((int32x2_t) __b,
33470
@@ -19822,7 +19822,7 @@
33471
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
33472
vcle_u64 (uint64x1_t __a, uint64x1_t __b)
33474
- return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __b,
33475
+ return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __b,
33479
@@ -19853,7 +19853,7 @@
33480
__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
33481
vcleq_u8 (uint8x16_t __a, uint8x16_t __b)
33483
- return (uint8x16_t) __builtin_aarch64_cmhsv16qi ((int8x16_t) __b,
33484
+ return (uint8x16_t) __builtin_aarch64_cmgeuv16qi ((int8x16_t) __b,
33488
@@ -19860,7 +19860,7 @@
33489
__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
33490
vcleq_u16 (uint16x8_t __a, uint16x8_t __b)
33492
- return (uint16x8_t) __builtin_aarch64_cmhsv8hi ((int16x8_t) __b,
33493
+ return (uint16x8_t) __builtin_aarch64_cmgeuv8hi ((int16x8_t) __b,
33497
@@ -19867,7 +19867,7 @@
33498
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
33499
vcleq_u32 (uint32x4_t __a, uint32x4_t __b)
33501
- return (uint32x4_t) __builtin_aarch64_cmhsv4si ((int32x4_t) __b,
33502
+ return (uint32x4_t) __builtin_aarch64_cmgeuv4si ((int32x4_t) __b,
33506
@@ -19874,7 +19874,7 @@
33507
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
33508
vcleq_u64 (uint64x2_t __a, uint64x2_t __b)
33510
- return (uint64x2_t) __builtin_aarch64_cmhsv2di ((int64x2_t) __b,
33511
+ return (uint64x2_t) __builtin_aarch64_cmgeuv2di ((int64x2_t) __b,
33515
@@ -19919,7 +19919,7 @@
33516
__extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
33517
vclt_u8 (uint8x8_t __a, uint8x8_t __b)
33519
- return (uint8x8_t) __builtin_aarch64_cmhiv8qi ((int8x8_t) __b,
33520
+ return (uint8x8_t) __builtin_aarch64_cmgtuv8qi ((int8x8_t) __b,
33524
@@ -19926,7 +19926,7 @@
33525
__extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
33526
vclt_u16 (uint16x4_t __a, uint16x4_t __b)
33528
- return (uint16x4_t) __builtin_aarch64_cmhiv4hi ((int16x4_t) __b,
33529
+ return (uint16x4_t) __builtin_aarch64_cmgtuv4hi ((int16x4_t) __b,
33533
@@ -19933,7 +19933,7 @@
33534
__extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
33535
vclt_u32 (uint32x2_t __a, uint32x2_t __b)
33537
- return (uint32x2_t) __builtin_aarch64_cmhiv2si ((int32x2_t) __b,
33538
+ return (uint32x2_t) __builtin_aarch64_cmgtuv2si ((int32x2_t) __b,
33542
@@ -19940,7 +19940,7 @@
33543
__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
33544
vclt_u64 (uint64x1_t __a, uint64x1_t __b)
33546
- return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __b,
33547
+ return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __b,
33551
@@ -19971,7 +19971,7 @@
33552
__extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
33553
vcltq_u8 (uint8x16_t __a, uint8x16_t __b)
33555
- return (uint8x16_t) __builtin_aarch64_cmhiv16qi ((int8x16_t) __b,
33556
+ return (uint8x16_t) __builtin_aarch64_cmgtuv16qi ((int8x16_t) __b,
33560
@@ -19978,7 +19978,7 @@
33561
__extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
33562
vcltq_u16 (uint16x8_t __a, uint16x8_t __b)
33564
- return (uint16x8_t) __builtin_aarch64_cmhiv8hi ((int16x8_t) __b,
33565
+ return (uint16x8_t) __builtin_aarch64_cmgtuv8hi ((int16x8_t) __b,
33569
@@ -19985,7 +19985,7 @@
33570
__extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
33571
vcltq_u32 (uint32x4_t __a, uint32x4_t __b)
33573
- return (uint32x4_t) __builtin_aarch64_cmhiv4si ((int32x4_t) __b,
33574
+ return (uint32x4_t) __builtin_aarch64_cmgtuv4si ((int32x4_t) __b,
33578
@@ -19992,7 +19992,7 @@
33579
__extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
33580
vcltq_u64 (uint64x2_t __a, uint64x2_t __b)
33582
- return (uint64x2_t) __builtin_aarch64_cmhiv2di ((int64x2_t) __b,
33583
+ return (uint64x2_t) __builtin_aarch64_cmgtuv2di ((int64x2_t) __b,
33587
Index: gcc/config/aarch64/aarch64.md
33588
===================================================================
33589
--- a/src/gcc/config/aarch64/aarch64.md (.../tags/gcc_4_8_2_release)
33590
+++ b/src/gcc/config/aarch64/aarch64.md (.../branches/gcc-4_8-branch)
33591
@@ -2211,7 +2211,7 @@
33592
(set_attr "mode" "SI")]
33595
-(define_insn "*cstore<mode>_neg"
33596
+(define_insn "cstore<mode>_neg"
33597
[(set (match_operand:ALLI 0 "register_operand" "=r")
33598
(neg:ALLI (match_operator:ALLI 1 "aarch64_comparison_operator"
33599
[(match_operand 2 "cc_register" "") (const_int 0)])))]
33600
Index: gcc/config/aarch64/aarch64-simd-builtins.def
33601
===================================================================
33602
--- a/src/gcc/config/aarch64/aarch64-simd-builtins.def (.../tags/gcc_4_8_2_release)
33603
+++ b/src/gcc/config/aarch64/aarch64-simd-builtins.def (.../branches/gcc-4_8-branch)
33604
@@ -217,8 +217,8 @@
33605
BUILTIN_VSDQ_I_DI (BINOP, cmle)
33606
BUILTIN_VSDQ_I_DI (BINOP, cmlt)
33607
/* Implemented by aarch64_cm<cmp><mode>. */
33608
- BUILTIN_VSDQ_I_DI (BINOP, cmhs)
33609
- BUILTIN_VSDQ_I_DI (BINOP, cmhi)
33610
+ BUILTIN_VSDQ_I_DI (BINOP, cmgeu)
33611
+ BUILTIN_VSDQ_I_DI (BINOP, cmgtu)
33612
BUILTIN_VSDQ_I_DI (BINOP, cmtst)
33614
/* Implemented by aarch64_<fmaxmin><mode>. */
33615
Index: gcc/config/aarch64/aarch64.c
33616
===================================================================
33617
--- a/src/gcc/config/aarch64/aarch64.c (.../tags/gcc_4_8_2_release)
33618
+++ b/src/gcc/config/aarch64/aarch64.c (.../branches/gcc-4_8-branch)
33619
@@ -2274,7 +2274,7 @@
33620
if (ncount < zcount)
33622
emit_move_insn (gen_rtx_REG (Pmode, regnum),
33623
- GEN_INT ((~val) & 0xffff));
33624
+ GEN_INT (val | ~(HOST_WIDE_INT) 0xffff));
33628
Index: gcc/config/aarch64/iterators.md
33629
===================================================================
33630
--- a/src/gcc/config/aarch64/iterators.md (.../tags/gcc_4_8_2_release)
33631
+++ b/src/gcc/config/aarch64/iterators.md (.../branches/gcc-4_8-branch)
33633
;; Vector Float modes.
33634
(define_mode_iterator VDQF [V2SF V4SF V2DF])
33636
+;; All Float modes.
33637
+(define_mode_iterator VALLF [V2SF V4SF V2DF SF DF])
33639
;; Vector Float modes with 2 elements.
33640
(define_mode_iterator V2F [V2SF V2DF])
33642
@@ -213,13 +216,6 @@
33643
UNSPEC_URSHL ; Used in aarch64-simd.md.
33644
UNSPEC_SQRSHL ; Used in aarch64-simd.md.
33645
UNSPEC_UQRSHL ; Used in aarch64-simd.md.
33646
- UNSPEC_CMEQ ; Used in aarch64-simd.md.
33647
- UNSPEC_CMLE ; Used in aarch64-simd.md.
33648
- UNSPEC_CMLT ; Used in aarch64-simd.md.
33649
- UNSPEC_CMGE ; Used in aarch64-simd.md.
33650
- UNSPEC_CMGT ; Used in aarch64-simd.md.
33651
- UNSPEC_CMHS ; Used in aarch64-simd.md.
33652
- UNSPEC_CMHI ; Used in aarch64-simd.md.
33653
UNSPEC_SSLI ; Used in aarch64-simd.md.
33654
UNSPEC_USLI ; Used in aarch64-simd.md.
33655
UNSPEC_SSRI ; Used in aarch64-simd.md.
33656
@@ -227,7 +223,6 @@
33657
UNSPEC_SSHLL ; Used in aarch64-simd.md.
33658
UNSPEC_USHLL ; Used in aarch64-simd.md.
33659
UNSPEC_ADDP ; Used in aarch64-simd.md.
33660
- UNSPEC_CMTST ; Used in aarch64-simd.md.
33661
UNSPEC_FMAX ; Used in aarch64-simd.md.
33662
UNSPEC_FMIN ; Used in aarch64-simd.md.
33663
UNSPEC_BSL ; Used in aarch64-simd.md.
33664
@@ -251,6 +246,7 @@
33666
;; For scalar usage of vector/FP registers
33667
(define_mode_attr v [(QI "b") (HI "h") (SI "s") (DI "d")
33668
+ (SF "s") (DF "d")
33669
(V8QI "") (V16QI "")
33670
(V4HI "") (V8HI "")
33671
(V2SI "") (V4SI "")
33672
@@ -305,7 +301,8 @@
33673
(V4SF ".4s") (V2DF ".2d")
33680
;; Register suffix narrowed modes for VQN.
33681
(define_mode_attr Vmntype [(V8HI ".8b") (V4SI ".4h")
33682
@@ -444,7 +441,8 @@
33683
(V2SI "V2SI") (V4SI "V4SI")
33684
(DI "DI") (V2DI "V2DI")
33685
(V2SF "V2SI") (V4SF "V4SI")
33687
+ (V2DF "V2DI") (DF "DI")
33690
;; Lower case mode of results of comparison operations.
33691
(define_mode_attr v_cmp_result [(V8QI "v8qi") (V16QI "v16qi")
33692
@@ -452,7 +450,8 @@
33693
(V2SI "v2si") (V4SI "v4si")
33694
(DI "di") (V2DI "v2di")
33695
(V2SF "v2si") (V4SF "v4si")
33697
+ (V2DF "v2di") (DF "di")
33700
;; Vm for lane instructions is restricted to FP_LO_REGS.
33701
(define_mode_attr vwx [(V4HI "x") (V8HI "x") (HI "x")
33702
@@ -543,6 +542,12 @@
33703
;; Code iterator for signed variants of vector saturating binary ops.
33704
(define_code_iterator SBINQOPS [ss_plus ss_minus])
33706
+;; Comparison operators for <F>CM.
33707
+(define_code_iterator COMPARISONS [lt le eq ge gt])
33709
+;; Unsigned comparison operators.
33710
+(define_code_iterator UCOMPARISONS [ltu leu geu gtu])
33712
;; -------------------------------------------------------------------
33714
;; -------------------------------------------------------------------
33715
@@ -571,8 +576,29 @@
33728
+;; For comparison operators we use the FCM* and CM* instructions.
33729
+;; As there are no CMLE or CMLT instructions which act on 3 vector
33730
+;; operands, we must use CMGE or CMGT and swap the order of the
33731
+;; source operands.
33733
+(define_code_attr n_optab [(lt "gt") (le "ge") (eq "eq") (ge "ge") (gt "gt")
33734
+ (ltu "hi") (leu "hs") (geu "hs") (gtu "hi")])
33735
+(define_code_attr cmp_1 [(lt "2") (le "2") (eq "1") (ge "1") (gt "1")
33736
+ (ltu "2") (leu "2") (geu "1") (gtu "1")])
33737
+(define_code_attr cmp_2 [(lt "1") (le "1") (eq "2") (ge "2") (gt "2")
33738
+ (ltu "1") (leu "1") (geu "2") (gtu "2")])
33740
+(define_code_attr CMP [(lt "LT") (le "LE") (eq "EQ") (ge "GE") (gt "GT")
33741
+ (ltu "LTU") (leu "LEU") (geu "GEU") (gtu "GTU")])
33743
;; Optab prefix for sign/zero-extending operations
33744
(define_code_attr su_optab [(sign_extend "") (zero_extend "u")
33745
(div "") (udiv "u")
33746
@@ -680,11 +706,6 @@
33747
UNSPEC_SQSHRN UNSPEC_UQSHRN
33748
UNSPEC_SQRSHRN UNSPEC_UQRSHRN])
33750
-(define_int_iterator VCMP_S [UNSPEC_CMEQ UNSPEC_CMGE UNSPEC_CMGT
33751
- UNSPEC_CMLE UNSPEC_CMLT])
33753
-(define_int_iterator VCMP_U [UNSPEC_CMHS UNSPEC_CMHI UNSPEC_CMTST])
33755
(define_int_iterator PERMUTE [UNSPEC_ZIP1 UNSPEC_ZIP2
33756
UNSPEC_TRN1 UNSPEC_TRN2
33757
UNSPEC_UZP1 UNSPEC_UZP2])
33758
@@ -768,12 +789,6 @@
33759
(UNSPEC_RADDHN2 "add")
33760
(UNSPEC_RSUBHN2 "sub")])
33762
-(define_int_attr cmp [(UNSPEC_CMGE "ge") (UNSPEC_CMGT "gt")
33763
- (UNSPEC_CMLE "le") (UNSPEC_CMLT "lt")
33764
- (UNSPEC_CMEQ "eq")
33765
- (UNSPEC_CMHS "hs") (UNSPEC_CMHI "hi")
33766
- (UNSPEC_CMTST "tst")])
33768
(define_int_attr offsetlr [(UNSPEC_SSLI "1") (UNSPEC_USLI "1")
33769
(UNSPEC_SSRI "0") (UNSPEC_USRI "0")])
33771
Index: gcc/config/rs6000/rs6000.c
33772
===================================================================
33773
--- a/src/gcc/config/rs6000/rs6000.c (.../tags/gcc_4_8_2_release)
33774
+++ b/src/gcc/config/rs6000/rs6000.c (.../branches/gcc-4_8-branch)
33775
@@ -5428,12 +5428,13 @@
33781
if (TARGET_E500_DOUBLE)
33782
return (SPE_CONST_OFFSET_OK (offset)
33783
&& SPE_CONST_OFFSET_OK (offset + 8));
33784
+ /* fall through */
33791
Index: gcc/config/rs6000/rs6000.md
33792
===================================================================
33793
--- a/src/gcc/config/rs6000/rs6000.md (.../tags/gcc_4_8_2_release)
33794
+++ b/src/gcc/config/rs6000/rs6000.md (.../branches/gcc-4_8-branch)
33795
@@ -2412,7 +2412,7 @@
33796
(match_operand:SI 2 "gpc_reg_operand" "r,r"))
33798
(clobber (match_scratch:SI 3 "=r,r"))]
33804
@@ -2425,7 +2425,7 @@
33805
(match_operand:SI 2 "gpc_reg_operand" ""))
33807
(clobber (match_scratch:SI 3 ""))]
33808
- "reload_completed"
33809
+ "TARGET_32BIT && reload_completed"
33810
[(set (match_dup 3)
33811
(mult:SI (match_dup 1) (match_dup 2)))
33813
@@ -2440,7 +2440,7 @@
33815
(set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
33816
(mult:SI (match_dup 1) (match_dup 2)))]
33822
@@ -2454,7 +2454,7 @@
33824
(set (match_operand:SI 0 "gpc_reg_operand" "")
33825
(mult:SI (match_dup 1) (match_dup 2)))]
33826
- "reload_completed"
33827
+ "TARGET_32BIT && reload_completed"
33828
[(set (match_dup 0)
33829
(mult:SI (match_dup 1) (match_dup 2)))
33831
Index: gcc/config/tilepro/tilepro-c.c
33832
===================================================================
33833
--- a/src/gcc/config/tilepro/tilepro-c.c (.../tags/gcc_4_8_2_release)
33834
+++ b/src/gcc/config/tilepro/tilepro-c.c (.../branches/gcc-4_8-branch)
33836
builtin_define ("__tile_chip__=1");
33837
builtin_define ("__tile_chip_rev__=0");
33839
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
33840
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
33841
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
33842
+ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
33844
TILEPRO_CPU_CPP_ENDIAN_BUILTINS ();
33845
GNU_USER_TARGET_OS_CPP_BUILTINS ();
33847
Index: gcc/config/tilepro/tilepro.c
33848
===================================================================
33849
--- a/src/gcc/config/tilepro/tilepro.c (.../tags/gcc_4_8_2_release)
33850
+++ b/src/gcc/config/tilepro/tilepro.c (.../branches/gcc-4_8-branch)
33851
@@ -3167,6 +3167,12 @@
33856
+ /* If we are generating a prefetch, tell the scheduler not to move
33858
+ if (GET_CODE (pat) == PREFETCH)
33859
+ PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
33864
Index: gcc/config/tilepro/tilepro.md
33865
===================================================================
33866
--- a/src/gcc/config/tilepro/tilepro.md (.../tags/gcc_4_8_2_release)
33867
+++ b/src/gcc/config/tilepro/tilepro.md (.../branches/gcc-4_8-branch)
33868
@@ -795,7 +795,7 @@
33870
(define_expand "ctzdi2"
33871
[(set (match_operand:DI 0 "register_operand" "")
33872
- (ctz:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
33873
+ (ctz:DI (match_operand:DI 1 "register_operand" "")))]
33876
rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, result;
33877
@@ -823,7 +823,7 @@
33879
(define_expand "clzdi2"
33880
[(set (match_operand:DI 0 "register_operand" "")
33881
- (clz:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
33882
+ (clz:DI (match_operand:DI 1 "register_operand" "")))]
33885
rtx lo, hi, clz_lo, clz_hi, clz_lo_plus_32, result;
33886
@@ -851,7 +851,7 @@
33888
(define_expand "ffsdi2"
33889
[(set (match_operand:DI 0 "register_operand" "")
33890
- (ffs:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
33891
+ (ffs:DI (match_operand:DI 1 "register_operand" "")))]
33894
rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, ctz, ctz_plus_1,ctz_cond;
33895
Index: gcc/config/arm/arm.c
33896
===================================================================
33897
--- a/src/gcc/config/arm/arm.c (.../tags/gcc_4_8_2_release)
33898
+++ b/src/gcc/config/arm/arm.c (.../branches/gcc-4_8-branch)
33899
@@ -5425,7 +5425,8 @@
33900
if (!crtl->uses_pic_offset_table)
33902
gcc_assert (can_create_pseudo_p ());
33903
- if (arm_pic_register != INVALID_REGNUM)
33904
+ if (arm_pic_register != INVALID_REGNUM
33905
+ && !(TARGET_THUMB1 && arm_pic_register > LAST_LO_REGNUM))
33907
if (!cfun->machine->pic_reg)
33908
cfun->machine->pic_reg = gen_rtx_REG (Pmode, arm_pic_register);
33909
@@ -5451,7 +5452,12 @@
33910
crtl->uses_pic_offset_table = 1;
33913
- arm_load_pic_register (0UL);
33914
+ if (TARGET_THUMB1 && arm_pic_register != INVALID_REGNUM
33915
+ && arm_pic_register > LAST_LO_REGNUM)
33916
+ emit_move_insn (cfun->machine->pic_reg,
33917
+ gen_rtx_REG (Pmode, arm_pic_register));
33919
+ arm_load_pic_register (0UL);
33921
seq = get_insns ();
33923
@@ -5709,6 +5715,14 @@
33924
emit_insn (gen_movsi (pic_offset_table_rtx, pic_tmp));
33925
emit_insn (gen_pic_add_dot_plus_four (pic_reg, pic_reg, labelno));
33927
+ else if (arm_pic_register != INVALID_REGNUM
33928
+ && arm_pic_register > LAST_LO_REGNUM
33929
+ && REGNO (pic_reg) <= LAST_LO_REGNUM)
33931
+ emit_insn (gen_pic_load_addr_unified (pic_reg, pic_rtx, labelno));
33932
+ emit_move_insn (gen_rtx_REG (Pmode, arm_pic_register), pic_reg);
33933
+ emit_use (gen_rtx_REG (Pmode, arm_pic_register));
33936
emit_insn (gen_pic_load_addr_unified (pic_reg, pic_rtx, labelno));
33938
@@ -21279,7 +21293,11 @@
33942
- op[argc] = expand_normal (arg[argc]);
33943
+ /* Use EXPAND_MEMORY for NEON_ARG_MEMORY to ensure a MEM_P
33945
+ op[argc] = expand_expr (arg[argc], NULL_RTX, VOIDmode,
33946
+ (thisarg == NEON_ARG_MEMORY
33947
+ ? EXPAND_MEMORY : EXPAND_NORMAL));
33951
@@ -21298,6 +21316,9 @@
33954
case NEON_ARG_MEMORY:
33955
+ /* Check if expand failed. */
33956
+ if (op[argc] == const0_rtx)
33958
gcc_assert (MEM_P (op[argc]));
33959
PUT_MODE (op[argc], mode[argc]);
33960
/* ??? arm_neon.h uses the same built-in functions for signed
33961
@@ -23555,6 +23576,7 @@
33962
num_regs = bit_count (saved_regs_mask);
33963
if ((offsets->outgoing_args != (1 + num_regs)) || cfun->calls_alloca)
33965
+ emit_insn (gen_blockage ());
33966
/* Unwind the stack to just below the saved registers. */
33967
emit_insn (gen_addsi3 (stack_pointer_rtx,
33968
hard_frame_pointer_rtx,
33969
@@ -23583,8 +23605,8 @@
33971
if (crtl->calls_eh_return)
33972
emit_insn (gen_addsi3 (stack_pointer_rtx,
33973
- stack_pointer_rtx,
33974
- GEN_INT (ARM_EH_STACKADJ_REGNUM)));
33975
+ stack_pointer_rtx,
33976
+ gen_rtx_REG (SImode, ARM_EH_STACKADJ_REGNUM)));
33978
if (IS_STACKALIGN (func_type))
33979
/* Restore the original stack pointer. Before prologue, the stack was
33980
Index: gcc/config/arm/arm.h
33981
===================================================================
33982
--- a/src/gcc/config/arm/arm.h (.../tags/gcc_4_8_2_release)
33983
+++ b/src/gcc/config/arm/arm.h (.../branches/gcc-4_8-branch)
33984
@@ -1213,11 +1213,15 @@
33986
In big-endian mode, modes greater than word size (i.e. DFmode) are stored in
33987
VFP registers in little-endian order. We can't describe that accurately to
33988
- GCC, so avoid taking subregs of such values. */
33989
-#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
33990
- (TARGET_VFP && TARGET_BIG_END \
33991
- && (GET_MODE_SIZE (FROM) > UNITS_PER_WORD \
33992
- || GET_MODE_SIZE (TO) > UNITS_PER_WORD) \
33993
+ GCC, so avoid taking subregs of such values.
33994
+ The only exception is going from a 128-bit to a 64-bit type. In that case
33995
+ the data layout happens to be consistent for big-endian, so we explicitly allow
33997
+#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \
33998
+ (TARGET_VFP && TARGET_BIG_END \
33999
+ && !(GET_MODE_SIZE (FROM) == 16 && GET_MODE_SIZE (TO) == 8) \
34000
+ && (GET_MODE_SIZE (FROM) > UNITS_PER_WORD \
34001
+ || GET_MODE_SIZE (TO) > UNITS_PER_WORD) \
34002
&& reg_classes_intersect_p (VFP_REGS, (CLASS)))
34004
/* The class value for index registers, and the one for base regs. */
34005
Index: gcc/config/arm/vfp.md
34006
===================================================================
34007
--- a/src/gcc/config/arm/vfp.md (.../tags/gcc_4_8_2_release)
34008
+++ b/src/gcc/config/arm/vfp.md (.../branches/gcc-4_8-branch)
34009
@@ -1264,6 +1264,7 @@
34010
"TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
34011
"vrint<vrint_variant>%?.<V_if_elem>\\t%<V_reg>0, %<V_reg>1"
34012
[(set_attr "predicable" "<vrint_predicable>")
34013
+ (set_attr "conds" "<vrint_conds>")
34014
(set_attr "type" "f_rint<vfp_type>")]
34017
@@ -1280,7 +1281,8 @@
34018
(match_operand:SDF 2 "register_operand" "<F_constraint>")))]
34019
"TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
34020
"vmaxnm.<V_if_elem>\\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
34021
- [(set_attr "type" "f_minmax<vfp_type>")]
34022
+ [(set_attr "type" "f_minmax<vfp_type>")
34023
+ (set_attr "conds" "unconditional")]
34026
(define_insn "smin<mode>3"
34027
@@ -1289,7 +1291,8 @@
34028
(match_operand:SDF 2 "register_operand" "<F_constraint>")))]
34029
"TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
34030
"vminnm.<V_if_elem>\\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
34031
- [(set_attr "type" "f_minmax<vfp_type>")]
34032
+ [(set_attr "type" "f_minmax<vfp_type>")
34033
+ (set_attr "conds" "unconditional")]
34036
;; Unimplemented insns:
34037
Index: gcc/config/arm/ldmstm.md
34038
===================================================================
34039
--- a/src/gcc/config/arm/ldmstm.md (.../tags/gcc_4_8_2_release)
34040
+++ b/src/gcc/config/arm/ldmstm.md (.../branches/gcc-4_8-branch)
34041
@@ -23,15 +23,15 @@
34043
(define_insn "*ldm4_ia"
34044
[(match_parallel 0 "load_multiple_operation"
34045
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
34046
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34047
(mem:SI (match_operand:SI 5 "s_register_operand" "rk")))
34048
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34049
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34050
(mem:SI (plus:SI (match_dup 5)
34052
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34053
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
34054
(mem:SI (plus:SI (match_dup 5)
34056
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
34057
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
34058
(mem:SI (plus:SI (match_dup 5)
34059
(const_int 12))))])]
34060
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
34061
@@ -41,15 +41,15 @@
34063
(define_insn "*thumb_ldm4_ia"
34064
[(match_parallel 0 "load_multiple_operation"
34065
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
34066
+ [(set (match_operand:SI 1 "low_register_operand" "")
34067
(mem:SI (match_operand:SI 5 "s_register_operand" "l")))
34068
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34069
+ (set (match_operand:SI 2 "low_register_operand" "")
34070
(mem:SI (plus:SI (match_dup 5)
34072
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34073
+ (set (match_operand:SI 3 "low_register_operand" "")
34074
(mem:SI (plus:SI (match_dup 5)
34076
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
34077
+ (set (match_operand:SI 4 "low_register_operand" "")
34078
(mem:SI (plus:SI (match_dup 5)
34079
(const_int 12))))])]
34080
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
34081
@@ -60,15 +60,15 @@
34082
[(match_parallel 0 "load_multiple_operation"
34083
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
34084
(plus:SI (match_dup 5) (const_int 16)))
34085
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
34086
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34087
(mem:SI (match_dup 5)))
34088
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34089
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34090
(mem:SI (plus:SI (match_dup 5)
34092
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34093
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
34094
(mem:SI (plus:SI (match_dup 5)
34096
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
34097
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
34098
(mem:SI (plus:SI (match_dup 5)
34099
(const_int 12))))])]
34100
"TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
34101
@@ -80,15 +80,15 @@
34102
[(match_parallel 0 "load_multiple_operation"
34103
[(set (match_operand:SI 5 "s_register_operand" "+&l")
34104
(plus:SI (match_dup 5) (const_int 16)))
34105
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
34106
+ (set (match_operand:SI 1 "low_register_operand" "")
34107
(mem:SI (match_dup 5)))
34108
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34109
+ (set (match_operand:SI 2 "low_register_operand" "")
34110
(mem:SI (plus:SI (match_dup 5)
34112
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34113
+ (set (match_operand:SI 3 "low_register_operand" "")
34114
(mem:SI (plus:SI (match_dup 5)
34116
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
34117
+ (set (match_operand:SI 4 "low_register_operand" "")
34118
(mem:SI (plus:SI (match_dup 5)
34119
(const_int 12))))])]
34120
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 5"
34121
@@ -98,13 +98,13 @@
34122
(define_insn "*stm4_ia"
34123
[(match_parallel 0 "store_multiple_operation"
34124
[(set (mem:SI (match_operand:SI 5 "s_register_operand" "rk"))
34125
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34126
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34127
(set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
34128
- (match_operand:SI 2 "arm_hard_register_operand" ""))
34129
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
34130
(set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
34131
- (match_operand:SI 3 "arm_hard_register_operand" ""))
34132
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
34133
(set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
34134
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
34135
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
34136
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
34137
"stm%(ia%)\t%5, {%1, %2, %3, %4}"
34138
[(set_attr "type" "store4")
34139
@@ -115,13 +115,13 @@
34140
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
34141
(plus:SI (match_dup 5) (const_int 16)))
34142
(set (mem:SI (match_dup 5))
34143
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34144
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34145
(set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
34146
- (match_operand:SI 2 "arm_hard_register_operand" ""))
34147
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
34148
(set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
34149
- (match_operand:SI 3 "arm_hard_register_operand" ""))
34150
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
34151
(set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
34152
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
34153
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
34154
"TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
34155
"stm%(ia%)\t%5!, {%1, %2, %3, %4}"
34156
[(set_attr "type" "store4")
34157
@@ -132,13 +132,13 @@
34158
[(set (match_operand:SI 5 "s_register_operand" "+&l")
34159
(plus:SI (match_dup 5) (const_int 16)))
34160
(set (mem:SI (match_dup 5))
34161
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34162
+ (match_operand:SI 1 "low_register_operand" ""))
34163
(set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
34164
- (match_operand:SI 2 "arm_hard_register_operand" ""))
34165
+ (match_operand:SI 2 "low_register_operand" ""))
34166
(set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
34167
- (match_operand:SI 3 "arm_hard_register_operand" ""))
34168
+ (match_operand:SI 3 "low_register_operand" ""))
34169
(set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
34170
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
34171
+ (match_operand:SI 4 "low_register_operand" ""))])]
34172
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 5"
34173
"stm%(ia%)\t%5!, {%1, %2, %3, %4}"
34174
[(set_attr "type" "store4")])
34175
@@ -145,16 +145,16 @@
34177
(define_insn "*ldm4_ib"
34178
[(match_parallel 0 "load_multiple_operation"
34179
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
34180
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34181
(mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
34183
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34184
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34185
(mem:SI (plus:SI (match_dup 5)
34187
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34188
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
34189
(mem:SI (plus:SI (match_dup 5)
34191
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
34192
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
34193
(mem:SI (plus:SI (match_dup 5)
34194
(const_int 16))))])]
34195
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
34196
@@ -166,16 +166,16 @@
34197
[(match_parallel 0 "load_multiple_operation"
34198
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
34199
(plus:SI (match_dup 5) (const_int 16)))
34200
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
34201
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34202
(mem:SI (plus:SI (match_dup 5)
34204
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34205
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34206
(mem:SI (plus:SI (match_dup 5)
34208
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34209
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
34210
(mem:SI (plus:SI (match_dup 5)
34212
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
34213
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
34214
(mem:SI (plus:SI (match_dup 5)
34215
(const_int 16))))])]
34216
"TARGET_ARM && XVECLEN (operands[0], 0) == 5"
34217
@@ -186,13 +186,13 @@
34218
(define_insn "*stm4_ib"
34219
[(match_parallel 0 "store_multiple_operation"
34220
[(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int 4)))
34221
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34222
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34223
(set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
34224
- (match_operand:SI 2 "arm_hard_register_operand" ""))
34225
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
34226
(set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
34227
- (match_operand:SI 3 "arm_hard_register_operand" ""))
34228
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
34229
(set (mem:SI (plus:SI (match_dup 5) (const_int 16)))
34230
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
34231
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
34232
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
34233
"stm%(ib%)\t%5, {%1, %2, %3, %4}"
34234
[(set_attr "type" "store4")
34235
@@ -203,13 +203,13 @@
34236
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
34237
(plus:SI (match_dup 5) (const_int 16)))
34238
(set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
34239
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34240
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34241
(set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
34242
- (match_operand:SI 2 "arm_hard_register_operand" ""))
34243
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
34244
(set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
34245
- (match_operand:SI 3 "arm_hard_register_operand" ""))
34246
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
34247
(set (mem:SI (plus:SI (match_dup 5) (const_int 16)))
34248
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
34249
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
34250
"TARGET_ARM && XVECLEN (operands[0], 0) == 5"
34251
"stm%(ib%)\t%5!, {%1, %2, %3, %4}"
34252
[(set_attr "type" "store4")
34253
@@ -217,16 +217,16 @@
34255
(define_insn "*ldm4_da"
34256
[(match_parallel 0 "load_multiple_operation"
34257
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
34258
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34259
(mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
34261
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34262
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34263
(mem:SI (plus:SI (match_dup 5)
34265
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34266
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
34267
(mem:SI (plus:SI (match_dup 5)
34269
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
34270
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
34271
(mem:SI (match_dup 5)))])]
34272
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
34273
"ldm%(da%)\t%5, {%1, %2, %3, %4}"
34274
@@ -237,16 +237,16 @@
34275
[(match_parallel 0 "load_multiple_operation"
34276
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
34277
(plus:SI (match_dup 5) (const_int -16)))
34278
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
34279
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34280
(mem:SI (plus:SI (match_dup 5)
34282
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34283
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34284
(mem:SI (plus:SI (match_dup 5)
34286
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34287
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
34288
(mem:SI (plus:SI (match_dup 5)
34290
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
34291
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
34292
(mem:SI (match_dup 5)))])]
34293
"TARGET_ARM && XVECLEN (operands[0], 0) == 5"
34294
"ldm%(da%)\t%5!, {%1, %2, %3, %4}"
34295
@@ -256,13 +256,13 @@
34296
(define_insn "*stm4_da"
34297
[(match_parallel 0 "store_multiple_operation"
34298
[(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int -12)))
34299
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34300
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34301
(set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
34302
- (match_operand:SI 2 "arm_hard_register_operand" ""))
34303
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
34304
(set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
34305
- (match_operand:SI 3 "arm_hard_register_operand" ""))
34306
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
34307
(set (mem:SI (match_dup 5))
34308
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
34309
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
34310
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
34311
"stm%(da%)\t%5, {%1, %2, %3, %4}"
34312
[(set_attr "type" "store4")
34313
@@ -273,13 +273,13 @@
34314
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
34315
(plus:SI (match_dup 5) (const_int -16)))
34316
(set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
34317
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34318
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34319
(set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
34320
- (match_operand:SI 2 "arm_hard_register_operand" ""))
34321
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
34322
(set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
34323
- (match_operand:SI 3 "arm_hard_register_operand" ""))
34324
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
34325
(set (mem:SI (match_dup 5))
34326
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
34327
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
34328
"TARGET_ARM && XVECLEN (operands[0], 0) == 5"
34329
"stm%(da%)\t%5!, {%1, %2, %3, %4}"
34330
[(set_attr "type" "store4")
34331
@@ -287,16 +287,16 @@
34333
(define_insn "*ldm4_db"
34334
[(match_parallel 0 "load_multiple_operation"
34335
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
34336
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34337
(mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
34339
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34340
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34341
(mem:SI (plus:SI (match_dup 5)
34343
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34344
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
34345
(mem:SI (plus:SI (match_dup 5)
34347
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
34348
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
34349
(mem:SI (plus:SI (match_dup 5)
34350
(const_int -4))))])]
34351
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
34352
@@ -308,16 +308,16 @@
34353
[(match_parallel 0 "load_multiple_operation"
34354
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
34355
(plus:SI (match_dup 5) (const_int -16)))
34356
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
34357
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34358
(mem:SI (plus:SI (match_dup 5)
34360
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34361
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34362
(mem:SI (plus:SI (match_dup 5)
34364
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34365
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
34366
(mem:SI (plus:SI (match_dup 5)
34368
- (set (match_operand:SI 4 "arm_hard_register_operand" "")
34369
+ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
34370
(mem:SI (plus:SI (match_dup 5)
34371
(const_int -4))))])]
34372
"TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
34373
@@ -328,13 +328,13 @@
34374
(define_insn "*stm4_db"
34375
[(match_parallel 0 "store_multiple_operation"
34376
[(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int -16)))
34377
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34378
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34379
(set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
34380
- (match_operand:SI 2 "arm_hard_register_operand" ""))
34381
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
34382
(set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
34383
- (match_operand:SI 3 "arm_hard_register_operand" ""))
34384
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
34385
(set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
34386
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
34387
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
34388
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
34389
"stm%(db%)\t%5, {%1, %2, %3, %4}"
34390
[(set_attr "type" "store4")
34391
@@ -345,13 +345,13 @@
34392
[(set (match_operand:SI 5 "s_register_operand" "+&rk")
34393
(plus:SI (match_dup 5) (const_int -16)))
34394
(set (mem:SI (plus:SI (match_dup 5) (const_int -16)))
34395
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34396
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34397
(set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
34398
- (match_operand:SI 2 "arm_hard_register_operand" ""))
34399
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
34400
(set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
34401
- (match_operand:SI 3 "arm_hard_register_operand" ""))
34402
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
34403
(set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
34404
- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
34405
+ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
34406
"TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
34407
"stm%(db%)\t%5!, {%1, %2, %3, %4}"
34408
[(set_attr "type" "store4")
34409
@@ -466,12 +466,12 @@
34411
(define_insn "*ldm3_ia"
34412
[(match_parallel 0 "load_multiple_operation"
34413
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
34414
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34415
(mem:SI (match_operand:SI 4 "s_register_operand" "rk")))
34416
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34417
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34418
(mem:SI (plus:SI (match_dup 4)
34420
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34421
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
34422
(mem:SI (plus:SI (match_dup 4)
34423
(const_int 8))))])]
34424
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
34425
@@ -481,12 +481,12 @@
34427
(define_insn "*thumb_ldm3_ia"
34428
[(match_parallel 0 "load_multiple_operation"
34429
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
34430
+ [(set (match_operand:SI 1 "low_register_operand" "")
34431
(mem:SI (match_operand:SI 4 "s_register_operand" "l")))
34432
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34433
+ (set (match_operand:SI 2 "low_register_operand" "")
34434
(mem:SI (plus:SI (match_dup 4)
34436
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34437
+ (set (match_operand:SI 3 "low_register_operand" "")
34438
(mem:SI (plus:SI (match_dup 4)
34439
(const_int 8))))])]
34440
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
34441
@@ -497,12 +497,12 @@
34442
[(match_parallel 0 "load_multiple_operation"
34443
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
34444
(plus:SI (match_dup 4) (const_int 12)))
34445
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
34446
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34447
(mem:SI (match_dup 4)))
34448
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34449
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34450
(mem:SI (plus:SI (match_dup 4)
34452
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34453
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
34454
(mem:SI (plus:SI (match_dup 4)
34455
(const_int 8))))])]
34456
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
34457
@@ -514,12 +514,12 @@
34458
[(match_parallel 0 "load_multiple_operation"
34459
[(set (match_operand:SI 4 "s_register_operand" "+&l")
34460
(plus:SI (match_dup 4) (const_int 12)))
34461
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
34462
+ (set (match_operand:SI 1 "low_register_operand" "")
34463
(mem:SI (match_dup 4)))
34464
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34465
+ (set (match_operand:SI 2 "low_register_operand" "")
34466
(mem:SI (plus:SI (match_dup 4)
34468
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34469
+ (set (match_operand:SI 3 "low_register_operand" "")
34470
(mem:SI (plus:SI (match_dup 4)
34471
(const_int 8))))])]
34472
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
34473
@@ -529,11 +529,11 @@
34474
(define_insn "*stm3_ia"
34475
[(match_parallel 0 "store_multiple_operation"
34476
[(set (mem:SI (match_operand:SI 4 "s_register_operand" "rk"))
34477
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34478
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34479
(set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
34480
- (match_operand:SI 2 "arm_hard_register_operand" ""))
34481
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
34482
(set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
34483
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
34484
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
34485
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
34486
"stm%(ia%)\t%4, {%1, %2, %3}"
34487
[(set_attr "type" "store3")
34488
@@ -544,11 +544,11 @@
34489
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
34490
(plus:SI (match_dup 4) (const_int 12)))
34491
(set (mem:SI (match_dup 4))
34492
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34493
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34494
(set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
34495
- (match_operand:SI 2 "arm_hard_register_operand" ""))
34496
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
34497
(set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
34498
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
34499
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
34500
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
34501
"stm%(ia%)\t%4!, {%1, %2, %3}"
34502
[(set_attr "type" "store3")
34503
@@ -559,11 +559,11 @@
34504
[(set (match_operand:SI 4 "s_register_operand" "+&l")
34505
(plus:SI (match_dup 4) (const_int 12)))
34506
(set (mem:SI (match_dup 4))
34507
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34508
+ (match_operand:SI 1 "low_register_operand" ""))
34509
(set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
34510
- (match_operand:SI 2 "arm_hard_register_operand" ""))
34511
+ (match_operand:SI 2 "low_register_operand" ""))
34512
(set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
34513
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
34514
+ (match_operand:SI 3 "low_register_operand" ""))])]
34515
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
34516
"stm%(ia%)\t%4!, {%1, %2, %3}"
34517
[(set_attr "type" "store3")])
34518
@@ -570,13 +570,13 @@
34520
(define_insn "*ldm3_ib"
34521
[(match_parallel 0 "load_multiple_operation"
34522
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
34523
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34524
(mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
34526
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34527
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34528
(mem:SI (plus:SI (match_dup 4)
34530
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34531
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
34532
(mem:SI (plus:SI (match_dup 4)
34533
(const_int 12))))])]
34534
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
34535
@@ -588,13 +588,13 @@
34536
[(match_parallel 0 "load_multiple_operation"
34537
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
34538
(plus:SI (match_dup 4) (const_int 12)))
34539
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
34540
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34541
(mem:SI (plus:SI (match_dup 4)
34543
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34544
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34545
(mem:SI (plus:SI (match_dup 4)
34547
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34548
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
34549
(mem:SI (plus:SI (match_dup 4)
34550
(const_int 12))))])]
34551
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
34552
@@ -605,11 +605,11 @@
34553
(define_insn "*stm3_ib"
34554
[(match_parallel 0 "store_multiple_operation"
34555
[(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int 4)))
34556
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34557
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34558
(set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
34559
- (match_operand:SI 2 "arm_hard_register_operand" ""))
34560
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
34561
(set (mem:SI (plus:SI (match_dup 4) (const_int 12)))
34562
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
34563
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
34564
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
34565
"stm%(ib%)\t%4, {%1, %2, %3}"
34566
[(set_attr "type" "store3")
34567
@@ -620,11 +620,11 @@
34568
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
34569
(plus:SI (match_dup 4) (const_int 12)))
34570
(set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
34571
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34572
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34573
(set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
34574
- (match_operand:SI 2 "arm_hard_register_operand" ""))
34575
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
34576
(set (mem:SI (plus:SI (match_dup 4) (const_int 12)))
34577
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
34578
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
34579
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
34580
"stm%(ib%)\t%4!, {%1, %2, %3}"
34581
[(set_attr "type" "store3")
34582
@@ -632,13 +632,13 @@
34584
(define_insn "*ldm3_da"
34585
[(match_parallel 0 "load_multiple_operation"
34586
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
34587
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34588
(mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
34590
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34591
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34592
(mem:SI (plus:SI (match_dup 4)
34594
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34595
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
34596
(mem:SI (match_dup 4)))])]
34597
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
34598
"ldm%(da%)\t%4, {%1, %2, %3}"
34599
@@ -649,13 +649,13 @@
34600
[(match_parallel 0 "load_multiple_operation"
34601
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
34602
(plus:SI (match_dup 4) (const_int -12)))
34603
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
34604
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34605
(mem:SI (plus:SI (match_dup 4)
34607
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34608
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34609
(mem:SI (plus:SI (match_dup 4)
34611
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34612
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
34613
(mem:SI (match_dup 4)))])]
34614
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
34615
"ldm%(da%)\t%4!, {%1, %2, %3}"
34616
@@ -665,11 +665,11 @@
34617
(define_insn "*stm3_da"
34618
[(match_parallel 0 "store_multiple_operation"
34619
[(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int -8)))
34620
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34621
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34622
(set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
34623
- (match_operand:SI 2 "arm_hard_register_operand" ""))
34624
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
34625
(set (mem:SI (match_dup 4))
34626
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
34627
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
34628
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
34629
"stm%(da%)\t%4, {%1, %2, %3}"
34630
[(set_attr "type" "store3")
34631
@@ -680,11 +680,11 @@
34632
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
34633
(plus:SI (match_dup 4) (const_int -12)))
34634
(set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
34635
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34636
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34637
(set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
34638
- (match_operand:SI 2 "arm_hard_register_operand" ""))
34639
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
34640
(set (mem:SI (match_dup 4))
34641
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
34642
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
34643
"TARGET_ARM && XVECLEN (operands[0], 0) == 4"
34644
"stm%(da%)\t%4!, {%1, %2, %3}"
34645
[(set_attr "type" "store3")
34646
@@ -692,13 +692,13 @@
34648
(define_insn "*ldm3_db"
34649
[(match_parallel 0 "load_multiple_operation"
34650
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
34651
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34652
(mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
34654
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34655
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34656
(mem:SI (plus:SI (match_dup 4)
34658
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34659
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
34660
(mem:SI (plus:SI (match_dup 4)
34661
(const_int -4))))])]
34662
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
34663
@@ -710,13 +710,13 @@
34664
[(match_parallel 0 "load_multiple_operation"
34665
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
34666
(plus:SI (match_dup 4) (const_int -12)))
34667
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
34668
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34669
(mem:SI (plus:SI (match_dup 4)
34671
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34672
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34673
(mem:SI (plus:SI (match_dup 4)
34675
- (set (match_operand:SI 3 "arm_hard_register_operand" "")
34676
+ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
34677
(mem:SI (plus:SI (match_dup 4)
34678
(const_int -4))))])]
34679
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
34680
@@ -727,11 +727,11 @@
34681
(define_insn "*stm3_db"
34682
[(match_parallel 0 "store_multiple_operation"
34683
[(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int -12)))
34684
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34685
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34686
(set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
34687
- (match_operand:SI 2 "arm_hard_register_operand" ""))
34688
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
34689
(set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
34690
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
34691
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
34692
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
34693
"stm%(db%)\t%4, {%1, %2, %3}"
34694
[(set_attr "type" "store3")
34695
@@ -742,11 +742,11 @@
34696
[(set (match_operand:SI 4 "s_register_operand" "+&rk")
34697
(plus:SI (match_dup 4) (const_int -12)))
34698
(set (mem:SI (plus:SI (match_dup 4) (const_int -12)))
34699
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34700
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34701
(set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
34702
- (match_operand:SI 2 "arm_hard_register_operand" ""))
34703
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
34704
(set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
34705
- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
34706
+ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
34707
"TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
34708
"stm%(db%)\t%4!, {%1, %2, %3}"
34709
[(set_attr "type" "store3")
34710
@@ -847,9 +847,9 @@
34712
(define_insn "*ldm2_ia"
34713
[(match_parallel 0 "load_multiple_operation"
34714
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
34715
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34716
(mem:SI (match_operand:SI 3 "s_register_operand" "rk")))
34717
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34718
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34719
(mem:SI (plus:SI (match_dup 3)
34720
(const_int 4))))])]
34721
"TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
34722
@@ -859,9 +859,9 @@
34724
(define_insn "*thumb_ldm2_ia"
34725
[(match_parallel 0 "load_multiple_operation"
34726
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
34727
+ [(set (match_operand:SI 1 "low_register_operand" "")
34728
(mem:SI (match_operand:SI 3 "s_register_operand" "l")))
34729
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34730
+ (set (match_operand:SI 2 "low_register_operand" "")
34731
(mem:SI (plus:SI (match_dup 3)
34732
(const_int 4))))])]
34733
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 2"
34734
@@ -872,9 +872,9 @@
34735
[(match_parallel 0 "load_multiple_operation"
34736
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
34737
(plus:SI (match_dup 3) (const_int 8)))
34738
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
34739
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34740
(mem:SI (match_dup 3)))
34741
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34742
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34743
(mem:SI (plus:SI (match_dup 3)
34744
(const_int 4))))])]
34745
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
34746
@@ -886,9 +886,9 @@
34747
[(match_parallel 0 "load_multiple_operation"
34748
[(set (match_operand:SI 3 "s_register_operand" "+&l")
34749
(plus:SI (match_dup 3) (const_int 8)))
34750
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
34751
+ (set (match_operand:SI 1 "low_register_operand" "")
34752
(mem:SI (match_dup 3)))
34753
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34754
+ (set (match_operand:SI 2 "low_register_operand" "")
34755
(mem:SI (plus:SI (match_dup 3)
34756
(const_int 4))))])]
34757
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
34758
@@ -898,9 +898,9 @@
34759
(define_insn "*stm2_ia"
34760
[(match_parallel 0 "store_multiple_operation"
34761
[(set (mem:SI (match_operand:SI 3 "s_register_operand" "rk"))
34762
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34763
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34764
(set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
34765
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
34766
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
34767
"TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
34768
"stm%(ia%)\t%3, {%1, %2}"
34769
[(set_attr "type" "store2")
34770
@@ -911,9 +911,9 @@
34771
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
34772
(plus:SI (match_dup 3) (const_int 8)))
34773
(set (mem:SI (match_dup 3))
34774
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34775
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34776
(set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
34777
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
34778
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
34779
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
34780
"stm%(ia%)\t%3!, {%1, %2}"
34781
[(set_attr "type" "store2")
34782
@@ -924,9 +924,9 @@
34783
[(set (match_operand:SI 3 "s_register_operand" "+&l")
34784
(plus:SI (match_dup 3) (const_int 8)))
34785
(set (mem:SI (match_dup 3))
34786
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34787
+ (match_operand:SI 1 "low_register_operand" ""))
34788
(set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
34789
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
34790
+ (match_operand:SI 2 "low_register_operand" ""))])]
34791
"TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
34792
"stm%(ia%)\t%3!, {%1, %2}"
34793
[(set_attr "type" "store2")])
34794
@@ -933,10 +933,10 @@
34796
(define_insn "*ldm2_ib"
34797
[(match_parallel 0 "load_multiple_operation"
34798
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
34799
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34800
(mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
34802
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34803
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34804
(mem:SI (plus:SI (match_dup 3)
34805
(const_int 8))))])]
34806
"TARGET_ARM && XVECLEN (operands[0], 0) == 2"
34807
@@ -948,10 +948,10 @@
34808
[(match_parallel 0 "load_multiple_operation"
34809
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
34810
(plus:SI (match_dup 3) (const_int 8)))
34811
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
34812
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34813
(mem:SI (plus:SI (match_dup 3)
34815
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34816
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34817
(mem:SI (plus:SI (match_dup 3)
34818
(const_int 8))))])]
34819
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
34820
@@ -962,9 +962,9 @@
34821
(define_insn "*stm2_ib"
34822
[(match_parallel 0 "store_multiple_operation"
34823
[(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int 4)))
34824
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34825
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34826
(set (mem:SI (plus:SI (match_dup 3) (const_int 8)))
34827
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
34828
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
34829
"TARGET_ARM && XVECLEN (operands[0], 0) == 2"
34830
"stm%(ib%)\t%3, {%1, %2}"
34831
[(set_attr "type" "store2")
34832
@@ -975,9 +975,9 @@
34833
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
34834
(plus:SI (match_dup 3) (const_int 8)))
34835
(set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
34836
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34837
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34838
(set (mem:SI (plus:SI (match_dup 3) (const_int 8)))
34839
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
34840
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
34841
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
34842
"stm%(ib%)\t%3!, {%1, %2}"
34843
[(set_attr "type" "store2")
34844
@@ -985,10 +985,10 @@
34846
(define_insn "*ldm2_da"
34847
[(match_parallel 0 "load_multiple_operation"
34848
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
34849
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34850
(mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
34852
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34853
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34854
(mem:SI (match_dup 3)))])]
34855
"TARGET_ARM && XVECLEN (operands[0], 0) == 2"
34856
"ldm%(da%)\t%3, {%1, %2}"
34857
@@ -999,10 +999,10 @@
34858
[(match_parallel 0 "load_multiple_operation"
34859
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
34860
(plus:SI (match_dup 3) (const_int -8)))
34861
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
34862
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34863
(mem:SI (plus:SI (match_dup 3)
34865
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34866
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34867
(mem:SI (match_dup 3)))])]
34868
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
34869
"ldm%(da%)\t%3!, {%1, %2}"
34870
@@ -1012,9 +1012,9 @@
34871
(define_insn "*stm2_da"
34872
[(match_parallel 0 "store_multiple_operation"
34873
[(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int -4)))
34874
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34875
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34876
(set (mem:SI (match_dup 3))
34877
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
34878
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
34879
"TARGET_ARM && XVECLEN (operands[0], 0) == 2"
34880
"stm%(da%)\t%3, {%1, %2}"
34881
[(set_attr "type" "store2")
34882
@@ -1025,9 +1025,9 @@
34883
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
34884
(plus:SI (match_dup 3) (const_int -8)))
34885
(set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
34886
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34887
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34888
(set (mem:SI (match_dup 3))
34889
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
34890
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
34891
"TARGET_ARM && XVECLEN (operands[0], 0) == 3"
34892
"stm%(da%)\t%3!, {%1, %2}"
34893
[(set_attr "type" "store2")
34894
@@ -1035,10 +1035,10 @@
34896
(define_insn "*ldm2_db"
34897
[(match_parallel 0 "load_multiple_operation"
34898
- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
34899
+ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34900
(mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
34902
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34903
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34904
(mem:SI (plus:SI (match_dup 3)
34905
(const_int -4))))])]
34906
"TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
34907
@@ -1050,10 +1050,10 @@
34908
[(match_parallel 0 "load_multiple_operation"
34909
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
34910
(plus:SI (match_dup 3) (const_int -8)))
34911
- (set (match_operand:SI 1 "arm_hard_register_operand" "")
34912
+ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
34913
(mem:SI (plus:SI (match_dup 3)
34915
- (set (match_operand:SI 2 "arm_hard_register_operand" "")
34916
+ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
34917
(mem:SI (plus:SI (match_dup 3)
34918
(const_int -4))))])]
34919
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
34920
@@ -1064,9 +1064,9 @@
34921
(define_insn "*stm2_db"
34922
[(match_parallel 0 "store_multiple_operation"
34923
[(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int -8)))
34924
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34925
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34926
(set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
34927
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
34928
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
34929
"TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
34930
"stm%(db%)\t%3, {%1, %2}"
34931
[(set_attr "type" "store2")
34932
@@ -1077,9 +1077,9 @@
34933
[(set (match_operand:SI 3 "s_register_operand" "+&rk")
34934
(plus:SI (match_dup 3) (const_int -8)))
34935
(set (mem:SI (plus:SI (match_dup 3) (const_int -8)))
34936
- (match_operand:SI 1 "arm_hard_register_operand" ""))
34937
+ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
34938
(set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
34939
- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
34940
+ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
34941
"TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
34942
"stm%(db%)\t%3!, {%1, %2}"
34943
[(set_attr "type" "store2")
34944
Index: gcc/config/arm/predicates.md
34945
===================================================================
34946
--- a/src/gcc/config/arm/predicates.md (.../tags/gcc_4_8_2_release)
34947
+++ b/src/gcc/config/arm/predicates.md (.../branches/gcc-4_8-branch)
34948
@@ -31,11 +31,11 @@
34949
|| REGNO_REG_CLASS (REGNO (op)) != NO_REGS));
34952
-;; Any hard register.
34953
-(define_predicate "arm_hard_register_operand"
34954
+;; Any general register.
34955
+(define_predicate "arm_hard_general_register_operand"
34958
- return REGNO (op) < FIRST_PSEUDO_REGISTER;
34959
+ return REGNO (op) <= LAST_ARM_REGNUM;
34964
&& REGNO_REG_CLASS (REGNO (op)) == VFP_REGS)));
34967
+(define_predicate "vfp_hard_register_operand"
34968
+ (match_code "reg")
34970
+ return (IS_VFP_REGNUM (REGNO (op)));
34973
(define_predicate "zero_operand"
34974
(and (match_code "const_int,const_double,const_vector")
34975
(match_test "op == CONST0_RTX (mode)")))
34976
Index: gcc/config/arm/arm-ldmstm.ml
34977
===================================================================
34978
--- a/src/gcc/config/arm/arm-ldmstm.ml (.../tags/gcc_4_8_2_release)
34979
+++ b/src/gcc/config/arm/arm-ldmstm.ml (.../branches/gcc-4_8-branch)
34980
@@ -67,10 +67,13 @@
34981
Printf.sprintf ("(match_operand:SI %d \"s_register_operand\" \"%s%s\")")
34982
(nregs + 1) (inout_constr op_type) (constr thumb)
34984
+let reg_predicate thumb =
34985
+ if thumb then "low_register_operand" else "arm_hard_general_register_operand"
34987
let write_ldm_set thumb nregs offset opnr first =
34988
let indent = " " in
34989
Printf.printf "%s" (if first then " [" else indent);
34990
- Printf.printf "(set (match_operand:SI %d \"arm_hard_register_operand\" \"\")\n" opnr;
34991
+ Printf.printf "(set (match_operand:SI %d \"%s\" \"\")\n" opnr (reg_predicate thumb);
34992
Printf.printf "%s (mem:SI " indent;
34993
begin if offset != 0 then Printf.printf "(plus:SI " end;
34994
Printf.printf "%s" (destreg nregs first IN thumb);
34996
begin if offset != 0 then Printf.printf "(plus:SI " end;
34997
Printf.printf "%s" (destreg nregs first IN thumb);
34998
begin if offset != 0 then Printf.printf " (const_int %d))" offset end;
34999
- Printf.printf ")\n%s (match_operand:SI %d \"arm_hard_register_operand\" \"\"))" indent opnr
35000
+ Printf.printf ")\n%s (match_operand:SI %d \"%s\" \"\"))" indent opnr (reg_predicate thumb)
35002
let write_ldm_peep_set extra_indent nregs opnr first =
35003
let indent = " " ^ extra_indent in
35004
Index: gcc/config/arm/iterators.md
35005
===================================================================
35006
--- a/src/gcc/config/arm/iterators.md (.../tags/gcc_4_8_2_release)
35007
+++ b/src/gcc/config/arm/iterators.md (.../branches/gcc-4_8-branch)
35008
@@ -493,6 +493,10 @@
35009
(UNSPEC_VRINTA "no") (UNSPEC_VRINTM "no")
35010
(UNSPEC_VRINTR "yes") (UNSPEC_VRINTX "yes")])
35012
+(define_int_attr vrint_conds [(UNSPEC_VRINTZ "nocond") (UNSPEC_VRINTP "unconditional")
35013
+ (UNSPEC_VRINTA "unconditional") (UNSPEC_VRINTM "unconditional")
35014
+ (UNSPEC_VRINTR "nocond") (UNSPEC_VRINTX "nocond")])
35016
(define_int_attr nvrint_variant [(UNSPEC_NVRINTZ "z") (UNSPEC_NVRINTP "p")
35017
(UNSPEC_NVRINTA "a") (UNSPEC_NVRINTM "m")
35018
(UNSPEC_NVRINTX "x") (UNSPEC_NVRINTN "n")])
35019
Index: gcc/config/arm/arm.md
35020
===================================================================
35021
--- a/src/gcc/config/arm/arm.md (.../tags/gcc_4_8_2_release)
35022
+++ b/src/gcc/config/arm/arm.md (.../branches/gcc-4_8-branch)
35023
@@ -11036,7 +11036,7 @@
35024
[(set (match_operand:SI 1 "s_register_operand" "+rk")
35025
(plus:SI (match_dup 1)
35026
(match_operand:SI 2 "const_int_operand" "I")))
35027
- (set (match_operand:DF 3 "arm_hard_register_operand" "")
35028
+ (set (match_operand:DF 3 "vfp_hard_register_operand" "")
35029
(mem:DF (match_dup 1)))])]
35030
"TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
35032
@@ -11270,7 +11270,9 @@
35033
(match_operand:SI 1 "" "")
35034
(match_operand:SI 2 "" ""))]
35035
"TARGET_32BIT && arm_arch5e"
35038
+ [(set_attr "type" "load1")]
35041
;; General predication pattern
35043
Index: gcc/config/pa/pa.c
35044
===================================================================
35045
--- a/src/gcc/config/pa/pa.c (.../tags/gcc_4_8_2_release)
35046
+++ b/src/gcc/config/pa/pa.c (.../branches/gcc-4_8-branch)
35047
@@ -912,9 +912,12 @@
35048
legitimize_tls_address (rtx addr)
35050
rtx ret, insn, tmp, t1, t2, tp;
35051
- enum tls_model model = SYMBOL_REF_TLS_MODEL (addr);
35054
+ /* Currently, we can't handle anything but a SYMBOL_REF. */
35055
+ if (GET_CODE (addr) != SYMBOL_REF)
35058
+ switch (SYMBOL_REF_TLS_MODEL (addr))
35060
case TLS_MODEL_GLOBAL_DYNAMIC:
35061
tmp = gen_reg_rtx (Pmode);
35062
@@ -1035,7 +1038,7 @@
35063
&& !REG_POINTER (XEXP (x, 1)))
35064
return gen_rtx_PLUS (Pmode, XEXP (x, 1), XEXP (x, 0));
35066
- if (PA_SYMBOL_REF_TLS_P (x))
35067
+ if (pa_tls_referenced_p (x))
35068
return legitimize_tls_address (x);
35070
return legitimize_pic_address (x, mode, gen_reg_rtx (Pmode));
35071
@@ -1916,9 +1919,10 @@
35072
not consider them legitimate constants. Loop optimizations can
35073
call the emit_move_xxx with one as a source. */
35074
if ((GET_CODE (operand1) != HIGH && immediate_operand (operand1, mode))
35075
+ || (GET_CODE (operand1) == HIGH
35076
+ && symbolic_operand (XEXP (operand1, 0), mode))
35077
|| function_label_operand (operand1, VOIDmode)
35078
- || (GET_CODE (operand1) == HIGH
35079
- && symbolic_operand (XEXP (operand1, 0), mode)))
35080
+ || pa_tls_referenced_p (operand1))
35082
int ishighonly = 0;
35084
@@ -2625,7 +2629,7 @@
35085
if (optype0 == REGOP)
35086
latehalf[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
35087
else if (optype0 == OFFSOP)
35088
- latehalf[0] = adjust_address (operands[0], SImode, 4);
35089
+ latehalf[0] = adjust_address_nv (operands[0], SImode, 4);
35091
latehalf[0] = operands[0];
35093
@@ -2632,7 +2636,7 @@
35094
if (optype1 == REGOP)
35095
latehalf[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
35096
else if (optype1 == OFFSOP)
35097
- latehalf[1] = adjust_address (operands[1], SImode, 4);
35098
+ latehalf[1] = adjust_address_nv (operands[1], SImode, 4);
35099
else if (optype1 == CNSTOP)
35100
split_double (operands[1], &operands[1], &latehalf[1]);
35102
@@ -7539,7 +7543,7 @@
35103
if (!TARGET_LONG_CALLS && distance < MAX_PCREL17F_OFFSET)
35106
- if (TARGET_LONG_ABS_CALL && !flag_pic)
35111
@@ -8104,7 +8108,8 @@
35114
if (TARGET_FAST_INDIRECT_CALLS
35115
- || (!TARGET_PORTABLE_RUNTIME
35116
+ || (!TARGET_LONG_CALLS
35117
+ && !TARGET_PORTABLE_RUNTIME
35118
&& ((TARGET_PA_20 && !TARGET_SOM && distance < 7600000)
35119
|| distance < MAX_PCREL17F_OFFSET)))
35121
@@ -10397,7 +10402,7 @@
35122
/* TLS_MODEL_GLOBAL_DYNAMIC and TLS_MODEL_LOCAL_DYNAMIC are not
35123
legitimate constants. The other variants can't be handled by
35124
the move patterns after reload starts. */
35125
- if (PA_SYMBOL_REF_TLS_P (x))
35126
+ if (pa_tls_referenced_p (x))
35129
if (TARGET_64BIT && GET_CODE (x) == CONST_DOUBLE)
35130
@@ -10522,13 +10527,13 @@
35132
/* When INT14_OK_STRICT is false, a secondary reload is needed
35133
to adjust the displacement of SImode and DImode floating point
35134
- instructions. So, we return false when STRICT is true. We
35135
+ instructions but this may fail when the register also needs
35136
+ reloading. So, we return false when STRICT is true. We
35137
also reject long displacements for float mode addresses since
35138
the majority of accesses will use floating point instructions
35139
that don't support 14-bit offsets. */
35140
if (!INT14_OK_STRICT
35141
- && reload_in_progress
35143
+ && (strict || !(reload_in_progress || reload_completed))
35147
@@ -10588,8 +10593,7 @@
35150
if (!INT14_OK_STRICT
35151
- && reload_in_progress
35153
+ && (strict || !(reload_in_progress || reload_completed))
35157
Index: gcc/config/pa/pa.h
35158
===================================================================
35159
--- a/src/gcc/config/pa/pa.h (.../tags/gcc_4_8_2_release)
35160
+++ b/src/gcc/config/pa/pa.h (.../branches/gcc-4_8-branch)
35161
@@ -784,9 +784,9 @@
35163
#define MAX_REGS_PER_ADDRESS 2
35165
-/* Non-TLS symbolic references. */
35166
-#define PA_SYMBOL_REF_TLS_P(RTX) \
35167
- (GET_CODE (RTX) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (RTX) != 0)
35168
+/* TLS symbolic reference. */
35169
+#define PA_SYMBOL_REF_TLS_P(X) \
35170
+ (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (X) != 0)
35172
/* Recognize any constant value that is a valid address except
35173
for symbolic addresses. We get better CSE by rejecting them
35174
@@ -796,7 +796,8 @@
35175
#define CONSTANT_ADDRESS_P(X) \
35176
((GET_CODE (X) == LABEL_REF \
35177
|| (GET_CODE (X) == SYMBOL_REF && !SYMBOL_REF_TLS_MODEL (X)) \
35178
- || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST \
35179
+ || GET_CODE (X) == CONST_INT \
35180
+ || (GET_CODE (X) == CONST && !pa_tls_referenced_p (X)) \
35181
|| GET_CODE (X) == HIGH) \
35182
&& (reload_in_progress || reload_completed \
35183
|| ! pa_symbolic_expression_p (X)))
35184
Index: gcc/config/mips/driver-native.c
35185
===================================================================
35186
--- a/src/gcc/config/mips/driver-native.c (.../tags/gcc_4_8_2_release)
35187
+++ b/src/gcc/config/mips/driver-native.c (.../branches/gcc-4_8-branch)
35188
@@ -58,11 +58,17 @@
35189
if (strncmp (buf, "cpu model", sizeof ("cpu model") - 1) == 0)
35191
if (strstr (buf, "Godson2 V0.2") != NULL
35192
- || strstr (buf, "Loongson-2 V0.2") != NULL)
35193
+ || strstr (buf, "Loongson-2 V0.2") != NULL
35194
+ || strstr (buf, "Loongson-2E") != NULL)
35195
cpu = "loongson2e";
35196
else if (strstr (buf, "Godson2 V0.3") != NULL
35197
- || strstr (buf, "Loongson-2 V0.3") != NULL)
35198
+ || strstr (buf, "Loongson-2 V0.3") != NULL
35199
+ || strstr (buf, "Loongson-2F") != NULL)
35200
cpu = "loongson2f";
35201
+ else if (strstr (buf, "Godson3 V0.5") != NULL
35202
+ || strstr (buf, "Loongson-3 V0.5") != NULL
35203
+ || strstr (buf, "Loongson-3A") != NULL)
35204
+ cpu = "loongson3a";
35205
else if (strstr (buf, "SiByte SB1") != NULL)
35207
else if (strstr (buf, "R5000") != NULL)
35208
Index: gcc/config/mips/mips.md
35209
===================================================================
35210
--- a/src/gcc/config/mips/mips.md (.../tags/gcc_4_8_2_release)
35211
+++ b/src/gcc/config/mips/mips.md (.../branches/gcc-4_8-branch)
35216
+ ;; Integer operations that are too cumbersome to describe directly.
35221
;; Floating-point moves.
35224
@@ -1294,20 +1299,32 @@
35226
;; Combiner patterns for unsigned byte-add.
35228
-(define_insn "*baddu_si"
35229
+(define_insn "*baddu_si_eb"
35230
[(set (match_operand:SI 0 "register_operand" "=d")
35232
- (plus:QI (match_operand:QI 1 "register_operand" "d")
35233
- (match_operand:QI 2 "register_operand" "d"))))]
35236
+ (plus:SI (match_operand:SI 1 "register_operand" "d")
35237
+ (match_operand:SI 2 "register_operand" "d")) 3)))]
35238
+ "ISA_HAS_BADDU && BYTES_BIG_ENDIAN"
35240
[(set_attr "alu_type" "add")])
35242
+(define_insn "*baddu_si_el"
35243
+ [(set (match_operand:SI 0 "register_operand" "=d")
35246
+ (plus:SI (match_operand:SI 1 "register_operand" "d")
35247
+ (match_operand:SI 2 "register_operand" "d")) 0)))]
35248
+ "ISA_HAS_BADDU && !BYTES_BIG_ENDIAN"
35249
+ "baddu\\t%0,%1,%2"
35250
+ [(set_attr "alu_type" "add")])
35252
(define_insn "*baddu_di<mode>"
35253
[(set (match_operand:GPR 0 "register_operand" "=d")
35255
- (plus:QI (truncate:QI (match_operand:DI 1 "register_operand" "d"))
35256
- (truncate:QI (match_operand:DI 2 "register_operand" "d")))))]
35258
+ (plus:DI (match_operand:DI 1 "register_operand" "d")
35259
+ (match_operand:DI 2 "register_operand" "d")))))]
35260
"ISA_HAS_BADDU && TARGET_64BIT"
35262
[(set_attr "alu_type" "add")])
35263
@@ -5367,6 +5384,56 @@
35265
[(set_attr "type" "shift")
35266
(set_attr "mode" "<MODE>")])
35268
+(define_insn "bswaphi2"
35269
+ [(set (match_operand:HI 0 "register_operand" "=d")
35270
+ (bswap:HI (match_operand:HI 1 "register_operand" "d")))]
35273
+ [(set_attr "type" "shift")])
35275
+(define_insn_and_split "bswapsi2"
35276
+ [(set (match_operand:SI 0 "register_operand" "=d")
35277
+ (bswap:SI (match_operand:SI 1 "register_operand" "d")))]
35278
+ "ISA_HAS_WSBH && ISA_HAS_ROR"
35281
+ [(set (match_dup 0) (unspec:SI [(match_dup 1)] UNSPEC_WSBH))
35282
+ (set (match_dup 0) (rotatert:SI (match_dup 0) (const_int 16)))]
35284
+ [(set_attr "length" "8")])
35286
+(define_insn_and_split "bswapdi2"
35287
+ [(set (match_operand:DI 0 "register_operand" "=d")
35288
+ (bswap:DI (match_operand:DI 1 "register_operand" "d")))]
35289
+ "TARGET_64BIT && ISA_HAS_WSBH"
35292
+ [(set (match_dup 0) (unspec:DI [(match_dup 1)] UNSPEC_DSBH))
35293
+ (set (match_dup 0) (unspec:DI [(match_dup 0)] UNSPEC_DSHD))]
35295
+ [(set_attr "length" "8")])
35297
+(define_insn "wsbh"
35298
+ [(set (match_operand:SI 0 "register_operand" "=d")
35299
+ (unspec:SI [(match_operand:SI 1 "register_operand" "d")] UNSPEC_WSBH))]
35302
+ [(set_attr "type" "shift")])
35304
+(define_insn "dsbh"
35305
+ [(set (match_operand:DI 0 "register_operand" "=d")
35306
+ (unspec:DI [(match_operand:DI 1 "register_operand" "d")] UNSPEC_DSBH))]
35307
+ "TARGET_64BIT && ISA_HAS_WSBH"
35309
+ [(set_attr "type" "shift")])
35311
+(define_insn "dshd"
35312
+ [(set (match_operand:DI 0 "register_operand" "=d")
35313
+ (unspec:DI [(match_operand:DI 1 "register_operand" "d")] UNSPEC_DSHD))]
35314
+ "TARGET_64BIT && ISA_HAS_WSBH"
35316
+ [(set_attr "type" "shift")])
35319
;; ....................
35320
Index: gcc/config/mips/mips.c
35321
===================================================================
35322
--- a/src/gcc/config/mips/mips.c (.../tags/gcc_4_8_2_release)
35323
+++ b/src/gcc/config/mips/mips.c (.../branches/gcc-4_8-branch)
35324
@@ -3560,17 +3560,6 @@
35328
-/* Return the cost of an operand X that can be trucated for free.
35329
- SPEED says whether we're optimizing for size or speed. */
35332
-mips_truncated_op_cost (rtx x, bool speed)
35334
- if (GET_CODE (x) == TRUNCATE)
35336
- return set_src_cost (x, speed);
35339
/* Implement TARGET_RTX_COSTS. */
35342
@@ -3951,13 +3940,12 @@
35344
if (outer_code == SET
35346
+ && (GET_CODE (XEXP (x, 0)) == TRUNCATE
35347
+ || GET_CODE (XEXP (x, 0)) == SUBREG)
35348
&& GET_MODE (XEXP (x, 0)) == QImode
35349
- && GET_CODE (XEXP (x, 0)) == PLUS)
35350
+ && GET_CODE (XEXP (XEXP (x, 0), 0)) == PLUS)
35352
- rtx plus = XEXP (x, 0);
35353
- *total = (COSTS_N_INSNS (1)
35354
- + mips_truncated_op_cost (XEXP (plus, 0), speed)
35355
- + mips_truncated_op_cost (XEXP (plus, 1), speed));
35356
+ *total = set_src_cost (XEXP (XEXP (x, 0), 0), speed);
35359
*total = mips_zero_extend_cost (mode, XEXP (x, 0));
35360
@@ -8057,7 +8045,7 @@
35363
int truth = (code == NE) == (letter == 'T');
35364
- fputc ("zfnt"[truth * 2 + (GET_MODE (op) == CCmode)], file);
35365
+ fputc ("zfnt"[truth * 2 + ST_REG_P (REGNO (XEXP (op, 0)))], file);
35369
Index: gcc/config/mips/mips.h
35370
===================================================================
35371
--- a/src/gcc/config/mips/mips.h (.../tags/gcc_4_8_2_release)
35372
+++ b/src/gcc/config/mips/mips.h (.../branches/gcc-4_8-branch)
35373
@@ -949,6 +949,11 @@
35374
|| TARGET_SMARTMIPS) \
35377
+/* ISA has the WSBH (word swap bytes within halfwords) instruction.
35378
+ 64-bit targets also provide DSBH and DSHD. */
35379
+#define ISA_HAS_WSBH ((ISA_MIPS32R2 || ISA_MIPS64R2) \
35380
+ && !TARGET_MIPS16)
35382
/* ISA has data prefetch instructions. This controls use of 'pref'. */
35383
#define ISA_HAS_PREFETCH ((ISA_MIPS4 \
35384
|| TARGET_LOONGSON_2EF \
35385
Index: gcc/params.def
35386
===================================================================
35387
--- a/src/gcc/params.def (.../tags/gcc_4_8_2_release)
35388
+++ b/src/gcc/params.def (.../branches/gcc-4_8-branch)
35389
@@ -1014,6 +1014,12 @@
35390
"strength reduction",
35393
+DEFPARAM (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS,
35394
+ "uninit-control-dep-attempts",
35395
+ "Maximum number of nested calls to search for control dependencies "
35396
+ "during uninitialized variable analysis",
35402
Index: gcc/regcprop.c
35403
===================================================================
35404
--- a/src/gcc/regcprop.c (.../tags/gcc_4_8_2_release)
35405
+++ b/src/gcc/regcprop.c (.../branches/gcc-4_8-branch)
35406
@@ -747,6 +747,7 @@
35407
int n_ops, i, alt, predicated;
35408
bool is_asm, any_replacements;
35411
bool replaced[MAX_RECOG_OPERANDS];
35412
bool changed = false;
35413
struct kill_set_value_data ksvd;
35414
@@ -815,6 +816,23 @@
35415
if (recog_op_alt[i][alt].earlyclobber)
35416
kill_value (recog_data.operand[i], vd);
35418
+ /* If we have dead sets in the insn, then we need to note these as we
35419
+ would clobbers. */
35420
+ for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
35422
+ if (REG_NOTE_KIND (link) == REG_UNUSED)
35424
+ kill_value (XEXP (link, 0), vd);
35425
+ /* Furthermore, if the insn looked like a single-set,
35426
+ but the dead store kills the source value of that
35427
+ set, then we can no-longer use the plain move
35428
+ special case below. */
35430
+ && reg_overlap_mentioned_p (XEXP (link, 0), SET_SRC (set)))
35435
/* Special-case plain move instructions, since we may well
35436
be able to do the move from a different register class. */
35437
if (set && REG_P (SET_SRC (set)))
35438
Index: libgo/configure
35439
===================================================================
35440
--- a/src/libgo/configure (.../tags/gcc_4_8_2_release)
35441
+++ b/src/libgo/configure (.../branches/gcc-4_8-branch)
35442
@@ -14700,7 +14700,7 @@
35446
-for ac_func in accept4 epoll_create1 faccessat fallocate fchmodat fchownat futimesat inotify_add_watch inotify_init inotify_init1 inotify_rm_watch mkdirat mknodat openat pipe2 renameat sync_file_range splice tee unlinkat unshare utimensat
35447
+for ac_func in accept4 dup3 epoll_create1 faccessat fallocate fchmodat fchownat futimesat getxattr inotify_add_watch inotify_init inotify_init1 inotify_rm_watch listxattr mkdirat mknodat openat pipe2 removexattr renameat setxattr sync_file_range splice tee unlinkat unshare utimensat
35449
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
35450
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
35451
Index: libgo/Makefile.in
35452
===================================================================
35453
--- a/src/libgo/Makefile.in (.../tags/gcc_4_8_2_release)
35454
+++ b/src/libgo/Makefile.in (.../branches/gcc-4_8-branch)
35455
@@ -195,7 +195,7 @@
35456
@LIBGO_IS_LINUX_TRUE@am__objects_5 = getncpu-linux.lo
35457
am__objects_6 = go-append.lo go-assert.lo go-assert-interface.lo \
35458
go-byte-array-to-string.lo go-breakpoint.lo go-caller.lo \
35459
- go-callers.lo go-can-convert-interface.lo go-cgo.lo \
35460
+ go-callers.lo go-can-convert-interface.lo go-cdiv.lo go-cgo.lo \
35461
go-check-interface.lo go-construct-map.lo \
35462
go-convert-interface.lo go-copy.lo go-defer.lo \
35463
go-deferred-recover.lo go-eface-compare.lo \
35464
@@ -757,6 +757,7 @@
35465
runtime/go-caller.c \
35466
runtime/go-callers.c \
35467
runtime/go-can-convert-interface.c \
35468
+ runtime/go-cdiv.c \
35470
runtime/go-check-interface.c \
35471
runtime/go-construct-map.c \
35472
@@ -1446,7 +1447,7 @@
35473
go/go/build/build.go \
35474
go/go/build/doc.go \
35475
go/go/build/read.go \
35477
+ go/go/build/syslist.go
35479
go_go_doc_files = \
35480
go/go/doc/comment.go \
35481
@@ -2368,6 +2369,7 @@
35482
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-caller.Plo@am__quote@
35483
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-callers.Plo@am__quote@
35484
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-can-convert-interface.Plo@am__quote@
35485
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-cdiv.Plo@am__quote@
35486
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-cgo.Plo@am__quote@
35487
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-check-interface.Plo@am__quote@
35488
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-construct-map.Plo@am__quote@
35489
@@ -2554,6 +2556,13 @@
35490
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
35491
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o go-can-convert-interface.lo `test -f 'runtime/go-can-convert-interface.c' || echo '$(srcdir)/'`runtime/go-can-convert-interface.c
35493
+go-cdiv.lo: runtime/go-cdiv.c
35494
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT go-cdiv.lo -MD -MP -MF $(DEPDIR)/go-cdiv.Tpo -c -o go-cdiv.lo `test -f 'runtime/go-cdiv.c' || echo '$(srcdir)/'`runtime/go-cdiv.c
35495
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/go-cdiv.Tpo $(DEPDIR)/go-cdiv.Plo
35496
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/go-cdiv.c' object='go-cdiv.lo' libtool=yes @AMDEPBACKSLASH@
35497
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
35498
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o go-cdiv.lo `test -f 'runtime/go-cdiv.c' || echo '$(srcdir)/'`runtime/go-cdiv.c
35500
go-cgo.lo: runtime/go-cgo.c
35501
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT go-cgo.lo -MD -MP -MF $(DEPDIR)/go-cgo.Tpo -c -o go-cgo.lo `test -f 'runtime/go-cgo.c' || echo '$(srcdir)/'`runtime/go-cgo.c
35502
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/go-cgo.Tpo $(DEPDIR)/go-cgo.Plo
35503
@@ -5062,15 +5071,6 @@
35505
.PHONY: go/build/check
35507
-syslist.go: s-syslist; @true
35508
-s-syslist: Makefile
35509
- echo '// Generated automatically by make.' >syslist.go.tmp
35510
- echo 'package build' >>syslist.go.tmp
35511
- echo 'const goosList = "$(GOOS)"' >>syslist.go.tmp
35512
- echo 'const goarchList = "$(GOARCH)"' >>syslist.go.tmp
35513
- $(SHELL) $(srcdir)/../move-if-change syslist.go.tmp syslist.go
35516
@go_include@ go/doc.lo.dep
35517
go/doc.lo.dep: $(go_go_doc_files)
35519
Index: libgo/runtime/go-defer.c
35520
===================================================================
35521
--- a/src/libgo/runtime/go-defer.c (.../tags/gcc_4_8_2_release)
35522
+++ b/src/libgo/runtime/go-defer.c (.../branches/gcc-4_8-branch)
35526
n->__retaddr = NULL;
35527
+ n->__makefunc_can_recover = 0;
35531
Index: libgo/runtime/go-defer.h
35532
===================================================================
35533
--- a/src/libgo/runtime/go-defer.h (.../tags/gcc_4_8_2_release)
35534
+++ b/src/libgo/runtime/go-defer.h (.../branches/gcc-4_8-branch)
35536
set by __go_set_defer_retaddr which is called by the thunks
35537
created by defer statements. */
35538
const void *__retaddr;
35540
+ /* Set to true if a function created by reflect.MakeFunc is
35541
+ permitted to recover. The return address of such a function
35542
+ function will be somewhere in libffi, so __retaddr is not
35544
+ _Bool __makefunc_can_recover;
35546
Index: libgo/runtime/go-int-array-to-string.c
35547
===================================================================
35548
--- a/src/libgo/runtime/go-int-array-to-string.c (.../tags/gcc_4_8_2_release)
35549
+++ b/src/libgo/runtime/go-int-array-to-string.c (.../branches/gcc-4_8-branch)
35552
if (v < 0 || v > 0x10ffff)
35554
+ else if (0xd800 <= v && v <= 0xdfff)
35561
if (v < 0 || v > 0x10ffff)
35563
+ else if (0xd800 <= v && v <= 0xdfff)
35568
Index: libgo/runtime/go-nosys.c
35569
===================================================================
35570
--- a/src/libgo/runtime/go-nosys.c (.../tags/gcc_4_8_2_release)
35571
+++ b/src/libgo/runtime/go-nosys.c (.../branches/gcc-4_8-branch)
35578
+dup3 (int oldfd __attribute__ ((unused)),
35579
+ int newfd __attribute__ ((unused)),
35580
+ int flags __attribute__ ((unused)))
35587
#ifndef HAVE_EPOLL_CREATE1
35589
epoll_create1 (int flags __attribute__ ((unused)))
35590
@@ -112,6 +123,18 @@
35594
+#ifndef HAVE_GETXATTR
35596
+getxattr (const char *path __attribute__ ((unused)),
35597
+ const char *name __attribute__ ((unused)),
35598
+ void *value __attribute__ ((unused)),
35599
+ size_t size __attribute__ ((unused)))
35606
#ifndef HAVE_INOTIFY_ADD_WATCH
35608
inotify_add_watch (int fd __attribute__ ((unused)),
35609
@@ -151,6 +174,17 @@
35613
+#ifndef HAVE_LISTXATTR
35615
+listxattr (const char *path __attribute__ ((unused)),
35616
+ char *list __attribute__ ((unused)),
35617
+ size_t size __attribute__ ((unused)))
35624
#ifndef HAVE_MKDIRAT
35626
mkdirat (int dirfd __attribute__ ((unused)),
35627
@@ -196,6 +230,16 @@
35631
+#ifndef HAVE_REMOVEXATTR
35633
+removexattr (const char *path __attribute__ ((unused)),
35634
+ const char *name __attribute__ ((unused)))
35641
#ifndef HAVE_RENAMEAT
35643
renameat (int olddirfd __attribute__ ((unused)),
35644
@@ -208,6 +252,19 @@
35648
+#ifndef HAVE_SETXATTR
35650
+setxattr (const char *path __attribute__ ((unused)),
35651
+ const char *name __attribute__ ((unused)),
35652
+ const void *value __attribute__ ((unused)),
35653
+ size_t size __attribute__ ((unused)),
35654
+ int flags __attribute__ ((unused)))
35661
#ifndef HAVE_SPLICE
35663
splice (int fd __attribute__ ((unused)),
35664
Index: libgo/runtime/runtime.h
35665
===================================================================
35666
--- a/src/libgo/runtime/runtime.h (.../tags/gcc_4_8_2_release)
35667
+++ b/src/libgo/runtime/runtime.h (.../branches/gcc-4_8-branch)
35668
@@ -440,7 +440,7 @@
35670
void runtime_hashinit(void);
35672
-void runtime_traceback();
35673
+void runtime_traceback(void);
35674
void runtime_tracebackothers(G*);
35677
@@ -756,6 +756,7 @@
35678
extern _Bool __go_file_line(uintptr, String*, String*, intgo *);
35679
extern byte* runtime_progname();
35680
extern void runtime_main(void*);
35681
+extern uint32 runtime_in_callers;
35683
int32 getproccount(void);
35685
Index: libgo/runtime/proc.c
35686
===================================================================
35687
--- a/src/libgo/runtime/proc.c (.../tags/gcc_4_8_2_release)
35688
+++ b/src/libgo/runtime/proc.c (.../branches/gcc-4_8-branch)
35689
@@ -1716,10 +1716,30 @@
35690
// entersyscall is going to return immediately after.
35692
void runtime_entersyscall(void) __attribute__ ((no_split_stack));
35693
+static void doentersyscall(void) __attribute__ ((no_split_stack, noinline));
35696
runtime_entersyscall()
35698
+ // Save the registers in the g structure so that any pointers
35699
+ // held in registers will be seen by the garbage collector.
35700
+ getcontext(&g->gcregs);
35702
+ // Do the work in a separate function, so that this function
35703
+ // doesn't save any registers on its own stack. If this
35704
+ // function does save any registers, we might store the wrong
35705
+ // value in the call to getcontext.
35707
+ // FIXME: This assumes that we do not need to save any
35708
+ // callee-saved registers to access the TLS variable g. We
35709
+ // don't want to put the ucontext_t on the stack because it is
35710
+ // large and we can not split the stack here.
35711
+ doentersyscall();
35717
if(m->profilehz > 0)
35718
runtime_setprof(false);
35720
@@ -1736,10 +1756,6 @@
35724
- // Save the registers in the g structure so that any pointers
35725
- // held in registers will be seen by the garbage collector.
35726
- getcontext(&g->gcregs);
35728
g->status = Gsyscall;
35730
if(runtime_atomicload(&runtime_sched.sysmonwait)) { // TODO: fast atomic
35731
@@ -2239,6 +2255,14 @@
35732
if(prof.fn == nil || prof.hz == 0)
35735
+ if(runtime_atomicload(&runtime_in_callers) > 0) {
35736
+ // If SIGPROF arrived while already fetching runtime
35737
+ // callers we can have trouble on older systems
35738
+ // because the unwind library calls dl_iterate_phdr
35739
+ // which was not recursive in the past.
35743
runtime_lock(&prof);
35744
if(prof.fn == nil) {
35745
runtime_unlock(&prof);
35746
Index: libgo/runtime/mgc0.c
35747
===================================================================
35748
--- a/src/libgo/runtime/mgc0.c (.../tags/gcc_4_8_2_release)
35749
+++ b/src/libgo/runtime/mgc0.c (.../branches/gcc-4_8-branch)
35750
@@ -174,7 +174,7 @@
35755
+} work __attribute__((aligned(8)));
35758
GC_DEFAULT_PTR = GC_NUM_INSTR,
35759
@@ -239,8 +239,7 @@
35760
// (Manually inlined copy of MHeap_LookupMaybe.)
35761
k = (uintptr)obj>>PageShift;
35763
- if(sizeof(void*) == 8)
35764
- x -= (uintptr)runtime_mheap->arena_start>>PageShift;
35765
+ x -= (uintptr)runtime_mheap->arena_start>>PageShift;
35766
s = runtime_mheap->map[x];
35767
if(s == nil || k < s->start || k - s->start >= s->npages || s->state != MSpanInUse)
35769
@@ -418,8 +417,7 @@
35770
// (Manually inlined copy of MHeap_LookupMaybe.)
35771
k = (uintptr)obj>>PageShift;
35773
- if(sizeof(void*) == 8)
35774
- x -= (uintptr)arena_start>>PageShift;
35775
+ x -= (uintptr)arena_start>>PageShift;
35776
s = runtime_mheap->map[x];
35777
if(s == nil || k < s->start || k - s->start >= s->npages || s->state != MSpanInUse)
35779
@@ -466,8 +464,7 @@
35780
// Ask span about size class.
35781
// (Manually inlined copy of MHeap_Lookup.)
35782
x = (uintptr)obj >> PageShift;
35783
- if(sizeof(void*) == 8)
35784
- x -= (uintptr)arena_start>>PageShift;
35785
+ x -= (uintptr)arena_start>>PageShift;
35786
s = runtime_mheap->map[x];
35789
@@ -585,8 +582,7 @@
35792
x = (uintptr)obj >> PageShift;
35793
- if(sizeof(void*) == 8)
35794
- x -= (uintptr)(runtime_mheap->arena_start)>>PageShift;
35795
+ x -= (uintptr)(runtime_mheap->arena_start)>>PageShift;
35796
s = runtime_mheap->map[x];
35797
objstart = (byte*)((uintptr)s->start<<PageShift);
35798
if(s->sizeclass != 0) {
35799
Index: libgo/runtime/go-signal.c
35800
===================================================================
35801
--- a/src/libgo/runtime/go-signal.c (.../tags/gcc_4_8_2_release)
35802
+++ b/src/libgo/runtime/go-signal.c (.../branches/gcc-4_8-branch)
35803
@@ -234,7 +234,7 @@
35807
- runtime_traceback (g);
35808
+ runtime_traceback ();
35809
runtime_tracebackothers (g);
35811
/* The gc library calls runtime_dumpregs here, and provides
35812
@@ -399,6 +399,9 @@
35816
+#ifdef USING_SPLIT_STACK
35817
+ void *stack_context[10];
35820
/* We are now running on the stack registered via sigaltstack.
35821
(Actually there is a small span of time between runtime_siginit
35822
@@ -409,7 +412,7 @@
35825
#ifdef USING_SPLIT_STACK
35826
- __splitstack_getcontext (&gp->stack_context[0]);
35827
+ __splitstack_getcontext (&stack_context[0]);
35831
@@ -432,7 +435,7 @@
35834
#ifdef USING_SPLIT_STACK
35835
- __splitstack_setcontext (&gp->stack_context[0]);
35836
+ __splitstack_setcontext (&stack_context[0]);
35840
Index: libgo/runtime/go-callers.c
35841
===================================================================
35842
--- a/src/libgo/runtime/go-callers.c (.../tags/gcc_4_8_2_release)
35843
+++ b/src/libgo/runtime/go-callers.c (.../branches/gcc-4_8-branch)
35845
#include "runtime.h"
35848
+/* This is set to non-zero when calling backtrace_full. This is used
35849
+ to avoid getting hanging on a recursive lock in dl_iterate_phdr on
35850
+ older versions of glibc when a SIGPROF signal arrives while
35851
+ collecting a backtrace. */
35853
+uint32 runtime_in_callers;
35855
/* Argument passed to callback function. */
35857
struct callers_data
35858
@@ -111,8 +118,10 @@
35859
data.skip = skip + 1;
35862
+ runtime_xadd (&runtime_in_callers, 1);
35863
backtrace_full (__go_get_backtrace_state (), 0, callback, error_callback,
35865
+ runtime_xadd (&runtime_in_callers, -1);
35869
Index: libgo/runtime/go-cdiv.c
35870
===================================================================
35871
--- a/src/libgo/runtime/go-cdiv.c (.../tags/gcc_4_8_2_release)
35872
+++ b/src/libgo/runtime/go-cdiv.c (.../branches/gcc-4_8-branch)
35874
+/* go-cdiv.c -- complex division routines
35876
+ Copyright 2013 The Go Authors. All rights reserved.
35877
+ Use of this source code is governed by a BSD-style
35878
+ license that can be found in the LICENSE file. */
35880
+/* Calls to these functions are generated by the Go frontend for
35881
+ division of complex64 or complex128. We use these because Go's
35882
+ complex division expects slightly different results from the GCC
35883
+ default. When dividing NaN+1.0i / 0+0i, Go expects NaN+NaNi but
35884
+ GCC generates NaN+Infi. NaN+Infi seems wrong seems the rules of
35885
+ C99 Annex G specify that if either side of a complex number is Inf,
35886
+ the the whole number is Inf, but an operation involving NaN ought
35887
+ to result in NaN, not Inf. */
35890
+__go_complex64_div (__complex float a, __complex float b)
35892
+ if (__builtin_expect (b == 0+0i, 0))
35894
+ if (!__builtin_isinff (__real__ a)
35895
+ && !__builtin_isinff (__imag__ a)
35896
+ && (__builtin_isnanf (__real__ a) || __builtin_isnanf (__imag__ a)))
35898
+ /* Pass "1" to nanf to match math/bits.go. */
35899
+ return __builtin_nanf("1") + __builtin_nanf("1")*1i;
35906
+__go_complex128_div (__complex double a, __complex double b)
35908
+ if (__builtin_expect (b == 0+0i, 0))
35910
+ if (!__builtin_isinf (__real__ a)
35911
+ && !__builtin_isinf (__imag__ a)
35912
+ && (__builtin_isnan (__real__ a) || __builtin_isnan (__imag__ a)))
35914
+ /* Pass "1" to nan to match math/bits.go. */
35915
+ return __builtin_nan("1") + __builtin_nan("1")*1i;
35920
Index: libgo/runtime/go-reflect-call.c
35921
===================================================================
35922
--- a/src/libgo/runtime/go-reflect-call.c (.../tags/gcc_4_8_2_release)
35923
+++ b/src/libgo/runtime/go-reflect-call.c (.../branches/gcc-4_8-branch)
35925
const struct __go_struct_field *fields;
35928
+ field_count = descriptor->__fields.__count;
35929
+ if (field_count == 0) {
35930
+ return &ffi_type_void;
35932
ret = (ffi_type *) __go_alloc (sizeof (ffi_type));
35933
ret->type = FFI_TYPE_STRUCT;
35934
- field_count = descriptor->__fields.__count;
35935
fields = (const struct __go_struct_field *) descriptor->__fields.__values;
35936
ret->elements = (ffi_type **) __go_alloc ((field_count + 1)
35937
* sizeof (ffi_type *));
35938
Index: libgo/runtime/go-recover.c
35939
===================================================================
35940
--- a/src/libgo/runtime/go-recover.c (.../tags/gcc_4_8_2_release)
35941
+++ b/src/libgo/runtime/go-recover.c (.../branches/gcc-4_8-branch)
35942
@@ -16,12 +16,14 @@
35943
__go_can_recover--this is, the thunk. */
35946
-__go_can_recover (const void* retaddr)
35947
+__go_can_recover (const void *retaddr)
35950
struct __go_defer_stack *d;
35954
+ const byte *name;
35961
dret = (const char *) d->__retaddr;
35962
- return ret <= dret && ret + 16 >= dret;
35963
+ if (ret <= dret && ret + 16 >= dret)
35966
+ /* If the function calling recover was created by reflect.MakeFunc,
35967
+ then RETADDR will be somewhere in libffi. Our caller is
35968
+ permitted to recover if it was called from libffi. */
35969
+ if (!d->__makefunc_can_recover)
35972
+ if (runtime_callers (2, &loc, 1) < 1)
35975
+ /* If we have no function name, then we weren't called by Go code.
35976
+ Guess that we were called by libffi. */
35977
+ if (loc.function.len == 0)
35980
+ if (loc.function.len < 4)
35982
+ name = loc.function.str;
35983
+ if (*name == '_')
35985
+ if (loc.function.len < 5)
35990
+ if (name[0] == 'f' && name[1] == 'f' && name[2] == 'i' && name[3] == '_')
35993
+ /* We may also be called by reflect.makeFuncImpl.call, for a
35994
+ function created by reflect.MakeFunc. */
35995
+ if (__builtin_strstr ((const char *) name, "makeFuncImpl") != NULL)
36001
+/* This function is called when code is about to enter a function
36002
+ created by reflect.MakeFunc. It is called by the function stub
36003
+ used by MakeFunc. If the stub is permitted to call recover, then a
36004
+ real MakeFunc function is permitted to call recover. */
36007
+__go_makefunc_can_recover (const void *retaddr)
36009
+ struct __go_defer_stack *d;
36011
+ d = runtime_g ()->defer;
36013
+ && !d->__makefunc_can_recover
36014
+ && __go_can_recover (retaddr))
36015
+ d->__makefunc_can_recover = 1;
36018
+/* This function is called when code is about to exit a function
36019
+ created by reflect.MakeFunc. It is called by the function stub
36020
+ used by MakeFunc. It clears the __makefunc_can_recover field.
36021
+ It's OK to always clear this field, because __go_can_recover will
36022
+ only be called by a stub created for a function that calls recover.
36023
+ That stub will not call a function created by reflect.MakeFunc, so
36024
+ by the time we get here any caller higher up on the call stack no
36025
+ longer needs the information. */
36028
+__go_makefunc_returning (void)
36030
+ struct __go_defer_stack *d;
36032
+ d = runtime_g ()->defer;
36034
+ d->__makefunc_can_recover = 0;
36037
/* This is only called when it is valid for the caller to recover the
36038
value on top of the panic stack, if there is one. */
36040
Index: libgo/runtime/malloc.goc
36041
===================================================================
36042
--- a/src/libgo/runtime/malloc.goc (.../tags/gcc_4_8_2_release)
36043
+++ b/src/libgo/runtime/malloc.goc (.../branches/gcc-4_8-branch)
36044
@@ -541,8 +541,7 @@
36046
// (Manually inlined copy of runtime_MHeap_Lookup)
36047
p = (uintptr)v>>PageShift;
36048
- if(sizeof(void*) == 8)
36049
- p -= (uintptr)runtime_mheap->arena_start >> PageShift;
36050
+ p -= (uintptr)runtime_mheap->arena_start >> PageShift;
36051
s = runtime_mheap->map[p];
36053
if(s->sizeclass == 0) {
36054
Index: libgo/runtime/go-make-slice.c
36055
===================================================================
36056
--- a/src/libgo/runtime/go-make-slice.c (.../tags/gcc_4_8_2_release)
36057
+++ b/src/libgo/runtime/go-make-slice.c (.../branches/gcc-4_8-branch)
36059
std = (const struct __go_slice_type *) td;
36061
ilen = (intgo) len;
36062
- if (ilen < 0 || (uintptr_t) ilen != len)
36064
+ || (uintptr_t) ilen != len
36065
+ || (std->__element_type->__size > 0
36066
+ && len > MaxMem / std->__element_type->__size))
36067
runtime_panicstring ("makeslice: len out of range");
36069
icap = (intgo) cap;
36070
Index: libgo/runtime/mheap.c
36071
===================================================================
36072
--- a/src/libgo/runtime/mheap.c (.../tags/gcc_4_8_2_release)
36073
+++ b/src/libgo/runtime/mheap.c (.../branches/gcc-4_8-branch)
36074
@@ -150,8 +150,7 @@
36075
runtime_MSpan_Init(t, s->start + npage, s->npages - npage);
36078
- if(sizeof(void*) == 8)
36079
- p -= ((uintptr)h->arena_start>>PageShift);
36080
+ p -= ((uintptr)h->arena_start>>PageShift);
36084
@@ -169,8 +168,7 @@
36085
s->elemsize = (sizeclass==0 ? s->npages<<PageShift : (uintptr)runtime_class_to_size[sizeclass]);
36086
s->types.compression = MTypes_Empty;
36088
- if(sizeof(void*) == 8)
36089
- p -= ((uintptr)h->arena_start>>PageShift);
36090
+ p -= ((uintptr)h->arena_start>>PageShift);
36091
for(n=0; n<npage; n++)
36094
@@ -241,8 +239,7 @@
36095
mstats.mspan_sys = h->spanalloc.sys;
36096
runtime_MSpan_Init(s, (uintptr)v>>PageShift, ask>>PageShift);
36098
- if(sizeof(void*) == 8)
36099
- p -= ((uintptr)h->arena_start>>PageShift);
36100
+ p -= ((uintptr)h->arena_start>>PageShift);
36102
h->map[p + s->npages - 1] = s;
36103
s->state = MSpanInUse;
36104
@@ -259,8 +256,7 @@
36108
- if(sizeof(void*) == 8)
36109
- p -= (uintptr)h->arena_start;
36110
+ p -= (uintptr)h->arena_start;
36111
return h->map[p >> PageShift];
36114
@@ -281,8 +277,7 @@
36116
p = (uintptr)v>>PageShift;
36118
- if(sizeof(void*) == 8)
36119
- q -= (uintptr)h->arena_start >> PageShift;
36120
+ q -= (uintptr)h->arena_start >> PageShift;
36122
if(s == nil || p < s->start || p - s->start >= s->npages)
36124
@@ -332,8 +327,7 @@
36126
// Coalesce with earlier, later spans.
36128
- if(sizeof(void*) == 8)
36129
- p -= (uintptr)h->arena_start >> PageShift;
36130
+ p -= (uintptr)h->arena_start >> PageShift;
36131
if(p > 0 && (t = h->map[p-1]) != nil && t->state != MSpanInUse) {
36132
tp = (uintptr*)(t->start<<PageShift);
36133
*tp |= *sp; // propagate "needs zeroing" mark
36134
Index: libgo/mksysinfo.sh
36135
===================================================================
36136
--- a/src/libgo/mksysinfo.sh (.../tags/gcc_4_8_2_release)
36137
+++ b/src/libgo/mksysinfo.sh (.../branches/gcc-4_8-branch)
36138
@@ -1035,6 +1035,10 @@
36139
grep '^const _LOCK_' gen-sysinfo.go |
36140
sed -e 's/^\(const \)_\(LOCK_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
36142
+# The PRIO constants.
36143
+grep '^const _PRIO_' gen-sysinfo.go | \
36144
+ sed -e 's/^\(const \)_\(PRIO_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
36146
# The GNU/Linux LINUX_REBOOT flags.
36147
grep '^const _LINUX_REBOOT_' gen-sysinfo.go |
36148
sed -e 's/^\(const \)_\(LINUX_REBOOT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
36149
Index: libgo/config.h.in
36150
===================================================================
36151
--- a/src/libgo/config.h.in (.../tags/gcc_4_8_2_release)
36152
+++ b/src/libgo/config.h.in (.../branches/gcc-4_8-branch)
36154
/* Define to 1 if you have the `dl_iterate_phdr' function. */
36155
#undef HAVE_DL_ITERATE_PHDR
36157
+/* Define to 1 if you have the `dup3' function. */
36160
/* Define to 1 if you have the `epoll_create1' function. */
36161
#undef HAVE_EPOLL_CREATE1
36164
/* Define if _Unwind_GetIPInfo is available. */
36165
#undef HAVE_GETIPINFO
36167
+/* Define to 1 if you have the `getxattr' function. */
36168
+#undef HAVE_GETXATTR
36170
/* Define to 1 if you have the `inotify_add_watch' function. */
36171
#undef HAVE_INOTIFY_ADD_WATCH
36173
@@ -111,6 +117,9 @@
36174
/* Define to 1 if you have the <linux/rtnetlink.h> header file. */
36175
#undef HAVE_LINUX_RTNETLINK_H
36177
+/* Define to 1 if you have the `listxattr' function. */
36178
+#undef HAVE_LISTXATTR
36180
/* Define to 1 if the system has the type `loff_t'. */
36183
@@ -171,6 +180,9 @@
36184
/* Define to 1 if you have the `pipe2' function. */
36187
+/* Define to 1 if you have the `removexattr' function. */
36188
+#undef HAVE_REMOVEXATTR
36190
/* Define to 1 if you have the `renameat' function. */
36191
#undef HAVE_RENAMEAT
36193
@@ -180,6 +192,9 @@
36194
/* Define to 1 if you have the `setenv' function. */
36197
+/* Define to 1 if you have the `setxattr' function. */
36198
+#undef HAVE_SETXATTR
36200
/* Define to 1 if you have the `sinl' function. */
36203
Index: libgo/configure.ac
36204
===================================================================
36205
--- a/src/libgo/configure.ac (.../tags/gcc_4_8_2_release)
36206
+++ b/src/libgo/configure.ac (.../branches/gcc-4_8-branch)
36207
@@ -503,7 +503,7 @@
36208
AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
36209
AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
36211
-AC_CHECK_FUNCS(accept4 epoll_create1 faccessat fallocate fchmodat fchownat futimesat inotify_add_watch inotify_init inotify_init1 inotify_rm_watch mkdirat mknodat openat pipe2 renameat sync_file_range splice tee unlinkat unshare utimensat)
36212
+AC_CHECK_FUNCS(accept4 dup3 epoll_create1 faccessat fallocate fchmodat fchownat futimesat getxattr inotify_add_watch inotify_init inotify_init1 inotify_rm_watch listxattr mkdirat mknodat openat pipe2 removexattr renameat setxattr sync_file_range splice tee unlinkat unshare utimensat)
36214
AC_CHECK_TYPES([loff_t])
36216
Index: libgo/go/reflect/value.go
36217
===================================================================
36218
--- a/src/libgo/go/reflect/value.go (.../tags/gcc_4_8_2_release)
36219
+++ b/src/libgo/go/reflect/value.go (.../branches/gcc-4_8-branch)
36224
+ flagMethodFn // gccgo: first fn parameter is always pointer
36225
flagKindShift = iota
36226
flagKindWidth = 5 // there are 27 kinds
36227
flagKindMask flag = 1<<flagKindWidth - 1
36228
@@ -433,7 +434,7 @@
36229
if v.flag&flagMethod != 0 {
36232
- firstPointer := len(in) > 0 && t.In(0).Kind() != Ptr && v.flag&flagMethod == 0 && isMethod(v.typ)
36233
+ firstPointer := len(in) > 0 && t.In(0).Kind() != Ptr && v.flag&flagMethodFn != 0
36234
params := make([]unsafe.Pointer, nin)
36236
if v.flag&flagMethod != 0 {
36237
@@ -484,33 +485,6 @@
36241
-// gccgo specific test to see if typ is a method. We can tell by
36242
-// looking at the string to see if there is a receiver. We need this
36243
-// because for gccgo all methods take pointer receivers.
36244
-func isMethod(t *rtype) bool {
36245
- if Kind(t.kind) != Func {
36252
- for i, c := range s {
36258
- } else if c == ')' {
36260
- } else if parens == 0 && c == ' ' && s[i+1] != '(' && !sawRet {
36265
- return params > 2
36268
// methodReceiver returns information about the receiver
36269
// described by v. The Value v may or may not have the
36270
// flagMethod bit set, so the kind cached in v.flag should
36271
@@ -917,6 +891,16 @@
36272
v = makeMethodValue("Interface", v)
36275
+ if v.flag&flagMethodFn != 0 {
36276
+ if v.typ.Kind() != Func {
36277
+ panic("reflect: MethodFn of non-Func")
36279
+ ft := (*funcType)(unsafe.Pointer(v.typ))
36280
+ if ft.in[0].Kind() != Ptr {
36281
+ v = makeValueMethod(v)
36286
if k == Interface {
36287
// Special case: return the element inside the interface.
36288
@@ -1230,8 +1214,7 @@
36289
// created via reflect have the same underlying code pointer,
36290
// so their Pointers are equal. The function used here must
36291
// match the one used in makeMethodValue.
36292
- // This is not properly implemented for gccgo.
36294
+ f := makeFuncStub
36295
return **(**uintptr)(unsafe.Pointer(&f))
36298
Index: libgo/go/reflect/makefuncgo_386.go
36299
===================================================================
36300
--- a/src/libgo/go/reflect/makefuncgo_386.go (.../tags/gcc_4_8_2_release)
36301
+++ b/src/libgo/go/reflect/makefuncgo_386.go (.../branches/gcc-4_8-branch)
36303
// registers that might hold result values.
36304
type i386Regs struct {
36306
- eax uint32 // Value to return in %eax.
36307
- st0 uint64 // Value to return in %st(0).
36308
+ eax uint32 // Value to return in %eax.
36309
+ st0 float64 // Value to return in %st(0).
36310
+ sr bool // Set to true if hidden struct pointer.
36311
+ sf bool // Set to true if returning float
36314
// MakeFuncStubGo implements the 386 calling convention for MakeFunc.
36315
@@ -56,10 +58,13 @@
36316
in := make([]Value, 0, len(ftyp.in))
36317
ap := uintptr(regs.esp)
36321
var retPtr unsafe.Pointer
36323
retPtr = *(*unsafe.Pointer)(unsafe.Pointer(ap))
36328
for _, rt := range ftyp.in {
36331
// Call the real function.
36334
+ out := c.call(in)
36336
if len(out) != len(ftyp.out) {
36337
panic("reflect: wrong return count from function created by MakeFunc")
36338
@@ -123,13 +128,16 @@
36342
- if v.Kind() != Ptr && v.Kind() != UnsafePointer {
36343
- w = loadIword(unsafe.Pointer(w), v.typ.size)
36346
- case Float32, Float64:
36347
- regs.st0 = uint64(uintptr(w))
36348
+ case Ptr, UnsafePointer:
36349
+ regs.eax = uint32(uintptr(w))
36351
+ regs.st0 = float64(*(*float32)(unsafe.Pointer(w)))
36354
+ regs.st0 = *(*float64)(unsafe.Pointer(w))
36357
- regs.eax = uint32(uintptr(w))
36358
+ regs.eax = uint32(uintptr(loadIword(unsafe.Pointer(w), v.typ.size)))
36361
Index: libgo/go/reflect/makefunc_amd64.S
36362
===================================================================
36363
--- a/src/libgo/go/reflect/makefunc_amd64.S (.../tags/gcc_4_8_2_release)
36364
+++ b/src/libgo/go/reflect/makefunc_amd64.S (.../branches/gcc-4_8-branch)
36366
movdqa %xmm6, 0xa0(%rsp)
36367
movdqa %xmm7, 0xb0(%rsp)
36369
+ /* For MakeFunc functions that call recover. */
36370
+ movq 8(%rbp), %rdi
36372
+ call __go_makefunc_can_recover@PLT
36374
+ call __go_makefunc_can_recover
36377
# Get function type.
36379
call __go_get_closure@PLT
36381
call reflect.MakeFuncStubGo
36384
+ /* MakeFunc functions can no longer call recover. */
36386
+ call __go_makefunc_returning@PLT
36388
+ call __go_makefunc_returning
36391
# The structure will be updated with any return values. Load
36392
# all possible return registers before returning to the caller.
36394
Index: libgo/go/reflect/type.go
36395
===================================================================
36396
--- a/src/libgo/go/reflect/type.go (.../tags/gcc_4_8_2_release)
36397
+++ b/src/libgo/go/reflect/type.go (.../branches/gcc-4_8-branch)
36398
@@ -508,7 +508,7 @@
36399
m.Type = toType(mt)
36400
x := new(unsafe.Pointer)
36401
*x = unsafe.Pointer(&p.tfn)
36402
- m.Func = Value{mt, unsafe.Pointer(x), fl | flagIndir}
36403
+ m.Func = Value{mt, unsafe.Pointer(x), fl | flagIndir | flagMethodFn}
36407
Index: libgo/go/reflect/makefunc_386.S
36408
===================================================================
36409
--- a/src/libgo/go/reflect/makefunc_386.S (.../tags/gcc_4_8_2_release)
36410
+++ b/src/libgo/go/reflect/makefunc_386.S (.../branches/gcc-4_8-branch)
36415
- st0 uint64 // 0x8
36416
+ st0 float64 // 0x8
36421
+ The sr field is set by the function to a non-zero value if
36422
+ the function takes a struct hidden pointer that must be
36423
+ popped off the stack. */
36428
leal 8(%ebp), %eax /* Set esp field in struct. */
36429
movl %eax, -24(%ebp)
36431
+ /* For MakeFunc functions that call recover. */
36432
+ movl 4(%ebp), %eax
36433
+ movl %eax, (%esp)
36435
+ call __go_makefunc_can_recover@PLT
36437
+ call __go_makefunc_can_recover
36441
call __go_get_closure@PLT
36443
call __go_get_closure
36445
call reflect.MakeFuncStubGo
36448
+ /* MakeFunc functions can no longer call recover. */
36450
+ call __go_makefunc_returning@PLT
36452
+ call __go_makefunc_returning
36455
/* Set return registers. */
36457
movl -20(%ebp), %eax
36459
+ cmpb $0, -7(%ebp)
36465
@@ -73,12 +97,20 @@
36466
movsd -16(%ebp), %xmm0
36470
+ movb -8(%ebp), %dl
36485
.size reflect.makeFuncStub, . - reflect.makeFuncStub
36486
Index: libgo/go/reflect/all_test.go
36487
===================================================================
36488
--- a/src/libgo/go/reflect/all_test.go (.../tags/gcc_4_8_2_release)
36489
+++ b/src/libgo/go/reflect/all_test.go (.../branches/gcc-4_8-branch)
36490
@@ -1430,6 +1430,46 @@
36494
+type emptyStruct struct{}
36496
+type nonEmptyStruct struct {
36500
+func returnEmpty() emptyStruct {
36501
+ return emptyStruct{}
36504
+func takesEmpty(e emptyStruct) {
36507
+func returnNonEmpty(i int) nonEmptyStruct {
36508
+ return nonEmptyStruct{member: i}
36511
+func takesNonEmpty(n nonEmptyStruct) int {
36515
+func TestCallWithStruct(t *testing.T) {
36516
+ r := ValueOf(returnEmpty).Call([]Value{})
36517
+ if len(r) != 1 || r[0].Type() != TypeOf(emptyStruct{}) {
36518
+ t.Errorf("returning empty struct returned %s instead", r)
36520
+ r = ValueOf(takesEmpty).Call([]Value{ValueOf(emptyStruct{})})
36522
+ t.Errorf("takesEmpty returned values: %s", r)
36524
+ r = ValueOf(returnNonEmpty).Call([]Value{ValueOf(42)})
36525
+ if len(r) != 1 || r[0].Type() != TypeOf(nonEmptyStruct{}) || r[0].Field(0).Int() != 42 {
36526
+ t.Errorf("returnNonEmpty returned %s", r)
36528
+ r = ValueOf(takesNonEmpty).Call([]Value{ValueOf(nonEmptyStruct{member: 42})})
36529
+ if len(r) != 1 || r[0].Type() != TypeOf(1) || r[0].Int() != 42 {
36530
+ t.Errorf("takesNonEmpty returned %s", r)
36534
func TestMakeFunc(t *testing.T) {
36535
switch runtime.GOARCH {
36536
case "amd64", "386":
36537
@@ -1587,9 +1627,13 @@
36541
-/* Not yet implemented for gccgo
36542
+func TestMethodValue(t *testing.T) {
36543
+ switch runtime.GOARCH {
36544
+ case "amd64", "386":
36546
+ t.Skip("reflect method values not implemented for " + runtime.GOARCH)
36549
-func TestMethodValue(t *testing.T) {
36553
@@ -1658,8 +1702,6 @@
36559
// Reflect version of $GOROOT/test/method5.go
36561
// Concrete types implementing M method.
36562
@@ -1744,7 +1786,12 @@
36563
func (t4 Tm4) M(x int, b byte) (byte, int) { return b, x + 40 }
36565
func TestMethod5(t *testing.T) {
36566
- /* Not yet used for gccgo
36567
+ switch runtime.GOARCH {
36568
+ case "amd64", "386":
36570
+ t.Skip("reflect method values not implemented for " + runtime.GOARCH)
36573
CheckF := func(name string, f func(int, byte) (byte, int), inc int) {
36574
b, x := f(1000, 99)
36575
if b != 99 || x != 1000+inc {
36576
@@ -1751,7 +1798,6 @@
36577
t.Errorf("%s(1000, 99) = %v, %v, want 99, %v", name, b, x, 1000+inc)
36582
CheckV := func(name string, i Value, inc int) {
36583
bx := i.Method(0).Call([]Value{ValueOf(1000), ValueOf(byte(99))})
36584
@@ -1761,9 +1807,7 @@
36585
t.Errorf("direct %s.M(1000, 99) = %v, %v, want 99, %v", name, b, x, 1000+inc)
36588
- /* Not yet implemented for gccgo
36589
CheckF(name+".M", i.Method(0).Interface().(func(int, byte) (byte, int)), inc)
36593
var TinterType = TypeOf(new(Tinter)).Elem()
36594
Index: libgo/go/reflect/makefunc.go
36595
===================================================================
36596
--- a/src/libgo/go/reflect/makefunc.go (.../tags/gcc_4_8_2_release)
36597
+++ b/src/libgo/go/reflect/makefunc.go (.../branches/gcc-4_8-branch)
36601
fn func([]Value) []Value
36603
+ // For gccgo we use the same entry point for functions and for
36604
+ // method values.
36609
// MakeFunc returns a new function of the given Type
36611
dummy := makeFuncStub
36612
code := **(**uintptr)(unsafe.Pointer(&dummy))
36614
- impl := &makeFuncImpl{code: code, typ: ftyp, fn: fn}
36615
+ impl := &makeFuncImpl{code: code, typ: ftyp, fn: fn, method: -1}
36617
return Value{t, unsafe.Pointer(&impl), flag(Func<<flagKindShift) | flagIndir}
36619
@@ -85,15 +90,94 @@
36620
panic("reflect: internal error: invalid use of makePartialFunc")
36623
+ switch runtime.GOARCH {
36624
+ case "amd64", "386":
36626
+ panic("reflect.makeMethodValue not implemented for " + runtime.GOARCH)
36629
// Ignoring the flagMethod bit, v describes the receiver, not the method type.
36630
fl := v.flag & (flagRO | flagAddr | flagIndir)
36631
fl |= flag(v.typ.Kind()) << flagKindShift
36632
rcvr := Value{v.typ, v.val, fl}
36634
+ // v.Type returns the actual type of the method value.
36635
+ ft := v.Type().(*rtype)
36637
+ // Indirect Go func value (dummy) to obtain
36638
+ // actual code address. (A Go func value is a pointer
36639
+ // to a C function pointer. http://golang.org/s/go11func.)
36640
+ dummy := makeFuncStub
36641
+ code := **(**uintptr)(unsafe.Pointer(&dummy))
36643
// Cause panic if method is not appropriate.
36644
// The panic would still happen during the call if we omit this,
36645
// but we want Interface() and other operations to fail early.
36646
- methodReceiver(op, rcvr, int(v.flag)>>flagMethodShift)
36647
+ t, _, _ := methodReceiver(op, rcvr, int(v.flag)>>flagMethodShift)
36649
- panic("reflect makeMethodValue not implemented")
36650
+ fv := &makeFuncImpl{
36652
+ typ: (*funcType)(unsafe.Pointer(t)),
36653
+ method: int(v.flag) >> flagMethodShift,
36657
+ return Value{ft, unsafe.Pointer(&fv), v.flag&flagRO | flag(Func)<<flagKindShift | flagIndir}
36660
+// makeValueMethod takes a method function and returns a function that
36661
+// takes a value receiver and calls the real method with a pointer to
36663
+func makeValueMethod(v Value) Value {
36665
+ if typ.Kind() != Func {
36666
+ panic("reflect: call of makeValueMethod with non-Func type")
36668
+ if v.flag&flagMethodFn == 0 {
36669
+ panic("reflect: call of makeValueMethod with non-MethodFn")
36672
+ switch runtime.GOARCH {
36673
+ case "amd64", "386":
36675
+ panic("reflect.makeValueMethod not implemented for " + runtime.GOARCH)
36678
+ t := typ.common()
36679
+ ftyp := (*funcType)(unsafe.Pointer(t))
36681
+ // Indirect Go func value (dummy) to obtain
36682
+ // actual code address. (A Go func value is a pointer
36683
+ // to a C function pointer. http://golang.org/s/go11func.)
36684
+ dummy := makeFuncStub
36685
+ code := **(**uintptr)(unsafe.Pointer(&dummy))
36687
+ impl := &makeFuncImpl{
36694
+ return Value{t, unsafe.Pointer(&impl), flag(Func<<flagKindShift) | flagIndir}
36697
+// Call the function represented by a makeFuncImpl.
36698
+func (c *makeFuncImpl) call(in []Value) []Value {
36699
+ if c.method == -1 {
36701
+ } else if c.method == -2 {
36702
+ if c.typ.IsVariadic() {
36703
+ return c.rcvr.CallSlice(in)
36705
+ return c.rcvr.Call(in)
36708
+ m := c.rcvr.Method(c.method)
36709
+ if c.typ.IsVariadic() {
36710
+ return m.CallSlice(in)
36712
+ return m.Call(in)
36716
Index: libgo/go/reflect/makefuncgo_amd64.go
36717
===================================================================
36718
--- a/src/libgo/go/reflect/makefuncgo_amd64.go (.../tags/gcc_4_8_2_release)
36719
+++ b/src/libgo/go/reflect/makefuncgo_amd64.go (.../branches/gcc-4_8-branch)
36720
@@ -319,7 +319,7 @@
36721
// All the real arguments have been found and turned into
36722
// Value's. Call the real function.
36725
+ out := c.call(in)
36727
if len(out) != len(ftyp.out) {
36728
panic("reflect: wrong return count from function created by MakeFunc")
36729
Index: libgo/go/net/fd_unix.go
36730
===================================================================
36731
--- a/src/libgo/go/net/fd_unix.go (.../tags/gcc_4_8_2_release)
36732
+++ b/src/libgo/go/net/fd_unix.go (.../branches/gcc-4_8-branch)
36742
if err == nil || err == syscall.EISCONN {
36746
+ // On Solaris we can see EINVAL if the socket has
36747
+ // already been accepted and closed by the server.
36748
+ // Treat this as a successful connection--writes to
36749
+ // the socket will see EOF. For details and a test
36750
+ // case in C see http://golang.org/issue/6828.
36751
+ if runtime.GOOS == "solaris" && err == syscall.EINVAL {
36755
if err != syscall.EINPROGRESS && err != syscall.EALREADY && err != syscall.EINTR {
36758
Index: libgo/go/go/build/build.go
36759
===================================================================
36760
--- a/src/libgo/go/go/build/build.go (.../tags/gcc_4_8_2_release)
36761
+++ b/src/libgo/go/go/build/build.go (.../branches/gcc-4_8-branch)
36762
@@ -429,7 +429,7 @@
36763
switch ctxt.Compiler {
36765
dir, elem := pathpkg.Split(p.ImportPath)
36766
- pkga = "pkg/gccgo/" + dir + "lib" + elem + ".a"
36767
+ pkga = "pkg/gccgo_" + ctxt.GOOS + "_" + ctxt.GOARCH + "/" + dir + "lib" + elem + ".a"
36770
if ctxt.InstallSuffix != "" {
36771
Index: libgo/go/go/build/syslist.go
36772
===================================================================
36773
--- a/src/libgo/go/go/build/syslist.go (.../tags/gcc_4_8_2_release)
36774
+++ b/src/libgo/go/go/build/syslist.go (.../branches/gcc-4_8-branch)
36776
+// Copyright 2011 The Go Authors. All rights reserved.
36777
+// Use of this source code is governed by a BSD-style
36778
+// license that can be found in the LICENSE file.
36782
+const goosList = "darwin dragonfly freebsd linux netbsd openbsd plan9 windows solaris "
36783
+const goarchList = "386 amd64 arm alpha m68k mipso32 mipsn32 mipsn64 mipso64 ppc ppc64 sparc sparc64 "
36784
Index: libgo/go/syscall/libcall_linux.go
36785
===================================================================
36786
--- a/src/libgo/go/syscall/libcall_linux.go (.../tags/gcc_4_8_2_release)
36787
+++ b/src/libgo/go/syscall/libcall_linux.go (.../branches/gcc-4_8-branch)
36788
@@ -190,6 +190,9 @@
36789
//sys Adjtimex(buf *Timex) (state int, err error)
36790
//adjtimex(buf *Timex) _C_int
36792
+//sysnb Dup3(oldfd int, newfd int, flags int) (err error)
36793
+//dup3(oldfd _C_int, newfd _C_int, flags _C_int) _C_int
36795
//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
36796
//faccessat(dirfd _C_int, pathname *byte, mode _C_int, flags _C_int) _C_int
36798
@@ -268,6 +271,9 @@
36799
return origlen - len(buf), count, names
36802
+//sys Getxattr(path string, attr string, dest []byte) (sz int, err error)
36803
+//getxattr(path *byte, attr *byte, buf *byte, count Size_t) Ssize_t
36805
//sys InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error)
36806
//inotify_add_watch(fd _C_int, pathname *byte, mask uint32) _C_int
36808
@@ -283,6 +289,9 @@
36809
//sys Klogctl(typ int, buf []byte) (n int, err error)
36810
//klogctl(typ _C_int, bufp *byte, len _C_int) _C_int
36812
+//sys Listxattr(path string, dest []byte) (sz int, err error)
36813
+//listxattr(path *byte, list *byte, size Size_t) Ssize_t
36815
//sys Mkdirat(dirfd int, path string, mode uint32) (err error)
36816
//mkdirat(dirfd _C_int, path *byte, mode Mode_t) _C_int
36818
@@ -305,6 +314,9 @@
36819
//sys PivotRoot(newroot string, putold string) (err error)
36820
//pivot_root(newroot *byte, putold *byte) _C_int
36822
+//sys Removexattr(path string, attr string) (err error)
36823
+//removexattr(path *byte, name *byte) _C_int
36825
//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
36826
//renameat(olddirfd _C_int, oldpath *byte, newdirfd _C_int, newpath *byte) _C_int
36828
@@ -338,6 +350,9 @@
36829
//sysnb Setresuid(ruid int, eguid int, suid int) (err error)
36830
//setresuid(ruid Uid_t, euid Uid_t, suid Uid_t) _C_int
36832
+//sys Setxattr(path string, attr string, data []byte, flags int) (err error)
36833
+//setxattr(path *byte, name *byte, value *byte, size Size_t, flags _C_int) _C_int
36835
//sys splice(rfd int, roff *_loff_t, wfd int, woff *_loff_t, len int, flags int) (n int64, err error)
36836
//splice(rfd _C_int, roff *_loff_t, wfd _C_int, woff *_loff_t, len Size_t, flags _C_uint) Ssize_t
36837
func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
36838
Index: libgo/go/syscall/socket.go
36839
===================================================================
36840
--- a/src/libgo/go/syscall/socket.go (.../tags/gcc_4_8_2_release)
36841
+++ b/src/libgo/go/syscall/socket.go (.../branches/gcc-4_8-branch)
36846
-const SizeofSockaddrAny = 0x1c
36847
+const SizeofSockaddrAny = 0x6c
36849
type SockaddrInet4 struct {
36851
Index: libgo/go/syscall/libcall_posix.go
36852
===================================================================
36853
--- a/src/libgo/go/syscall/libcall_posix.go (.../tags/gcc_4_8_2_release)
36854
+++ b/src/libgo/go/syscall/libcall_posix.go (.../branches/gcc-4_8-branch)
36855
@@ -238,6 +238,9 @@
36856
//sysnb Getppid() (ppid int)
36859
+//sys Getpriority(which int, who int) (prio int, err error)
36860
+//getpriority(which _C_int, who _C_int) _C_int
36862
//sysnb Getrlimit(resource int, rlim *Rlimit) (err error)
36863
//getrlimit(resource _C_int, rlim *Rlimit) _C_int
36865
@@ -307,6 +310,9 @@
36866
//sysnb Setpgid(pid int, pgid int) (err error)
36867
//setpgid(pid Pid_t, pgid Pid_t) _C_int
36869
+//sys Setpriority(which int, who int, prio int) (err error)
36870
+//setpriority(which _C_int, who _C_int, prio _C_int) _C_int
36872
//sysnb Setreuid(ruid int, euid int) (err error)
36873
//setreuid(ruid Uid_t, euid Uid_t) _C_int
36875
Index: libgo/Makefile.am
36876
===================================================================
36877
--- a/src/libgo/Makefile.am (.../tags/gcc_4_8_2_release)
36878
+++ b/src/libgo/Makefile.am (.../branches/gcc-4_8-branch)
36879
@@ -424,6 +424,7 @@
36880
runtime/go-caller.c \
36881
runtime/go-callers.c \
36882
runtime/go-can-convert-interface.c \
36883
+ runtime/go-cdiv.c \
36885
runtime/go-check-interface.c \
36886
runtime/go-construct-map.c \
36887
@@ -1254,7 +1255,7 @@
36888
go/go/build/build.go \
36889
go/go/build/doc.go \
36890
go/go/build/read.go \
36892
+ go/go/build/syslist.go
36893
go_go_doc_files = \
36894
go/go/doc/comment.go \
36896
@@ -2712,15 +2713,6 @@
36898
.PHONY: go/build/check
36900
-syslist.go: s-syslist; @true
36901
-s-syslist: Makefile
36902
- echo '// Generated automatically by make.' >syslist.go.tmp
36903
- echo 'package build' >>syslist.go.tmp
36904
- echo 'const goosList = "$(GOOS)"' >>syslist.go.tmp
36905
- echo 'const goarchList = "$(GOARCH)"' >>syslist.go.tmp
36906
- $(SHELL) $(srcdir)/../move-if-change syslist.go.tmp syslist.go
36909
@go_include@ go/doc.lo.dep
36910
go/doc.lo.dep: $(go_go_doc_files)
36912
Index: libgfortran/ChangeLog
36913
===================================================================
36914
--- a/src/libgfortran/ChangeLog (.../tags/gcc_4_8_2_release)
36915
+++ b/src/libgfortran/ChangeLog (.../branches/gcc-4_8-branch)
36917
+2014-03-15 Dominique d'Humieres <dominiq@lps.ens.fr>
36919
+ Backport from mainline
36920
+ PR libgfortran/60128
36921
+ * io/write_float.def (output_float): Remove unused variable
36922
+ nzero_real. Replace a double space with a single one.
36923
+ (determine_en_precision): Fix wrong handling of the EN format.
36925
+2014-03-15 Jerry DeLisle <jvdelisle@gcc.gnu>
36927
+ Backport from mainline
36928
+ PR libfortran/58324
36929
+ PR libfortran/38199
36930
+ * io/list_read.c (finish_list_read): Read one character to check
36931
+ for the end of the file. If it is the end, then issue the file
36932
+ end error message. If not, use eat_line to reach the end
36933
+ without giving error. The next attempt to read will then
36934
+ issue the error as described above.
36935
+ * io/read.c (read_decimal): Quickly skip spaces to avoid calls
36937
+ * io/unit.c (is_trim_ok): New helper function to check various
36938
+ conditions to see if its OK to trim the internal unit string.
36939
+ (get_internal_unit): Use LEN_TRIM to shorten selected internal
36940
+ unit strings for optimizing READ. Enable this optimization for
36943
+2014-02-21 Jerry DeLisle <jvdelisle@gcc.gnu>
36944
+ Dominique d'Humieres <dominiq@lps.ens.fr>
36945
+ Steven G. Kargl <kargl@gcc.gnu.org>
36947
+ Backport from mainline
36948
+ PR libfortran/59700
36949
+ PR libfortran/59764
36950
+ * io/io.h (struct st_parameter_dt): Assign expanded_read flag to
36951
+ unused bit. Define new variable line_buffer_pos.
36952
+ * io/list_read.c (free_saved, next_char, l_push_char,
36953
+ read_logical, read_real): Replace use of item_count with
36954
+ line_buffer_pos for line_buffer look ahead.
36955
+ (read_logical, read_integer, parse_real, read_real, check_type):
36956
+ Adjust location of free_line to after generating error messages
36957
+ to retain the correct item count for the message.
36959
+2014-02-15 Jerry DeLisle <jvdelisle@gcc.gnu>
36960
+ Dominique d'Humieres <dominiq@lps.ens.fr>
36962
+ Backport from mainline
36963
+ PR libfortran/59771
36964
+ PR libfortran/59774
36965
+ PR libfortran/59836
36966
+ * io/write_float.def (output_float): Fix wrong handling of the
36968
+ (output_float_FMT_G_): Fixes rounding issues with -m32.
36970
2013-10-16 Release Manager
36972
* GCC 4.8.2 released.
36973
Index: libgfortran/io/list_read.c
36974
===================================================================
36975
--- a/src/libgfortran/io/list_read.c (.../tags/gcc_4_8_2_release)
36976
+++ b/src/libgfortran/io/list_read.c (.../branches/gcc-4_8-branch)
36977
@@ -118,7 +118,7 @@
36979
free_line (st_parameter_dt *dtp)
36981
- dtp->u.p.item_count = 0;
36982
+ dtp->u.p.line_buffer_pos = 0;
36983
dtp->u.p.line_buffer_enabled = 0;
36985
if (dtp->u.p.line_buffer == NULL)
36986
@@ -150,15 +150,15 @@
36988
dtp->u.p.at_eol = 0;
36990
- c = dtp->u.p.line_buffer[dtp->u.p.item_count];
36991
- if (c != '\0' && dtp->u.p.item_count < 64)
36992
+ c = dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos];
36993
+ if (c != '\0' && dtp->u.p.line_buffer_pos < 64)
36995
- dtp->u.p.line_buffer[dtp->u.p.item_count] = '\0';
36996
- dtp->u.p.item_count++;
36997
+ dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos] = '\0';
36998
+ dtp->u.p.line_buffer_pos++;
37002
- dtp->u.p.item_count = 0;
37003
+ dtp->u.p.line_buffer_pos = 0;
37004
dtp->u.p.line_buffer_enabled = 0;
37007
@@ -640,7 +640,7 @@
37008
if (dtp->u.p.line_buffer == NULL)
37009
dtp->u.p.line_buffer = xcalloc (SCRATCH_SIZE, 1);
37011
- dtp->u.p.line_buffer[dtp->u.p.item_count++] = c;
37012
+ dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos++] = c;
37016
@@ -750,7 +750,7 @@
37018
dtp->u.p.nml_read_error = 1;
37019
dtp->u.p.line_buffer_enabled = 1;
37020
- dtp->u.p.item_count = 0;
37021
+ dtp->u.p.line_buffer_pos = 0;
37025
@@ -758,14 +758,17 @@
37031
if (nml_bad_return (dtp, c))
37046
@@ -773,6 +776,7 @@
37048
snprintf (message, MSGLEN, "Bad logical value while reading item %d",
37049
dtp->u.p.item_count);
37051
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
37054
@@ -913,9 +917,9 @@
37055
else if (c != '\n')
37059
snprintf (message, MSGLEN, "Bad integer for item %d in list input",
37060
dtp->u.p.item_count);
37062
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
37065
@@ -1298,9 +1302,9 @@
37066
else if (c != '\n')
37070
snprintf (message, MSGLEN, "Bad floating point number for item %d",
37071
dtp->u.p.item_count);
37073
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
37076
@@ -1406,9 +1410,9 @@
37077
else if (c != '\n')
37081
snprintf (message, MSGLEN, "Bad complex value in item %d of list input",
37082
dtp->u.p.item_count);
37084
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
37087
@@ -1770,7 +1774,7 @@
37089
dtp->u.p.nml_read_error = 1;
37090
dtp->u.p.line_buffer_enabled = 1;
37091
- dtp->u.p.item_count = 0;
37092
+ dtp->u.p.line_buffer_pos = 0;
37096
@@ -1789,9 +1793,9 @@
37097
else if (c != '\n')
37101
snprintf (message, MSGLEN, "Bad real number in item %d of list input",
37102
dtp->u.p.item_count);
37104
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
37107
@@ -1806,11 +1810,10 @@
37109
if (dtp->u.p.saved_type != BT_UNKNOWN && dtp->u.p.saved_type != type)
37112
snprintf (message, MSGLEN, "Read type %s where %s was expected for item %d",
37113
type_name (dtp->u.p.saved_type), type_name (type),
37114
dtp->u.p.item_count);
37117
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
37120
@@ -1820,12 +1823,12 @@
37122
if (dtp->u.p.saved_length != len)
37125
snprintf (message, MSGLEN,
37126
"Read kind %d %s where kind %d is required for item %d",
37127
dtp->u.p.saved_length, type_name (dtp->u.p.saved_type), len,
37128
dtp->u.p.item_count);
37129
generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
37134
@@ -2031,8 +2034,6 @@
37136
finish_list_read (st_parameter_dt *dtp)
37142
fbuf_flush (dtp->u.p.current_unit, dtp->u.p.mode);
37143
@@ -2043,12 +2044,22 @@
37147
- err = eat_line (dtp);
37148
- if (err == LIBERROR_END)
37149
+ if (!is_internal_unit (dtp))
37154
+ c = next_char (dtp);
37170
Index: libgfortran/io/read.c
37171
===================================================================
37172
--- a/src/libgfortran/io/read.c (.../tags/gcc_4_8_2_release)
37173
+++ b/src/libgfortran/io/read.c (.../branches/gcc-4_8-branch)
37174
@@ -655,7 +655,13 @@
37178
- if (dtp->u.p.blank_status == BLANK_NULL) continue;
37179
+ if (dtp->u.p.blank_status == BLANK_NULL)
37181
+ /* Skip spaces. */
37182
+ for ( ; w > 0; p++, w--)
37183
+ if (*p != ' ') break;
37186
if (dtp->u.p.blank_status == BLANK_ZERO) c = '0';
37189
Index: libgfortran/io/io.h
37190
===================================================================
37191
--- a/src/libgfortran/io/io.h (.../tags/gcc_4_8_2_release)
37192
+++ b/src/libgfortran/io/io.h (.../branches/gcc-4_8-branch)
37193
@@ -424,7 +424,10 @@
37194
unsigned g0_no_blanks : 1;
37195
/* Used to signal use of free_format_data. */
37196
unsigned format_not_saved : 1;
37197
- /* 14 unused bits. */
37198
+ /* A flag used to identify when a non-standard expanded namelist read
37200
+ unsigned expanded_read : 1;
37201
+ /* 13 unused bits. */
37203
/* Used for ungetc() style functionality. Possible values
37204
are an unsigned char, EOF, or EOF - 1 used to mark the
37205
@@ -441,9 +444,8 @@
37207
struct format_data *fmt;
37208
namelist_info *ionml;
37209
- /* A flag used to identify when a non-standard expanded namelist read
37211
- int expanded_read;
37212
+ /* Current position within the look-ahead line buffer. */
37213
+ int line_buffer_pos;
37214
/* Storage area for values except for strings. Must be
37215
large enough to hold a complex value (two reals) of the
37217
Index: libgfortran/io/unit.c
37218
===================================================================
37219
--- a/src/libgfortran/io/unit.c (.../tags/gcc_4_8_2_release)
37220
+++ b/src/libgfortran/io/unit.c (.../branches/gcc-4_8-branch)
37223
#include <stdlib.h>
37224
#include <string.h>
37225
+#include <stdbool.h>
37228
/* IO locking rules:
37229
@@ -375,6 +376,38 @@
37233
+/* Helper function to check rank, stride, format string, and namelist.
37234
+ This is used for optimization. You can't trim out blanks or shorten
37235
+ the string if trailing spaces are significant. */
37237
+is_trim_ok (st_parameter_dt *dtp)
37239
+ /* Check rank and stride. */
37240
+ if (dtp->internal_unit_desc
37241
+ && (GFC_DESCRIPTOR_RANK (dtp->internal_unit_desc) > 1
37242
+ || GFC_DESCRIPTOR_STRIDE(dtp->internal_unit_desc, 0) != 1))
37244
+ /* Format strings can not have 'BZ' or '/'. */
37245
+ if (dtp->common.flags & IOPARM_DT_HAS_FORMAT)
37247
+ char *p = dtp->format;
37249
+ if (dtp->common.flags & IOPARM_DT_HAS_BLANK)
37251
+ for (i = 0; i < dtp->format_len; i++)
37253
+ if (p[i] == '/') return false;
37254
+ if (p[i] == 'b' || p[i] == 'B')
37255
+ if (p[i+1] == 'z' || p[i+1] == 'Z')
37259
+ if (dtp->u.p.ionml) /* A namelist. */
37266
get_internal_unit (st_parameter_dt *dtp)
37268
@@ -402,6 +435,22 @@
37269
some other file I/O unit. */
37270
iunit->unit_number = -1;
37272
+ /* As an optimization, adjust the unit record length to not
37273
+ include trailing blanks. This will not work under certain conditions
37274
+ where trailing blanks have significance. */
37275
+ if (dtp->u.p.mode == READING && is_trim_ok (dtp))
37278
+ if (dtp->common.unit == 0)
37279
+ len = string_len_trim (dtp->internal_unit_len,
37280
+ dtp->internal_unit);
37282
+ len = string_len_trim_char4 (dtp->internal_unit_len,
37283
+ (const gfc_char4_t*) dtp->internal_unit);
37284
+ dtp->internal_unit_len = len;
37285
+ iunit->recl = dtp->internal_unit_len;
37288
/* Set up the looping specification from the array descriptor, if any. */
37290
if (is_array_io (dtp))
37291
@@ -414,27 +463,6 @@
37293
start_record *= iunit->recl;
37297
- /* If we are not processing an array, adjust the unit record length not
37298
- to include trailing blanks for list-formatted reads. */
37299
- if (dtp->u.p.mode == READING && !(dtp->common.flags & IOPARM_DT_HAS_FORMAT))
37301
- if (dtp->common.unit == 0)
37303
- dtp->internal_unit_len =
37304
- string_len_trim (dtp->internal_unit_len, dtp->internal_unit);
37305
- iunit->recl = dtp->internal_unit_len;
37309
- dtp->internal_unit_len =
37310
- string_len_trim_char4 (dtp->internal_unit_len,
37311
- (const gfc_char4_t*) dtp->internal_unit);
37312
- iunit->recl = dtp->internal_unit_len;
37317
/* Set initial values for unit parameters. */
37318
if (dtp->common.unit)
37319
Index: libgfortran/io/write_float.def
37320
===================================================================
37321
--- a/src/libgfortran/io/write_float.def (.../tags/gcc_4_8_2_release)
37322
+++ b/src/libgfortran/io/write_float.def (.../branches/gcc-4_8-branch)
37323
@@ -125,8 +125,6 @@
37325
/* Number of digits after the decimal point. */
37327
- /* Number of zeros after the decimal point, whatever the precision. */
37331
int ndigits, edigits;
37332
@@ -138,7 +136,6 @@
37333
p = dtp->u.p.scale_factor;
37338
/* We should always know the field width and precision. */
37340
@@ -191,7 +188,7 @@
37344
- nzero = nzero_real = 0;
37349
@@ -211,7 +208,6 @@
37350
nafter = d + nbefore;
37353
- nzero_real = nzero;
37357
@@ -218,7 +214,7 @@
37361
- nzero = nzero_real = 0;
37366
@@ -373,7 +369,7 @@
37370
- if (w > 0 && d == 0 && p == 0)
37371
+ if (ft != FMT_F && w > 0 && d == 0 && p == 0)
37373
/* Scan for trailing zeros to see if we really need to round it. */
37374
for(i = nbefore + nafter; i < ndigits; i++)
37375
@@ -386,13 +382,14 @@
37378
if (nbefore + nafter == 0)
37379
+ /* Handle the case Fw.0 and value < 1.0 */
37382
- if (nzero_real == d && digits[0] >= rchar)
37383
+ if (digits[0] >= rchar)
37385
/* We rounded to zero but shouldn't have */
37393
@@ -990,7 +987,7 @@
37394
int d = f->u.real.d;\
37395
int w = f->u.real.w;\
37397
- GFC_REAL_ ## x rexp_d, r = 0.5;\
37398
+ GFC_REAL_ ## x exp_d, r = 0.5, r_sc;\
37399
int low, high, mid;\
37400
int ubound, lbound;\
37401
char *p, pad = ' ';\
37402
@@ -997,6 +994,7 @@
37403
int save_scale_factor, nb = 0;\
37405
int nprinted, precision;\
37406
+ volatile GFC_REAL_ ## x temp;\
37408
save_scale_factor = dtp->u.p.scale_factor;\
37410
@@ -1015,10 +1013,13 @@
37414
- rexp_d = calculate_exp_ ## x (-d);\
37415
- if ((m > 0.0 && ((m < 0.1 - 0.1 * r * rexp_d) || (rexp_d * (m + r) >= 1.0)))\
37416
+ exp_d = calculate_exp_ ## x (d);\
37417
+ r_sc = (1 - r / exp_d);\
37418
+ temp = 0.1 * r_sc;\
37419
+ if ((m > 0.0 && ((m < temp) || (r >= (exp_d - m))))\
37420
|| ((m == 0.0) && !(compile_options.allow_std\
37421
- & (GFC_STD_F2003 | GFC_STD_F2008))))\
37422
+ & (GFC_STD_F2003 | GFC_STD_F2008)))\
37425
newf.format = FMT_E;\
37426
newf.u.real.w = w;\
37427
@@ -1038,10 +1039,9 @@
37429
while (low <= high)\
37431
- volatile GFC_REAL_ ## x temp;\
37432
mid = (low + high) / 2;\
37434
- temp = (calculate_exp_ ## x (mid - 1) * (1 - r * rexp_d));\
37435
+ temp = (calculate_exp_ ## x (mid - 1) * r_sc);\
37439
@@ -1121,14 +1121,36 @@
37440
/* EN format is tricky since the number of significant digits depends
37441
on the magnitude. Solve it by first printing a temporary value and
37442
figure out the number of significant digits from the printed
37444
+ exponent. Values y, 0.95*10.0**e <= y <10.0**e, are rounded to
37445
+ 10.0**e even when the final result will not be rounded to 10.0**e.
37446
+ For these values the exponent returned by atoi has to be decremented
37447
+ by one. The values y in the ranges
37448
+ (1000.0-0.5*10.0**(-d))*10.0**(3*n) <= y < 10.0*(3*(n+1))
37449
+ (100.0-0.5*10.0**(-d))*10.0**(3*n) <= y < 10.0*(3*n+2)
37450
+ (10.0-0.5*10.0**(-d))*10.0**(3*n) <= y < 10.0*(3*n+1)
37451
+ are correctly rounded respectively to 1.0...0*10.0*(3*(n+1)),
37452
+ 100.0...0*10.0*(3*n), and 10.0...0*10.0*(3*n), where 0...0
37453
+ represents d zeroes, by the lines 279 to 297. */
37455
#define EN_PREC(x,y)\
37457
- GFC_REAL_ ## x tmp; \
37458
- tmp = * (GFC_REAL_ ## x *)source; \
37459
+ volatile GFC_REAL_ ## x tmp, one = 1.0;\
37460
+ tmp = * (GFC_REAL_ ## x *)source;\
37461
if (isfinite (tmp)) \
37462
- nprinted = DTOA(y,0,tmp); \
37464
+ nprinted = DTOA(y,0,tmp);\
37465
+ int e = atoi (&buffer[4]);\
37466
+ if (buffer[1] == '1')\
37468
+ tmp = (calculate_exp_ ## x (-e)) * tmp;\
37469
+ tmp = one - (tmp < 0 ? -tmp : tmp); \
37474
+ if (nbefore < 0)\
37475
+ nbefore = 3 + nbefore;\
37480
@@ -1140,6 +1162,7 @@
37483
const size_t size = 10;
37484
+ int nbefore; /* digits before decimal point - 1. */
37488
@@ -1172,16 +1195,6 @@
37489
if (nprinted == -1)
37492
- int e = atoi (&buffer[5]);
37493
- int nbefore; /* digits before decimal point - 1. */
37498
- nbefore = (-e) % 3;
37499
- if (nbefore != 0)
37500
- nbefore = 3 - nbefore;
37502
int prec = f->u.real.d + nbefore;
37503
if (dtp->u.p.current_unit->round_status != ROUND_UNSPECIFIED
37504
&& dtp->u.p.current_unit->round_status != ROUND_PROCDEFINED)
37505
Index: libcpp/macro.c
37506
===================================================================
37507
--- a/src/libcpp/macro.c (.../tags/gcc_4_8_2_release)
37508
+++ b/src/libcpp/macro.c (.../branches/gcc-4_8-branch)
37509
@@ -1108,21 +1108,22 @@
37511
if (macro->paramc == 0)
37513
+ unsigned tokens_count = macro_real_token_count (macro);
37514
if (CPP_OPTION (pfile, track_macro_expansion))
37516
- unsigned int i, count = macro->count;
37518
const cpp_token *src = macro->exp.tokens;
37519
const struct line_map *map;
37520
source_location *virt_locs = NULL;
37521
- _cpp_buff *macro_tokens =
37522
- tokens_buff_new (pfile, count, &virt_locs);
37523
+ _cpp_buff *macro_tokens
37524
+ = tokens_buff_new (pfile, tokens_count, &virt_locs);
37526
/* Create a macro map to record the locations of the
37527
tokens that are involved in the expansion. LOCATION
37528
is the location of the macro expansion point. */
37529
- map = linemap_enter_macro (pfile->line_table,
37530
- node, location, count);
37531
- for (i = 0; i < count; ++i)
37532
+ map = linemap_enter_macro (pfile->line_table,
37533
+ node, location, tokens_count);
37534
+ for (i = 0; i < tokens_count; ++i)
37536
tokens_buff_add_token (macro_tokens, virt_locs,
37538
@@ -1134,16 +1135,12 @@
37540
(const cpp_token **)
37541
macro_tokens->base,
37543
- num_macro_tokens_counter += count;
37548
- unsigned tokens_count = macro_real_token_count (macro);
37549
- _cpp_push_token_context (pfile, node, macro->exp.tokens,
37551
- num_macro_tokens_counter += tokens_count;
37553
+ _cpp_push_token_context (pfile, node, macro->exp.tokens,
37555
+ num_macro_tokens_counter += tokens_count;
37559
Index: libcpp/line-map.c
37560
===================================================================
37561
--- a/src/libcpp/line-map.c (.../tags/gcc_4_8_2_release)
37562
+++ b/src/libcpp/line-map.c (.../branches/gcc-4_8-branch)
37563
@@ -1024,6 +1024,11 @@
37564
bool pre_virtual_p, post_virtual_p;
37565
source_location l0 = pre, l1 = post;
37567
+ if (IS_ADHOC_LOC (l0))
37568
+ l0 = set->location_adhoc_data_map.data[l0 & MAX_SOURCE_LOCATION].locus;
37569
+ if (IS_ADHOC_LOC (l1))
37570
+ l1 = set->location_adhoc_data_map.data[l1 & MAX_SOURCE_LOCATION].locus;
37575
Index: libcpp/files.c
37576
===================================================================
37577
--- a/src/libcpp/files.c (.../tags/gcc_4_8_2_release)
37578
+++ b/src/libcpp/files.c (.../branches/gcc-4_8-branch)
37579
@@ -983,6 +983,7 @@
37581
struct cpp_dir *dir;
37585
dir = search_path_head (pfile, fname, angle_brackets, type);
37587
@@ -993,19 +994,26 @@
37588
if (type == IT_DEFAULT && file == NULL)
37591
- /* Compensate for the increment in linemap_add that occurs in
37592
- _cpp_stack_file. In the case of a normal #include, we're
37593
- currently at the start of the line *following* the #include. A
37594
- separate source_location for this location makes no sense (until
37595
- we do the LC_LEAVE), and complicates LAST_SOURCE_LINE_LOCATION.
37596
- This does not apply if we found a PCH file (in which case
37597
- linemap_add is not called) or we were included from the
37599
+ /* Compensate for the increment in linemap_add that occurs if
37600
+ _cpp_stack_file actually stacks the file. In the case of a
37601
+ normal #include, we're currently at the start of the line
37602
+ *following* the #include. A separate source_location for this
37603
+ location makes no sense (until we do the LC_LEAVE), and
37604
+ complicates LAST_SOURCE_LINE_LOCATION. This does not apply if we
37605
+ found a PCH file (in which case linemap_add is not called) or we
37606
+ were included from the command-line. */
37607
if (file->pchname == NULL && file->err_no == 0
37608
&& type != IT_CMDLINE && type != IT_DEFAULT)
37609
pfile->line_table->highest_location--;
37611
- return _cpp_stack_file (pfile, file, type == IT_IMPORT);
37612
+ stacked = _cpp_stack_file (pfile, file, type == IT_IMPORT);
37615
+ /* _cpp_stack_file didn't stack the file, so let's rollback the
37616
+ compensation dance we performed above. */
37617
+ pfile->line_table->highest_location++;
37622
/* Could not open FILE. The complication is dependency output. */
37623
Index: libcpp/ChangeLog
37624
===================================================================
37625
--- a/src/libcpp/ChangeLog (.../tags/gcc_4_8_2_release)
37626
+++ b/src/libcpp/ChangeLog (.../branches/gcc-4_8-branch)
37628
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
37630
+ Backport from mainline
37631
+ 2014-02-19 Jakub Jelinek <jakub@redhat.com>
37633
+ PR preprocessor/58844
37634
+ * macro.c (enter_macro_context): Only push
37635
+ macro_real_token_count (macro) tokens rather than
37636
+ macro->count tokens, regardless of
37637
+ CPP_OPTION (pfile, track-macro-expansion).
37639
+ 2014-02-07 Jakub Jelinek <jakub@redhat.com>
37641
+ PR preprocessor/56824
37642
+ * line-map.c (linemap_compare_locations): Look through adhoc locations
37643
+ for both l0 and l1.
37645
+2014-03-06 Jakub Jelinek <jakub@redhat.com>
37647
+ PR preprocessor/60400
37648
+ Backport from mainline
37649
+ 2013-06-24 Dehao Chen <dehao@google.com>
37651
+ * files.c (_cpp_stack_include): Fix the highest_location when header
37652
+ file is guarded by #ifndef and is included twice.
37654
2013-10-16 Release Manager
37656
* GCC 4.8.2 released.
37657
Index: libcpp/po/pt_BR.po
37658
===================================================================
37659
--- a/src/libcpp/po/pt_BR.po (.../tags/gcc_4_8_2_release)
37660
+++ b/src/libcpp/po/pt_BR.po (.../branches/gcc-4_8-branch)
37662
+# Brazilian Portuguese translation for cpplib
37663
+# Copyright (C) 2013 Free Software Foundation, Inc.
37664
+# This file is distributed under the same license as the gcc package.
37665
+# Rafael Ferreira <rafael.f.f1@gmail.com>, 2013.
37669
+"Project-Id-Version: cpplib 4.8.0\n"
37670
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
37671
+"POT-Creation-Date: 2013-03-15 17:42+0000\n"
37672
+"PO-Revision-Date: 2013-12-18 03:12-0300\n"
37673
+"Last-Translator: Rafael Ferreira <rafael.f.f1@gmail.com>\n"
37674
+"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\n"
37675
+"Language: pt_BR\n"
37676
+"MIME-Version: 1.0\n"
37677
+"Content-Type: text/plain; charset=UTF-8\n"
37678
+"Content-Transfer-Encoding: 8bit\n"
37679
+"X-Generator: Poedit 1.5.7\n"
37680
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
37684
+msgid "conversion from %s to %s not supported by iconv"
37685
+msgstr "sem suporte a conversão de %s para %s por iconv"
37688
+msgid "iconv_open"
37689
+msgstr "iconv_open"
37693
+msgid "no iconv implementation, cannot convert from %s to %s"
37694
+msgstr "nenhuma implementação iconv, não foi possível converter de %s para %s"
37698
+msgid "character 0x%lx is not in the basic source character set\n"
37699
+msgstr "caractere 0x%lx não está no conjunto de caracteres fonte básico\n"
37701
+#: charset.c:797 charset.c:1443
37702
+msgid "converting to execution character set"
37703
+msgstr "convertendo para conjunto de caracteres da execução"
37707
+msgid "character 0x%lx is not unibyte in execution character set"
37708
+msgstr "caractere 0x%lx não é unibyte no conjunto de caracteres de execução"
37712
+msgid "Character %x might not be NFKC"
37713
+msgstr "Caractere %x pode não ser NFKC"
37716
+msgid "universal character names are only valid in C++ and C99"
37717
+msgstr "nomes de caractere universais são válidos apenas em C++ e C99"
37721
+msgid "the meaning of '\\%c' is different in traditional C"
37722
+msgstr "o significado de \"\\%c\" é diferente em C tradicional"
37725
+msgid "In _cpp_valid_ucn but not a UCN"
37726
+msgstr "Em _cpp_valid_ucn, mas não é um UCN"
37730
+msgid "incomplete universal character name %.*s"
37731
+msgstr "nome de caractere universal incompleto %.*s"
37735
+msgid "%.*s is not a valid universal character"
37736
+msgstr "%.*s não é um caractere universal válido"
37738
+#: charset.c:1055 lex.c:1117
37739
+msgid "'$' in identifier or number"
37740
+msgstr "\"$\" em identificador ou número"
37744
+msgid "universal character %.*s is not valid in an identifier"
37745
+msgstr "caractere universal %.*s não é válido em um identificador"
37749
+msgid "universal character %.*s is not valid at the start of an identifier"
37750
+msgstr "caractere universal %.*s não é válido no começo de um identificador"
37752
+#: charset.c:1101 charset.c:1673
37753
+msgid "converting UCN to source character set"
37754
+msgstr "convertendo UCN para conjunto de caracteres fonte"
37757
+msgid "converting UCN to execution character set"
37758
+msgstr "convertendo UCN para conjunto de caracteres de execução"
37761
+msgid "the meaning of '\\x' is different in traditional C"
37762
+msgstr "o significado de \"\\x\" é diferente em C tradicional"
37765
+msgid "\\x used with no following hex digits"
37766
+msgstr "\\x usado com nenhum dígito hexa"
37769
+msgid "hex escape sequence out of range"
37770
+msgstr "sequência de escape hexa fora de alcance"
37773
+msgid "octal escape sequence out of range"
37774
+msgstr "sequência de escape octal fora de alcance"
37777
+msgid "the meaning of '\\a' is different in traditional C"
37778
+msgstr "o significado de \"\\a\" é diferente em C tradicional"
37782
+msgid "non-ISO-standard escape sequence, '\\%c'"
37783
+msgstr "sequência de escape não padrão ISO, \"\\%c\""
37787
+msgid "unknown escape sequence: '\\%c'"
37788
+msgstr "sequência de escape desconhecida: \"\\%c\""
37792
+msgid "unknown escape sequence: '\\%s'"
37793
+msgstr "sequência de escape desconhecida: \"\\%s\""
37796
+msgid "converting escape sequence to execution character set"
37797
+msgstr "convertendo sequência de escape para conjunto de caracteres de execução"
37799
+#: charset.c:1508 charset.c:1572
37800
+msgid "character constant too long for its type"
37801
+msgstr "constante caractere muito longa para seu tipo"
37804
+msgid "multi-character character constant"
37805
+msgstr "constante de caractere multi-caractere"
37808
+msgid "empty character constant"
37809
+msgstr "constante caractere vazia"
37813
+msgid "failure to convert %s to %s"
37814
+msgstr "falha ao converter %s para %s"
37816
+#: directives.c:224 directives.c:250
37818
+msgid "extra tokens at end of #%s directive"
37819
+msgstr "tokens extras ao final da diretiva %#s"
37821
+#: directives.c:357
37823
+msgid "#%s is a GCC extension"
37824
+msgstr "#%s é uma extensão GCC"
37826
+#: directives.c:362
37828
+msgid "#%s is a deprecated GCC extension"
37829
+msgstr "#%s é uma extensão GCC obsoleta"
37831
+#: directives.c:375
37832
+msgid "suggest not using #elif in traditional C"
37833
+msgstr "sugere-se não usar #elif em C tradicional"
37835
+#: directives.c:378
37837
+msgid "traditional C ignores #%s with the # indented"
37838
+msgstr "C tradicional ignora #%s com o # com recuo"
37840
+#: directives.c:382
37842
+msgid "suggest hiding #%s from traditional C with an indented #"
37843
+msgstr "sugere-se ocultar #%s do C tradicional com um # com recuo"
37845
+#: directives.c:408
37846
+msgid "embedding a directive within macro arguments is not portable"
37847
+msgstr "embutir uma diretiva dentro de argumentos macro não é portátil"
37849
+#: directives.c:428
37850
+msgid "style of line directive is a GCC extension"
37851
+msgstr "estilo de diretiva de linha é uma extensão GCC"
37853
+#: directives.c:483
37855
+msgid "invalid preprocessing directive #%s"
37856
+msgstr "diretiva de preprocessamento inválida #%s"
37858
+#: directives.c:551
37859
+msgid "\"defined\" cannot be used as a macro name"
37860
+msgstr "\"defined\" não pode ser usado como um nome de macro"
37862
+#: directives.c:557
37864
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
37865
+msgstr "\"%s\" não pode ser usado como um nome de macro, pois é um operador em C++"
37867
+#: directives.c:560
37869
+msgid "no macro name given in #%s directive"
37870
+msgstr "nenhum nome de macro fornecido na diretiva #%s"
37872
+#: directives.c:563
37873
+msgid "macro names must be identifiers"
37874
+msgstr "nomes de macro devem ser identificadores"
37876
+#: directives.c:612
37878
+msgid "undefining \"%s\""
37879
+msgstr "removendo definição de \"%s\""
37881
+#: directives.c:667
37882
+msgid "missing terminating > character"
37883
+msgstr "faltando caractere terminador >"
37885
+#: directives.c:726
37887
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
37888
+msgstr "#%s espera \"NOME DE ARQUIVO\" OU <NOME DE ARQUIVO>"
37890
+#: directives.c:772
37892
+msgid "empty filename in #%s"
37893
+msgstr "nome de arquivo vazio em #%s"
37895
+#: directives.c:782
37896
+msgid "#include nested too deeply"
37897
+msgstr "#include aninhado profundo demais"
37899
+#: directives.c:823
37900
+msgid "#include_next in primary source file"
37901
+msgstr "#include_next no arquivo fonte primário"
37903
+#: directives.c:849
37905
+msgid "invalid flag \"%s\" in line directive"
37906
+msgstr "opção inválida \"%s\" na diretiva line"
37908
+#: directives.c:909
37909
+msgid "unexpected end of file after #line"
37910
+msgstr "fim de arquivo inesperado após #line"
37912
+#: directives.c:912
37914
+msgid "\"%s\" after #line is not a positive integer"
37915
+msgstr "\"%s\" após #line não é um inteiro positivo"
37917
+#: directives.c:918 directives.c:920
37918
+msgid "line number out of range"
37919
+msgstr "número da linha fora de alcance"
37921
+#: directives.c:933 directives.c:1013
37923
+msgid "\"%s\" is not a valid filename"
37924
+msgstr "\"%s\" não é um nome de arquivo válido"
37926
+#: directives.c:973
37928
+msgid "\"%s\" after # is not a positive integer"
37929
+msgstr "\"%s\" após # não é um inteiro positivo"
37931
+#: directives.c:1068 directives.c:1070 directives.c:1072 directives.c:1658
37936
+#: directives.c:1096
37938
+msgid "invalid #%s directive"
37939
+msgstr "diretiva inválida #%s"
37941
+#: directives.c:1159
37943
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
37944
+msgstr "registrando pragmas em espaço de nomes \"%s\" com expansão de nome incompatível"
37946
+#: directives.c:1168
37948
+msgid "registering pragma \"%s\" with name expansion and no namespace"
37949
+msgstr "registrando pragma \"%s\" com expansão de nome e nenhum espaço de nomes"
37951
+#: directives.c:1186
37953
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
37954
+msgstr "registrando \"%s\" como tanto um pragma e um espaço de nomes de pragma"
37956
+#: directives.c:1189
37958
+msgid "#pragma %s %s is already registered"
37959
+msgstr "#pragma %s %s já está registrado"
37961
+#: directives.c:1192
37963
+msgid "#pragma %s is already registered"
37964
+msgstr "#pragma %s já está registrado"
37966
+#: directives.c:1222
37967
+msgid "registering pragma with NULL handler"
37968
+msgstr "registrando pragma com manipulador NULO"
37970
+#: directives.c:1439
37971
+msgid "#pragma once in main file"
37972
+msgstr "#pragma ocorre uma vez no arquivo principal"
37974
+#: directives.c:1462
37975
+msgid "invalid #pragma push_macro directive"
37976
+msgstr "diretiva inválida #pragma push_macro"
37978
+#: directives.c:1517
37979
+msgid "invalid #pragma pop_macro directive"
37980
+msgstr "diretiva inválida #pragma pop_macro"
37982
+#: directives.c:1572
37983
+msgid "invalid #pragma GCC poison directive"
37984
+msgstr "diretiva inválida #pragma GCC poison"
37986
+#: directives.c:1581
37988
+msgid "poisoning existing macro \"%s\""
37989
+msgstr "envenenando macro existente \"%s\""
37991
+#: directives.c:1600
37992
+msgid "#pragma system_header ignored outside include file"
37993
+msgstr "#pragma system_header ignorado fora do arquivo include"
37995
+#: directives.c:1625
37997
+msgid "cannot find source file %s"
37998
+msgstr "não foi possível localizar o arquivo fonte %s"
38000
+#: directives.c:1629
38002
+msgid "current file is older than %s"
38003
+msgstr "arquivo atual é mais velho do que %s"
38005
+#: directives.c:1653
38007
+msgid "invalid \"#pragma GCC %s\" directive"
38008
+msgstr "diretiva inválida \"#pragma GCC %s\""
38010
+#: directives.c:1847
38011
+msgid "_Pragma takes a parenthesized string literal"
38012
+msgstr "_Pragma leva uma literal de string entre parenteses"
38014
+#: directives.c:1968
38015
+msgid "#else without #if"
38016
+msgstr "#else sem #if"
38018
+#: directives.c:1973
38019
+msgid "#else after #else"
38020
+msgstr "#else após #else"
38022
+#: directives.c:1975 directives.c:2008
38023
+msgid "the conditional began here"
38024
+msgstr "a condicional começou aqui"
38026
+#: directives.c:2001
38027
+msgid "#elif without #if"
38028
+msgstr "#elif sem #if"
38030
+#: directives.c:2006
38031
+msgid "#elif after #else"
38032
+msgstr "#elif após #else"
38034
+#: directives.c:2044
38035
+msgid "#endif without #if"
38036
+msgstr "#endif sem #if"
38038
+#: directives.c:2124
38039
+msgid "missing '(' after predicate"
38040
+msgstr "faltando \"(\" após predicado"
38042
+#: directives.c:2139
38043
+msgid "missing ')' to complete answer"
38044
+msgstr "faltando \")\" para uma resposta completa"
38046
+#: directives.c:2159
38047
+msgid "predicate's answer is empty"
38048
+msgstr "resposta do predicado está vazia"
38050
+#: directives.c:2186
38051
+msgid "assertion without predicate"
38052
+msgstr "asserção sem predicado"
38054
+#: directives.c:2189
38055
+msgid "predicate must be an identifier"
38056
+msgstr "predicado deve ser um identificador"
38058
+#: directives.c:2275
38060
+msgid "\"%s\" re-asserted"
38061
+msgstr "\"%s\" re-assertado"
38063
+#: directives.c:2567
38065
+msgid "unterminated #%s"
38066
+msgstr "#%s não terminado"
38068
+#: directives-only.c:221 lex.c:2234 traditional.c:162
38069
+msgid "unterminated comment"
38070
+msgstr "comentário não terminado"
38074
+msgstr "saída padrão"
38081
+#: expr.c:479 expr.c:577
38082
+msgid "fixed-point constants are a GCC extension"
38083
+msgstr "constantes de ponto fixo (fixed-point constants) é uma extensão GCC"
38086
+msgid "invalid prefix \"0b\" for floating constant"
38087
+msgstr "prefixo inválido \"0b\" para constante flutuante"
38090
+msgid "use of C99 hexadecimal floating constant"
38091
+msgstr "uso de constante flutuante hexadecimal de C99"
38095
+msgid "invalid suffix \"%.*s\" on floating constant"
38096
+msgstr "sufixo inválido \"%.*s\" na constante flutuante"
38098
+#: expr.c:556 expr.c:616
38100
+msgid "traditional C rejects the \"%.*s\" suffix"
38101
+msgstr "C tradicional rejeita o sufixo \"%.*s\""
38104
+msgid "suffix for double constant is a GCC extension"
38105
+msgstr "sufixo para constante dupla (suffix for double constant) é uma extensão GCC"
38109
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
38110
+msgstr "sufixo inválido \"%.*s\" com constante flutuante hexadecimal"
38113
+msgid "decimal float constants are a GCC extension"
38114
+msgstr "constantes flutuante decimais (decimal float constants) é uma extensão GCC"
38118
+msgid "invalid suffix \"%.*s\" on integer constant"
38119
+msgstr "sufixo inválido \"%.*s\" em constante inteiro"
38122
+msgid "use of C++0x long long integer constant"
38123
+msgstr "uso de constante longo longo inteiro de C++0x"
38126
+msgid "use of C99 long long integer constant"
38127
+msgstr "uso de constante longo longo inteiro de C99"
38130
+msgid "imaginary constants are a GCC extension"
38131
+msgstr "constantes imaginárias (imaginary constants) é uma extensão GCC"
38134
+msgid "binary constants are a GCC extension"
38135
+msgstr "constantes binárias (binary constants) é uma extensão GCC"
38138
+msgid "integer constant is too large for its type"
38139
+msgstr "constante inteira é muito grande para seu tipo"
38142
+msgid "integer constant is so large that it is unsigned"
38143
+msgstr "constante inteira é tão grande que não está assinada"
38146
+msgid "missing ')' after \"defined\""
38147
+msgstr "faltando \")\" após \"defined\""
38150
+msgid "operator \"defined\" requires an identifier"
38151
+msgstr "operador \"defined\" requer um identificador"
38155
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
38156
+msgstr "(\"%s\" é um token alternativo para \"%s\" em C++)"
38159
+msgid "this use of \"defined\" may not be portable"
38160
+msgstr "esse uso de \"defined\" pode não ser portátil"
38163
+msgid "user-defined literal in preprocessor expression"
38164
+msgstr "literal definida pelo usuário em expressão do preprocessador"
38167
+msgid "floating constant in preprocessor expression"
38168
+msgstr "constante flutuante em expressão do preprocessador"
38171
+msgid "imaginary number in preprocessor expression"
38172
+msgstr "número imaginário em expressão do preprocessador"
38176
+msgid "\"%s\" is not defined"
38177
+msgstr "\"%s\" não está definido"
38180
+msgid "assertions are a GCC extension"
38181
+msgstr "asserções (assertions) é uma extensão GCC"
38184
+msgid "assertions are a deprecated extension"
38185
+msgstr "asserções (assertions) é uma extensão obsoleta"
38189
+msgid "unbalanced stack in %s"
38190
+msgstr "pilha não balanceada em %s"
38194
+msgid "impossible operator '%u'"
38195
+msgstr "operador impossível \"%u\""
38198
+msgid "missing ')' in expression"
38199
+msgstr "faltando \")\" na expressão"
38202
+msgid "'?' without following ':'"
38203
+msgstr "\"?\" sem estar seguido por \":\""
38206
+msgid "integer overflow in preprocessor expression"
38207
+msgstr "estouro de inteiro em expressão do preprocessador"
38210
+msgid "missing '(' in expression"
38211
+msgstr "faltando \"(\" na expressão"
38215
+msgid "the left operand of \"%s\" changes sign when promoted"
38216
+msgstr "o operador à esquerda de \"%s\" altera o sinal quando promovido"
38220
+msgid "the right operand of \"%s\" changes sign when promoted"
38221
+msgstr "o operador à direita de \"%s\" altera o sinal quando promovido"
38224
+msgid "traditional C rejects the unary plus operator"
38225
+msgstr "C tradicional rejeita o operador unário mais"
38228
+msgid "comma operator in operand of #if"
38229
+msgstr "operador vírgula em operando de #if"
38232
+msgid "division by zero in #if"
38233
+msgstr "divisão por zero em #if"
38236
+msgid "NULL directory in find_file"
38237
+msgstr "diretório NULO em find_file"
38240
+msgid "one or more PCH files were found, but they were invalid"
38241
+msgstr "um ou mais arquivos PCH foram encontrados, mas são inválidos"
38244
+msgid "use -Winvalid-pch for more information"
38245
+msgstr "use -Winvalid-pch para mais informações"
38249
+msgid "%s is a block device"
38250
+msgstr "%s é um dispositivo de bloco"
38254
+msgid "%s is too large"
38255
+msgstr "%s é muito grande"
38259
+msgid "%s is shorter than expected"
38260
+msgstr "%s é muito menor do que esperado"
38264
+msgid "no include path in which to search for %s"
38265
+msgstr "não foi incluído nenhum caminho no qual se possa procurar por %s"
38268
+msgid "Multiple include guards may be useful for:\n"
38269
+msgstr "Múltiplos include guards podem ser úteis para:\n"
38272
+msgid "cppchar_t must be an unsigned type"
38273
+msgstr "cppchar_t deve ser um tipo não assinado"
38277
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
38278
+msgstr "aritmética do preprocessador possui uma precisão máxima de %lu bits; o alvo requer %lu bits"
38281
+msgid "CPP arithmetic must be at least as precise as a target int"
38282
+msgstr "aritmética do CPP deve ser pelo menos tão precisa quanto um int alvo"
38285
+msgid "target char is less than 8 bits wide"
38286
+msgstr "char alvo é menor do que 8 bits"
38289
+msgid "target wchar_t is narrower than target char"
38290
+msgstr "wchar_t alvo é mais estreito do que o char alvo"
38293
+msgid "target int is narrower than target char"
38294
+msgstr "int alvo é mais estreito do que o char alvo"
38297
+msgid "CPP half-integer narrower than CPP character"
38298
+msgstr "meio-inteiro do CPP é mais estreito do que o caractere do CPP"
38302
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
38303
+msgstr "CPP nesta máquina não consegue manipular constantes de wide character acima de %lu bits, mas o alvo requer %lu bits"
38306
+msgid "backslash and newline separated by space"
38307
+msgstr "barra invertida e nova linha separadas por espaço"
38310
+msgid "backslash-newline at end of file"
38311
+msgstr "barra invertida e nova linha no final do arquivo"
38315
+msgid "trigraph ??%c converted to %c"
38316
+msgstr "trígrafo ??%c convertido para %c"
38320
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
38321
+msgstr "trígrafo ??%c ignorado, use -trigraphs para habilitá-lo"
38324
+msgid "\"/*\" within comment"
38325
+msgstr "\"/*\" dentro de comentário"
38329
+msgid "%s in preprocessing directive"
38330
+msgstr "%s em diretiva de preprocessamento"
38333
+msgid "null character(s) ignored"
38334
+msgstr "um ou mais caracteres nulos ignorados"
38338
+msgid "`%.*s' is not in NFKC"
38339
+msgstr "\"%.*s\" não está em NFKC"
38343
+msgid "`%.*s' is not in NFC"
38344
+msgstr "\"%.*s\" não está em NFC"
38346
+#: lex.c:1164 lex.c:1241
38348
+msgid "attempt to use poisoned \"%s\""
38349
+msgstr "tentativa de usar \"%s\" envenenado"
38351
+#: lex.c:1172 lex.c:1249
38352
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
38353
+msgstr "__VA_ARGS__ pode aparecer apenas na expansão de uma macro variádica C99"
38355
+#: lex.c:1178 lex.c:1255
38357
+msgid "identifier \"%s\" is a special operator name in C++"
38358
+msgstr "identificador \"%s\" é o nome de um operador especial em C++"
38361
+msgid "raw string delimiter longer than 16 characters"
38362
+msgstr "delimitador de string não tratada (raw) maior do que 16 caracteres"
38366
+msgid "invalid character '%c' in raw string delimiter"
38367
+msgstr "caractere inválido \"%c\" em delimitador de string não tratada (raw)"
38369
+#: lex.c:1525 lex.c:1547
38370
+msgid "unterminated raw string"
38371
+msgstr "string não tratada (raw) não terminada"
38373
+#: lex.c:1573 lex.c:1706
38374
+msgid "invalid suffix on literal; C++11 requires a space between literal and identifier"
38375
+msgstr "sufixo inválido em literal; C++11 requer um espaço entre literal e identificador"
38378
+msgid "null character(s) preserved in literal"
38379
+msgstr "um ou mais caracteres nulos preservados em literal"
38383
+msgid "missing terminating %c character"
38384
+msgstr "faltando o caractere de terminação %c"
38387
+msgid "C++ style comments are not allowed in ISO C90"
38388
+msgstr "comentários no estilo C++ não são permitidos em ISO C90"
38391
+msgid "(this will be reported only once per input file)"
38392
+msgstr "(isso será relatado apenas uma vez por arquivo de entrada)"
38395
+msgid "multi-line comment"
38396
+msgstr "comentário multilinha"
38400
+msgid "unspellable token %s"
38401
+msgstr "token %s impronunciável"
38405
+msgid "macro \"%s\" is not used"
38406
+msgstr "macro \"%s\" não é usada"
38408
+#: macro.c:229 macro.c:426
38410
+msgid "invalid built-in macro \"%s\""
38411
+msgstr "macro interna inválida \"%s\""
38414
+msgid "could not determine file timestamp"
38415
+msgstr "não foi possível determinar o arquivo de marca de tempo"
38418
+msgid "could not determine date and time"
38419
+msgstr "não foi possível determinar a data e a hora"
38422
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
38423
+msgstr "__COUNTER__ expandido dentro diretiva com -fdirectives-only"
38426
+msgid "invalid string literal, ignoring final '\\'"
38427
+msgstr "literal de string inválida, ignorando final \"\\\""
38431
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
38432
+msgstr "colar \"%s\" em \"%s\" não resulta em nenhum token de preprocessamento válido"
38435
+msgid "ISO C99 requires rest arguments to be used"
38436
+msgstr "ISO C99 requer que argumentos restantes sejam usados"
38440
+msgid "macro \"%s\" requires %u arguments, but only %u given"
38441
+msgstr "macro \"%s\" requer %u argumentos, mas apenas %u foram fornecidos"
38445
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
38446
+msgstr "macro \"%s\" passou %u argumentos, mas usa apenas %u"
38448
+#: macro.c:923 traditional.c:680
38450
+msgid "unterminated argument list invoking macro \"%s\""
38451
+msgstr "lista de argumentos interminável chamando macro \"%s\""
38455
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
38456
+msgstr "macro \"%s\" do tipo função deve ser usada com argumento em C tradicional"
38458
+# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33305
38461
+msgid "invoking macro %s argument %d: empty macro arguments are undefined in ISO C90 and ISO C++98"
38462
+msgstr "chamando macro %s argumento %d: argumentos de macro vazios estão indefinidos em ISO C90 e ISO C++98"
38466
+msgid "duplicate macro parameter \"%s\""
38467
+msgstr "parâmetro de macro \"%s\" duplicado"
38471
+msgid "\"%s\" may not appear in macro parameter list"
38472
+msgstr "\"%s\" não pode aparecer na lista de parâmetros de macro"
38475
+msgid "macro parameters must be comma-separated"
38476
+msgstr "parâmetros de macro devem ser separados por vírgula"
38479
+msgid "parameter name missing"
38480
+msgstr "faltando nome de parâmetro"
38483
+msgid "anonymous variadic macros were introduced in C99"
38484
+msgstr "macros variádicas anônimas foram introduzidas em C99"
38487
+msgid "ISO C does not permit named variadic macros"
38488
+msgstr "ISO C não permite macros variádicas nomeadas"
38491
+msgid "missing ')' in macro parameter list"
38492
+msgstr "faltando \")\" na lista de parâmetros de macro"
38495
+msgid "'##' cannot appear at either end of a macro expansion"
38496
+msgstr "\"##\" não pode aparecer no final da expansão de macro"
38499
+msgid "ISO C99 requires whitespace after the macro name"
38500
+msgstr "ISO C99 requer espaço em branco após o nome de macro"
38503
+msgid "missing whitespace after the macro name"
38504
+msgstr "faltando espaço em branco após o nome de macro"
38507
+msgid "'#' is not followed by a macro parameter"
38508
+msgstr "\"#\" não está seguido por um parâmetro de macro"
38512
+msgid "\"%s\" redefined"
38513
+msgstr "\"%s\" re-definido"
38516
+msgid "this is the location of the previous definition"
38517
+msgstr "essa é a localização da definição anterior"
38521
+msgid "macro argument \"%s\" would be stringified in traditional C"
38522
+msgstr "argumento de macro \"%s\" estaria em uma string no C tradicional"
38526
+msgid "invalid hash type %d in cpp_macro_definition"
38527
+msgstr "tipo de hash inválido %d em cpp_macro_definition"
38529
+#: pch.c:87 pch.c:345 pch.c:359 pch.c:377 pch.c:383 pch.c:392 pch.c:399
38530
+msgid "while writing precompiled header"
38531
+msgstr "enquanto realizava escrita de header pré-compilado"
38535
+msgid "%s: not used because `%.*s' is poisoned"
38536
+msgstr "%s: não usado porque \"%.*s\" está envenenado"
38540
+msgid "%s: not used because `%.*s' not defined"
38541
+msgstr "%s: não usado porque \"%.*s\" não está definido"
38545
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
38546
+msgstr "%s: não usado porque \"%.*s\" está definido como \"%s\", e não \"%.*s\""
38550
+msgid "%s: not used because `%s' is defined"
38551
+msgstr "%s: não usado porque \"%s\" está definido"
38555
+msgid "%s: not used because `__COUNTER__' is invalid"
38556
+msgstr "%s: não usado porque \"__COUNTER__\" é inválido"
38558
+#: pch.c:723 pch.c:898
38559
+msgid "while reading precompiled header"
38560
+msgstr "enquanto realizava leitura de header pré-compilado"
38562
+#: traditional.c:750
38564
+msgid "detected recursion whilst expanding macro \"%s\""
38565
+msgstr "detectada recursão enquanto expandia macro \"%s\""
38567
+#: traditional.c:968
38568
+msgid "syntax error in macro parameter list"
38569
+msgstr "erro de sintaxe na lista de parâmetros de macro"
38570
Index: libcpp/po/ChangeLog
38571
===================================================================
38572
--- a/src/libcpp/po/ChangeLog (.../tags/gcc_4_8_2_release)
38573
+++ b/src/libcpp/po/ChangeLog (.../branches/gcc-4_8-branch)
38575
+2013-12-18 Joseph Myers <joseph@codesourcery.com>
38579
+2013-11-01 Joseph Myers <joseph@codesourcery.com>
38583
2013-10-16 Release Manager
38585
* GCC 4.8.2 released.
38586
Index: libcpp/po/tr.po
38587
===================================================================
38588
--- a/src/libcpp/po/tr.po (.../tags/gcc_4_8_2_release)
38589
+++ b/src/libcpp/po/tr.po (.../branches/gcc-4_8-branch)
38591
# Turkish translations for cpplib messages.
38592
# Copyright (C) 2007 Free Software Foundation, Inc.
38593
+# This file is distributed under the same license as the gcc package.
38595
# Nilgün Belma Bugüner <nilgun@buguner.name.tr>, 2001, ..., 2007.
38596
+# Volkan Gezer <vlkngzr@gmail.com>, 2013.
38599
-"Project-Id-Version: cpplib 4.2.0\n"
38600
+"Project-Id-Version: cpplib 4.8.0\n"
38601
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
38602
-"POT-Creation-Date: 2013-02-24 01:05+0000\n"
38603
-"PO-Revision-Date: 2007-05-23 01:17+0300\n"
38604
-"Last-Translator: Nilgün Belma Bugüner <nilgun@buguner.name.tr>\n"
38605
+"POT-Creation-Date: 2013-03-15 17:42+0000\n"
38606
+"PO-Revision-Date: 2013-11-01 22:29+0100\n"
38607
+"Last-Translator: Volkan Gezer <vlkngzr@gmail.com>\n"
38608
"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
38610
"MIME-Version: 1.0\n"
38611
"Content-Type: text/plain; charset=UTF-8\n"
38612
"Content-Transfer-Encoding: 8bit\n"
38613
-"X-Generator: KBabel 1.11.4\n"
38614
+"X-Generator: Lokalize 1.5\n"
38615
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
38618
@@ -121,10 +123,9 @@
38619
msgstr "ISO standardı olmayan önceleme dizgesi, '\\%c'"
38622
-#, fuzzy, c-format
38623
-#| msgid "unknown escape sequence '\\%c'"
38625
msgid "unknown escape sequence: '\\%c'"
38626
-msgstr "bilinmeyen önceleme dizgesi '\\%c'"
38627
+msgstr "bilinmeyen kaçış dizgesi: '\\%c'"
38631
@@ -163,10 +164,9 @@
38632
msgstr "#%s bir GCC uzantısıdır"
38634
#: directives.c:362
38635
-#, fuzzy, c-format
38636
-#| msgid "#%s is a GCC extension"
38638
msgid "#%s is a deprecated GCC extension"
38639
-msgstr "#%s bir GCC uzantısıdır"
38640
+msgstr "#%s eskimiş bir GCC uzantısıdır"
38642
#: directives.c:375
38643
msgid "suggest not using #elif in traditional C"
38644
@@ -247,7 +247,7 @@
38646
#: directives.c:909
38647
msgid "unexpected end of file after #line"
38649
+msgstr "#line satırından sonra beklenmeyen dosya sonu"
38651
#: directives.c:912
38653
@@ -271,7 +271,7 @@
38654
#: directives.c:1068 directives.c:1070 directives.c:1072 directives.c:1658
38660
#: directives.c:1096
38662
@@ -312,16 +312,12 @@
38663
msgstr "main dosyasında '#pragma once'"
38665
#: directives.c:1462
38667
-#| msgid "invalid #pragma GCC poison directive"
38668
msgid "invalid #pragma push_macro directive"
38669
-msgstr "geçersiz #pragma GCC poison yönergesi"
38670
+msgstr "geçersiz #pragma güdümlü_makro yönergesi"
38672
#: directives.c:1517
38674
-#| msgid "invalid #pragma GCC poison directive"
38675
msgid "invalid #pragma pop_macro directive"
38676
-msgstr "geçersiz #pragma GCC poison yönergesi"
38677
+msgstr "geçersiz #pragma güdümlü_makro yönergesi"
38679
#: directives.c:1572
38680
msgid "invalid #pragma GCC poison directive"
38681
@@ -347,10 +343,9 @@
38682
msgstr "mevcut dosya %s den daha eski"
38684
#: directives.c:1653
38685
-#, fuzzy, c-format
38686
-#| msgid "invalid #pragma GCC poison directive"
38688
msgid "invalid \"#pragma GCC %s\" directive"
38689
-msgstr "geçersiz #pragma GCC poison yönergesi"
38690
+msgstr "geçersiz \"#pragma GCC %s\" yönergesi"
38692
#: directives.c:1847
38693
msgid "_Pragma takes a parenthesized string literal"
38694
@@ -405,7 +400,7 @@
38695
msgid "\"%s\" re-asserted"
38696
msgstr "\"%s\" tekrar olumlanmış"
38698
-#: directives.c:2566
38699
+#: directives.c:2567
38701
msgid "unterminated #%s"
38702
msgstr "sonlandırılmamış #%s"
38703
@@ -424,16 +419,12 @@
38706
#: expr.c:479 expr.c:577
38708
-#| msgid "imaginary constants are a GCC extension"
38709
msgid "fixed-point constants are a GCC extension"
38710
-msgstr "sanal sabitler bir GCC genişletmesidir"
38711
+msgstr "sabit noktalı sabitler bir GCC uzantısıdır"
38715
-#| msgid "invalid suffix \"%.*s\" on floating constant"
38716
msgid "invalid prefix \"0b\" for floating constant"
38717
-msgstr "gerçel sabitin \"%.*s\" soneki geçersiz"
38718
+msgstr "kayan nokta için geçerisz \"0b\" öntakısı"
38721
msgid "use of C99 hexadecimal floating constant"
38722
@@ -450,10 +441,8 @@
38723
msgstr "geleneksel C \"%.*s\" sonekini kullanmaz"
38727
-#| msgid "imaginary constants are a GCC extension"
38728
msgid "suffix for double constant is a GCC extension"
38729
-msgstr "sanal sabitler bir GCC genişletmesidir"
38730
+msgstr "çift sabit için öntakı bir GCC uzantısıdır"
38734
@@ -461,10 +450,8 @@
38735
msgstr "onaltılık kayan sabitli \"%.*s\" soneki geçersiz"
38739
-#| msgid "imaginary constants are a GCC extension"
38740
msgid "decimal float constants are a GCC extension"
38741
-msgstr "sanal sabitler bir GCC genişletmesidir"
38742
+msgstr "onluk kayan sabitler bir GCC uzantısıdır"
38746
@@ -472,10 +459,8 @@
38747
msgstr "tamsayı sabitte sonek \"%.*s\" soneki geçersiz"
38751
-#| msgid "use of C99 long long integer constant"
38752
msgid "use of C++0x long long integer constant"
38753
-msgstr "ISO C99 long long tamsayı sabitleri yasaklar"
38754
+msgstr "ISO C++0x long long tamsayı sabitlerinin kullanımı"
38757
msgid "use of C99 long long integer constant"
38758
@@ -486,10 +471,8 @@
38759
msgstr "sanal sabitler bir GCC genişletmesidir"
38763
-#| msgid "imaginary constants are a GCC extension"
38764
msgid "binary constants are a GCC extension"
38765
-msgstr "sanal sabitler bir GCC genişletmesidir"
38766
+msgstr "ikili sabitler bir GCC uzantısıdır"
38769
msgid "integer constant is too large for its type"
38770
@@ -517,10 +500,8 @@
38771
msgstr "\"defined\" bu kullanımıyla uyarlanabilir olmayabilir"
38775
-#| msgid "integer overflow in preprocessor expression"
38776
msgid "user-defined literal in preprocessor expression"
38777
-msgstr "önişlemci ifadesinde tamsayı taşması"
38778
+msgstr "önişleyici ifadesinde kullanıcı tanımlı bağımlı"
38781
msgid "floating constant in preprocessor expression"
38782
@@ -536,20 +517,17 @@
38783
msgstr "\"%s\" tanımlı değil"
38787
-#| msgid "#%s is a GCC extension"
38788
msgid "assertions are a GCC extension"
38789
-msgstr "#%s bir GCC uzantısıdır"
38790
+msgstr "belirteçler bir GCC uzantısıdır"
38793
msgid "assertions are a deprecated extension"
38795
+msgstr "belirteçler artık kullanılmayan bir ifadedir"
38798
-#, fuzzy, c-format
38799
-#| msgid "unbalanced stack in #if"
38801
msgid "unbalanced stack in %s"
38802
-msgstr "#if ifadesinde karşılıksız yığın"
38803
+msgstr "%s içinde dengelenmemiş yığın"
38807
@@ -594,39 +572,39 @@
38808
msgid "division by zero in #if"
38809
msgstr "#if içinde sıfırla bölme"
38813
msgid "NULL directory in find_file"
38814
msgstr "find_file içinde boş dizin"
38818
msgid "one or more PCH files were found, but they were invalid"
38819
msgstr "bir veya daha fazla PCH dosyası bulundu ama bunlar geçersiz"
38823
msgid "use -Winvalid-pch for more information"
38824
msgstr "daha fazla bilgi almak için -Winvalid-pch kullanın"
38829
msgid "%s is a block device"
38830
msgstr "%s bir blok aygıtıdır"
38835
msgid "%s is too large"
38836
msgstr "%s çok büyük"
38841
msgid "%s is shorter than expected"
38842
msgstr "%s beklenenden daha kısa"
38847
msgid "no include path in which to search for %s"
38848
msgstr "%s için aranacaklar içinde başlık dosyaları yolu yok"
38852
msgid "Multiple include guards may be useful for:\n"
38853
msgstr "Çoklu include önlemleri aşağıdakiler için kullanışlı olabilir:\n"
38855
@@ -717,27 +695,24 @@
38856
#: lex.c:1178 lex.c:1255
38858
msgid "identifier \"%s\" is a special operator name in C++"
38860
+msgstr "\"%s\" belirteci, C++'da özel bir işleç adıdır"
38863
msgid "raw string delimiter longer than 16 characters"
38865
+msgstr "ham dizge ayracı 16 karakterden uzun"
38868
-#, fuzzy, c-format
38869
-#| msgid "universal character %.*s is not valid in an identifier"
38871
msgid "invalid character '%c' in raw string delimiter"
38872
-msgstr "evrensel karakter %.*s bir belirteç içinde geçerli değil"
38873
+msgstr "ham dizge ayracında geçersiz karakter '%c'"
38875
#: lex.c:1525 lex.c:1547
38877
-#| msgid "unterminated #%s"
38878
msgid "unterminated raw string"
38879
-msgstr "sonlandırılmamış #%s"
38880
+msgstr "bitirilmemiş ham dizge"
38882
#: lex.c:1573 lex.c:1706
38883
msgid "invalid suffix on literal; C++11 requires a space between literal and identifier"
38885
+msgstr "geçersiz ifade soneki; C++11 ifade ve tanımlayıcı arasında bir boşluk gerektirir"
38888
msgid "null character(s) preserved in literal"
38889
@@ -785,7 +760,7 @@
38892
msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
38894
+msgstr "__COUNTER__ -fdirectives-only ile talimat içerisinde genişletildi"
38897
msgid "invalid string literal, ignoring final '\\'"
38898
@@ -823,7 +798,7 @@
38901
msgid "invoking macro %s argument %d: empty macro arguments are undefined in ISO C90 and ISO C++98"
38903
+msgstr "%s makrosu %d argümanı uygulanıyor: ISO C90 ve ISO C++98 içerisinde boş makro argümanları tanımsızdır"
38907
@@ -890,38 +865,36 @@
38908
msgid "invalid hash type %d in cpp_macro_definition"
38909
msgstr "cpp_macro_definition içindeki isimli yapı türü %d geçersiz"
38911
-#: pch.c:87 pch.c:335 pch.c:347 pch.c:365 pch.c:371 pch.c:380 pch.c:387
38912
+#: pch.c:87 pch.c:345 pch.c:359 pch.c:377 pch.c:383 pch.c:392 pch.c:399
38913
msgid "while writing precompiled header"
38914
msgstr "önderlemeli başlık yazılırken"
38917
-#, fuzzy, c-format
38918
-#| msgid "%s: not used because `%s' is defined"
38921
msgid "%s: not used because `%.*s' is poisoned"
38922
-msgstr "%s: `%s' tanımlı olduğundan kullanılmadı"
38923
+msgstr "%s: `%.*s' zehirli olduğu için kullanılmadı"
38928
msgid "%s: not used because `%.*s' not defined"
38929
msgstr "%s: `%.*s' tanımlı olmadığından kullanılmadı"
38934
msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
38935
msgstr "%s: `%.*s' kullanılmadı çünkü `%s' olarak tanımlı, `%.*s' değil"
38940
msgid "%s: not used because `%s' is defined"
38941
msgstr "%s: `%s' tanımlı olduğundan kullanılmadı"
38944
-#, fuzzy, c-format
38945
-#| msgid "%s: not used because `%s' is defined"
38948
msgid "%s: not used because `__COUNTER__' is invalid"
38949
-msgstr "%s: `%s' tanımlı olduğundan kullanılmadı"
38950
+msgstr "%s: `__COUNTER__' geçersiz olduğundan kullanılmadı"
38952
-#: pch.c:711 pch.c:886
38953
+#: pch.c:723 pch.c:898
38954
msgid "while reading precompiled header"
38955
msgstr "önderlemeli başlık okunurken"
38958
===================================================================
38959
--- a/src/. (.../tags/gcc_4_8_2_release)
38960
+++ b/src/. (.../branches/gcc-4_8-branch)
38962
Property changes on: .
38963
___________________________________________________________________
38964
Modified: svn:mergeinfo
38965
Merged /trunk:r202766,204547,206123-206126,206395,206628,207387